1 /* Symbol table definitions for GDB.
2 
3    Copyright (C) 1986-2024 Free Software Foundation, Inc.
4 
5    This file is part of GDB.
6 
7    This program is free software; you can redistribute it and/or modify
8    it under the terms of the GNU General Public License as published by
9    the Free Software Foundation; either version 3 of the License, or
10    (at your option) any later version.
11 
12    This program is distributed in the hope that it will be useful,
13    but WITHOUT ANY WARRANTY; without even the implied warranty of
14    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15    GNU General Public License for more details.
16 
17    You should have received a copy of the GNU General Public License
18    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
19 
20 #if !defined (SYMTAB_H)
21 #define SYMTAB_H 1
22 
23 #include <array>
24 #include <vector>
25 #include <string>
26 #include <set>
27 #include "gdbsupport/gdb_vecs.h"
28 #include "gdbtypes.h"
29 #include "gdbsupport/gdb_obstack.h"
30 #include "gdbsupport/gdb_regex.h"
31 #include "gdbsupport/enum-flags.h"
32 #include "gdbsupport/function-view.h"
33 #include <optional>
34 #include <string_view>
35 #include "gdbsupport/next-iterator.h"
36 #include "gdbsupport/iterator-range.h"
37 #include "completer.h"
38 #include "gdb-demangle.h"
39 #include "split-name.h"
40 #include "frame.h"
41 #include <optional>
42 
43 /* Opaque declarations.  */
44 struct ui_file;
45 class frame_info_ptr;
46 struct symbol;
47 struct obstack;
48 struct objfile;
49 struct block;
50 struct blockvector;
51 struct axs_value;
52 struct agent_expr;
53 struct program_space;
54 struct language_defn;
55 struct common_block;
56 struct obj_section;
57 struct cmd_list_element;
58 class probe;
59 struct lookup_name_info;
60 struct code_breakpoint;
61 
62 /* How to match a lookup name against a symbol search name.  */
63 enum class symbol_name_match_type
64 {
65   /* Wild matching.  Matches unqualified symbol names in all
66      namespace/module/packages, etc.  */
67   WILD,
68 
69   /* Full matching.  The lookup name indicates a fully-qualified name,
70      and only matches symbol search names in the specified
71      namespace/module/package.  */
72   FULL,
73 
74   /* Search name matching.  This is like FULL, but the search name did
75      not come from the user; instead it is already a search name
76      retrieved from a search_name () call.
77      For Ada, this avoids re-encoding an already-encoded search name
78      (which would potentially incorrectly lowercase letters in the
79      linkage/search name that should remain uppercase).  For C++, it
80      avoids trying to demangle a name we already know is
81      demangled.  */
82   SEARCH_NAME,
83 
84   /* Expression matching.  The same as FULL matching in most
85      languages.  The same as WILD matching in Ada.  */
86   EXPRESSION,
87 };
88 
89 /* Hash the given symbol search name according to LANGUAGE's
90    rules.  */
91 extern unsigned int search_name_hash (enum language language,
92                                               const char *search_name);
93 
94 /* Ada-specific bits of a lookup_name_info object.  This is lazily
95    constructed on demand.  */
96 
97 class ada_lookup_name_info final
98 {
99  public:
100   /* Construct.  */
101   explicit ada_lookup_name_info (const lookup_name_info &lookup_name);
102 
103   /* Compare SYMBOL_SEARCH_NAME with our lookup name, using MATCH_TYPE
104      as name match type.  Returns true if there's a match, false
105      otherwise.  If non-NULL, store the matching results in MATCH.  */
106   bool matches (const char *symbol_search_name,
107                     symbol_name_match_type match_type,
108                     completion_match_result *comp_match_res) const;
109 
110   /* The Ada-encoded lookup name.  */
lookup_name()111   const std::string &lookup_name () const
112   { return m_encoded_name; }
113 
114   /* Return true if we're supposed to be doing a wild match look
115      up.  */
wild_match_p()116   bool wild_match_p () const
117   { return m_wild_match_p; }
118 
119   /* Return true if we're looking up a name inside package
120      Standard.  */
standard_p()121   bool standard_p () const
122   { return m_standard_p; }
123 
124   /* Return true if doing a verbatim match.  */
verbatim_p()125   bool verbatim_p () const
126   { return m_verbatim_p; }
127 
128   /* A wrapper for ::split_name that handles some Ada-specific
129      peculiarities.  */
split_name()130   std::vector<std::string_view> split_name () const
131   {
132     if (m_verbatim_p)
133       {
134           /* For verbatim matches, just return the encoded name
135              as-is.  */
136           std::vector<std::string_view> result;
137           result.emplace_back (m_encoded_name);
138           return result;
139       }
140     /* Otherwise, split the decoded name for matching.  */
141     return ::split_name (m_decoded_name.c_str (), split_style::DOT_STYLE);
142   }
143 
144 private:
145   /* The Ada-encoded lookup name.  */
146   std::string m_encoded_name;
147 
148   /* The decoded lookup name.  This is formed by calling ada_decode
149      with both 'operators' and 'wide' set to false.  */
150   std::string m_decoded_name;
151 
152   /* Whether the user-provided lookup name was Ada encoded.  If so,
153      then return encoded names in the 'matches' method's 'completion
154      match result' output.  */
155   bool m_encoded_p : 1;
156 
157   /* True if really doing wild matching.  Even if the user requests
158      wild matching, some cases require full matching.  */
159   bool m_wild_match_p : 1;
160 
161   /* True if doing a verbatim match.  This is true if the decoded
162      version of the symbol name is wrapped in '<'/'>'.  This is an
163      escape hatch users can use to look up symbols the Ada encoding
164      does not understand.  */
165   bool m_verbatim_p : 1;
166 
167    /* True if the user specified a symbol name that is inside package
168       Standard.  Symbol names inside package Standard are handled
169       specially.  We always do a non-wild match of the symbol name
170       without the "standard__" prefix, and only search static and
171       global symbols.  This was primarily introduced in order to allow
172       the user to specifically access the standard exceptions using,
173       for instance, Standard.Constraint_Error when Constraint_Error is
174       ambiguous (due to the user defining its own Constraint_Error
175       entity inside its program).  */
176   bool m_standard_p : 1;
177 };
178 
179 /* Language-specific bits of a lookup_name_info object, for languages
180    that do name searching using demangled names (C++/D/Go).  This is
181    lazily constructed on demand.  */
182 
183 struct demangle_for_lookup_info final
184 {
185 public:
186   demangle_for_lookup_info (const lookup_name_info &lookup_name,
187                                   language lang);
188 
189   /* The demangled lookup name.  */
lookup_namefinal190   const std::string &lookup_name () const
191   { return m_demangled_name; }
192 
193 private:
194   /* The demangled lookup name.  */
195   std::string m_demangled_name;
196 };
197 
198 /* Object that aggregates all information related to a symbol lookup
199    name.  I.e., the name that is matched against the symbol's search
200    name.  Caches per-language information so that it doesn't require
201    recomputing it for every symbol comparison, like for example the
202    Ada encoded name and the symbol's name hash for a given language.
203    The object is conceptually immutable once constructed, and thus has
204    no setters.  This is to prevent some code path from tweaking some
205    property of the lookup name for some local reason and accidentally
206    altering the results of any continuing search(es).
207    lookup_name_info objects are generally passed around as a const
208    reference to reinforce that.  (They're not passed around by value
209    because they're not small.)  */
210 class lookup_name_info final
211 {
212  public:
213   /* We delete this overload so that the callers are required to
214      explicitly handle the lifetime of the name.  */
215   lookup_name_info (std::string &&name,
216                         symbol_name_match_type match_type,
217                         bool completion_mode = false,
218                         bool ignore_parameters = false) = delete;
219 
220   /* This overload requires that NAME have a lifetime at least as long
221      as the lifetime of this object.  */
222   lookup_name_info (const std::string &name,
223                         symbol_name_match_type match_type,
224                         bool completion_mode = false,
225                         bool ignore_parameters = false)
m_match_type(match_type)226     : m_match_type (match_type),
227       m_completion_mode (completion_mode),
228       m_ignore_parameters (ignore_parameters),
229       m_name (name)
230   {}
231 
232   /* This overload requires that NAME have a lifetime at least as long
233      as the lifetime of this object.  */
234   lookup_name_info (const char *name,
235                         symbol_name_match_type match_type,
236                         bool completion_mode = false,
237                         bool ignore_parameters = false)
m_match_type(match_type)238     : m_match_type (match_type),
239       m_completion_mode (completion_mode),
240       m_ignore_parameters (ignore_parameters),
241       m_name (name)
242   {}
243 
244   /* Getters.  See description of each corresponding field.  */
match_type()245   symbol_name_match_type match_type () const { return m_match_type; }
completion_mode()246   bool completion_mode () const { return m_completion_mode; }
name()247   std::string_view name () const { return m_name; }
ignore_parameters()248   const bool ignore_parameters () const { return m_ignore_parameters; }
249 
250   /* Like the "name" method but guarantees that the returned string is
251      \0-terminated.  */
c_str()252   const char *c_str () const
253   {
254     /* Actually this is always guaranteed due to how the class is
255        constructed.  */
256     return m_name.data ();
257   }
258 
259   /* Return a version of this lookup name that is usable with
260      comparisons against symbols have no parameter info, such as
261      psymbols and GDB index symbols.  */
make_ignore_params()262   lookup_name_info make_ignore_params () const
263   {
264     return lookup_name_info (c_str (), m_match_type, m_completion_mode,
265                                    true /* ignore params */);
266   }
267 
268   /* Get the search name hash for searches in language LANG.  */
search_name_hash(language lang)269   unsigned int search_name_hash (language lang) const
270   {
271     /* Only compute each language's hash once.  */
272     if (!m_demangled_hashes_p[lang])
273       {
274           m_demangled_hashes[lang]
275             = ::search_name_hash (lang, language_lookup_name (lang));
276           m_demangled_hashes_p[lang] = true;
277       }
278     return m_demangled_hashes[lang];
279   }
280 
281   /* Get the search name for searches in language LANG.  */
language_lookup_name(language lang)282   const char *language_lookup_name (language lang) const
283   {
284     switch (lang)
285       {
286       case language_ada:
287           return ada ().lookup_name ().c_str ();
288       case language_cplus:
289           return cplus ().lookup_name ().c_str ();
290       case language_d:
291           return d ().lookup_name ().c_str ();
292       case language_go:
293           return go ().lookup_name ().c_str ();
294       default:
295           return m_name.data ();
296       }
297   }
298 
299   /* A wrapper for ::split_name (see split-name.h) that splits this
300      name, and that handles any language-specific peculiarities.  */
split_name(language lang)301   std::vector<std::string_view> split_name (language lang) const
302   {
303     if (lang == language_ada)
304       return ada ().split_name ();
305     split_style style = split_style::NONE;
306     switch (lang)
307       {
308       case language_cplus:
309       case language_rust:
310           style = split_style::CXX;
311           break;
312       case language_d:
313       case language_go:
314           style = split_style::DOT_STYLE;
315           break;
316       }
317     return ::split_name (language_lookup_name (lang), style);
318   }
319 
320   /* Get the Ada-specific lookup info.  */
ada()321   const ada_lookup_name_info &ada () const
322   {
323     maybe_init (m_ada);
324     return *m_ada;
325   }
326 
327   /* Get the C++-specific lookup info.  */
cplus()328   const demangle_for_lookup_info &cplus () const
329   {
330     maybe_init (m_cplus, language_cplus);
331     return *m_cplus;
332   }
333 
334   /* Get the D-specific lookup info.  */
d()335   const demangle_for_lookup_info &d () const
336   {
337     maybe_init (m_d, language_d);
338     return *m_d;
339   }
340 
341   /* Get the Go-specific lookup info.  */
go()342   const demangle_for_lookup_info &go () const
343   {
344     maybe_init (m_go, language_go);
345     return *m_go;
346   }
347 
348   /* Get a reference to a lookup_name_info object that matches any
349      symbol name.  */
350   static const lookup_name_info &match_any ();
351 
352 private:
353   /* Initialize FIELD, if not initialized yet.  */
354   template<typename Field, typename... Args>
maybe_init(Field & field,Args &&...args)355   void maybe_init (Field &field, Args&&... args) const
356   {
357     if (!field)
358       field.emplace (*this, std::forward<Args> (args)...);
359   }
360 
361   /* The lookup info as passed to the ctor.  */
362   symbol_name_match_type m_match_type;
363   bool m_completion_mode;
364   bool m_ignore_parameters;
365   std::string_view m_name;
366 
367   /* Language-specific info.  These fields are filled lazily the first
368      time a lookup is done in the corresponding language.  They're
369      mutable because lookup_name_info objects are typically passed
370      around by const reference (see intro), and they're conceptually
371      "cache" that can always be reconstructed from the non-mutable
372      fields.  */
373   mutable std::optional<ada_lookup_name_info> m_ada;
374   mutable std::optional<demangle_for_lookup_info> m_cplus;
375   mutable std::optional<demangle_for_lookup_info> m_d;
376   mutable std::optional<demangle_for_lookup_info> m_go;
377 
378   /* The demangled hashes.  Stored in an array with one entry for each
379      possible language.  The second array records whether we've
380      already computed the each language's hash.  (These are separate
381      arrays instead of a single array of optional<unsigned> to avoid
382      alignment padding).  */
383   mutable std::array<unsigned int, nr_languages> m_demangled_hashes;
384   mutable std::array<bool, nr_languages> m_demangled_hashes_p {};
385 };
386 
387 /* Comparison function for completion symbol lookup.
388 
389    Returns true if the symbol name matches against LOOKUP_NAME.
390 
391    SYMBOL_SEARCH_NAME should be a symbol's "search" name.
392 
393    On success and if non-NULL, COMP_MATCH_RES->match is set to point
394    to the symbol name as should be presented to the user as a
395    completion match list element.  In most languages, this is the same
396    as the symbol's search name, but in some, like Ada, the display
397    name is dynamically computed within the comparison routine.
398 
399    Also, on success and if non-NULL, COMP_MATCH_RES->match_for_lcd
400    points the part of SYMBOL_SEARCH_NAME that was considered to match
401    LOOKUP_NAME.  E.g., in C++, in linespec/wild mode, if the symbol is
402    "foo::function()" and LOOKUP_NAME is "function(", MATCH_FOR_LCD
403    points to "function()" inside SYMBOL_SEARCH_NAME.  */
404 typedef bool (symbol_name_matcher_ftype)
405   (const char *symbol_search_name,
406    const lookup_name_info &lookup_name,
407    completion_match_result *comp_match_res);
408 
409 /* Some of the structures in this file are space critical.
410    The space-critical structures are:
411 
412      struct general_symbol_info
413      struct symbol
414      struct partial_symbol
415 
416    These structures are laid out to encourage good packing.
417    They use ENUM_BITFIELD and short int fields, and they order the
418    structure members so that fields less than a word are next
419    to each other so they can be packed together.  */
420 
421 /* Rearranged: used ENUM_BITFIELD and rearranged field order in
422    all the space critical structures (plus struct minimal_symbol).
423    Memory usage dropped from 99360768 bytes to 90001408 bytes.
424    I measured this with before-and-after tests of
425    "HEAD-old-gdb -readnow HEAD-old-gdb" and
426    "HEAD-new-gdb -readnow HEAD-old-gdb" on native i686-pc-linux-gnu,
427    red hat linux 8, with LD_LIBRARY_PATH=/usr/lib/debug,
428    typing "maint space 1" at the first command prompt.
429 
430    Here is another measurement (from andrew c):
431      # no /usr/lib/debug, just plain glibc, like a normal user
432      gdb HEAD-old-gdb
433      (gdb) break internal_error
434      (gdb) run
435      (gdb) maint internal-error
436      (gdb) backtrace
437      (gdb) maint space 1
438 
439    gdb gdb_6_0_branch  2003-08-19  space used: 8896512
440    gdb HEAD            2003-08-19  space used: 8904704
441    gdb HEAD            2003-08-21  space used: 8396800 (+symtab.h)
442    gdb HEAD            2003-08-21  space used: 8265728 (+gdbtypes.h)
443 
444    The third line shows the savings from the optimizations in symtab.h.
445    The fourth line shows the savings from the optimizations in
446    gdbtypes.h.  Both optimizations are in gdb HEAD now.
447 
448    --chastain 2003-08-21  */
449 
450 /* Define a structure for the information that is common to all symbol types,
451    including minimal symbols, partial symbols, and full symbols.  In a
452    multilanguage environment, some language specific information may need to
453    be recorded along with each symbol.  */
454 
455 /* This structure is space critical.  See space comments at the top.  */
456 
457 struct general_symbol_info
458 {
459   /* Short version as to when to use which name accessor:
460      Use natural_name () to refer to the name of the symbol in the original
461      source code.  Use linkage_name () if you want to know what the linker
462      thinks the symbol's name is.  Use print_name () for output.  Use
463      demangled_name () if you specifically need to know whether natural_name ()
464      and linkage_name () are different.  */
465 
linkage_namegeneral_symbol_info466   const char *linkage_name () const
467   { return m_name; }
468 
469   /* Return SYMBOL's "natural" name, i.e. the name that it was called in
470      the original source code.  In languages like C++ where symbols may
471      be mangled for ease of manipulation by the linker, this is the
472      demangled name.  */
473   const char *natural_name () const;
474 
475   /* Returns a version of the name of a symbol that is
476      suitable for output.  In C++ this is the "demangled" form of the
477      name if demangle is on and the "mangled" form of the name if
478      demangle is off.  In other languages this is just the symbol name.
479      The result should never be NULL.  Don't use this for internal
480      purposes (e.g. storing in a hashtable): it's only suitable for output.  */
print_namegeneral_symbol_info481   const char *print_name () const
482   { return demangle ? natural_name () : linkage_name (); }
483 
484   /* Return the demangled name for a symbol based on the language for
485      that symbol.  If no demangled name exists, return NULL.  */
486   const char *demangled_name () const;
487 
488   /* Returns the name to be used when sorting and searching symbols.
489      In C++, we search for the demangled form of a name,
490      and so sort symbols accordingly.  In Ada, however, we search by mangled
491      name.  If there is no distinct demangled name, then this
492      returns the same value (same pointer) as linkage_name ().  */
493   const char *search_name () const;
494 
495   /* Set just the linkage name of a symbol; do not try to demangle
496      it.  Used for constructs which do not have a mangled name,
497      e.g. struct tags.  Unlike compute_and_set_names, linkage_name must
498      be terminated and either already on the objfile's obstack or
499      permanently allocated.  */
set_linkage_namegeneral_symbol_info500   void set_linkage_name (const char *linkage_name)
501   { m_name = linkage_name; }
502 
503   /* Set the demangled name of this symbol to NAME.  NAME must be
504      already correctly allocated.  If the symbol's language is Ada,
505      then the name is ignored and the obstack is set.  */
506   void set_demangled_name (const char *name, struct obstack *obstack);
507 
languagegeneral_symbol_info508   enum language language () const
509   { return m_language; }
510 
511   /* Initializes the language dependent portion of a symbol
512      depending upon the language for the symbol.  */
513   void set_language (enum language language, struct obstack *obstack);
514 
515   /* Set the linkage and natural names of a symbol, by demangling
516      the linkage name.  If linkage_name may not be nullterminated,
517      copy_name must be set to true.  */
518   void compute_and_set_names (std::string_view linkage_name, bool copy_name,
519                                     struct objfile_per_bfd_storage *per_bfd,
520                                     std::optional<hashval_t> hash
521                                         = std::optional<hashval_t> ());
522 
value_addressgeneral_symbol_info523   CORE_ADDR value_address () const
524   {
525     return m_value.address;
526   }
527 
set_value_addressgeneral_symbol_info528   void set_value_address (CORE_ADDR address)
529   {
530     m_value.address = address;
531   }
532 
533   /* Return the unrelocated address of this symbol.  */
unrelocated_addressgeneral_symbol_info534   unrelocated_addr unrelocated_address () const
535   {
536     return m_value.unrel_addr;
537   }
538 
539   /* Set the unrelocated address of this symbol.  */
set_unrelocated_addressgeneral_symbol_info540   void set_unrelocated_address (unrelocated_addr addr)
541   {
542     m_value.unrel_addr = addr;
543   }
544 
545   /* Name of the symbol.  This is a required field.  Storage for the
546      name is allocated on the objfile_obstack for the associated
547      objfile.  For languages like C++ that make a distinction between
548      the mangled name and demangled name, this is the mangled
549      name.  */
550 
551   const char *m_name;
552 
553   /* Value of the symbol.  Which member of this union to use, and what
554      it means, depends on what kind of symbol this is and its
555      SYMBOL_CLASS.  See comments there for more details.  All of these
556      are in host byte order (though what they point to might be in
557      target byte order, e.g. LOC_CONST_BYTES).  */
558 
559   union
560   {
561     LONGEST ivalue;
562 
563     const struct block *block;
564 
565     const gdb_byte *bytes;
566 
567     CORE_ADDR address;
568 
569     /* The address, if unrelocated.  An unrelocated symbol does not
570        have the runtime section offset applied.  */
571     unrelocated_addr unrel_addr;
572 
573     /* A common block.  Used with LOC_COMMON_BLOCK.  */
574 
575     const struct common_block *common_block;
576 
577     /* For opaque typedef struct chain.  */
578 
579     struct symbol *chain;
580   }
581   m_value;
582 
583   /* Since one and only one language can apply, wrap the language specific
584      information inside a union.  */
585 
586   union
587   {
588     /* A pointer to an obstack that can be used for storage associated
589        with this symbol.  This is only used by Ada, and only when the
590        'ada_mangled' field is zero.  */
591     struct obstack *obstack;
592 
593     /* This is used by languages which wish to store a demangled name.
594        currently used by Ada, C++, and Objective C.  */
595     const char *demangled_name;
596   }
597   language_specific;
598 
599   /* Record the source code language that applies to this symbol.
600      This is used to select one of the fields from the language specific
601      union above.  */
602 
603   ENUM_BITFIELD(language) m_language : LANGUAGE_BITS;
604 
605   /* This is only used by Ada.  If set, then the 'demangled_name' field
606      of language_specific is valid.  Otherwise, the 'obstack' field is
607      valid.  */
608   unsigned int ada_mangled : 1;
609 
610   /* Which section is this symbol in?  This is an index into
611      section_offsets for this objfile.  Negative means that the symbol
612      does not get relocated relative to a section.  */
613 
614   short m_section;
615 
616   /* Set the index into the obj_section list (within the containing
617      objfile) for the section that contains this symbol.  See M_SECTION
618      for more details.  */
619 
set_section_indexgeneral_symbol_info620   void set_section_index (short idx)
621   { m_section = idx; }
622 
623   /* Return the index into the obj_section list (within the containing
624      objfile) for the section that contains this symbol.  See M_SECTION
625      for more details.  */
626 
section_indexgeneral_symbol_info627   short section_index () const
628   { return m_section; }
629 
630   /* Return the obj_section from OBJFILE for this symbol.  The symbol
631      returned is based on the SECTION member variable, and can be nullptr
632      if SECTION is negative.  */
633 
634   struct obj_section *obj_section (const struct objfile *objfile) const;
635 };
636 
637 extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *);
638 
639 /* Try to determine the demangled name for a symbol, based on the
640    language of that symbol.  If the language is set to language_auto,
641    it will attempt to find any demangling algorithm that works and
642    then set the language appropriately.  The returned name is allocated
643    by the demangler and should be xfree'd.  */
644 
645 extern gdb::unique_xmalloc_ptr<char> symbol_find_demangled_name
646      (struct general_symbol_info *gsymbol, const char *mangled);
647 
648 /* Return true if NAME matches the "search" name of GSYMBOL, according
649    to the symbol's language.  */
650 extern bool symbol_matches_search_name
651   (const struct general_symbol_info *gsymbol,
652    const lookup_name_info &name);
653 
654 /* Compute the hash of the given symbol search name of a symbol of
655    language LANGUAGE.  */
656 extern unsigned int search_name_hash (enum language language,
657                                               const char *search_name);
658 
659 /* Classification types for a minimal symbol.  These should be taken as
660    "advisory only", since if gdb can't easily figure out a
661    classification it simply selects mst_unknown.  It may also have to
662    guess when it can't figure out which is a better match between two
663    types (mst_data versus mst_bss) for example.  Since the minimal
664    symbol info is sometimes derived from the BFD library's view of a
665    file, we need to live with what information bfd supplies.  */
666 
667 enum minimal_symbol_type
668 {
669   mst_unknown = 0,            /* Unknown type, the default */
670   mst_text,                             /* Generally executable instructions */
671 
672   /* A GNU ifunc symbol, in the .text section.  GDB uses to know
673      whether the user is setting a breakpoint on a GNU ifunc function,
674      and thus GDB needs to actually set the breakpoint on the target
675      function.  It is also used to know whether the program stepped
676      into an ifunc resolver -- the resolver may get a separate
677      symbol/alias under a different name, but it'll have the same
678      address as the ifunc symbol.  */
679   mst_text_gnu_ifunc,           /* Executable code returning address
680                                            of executable code */
681 
682   /* A GNU ifunc function descriptor symbol, in a data section
683      (typically ".opd").  Seen on architectures that use function
684      descriptors, like PPC64/ELFv1.  In this case, this symbol's value
685      is the address of the descriptor.  There'll be a corresponding
686      mst_text_gnu_ifunc synthetic symbol for the text/entry
687      address.  */
688   mst_data_gnu_ifunc,                   /* Executable code returning address
689                                            of executable code */
690 
691   mst_slot_got_plt,           /* GOT entries for .plt sections */
692   mst_data,                             /* Generally initialized data */
693   mst_bss,                              /* Generally uninitialized data */
694   mst_abs,                              /* Generally absolute (nonrelocatable) */
695   /* GDB uses mst_solib_trampoline for the start address of a shared
696      library trampoline entry.  Breakpoints for shared library functions
697      are put there if the shared library is not yet loaded.
698      After the shared library is loaded, lookup_minimal_symbol will
699      prefer the minimal symbol from the shared library (usually
700      a mst_text symbol) over the mst_solib_trampoline symbol, and the
701      breakpoints will be moved to their true address in the shared
702      library via breakpoint_re_set.  */
703   mst_solib_trampoline,                 /* Shared library trampoline code */
704   /* For the mst_file* types, the names are only guaranteed to be unique
705      within a given .o file.  */
706   mst_file_text,              /* Static version of mst_text */
707   mst_file_data,              /* Static version of mst_data */
708   mst_file_bss,                         /* Static version of mst_bss */
709   nr_minsym_types
710 };
711 
712 /* The number of enum minimal_symbol_type values, with some padding for
713    reasonable growth.  */
714 #define MINSYM_TYPE_BITS 4
715 static_assert (nr_minsym_types <= (1 << MINSYM_TYPE_BITS));
716 
717 /* Define a simple structure used to hold some very basic information about
718    all defined global symbols (text, data, bss, abs, etc).  The only required
719    information is the general_symbol_info.
720 
721    In many cases, even if a file was compiled with no special options for
722    debugging at all, as long as was not stripped it will contain sufficient
723    information to build a useful minimal symbol table using this structure.
724    Even when a file contains enough debugging information to build a full
725    symbol table, these minimal symbols are still useful for quickly mapping
726    between names and addresses, and vice versa.  They are also sometimes
727    used to figure out what full symbol table entries need to be read in.  */
728 
729 struct minimal_symbol : public general_symbol_info
730 {
value_longestminimal_symbol731   LONGEST value_longest () const
732   {
733     return m_value.ivalue;
734   }
735 
736   /* The relocated address of the minimal symbol, using the section
737      offsets from OBJFILE.  */
738   CORE_ADDR value_address (objfile *objfile) const;
739 
740   /* It does not make sense to call this for minimal symbols, as they
741      are stored unrelocated.  */
742   CORE_ADDR value_address () const = delete;
743 
744   /* The unrelocated address of the minimal symbol.  */
unrelocated_addressminimal_symbol745   unrelocated_addr unrelocated_address () const
746   {
747     return m_value.unrel_addr;
748   }
749 
750   /* The unrelocated address just after the end of the the minimal
751      symbol.  */
unrelocated_end_addressminimal_symbol752   unrelocated_addr unrelocated_end_address () const
753   {
754     return unrelocated_addr (CORE_ADDR (unrelocated_address ()) + size ());
755   }
756 
757   /* Return this minimal symbol's type.  */
758 
typeminimal_symbol759   minimal_symbol_type type () const
760   {
761     return m_type;
762   }
763 
764   /* Set this minimal symbol's type.  */
765 
set_typeminimal_symbol766   void set_type (minimal_symbol_type type)
767   {
768     m_type = type;
769   }
770 
771   /* Return this minimal symbol's size.  */
772 
sizeminimal_symbol773   unsigned long size () const
774   {
775     return m_size;
776   }
777 
778   /* Set this minimal symbol's size.  */
779 
set_sizeminimal_symbol780   void set_size (unsigned long size)
781   {
782     m_size = size;
783     m_has_size = 1;
784   }
785 
786   /* Return true if this minimal symbol's size is known.  */
787 
has_sizeminimal_symbol788   bool has_size () const
789   {
790     return m_has_size;
791   }
792 
793   /* Return this minimal symbol's first target-specific flag.  */
794 
target_flag_1minimal_symbol795   bool target_flag_1 () const
796   {
797     return m_target_flag_1;
798   }
799 
800   /* Set this minimal symbol's first target-specific flag.  */
801 
set_target_flag_1minimal_symbol802   void set_target_flag_1 (bool target_flag_1)
803   {
804     m_target_flag_1 = target_flag_1;
805   }
806 
807   /* Return this minimal symbol's second target-specific flag.  */
808 
target_flag_2minimal_symbol809   bool target_flag_2 () const
810   {
811     return m_target_flag_2;
812   }
813 
814   /* Set this minimal symbol's second target-specific flag.  */
815 
set_target_flag_2minimal_symbol816   void set_target_flag_2 (bool target_flag_2)
817   {
818     m_target_flag_2 = target_flag_2;
819   }
820 
821   /* Size of this symbol.  dbx_end_psymtab in dbxread.c uses this
822      information to calculate the end of the partial symtab based on the
823      address of the last symbol plus the size of the last symbol.  */
824 
825   unsigned long m_size;
826 
827   /* Which source file is this symbol in?  Only relevant for mst_file_*.  */
828   const char *filename;
829 
830   /* Classification type for this minimal symbol.  */
831 
832   ENUM_BITFIELD(minimal_symbol_type) m_type : MINSYM_TYPE_BITS;
833 
834   /* Non-zero if this symbol was created by gdb.
835      Such symbols do not appear in the output of "info var|fun".  */
836   unsigned int created_by_gdb : 1;
837 
838   /* Two flag bits provided for the use of the target.  */
839   unsigned int m_target_flag_1 : 1;
840   unsigned int m_target_flag_2 : 1;
841 
842   /* Nonzero iff the size of the minimal symbol has been set.
843      Symbol size information can sometimes not be determined, because
844      the object file format may not carry that piece of information.  */
845   unsigned int m_has_size : 1;
846 
847   /* Non-zero if this symbol ever had its demangled name set (even if
848      it was set to NULL).  */
849   unsigned int name_set : 1;
850 
851   /* Minimal symbols with the same hash key are kept on a linked
852      list.  This is the link.  */
853 
854   struct minimal_symbol *hash_next;
855 
856   /* Minimal symbols are stored in two different hash tables.  This is
857      the `next' pointer for the demangled hash table.  */
858 
859   struct minimal_symbol *demangled_hash_next;
860 
861   /* True if this symbol is of some data type.  */
862 
863   bool data_p () const;
864 
865   /* True if MSYMBOL is of some text type.  */
866 
867   bool text_p () const;
868 
869   /* For data symbols only, given an objfile, if 'maybe_copied'
870      evaluates to 'true' for that objfile, then the symbol might be
871      subject to copy relocation.  In this case, a minimal symbol
872      matching the symbol's linkage name is first looked for in the
873      main objfile.  If found, then that address is used; otherwise the
874      address in this symbol is used.  */
875 
876   bool maybe_copied (objfile *objfile) const;
877 
878 private:
879   /* Return the address of this minimal symbol, in the context of OBJF.  The
880      MAYBE_COPIED flag must be set.  If the minimal symbol appears in the
881      main program's minimal symbols, then that minsym's address is
882      returned; otherwise, this minimal symbol's address is returned.  */
883   CORE_ADDR get_maybe_copied_address (objfile *objf) const;
884 };
885 
886 #include "minsyms.h"
887 
888 
889 
890 /* Represent one symbol name; a variable, constant, function or typedef.  */
891 
892 /* Different name domains for symbols.  Looking up a symbol specifies a
893    domain and ignores symbol definitions in other name domains.  */
894 
895 enum domain_enum
896 {
897 #define SYM_DOMAIN(X) X ## _DOMAIN,
898 #include "sym-domains.def"
899 #undef SYM_DOMAIN
900 };
901 
902 /* The number of bits in a symbol used to represent the domain.  */
903 
904 #define SYMBOL_DOMAIN_BITS 3
905 
906 extern const char *domain_name (domain_enum);
907 
908 /* Flags used for searching symbol tables.  These can be combined to
909    let the search match multiple kinds of symbol.  */
910 enum domain_search_flag
911 {
912 #define SYM_DOMAIN(X) \
913   SEARCH_ ## X ## _DOMAIN = (1 << X ## _DOMAIN),
914 #include "sym-domains.def"
915 #undef SYM_DOMAIN
916 };
917 DEF_ENUM_FLAGS_TYPE (enum domain_search_flag, domain_search_flags);
918 
919 /* A convenience constant to search for any symbol.  */
920 constexpr domain_search_flags SEARCH_ALL_DOMAINS
921     = ((domain_search_flags) 0
922 #define SYM_DOMAIN(X) | SEARCH_ ## X ## _DOMAIN
923 #include "sym-domains.def"
924 #undef SYM_DOMAIN
925        );
926 
927 /* A convenience define for "C-like" name lookups, matching variables,
928    types, and functions.  */
929 #define SEARCH_VFT \
930   (SEARCH_VAR_DOMAIN | SEARCH_FUNCTION_DOMAIN | SEARCH_TYPE_DOMAIN)
931 
932 /* Return a string representing the given flags.  */
933 extern std::string domain_name (domain_search_flags);
934 
935 /* Convert a symbol domain to search flags.  */
936 static inline domain_search_flags
to_search_flags(domain_enum domain)937 to_search_flags (domain_enum domain)
938 {
939   return domain_search_flags (domain_search_flag (1 << domain));
940 }
941 
942 /* Return true if the given domain matches the given flags, false
943    otherwise.  */
944 static inline bool
search_flags_matches(domain_search_flags flags,domain_enum domain)945 search_flags_matches (domain_search_flags flags, domain_enum domain)
946 {
947   return (flags & to_search_flags (domain)) != 0;
948 }
949 
950 /* Some helpers for Python and Guile to account for backward
951    compatibility.  Those exposed the domains for lookup as well as
952    checking attributes of a symbol, so special encoding and decoding
953    is needed to continue to support both uses.  Domain constants must
954    remain unchanged, so that comparing a symbol's domain against a
955    constant yields the correct result, so search symbols are
956    distinguished by adding a flag bit.  This way, either sort of
957    constant can be used for lookup.  */
958 
959 /* The flag bit.  */
960 constexpr int SCRIPTING_SEARCH_FLAG = 0x8000;
961 static_assert (SCRIPTING_SEARCH_FLAG > SEARCH_ALL_DOMAINS);
962 
963 /* Convert a domain constant to a "scripting domain".  */
964 static constexpr inline int
to_scripting_domain(domain_enum val)965 to_scripting_domain (domain_enum val)
966 {
967   return val;
968 }
969 
970 /* Convert a search constant to a "scripting domain".  */
971 static constexpr inline int
to_scripting_domain(domain_search_flags val)972 to_scripting_domain (domain_search_flags val)
973 {
974   return SCRIPTING_SEARCH_FLAG | (int) val;
975 }
976 
977 /* Convert from a "scripting domain" constant back to search flags.
978    Throws an exception if VAL is not one of the allowable values.  */
979 extern domain_search_flags from_scripting_domain (int val);
980 
981 /* An address-class says where to find the value of a symbol.  */
982 
983 enum address_class
984 {
985   /* Not used; catches errors.  */
986 
987   LOC_UNDEF,
988 
989   /* Value is constant int SYMBOL_VALUE, host byteorder.  */
990 
991   LOC_CONST,
992 
993   /* Value is at fixed address SYMBOL_VALUE_ADDRESS.  */
994 
995   LOC_STATIC,
996 
997   /* Value is in register.  SYMBOL_VALUE is the register number
998      in the original debug format.  SYMBOL_REGISTER_OPS holds a
999      function that can be called to transform this into the
1000      actual register number this represents in a specific target
1001      architecture (gdbarch).
1002 
1003      For some symbol formats (stabs, for some compilers at least),
1004      the compiler generates two symbols, an argument and a register.
1005      In some cases we combine them to a single LOC_REGISTER in symbol
1006      reading, but currently not for all cases (e.g. it's passed on the
1007      stack and then loaded into a register).  */
1008 
1009   LOC_REGISTER,
1010 
1011   /* It's an argument; the value is at SYMBOL_VALUE offset in arglist.  */
1012 
1013   LOC_ARG,
1014 
1015   /* Value address is at SYMBOL_VALUE offset in arglist.  */
1016 
1017   LOC_REF_ARG,
1018 
1019   /* Value is in specified register.  Just like LOC_REGISTER except the
1020      register holds the address of the argument instead of the argument
1021      itself.  This is currently used for the passing of structs and unions
1022      on sparc and hppa.  It is also used for call by reference where the
1023      address is in a register, at least by mipsread.c.  */
1024 
1025   LOC_REGPARM_ADDR,
1026 
1027   /* Value is a local variable at SYMBOL_VALUE offset in stack frame.  */
1028 
1029   LOC_LOCAL,
1030 
1031   /* Value not used; definition in SYMBOL_TYPE.  Symbols in the domain
1032      STRUCT_DOMAIN all have this class.  */
1033 
1034   LOC_TYPEDEF,
1035 
1036   /* Value is address SYMBOL_VALUE_ADDRESS in the code.  */
1037 
1038   LOC_LABEL,
1039 
1040   /* In a symbol table, value is SYMBOL_BLOCK_VALUE of a `struct block'.
1041      In a partial symbol table, SYMBOL_VALUE_ADDRESS is the start address
1042      of the block.  Function names have this class.  */
1043 
1044   LOC_BLOCK,
1045 
1046   /* Value is a constant byte-sequence pointed to by SYMBOL_VALUE_BYTES, in
1047      target byte order.  */
1048 
1049   LOC_CONST_BYTES,
1050 
1051   /* Value is at fixed address, but the address of the variable has
1052      to be determined from the minimal symbol table whenever the
1053      variable is referenced.
1054      This happens if debugging information for a global symbol is
1055      emitted and the corresponding minimal symbol is defined
1056      in another object file or runtime common storage.
1057      The linker might even remove the minimal symbol if the global
1058      symbol is never referenced, in which case the symbol remains
1059      unresolved.
1060 
1061      GDB would normally find the symbol in the minimal symbol table if it will
1062      not find it in the full symbol table.  But a reference to an external
1063      symbol in a local block shadowing other definition requires full symbol
1064      without possibly having its address available for LOC_STATIC.  Testcase
1065      is provided as `gdb.dwarf2/dw2-unresolved.exp'.
1066 
1067      This is also used for thread local storage (TLS) variables.  In
1068      this case, the address of the TLS variable must be determined
1069      when the variable is referenced, from the msymbol's address,
1070      which is the offset of the TLS variable in the thread local
1071      storage of the shared library/object.  */
1072 
1073   LOC_UNRESOLVED,
1074 
1075   /* The variable does not actually exist in the program.
1076      The value is ignored.  */
1077 
1078   LOC_OPTIMIZED_OUT,
1079 
1080   /* The variable's address is computed by a set of location
1081      functions (see "struct symbol_computed_ops" below).  */
1082   LOC_COMPUTED,
1083 
1084   /* The variable uses general_symbol_info->value->common_block field.
1085      It also always uses COMMON_BLOCK_DOMAIN.  */
1086   LOC_COMMON_BLOCK,
1087 
1088   /* Not used, just notes the boundary of the enum.  */
1089   LOC_FINAL_VALUE
1090 };
1091 
1092 /* The number of bits needed for values in enum address_class, with some
1093    padding for reasonable growth, and room for run-time registered address
1094    classes. See symtab.c:MAX_SYMBOL_IMPLS.
1095    This is a #define so that we can have a assertion elsewhere to
1096    verify that we have reserved enough space for synthetic address
1097    classes.  */
1098 #define SYMBOL_ACLASS_BITS 5
1099 static_assert (LOC_FINAL_VALUE <= (1 << SYMBOL_ACLASS_BITS));
1100 
1101 /* The methods needed to implement LOC_COMPUTED.  These methods can
1102    use the symbol's .aux_value for additional per-symbol information.
1103 
1104    At present this is only used to implement location expressions.  */
1105 
1106 struct symbol_computed_ops
1107 {
1108 
1109   /* Return the value of the variable SYMBOL, relative to the stack
1110      frame FRAME.  If the variable has been optimized out, return
1111      zero.
1112 
1113      Iff `read_needs_frame (SYMBOL)' is not SYMBOL_NEEDS_FRAME, then
1114      FRAME may be zero.  */
1115 
1116   struct value *(*read_variable) (struct symbol * symbol,
1117                                           const frame_info_ptr &frame);
1118 
1119   /* Read variable SYMBOL like read_variable at (callee) FRAME's function
1120      entry.  SYMBOL should be a function parameter, otherwise
1121      NO_ENTRY_VALUE_ERROR will be thrown.  */
1122   struct value *(*read_variable_at_entry) (struct symbol *symbol,
1123                                                      const frame_info_ptr &frame);
1124 
1125   /* Find the "symbol_needs_kind" value for the given symbol.  This
1126      value determines whether reading the symbol needs memory (e.g., a
1127      global variable), just registers (a thread-local), or a frame (a
1128      local variable).  */
1129   enum symbol_needs_kind (*get_symbol_read_needs) (struct symbol * symbol);
1130 
1131   /* Write to STREAM a natural-language description of the location of
1132      SYMBOL, in the context of ADDR.  */
1133   void (*describe_location) (struct symbol * symbol, CORE_ADDR addr,
1134                                    struct ui_file * stream);
1135 
1136   /* Non-zero if this symbol's address computation is dependent on PC.  */
1137   unsigned char location_has_loclist;
1138 
1139   /* Tracepoint support.  Append bytecodes to the tracepoint agent
1140      expression AX that push the address of the object SYMBOL.  Set
1141      VALUE appropriately.  Note --- for objects in registers, this
1142      needn't emit any code; as long as it sets VALUE properly, then
1143      the caller will generate the right code in the process of
1144      treating this as an lvalue or rvalue.  */
1145 
1146   void (*tracepoint_var_ref) (struct symbol *symbol, struct agent_expr *ax,
1147                                     struct axs_value *value);
1148 
1149   /* Generate C code to compute the location of SYMBOL.  The C code is
1150      emitted to STREAM.  GDBARCH is the current architecture and PC is
1151      the PC at which SYMBOL's location should be evaluated.
1152      REGISTERS_USED is a vector indexed by register number; the
1153      generator function should set an element in this vector if the
1154      corresponding register is needed by the location computation.
1155      The generated C code must assign the location to a local
1156      variable; this variable's name is RESULT_NAME.  */
1157 
1158   void (*generate_c_location) (struct symbol *symbol, string_file *stream,
1159                                      struct gdbarch *gdbarch,
1160                                      std::vector<bool> &registers_used,
1161                                      CORE_ADDR pc, const char *result_name);
1162 
1163 };
1164 
1165 /* The methods needed to implement LOC_BLOCK for inferior functions.
1166    These methods can use the symbol's .aux_value for additional
1167    per-symbol information.  */
1168 
1169 struct symbol_block_ops
1170 {
1171   /* Fill in *START and *LENGTH with DWARF block data of function
1172      FRAMEFUNC valid for inferior context address PC.  Set *LENGTH to
1173      zero if such location is not valid for PC; *START is left
1174      uninitialized in such case.  */
1175   void (*find_frame_base_location) (struct symbol *framefunc, CORE_ADDR pc,
1176                                             const gdb_byte **start, size_t *length);
1177 
1178   /* Return the frame base address.  FRAME is the frame for which we want to
1179      compute the base address while FRAMEFUNC is the symbol for the
1180      corresponding function.  Return 0 on failure (FRAMEFUNC may not hold the
1181      information we need).
1182 
1183      This method is designed to work with static links (nested functions
1184      handling).  Static links are function properties whose evaluation returns
1185      the frame base address for the enclosing frame.  However, there are
1186      multiple definitions for "frame base": the content of the frame base
1187      register, the CFA as defined by DWARF unwinding information, ...
1188 
1189      So this specific method is supposed to compute the frame base address such
1190      as for nested functions, the static link computes the same address.  For
1191      instance, considering DWARF debugging information, the static link is
1192      computed with DW_AT_static_link and this method must be used to compute
1193      the corresponding DW_AT_frame_base attribute.  */
1194   CORE_ADDR (*get_frame_base) (struct symbol *framefunc,
1195                                      const frame_info_ptr &frame);
1196 
1197   /* Return the block for this function.  So far, this is used to
1198      implement function aliases.  So, if this is set, then it's not
1199      necessary to set the other functions in this structure; and vice
1200      versa.  */
1201   const block *(*get_block_value) (const struct symbol *sym);
1202 };
1203 
1204 /* Functions used with LOC_REGISTER and LOC_REGPARM_ADDR.  */
1205 
1206 struct symbol_register_ops
1207 {
1208   int (*register_number) (struct symbol *symbol, struct gdbarch *gdbarch);
1209 };
1210 
1211 /* Objects of this type are used to find the address class and the
1212    various computed ops vectors of a symbol.  */
1213 
1214 struct symbol_impl
1215 {
1216   enum address_class aclass;
1217 
1218   /* Used with LOC_COMPUTED.  */
1219   const struct symbol_computed_ops *ops_computed;
1220 
1221   /* Used with LOC_BLOCK.  */
1222   const struct symbol_block_ops *ops_block;
1223 
1224   /* Used with LOC_REGISTER and LOC_REGPARM_ADDR.  */
1225   const struct symbol_register_ops *ops_register;
1226 };
1227 
1228 /* struct symbol has some subclasses.  This enum is used to
1229    differentiate between them.  */
1230 
1231 enum symbol_subclass_kind
1232 {
1233   /* Plain struct symbol.  */
1234   SYMBOL_NONE,
1235 
1236   /* struct template_symbol.  */
1237   SYMBOL_TEMPLATE,
1238 
1239   /* struct rust_vtable_symbol.  */
1240   SYMBOL_RUST_VTABLE
1241 };
1242 
1243 extern gdb::array_view<const struct symbol_impl> symbol_impls;
1244 
1245 /* This structure is space critical.  See space comments at the top.  */
1246 
1247 struct symbol : public general_symbol_info, public allocate_on_obstack<symbol>
1248 {
symbolsymbol1249   symbol ()
1250     /* Class-initialization of bitfields is only allowed in C++20.  */
1251     : m_domain (UNDEF_DOMAIN),
1252       m_aclass_index (0),
1253       m_is_objfile_owned (1),
1254       m_is_argument (0),
1255       m_is_inlined (0),
1256       maybe_copied (0),
1257       subclass (SYMBOL_NONE),
1258       m_artificial (false)
1259     {
1260       /* We can't use an initializer list for members of a base class, and
1261            general_symbol_info needs to stay a POD type.  */
1262       m_name = nullptr;
1263       m_value.ivalue = 0;
1264       language_specific.obstack = nullptr;
1265       m_language = language_unknown;
1266       ada_mangled = 0;
1267       m_section = -1;
1268       /* GCC 4.8.5 (on CentOS 7) does not correctly compile class-
1269            initialization of unions, so we initialize it manually here.  */
1270       owner.symtab = nullptr;
1271     }
1272 
1273   symbol (const symbol &) = default;
1274   symbol &operator= (const symbol &) = default;
1275 
set_aclass_indexsymbol1276   void set_aclass_index (unsigned int aclass_index)
1277   {
1278     m_aclass_index = aclass_index;
1279   }
1280 
implsymbol1281   const symbol_impl &impl () const
1282   {
1283     return symbol_impls[this->m_aclass_index];
1284   }
1285 
block_opssymbol1286   const symbol_block_ops *block_ops () const
1287   {
1288     return this->impl ().ops_block;
1289   }
1290 
computed_opssymbol1291   const symbol_computed_ops *computed_ops () const
1292   {
1293     return this->impl ().ops_computed;
1294   }
1295 
register_opssymbol1296   const symbol_register_ops *register_ops () const
1297   {
1298     return this->impl ().ops_register;
1299   }
1300 
aclasssymbol1301   address_class aclass () const
1302   {
1303     return this->impl ().aclass;
1304   }
1305 
1306   /* Return true if this symbol's domain matches FLAGS.  */
1307   bool matches (domain_search_flags flags) const;
1308 
domainsymbol1309   domain_enum domain () const
1310   {
1311     return m_domain;
1312   }
1313 
set_domainsymbol1314   void set_domain (domain_enum domain)
1315   {
1316     m_domain = domain;
1317   }
1318 
is_objfile_ownedsymbol1319   bool is_objfile_owned () const
1320   {
1321     return m_is_objfile_owned;
1322   }
1323 
set_is_objfile_ownedsymbol1324   void set_is_objfile_owned (bool is_objfile_owned)
1325   {
1326     m_is_objfile_owned = is_objfile_owned;
1327   }
1328 
is_argumentsymbol1329   bool is_argument () const
1330   {
1331     return m_is_argument;
1332   }
1333 
set_is_argumentsymbol1334   void set_is_argument (bool is_argument)
1335   {
1336     m_is_argument = is_argument;
1337   }
1338 
is_inlinedsymbol1339   bool is_inlined () const
1340   {
1341     return m_is_inlined;
1342   }
1343 
set_is_inlinedsymbol1344   void set_is_inlined (bool is_inlined)
1345   {
1346     m_is_inlined = is_inlined;
1347   }
1348 
is_cplus_template_functionsymbol1349   bool is_cplus_template_function () const
1350   {
1351     return this->subclass == SYMBOL_TEMPLATE;
1352   }
1353 
typesymbol1354   struct type *type () const
1355   {
1356     return m_type;
1357   }
1358 
set_typesymbol1359   void set_type (struct type *type)
1360   {
1361     m_type = type;
1362   }
1363 
linesymbol1364   unsigned int line () const
1365   {
1366     return m_line;
1367   }
1368 
set_linesymbol1369   void set_line (unsigned int line)
1370   {
1371     m_line = line;
1372   }
1373 
value_longestsymbol1374   LONGEST value_longest () const
1375   {
1376     return m_value.ivalue;
1377   }
1378 
set_value_longestsymbol1379   void set_value_longest (LONGEST value)
1380   {
1381     m_value.ivalue = value;
1382   }
1383 
value_addresssymbol1384   CORE_ADDR value_address () const
1385   {
1386     if (this->maybe_copied)
1387       return this->get_maybe_copied_address ();
1388     else
1389       return m_value.address;
1390   }
1391 
set_value_addresssymbol1392   void set_value_address (CORE_ADDR address)
1393   {
1394     m_value.address = address;
1395   }
1396 
value_bytessymbol1397   const gdb_byte *value_bytes () const
1398   {
1399     return m_value.bytes;
1400   }
1401 
set_value_bytessymbol1402   void set_value_bytes (const gdb_byte *bytes)
1403   {
1404     m_value.bytes = bytes;
1405   }
1406 
value_common_blocksymbol1407   const common_block *value_common_block () const
1408   {
1409     return m_value.common_block;
1410   }
1411 
set_value_common_blocksymbol1412   void set_value_common_block (const common_block *common_block)
1413   {
1414     m_value.common_block = common_block;
1415   }
1416 
1417   const block *value_block () const;
1418 
set_value_blocksymbol1419   void set_value_block (const block *block)
1420   {
1421     m_value.block = block;
1422   }
1423 
value_chainsymbol1424   symbol *value_chain () const
1425   {
1426     return m_value.chain;
1427   }
1428 
set_value_chainsymbol1429   void set_value_chain (symbol *sym)
1430   {
1431     m_value.chain = sym;
1432   }
1433 
1434   /* Return true if this symbol was marked as artificial.  */
is_artificialsymbol1435   bool is_artificial () const
1436   {
1437     return m_artificial;
1438   }
1439 
1440   /* Set the 'artificial' flag on this symbol.  */
set_is_artificialsymbol1441   void set_is_artificial (bool artificial)
1442   {
1443     m_artificial = artificial;
1444   }
1445 
1446   /* Return the OBJFILE of this symbol.  It is an error to call this
1447      if is_objfile_owned is false, which only happens for
1448      architecture-provided types.  */
1449 
1450   struct objfile *objfile () const;
1451 
1452   /* Return the ARCH of this symbol.  */
1453 
1454   struct gdbarch *arch () const;
1455 
1456   /* Return the symtab of this symbol.  It is an error to call this if
1457      is_objfile_owned is false, which only happens for
1458      architecture-provided types.  */
1459 
1460   struct symtab *symtab () const;
1461 
1462   /* Set the symtab of this symbol to SYMTAB.  It is an error to call
1463      this if is_objfile_owned is false, which only happens for
1464      architecture-provided types.  */
1465 
1466   void set_symtab (struct symtab *symtab);
1467 
1468   /* Data type of value */
1469 
1470   struct type *m_type = nullptr;
1471 
1472   /* The owner of this symbol.
1473      Which one to use is defined by symbol.is_objfile_owned.  */
1474 
1475   union
1476   {
1477     /* The symbol table containing this symbol.  This is the file associated
1478        with LINE.  It can be NULL during symbols read-in but it is never NULL
1479        during normal operation.  */
1480     struct symtab *symtab;
1481 
1482     /* For types defined by the architecture.  */
1483     struct gdbarch *arch;
1484   } owner;
1485 
1486   /* Domain code.  */
1487 
1488   ENUM_BITFIELD(domain_enum) m_domain : SYMBOL_DOMAIN_BITS;
1489 
1490   /* Address class.  This holds an index into the 'symbol_impls'
1491      table.  The actual enum address_class value is stored there,
1492      alongside any per-class ops vectors.  */
1493 
1494   unsigned int m_aclass_index : SYMBOL_ACLASS_BITS;
1495 
1496   /* If non-zero then symbol is objfile-owned, use owner.symtab.
1497        Otherwise symbol is arch-owned, use owner.arch.  */
1498 
1499   unsigned int m_is_objfile_owned : 1;
1500 
1501   /* Whether this is an argument.  */
1502 
1503   unsigned m_is_argument : 1;
1504 
1505   /* Whether this is an inlined function (class LOC_BLOCK only).  */
1506   unsigned m_is_inlined : 1;
1507 
1508   /* For LOC_STATIC only, if this is set, then the symbol might be
1509      subject to copy relocation.  In this case, a minimal symbol
1510      matching the symbol's linkage name is first looked for in the
1511      main objfile.  If found, then that address is used; otherwise the
1512      address in this symbol is used.  */
1513 
1514   unsigned maybe_copied : 1;
1515 
1516   /* The concrete type of this symbol.  */
1517 
1518   ENUM_BITFIELD (symbol_subclass_kind) subclass : 2;
1519 
1520   /* Whether this symbol is artificial.  */
1521 
1522   bool m_artificial : 1;
1523 
1524   /* Line number of this symbol's definition, except for inlined
1525      functions.  For an inlined function (class LOC_BLOCK and
1526      SYMBOL_INLINED set) this is the line number of the function's call
1527      site.  Inlined function symbols are not definitions, and they are
1528      never found by symbol table lookup.
1529      If this symbol is arch-owned, LINE shall be zero.  */
1530 
1531   unsigned int m_line = 0;
1532 
1533   /* An arbitrary data pointer, allowing symbol readers to record
1534      additional information on a per-symbol basis.  Note that this data
1535      must be allocated using the same obstack as the symbol itself.  */
1536   /* So far it is only used by:
1537      LOC_COMPUTED: to find the location information
1538      LOC_BLOCK (DWARF2 function): information used internally by the
1539      DWARF 2 code --- specifically, the location expression for the frame
1540      base for this function.  */
1541   /* FIXME drow/2003-02-21: For the LOC_BLOCK case, it might be better
1542      to add a magic symbol to the block containing this information,
1543      or to have a generic debug info annotation slot for symbols.  */
1544 
1545   void *aux_value = nullptr;
1546 
1547   struct symbol *hash_next = nullptr;
1548 
1549 private:
1550   /* Return the address of this symbol.  The MAYBE_COPIED flag must be set.
1551    If the symbol appears in the main program's minimal symbols, then
1552    that minsym's address is returned; otherwise, this symbol's address is
1553    returned.  */
1554  CORE_ADDR get_maybe_copied_address () const;
1555 };
1556 
1557 /* Several lookup functions return both a symbol and the block in which the
1558    symbol is found.  This structure is used in these cases.  */
1559 
1560 struct block_symbol
1561 {
1562   /* The symbol that was found, or NULL if no symbol was found.  */
1563   struct symbol *symbol;
1564 
1565   /* If SYMBOL is not NULL, then this is the block in which the symbol is
1566      defined.  */
1567   const struct block *block;
1568 };
1569 
1570 /* Note: There is no accessor macro for symbol.owner because it is
1571    "private".  */
1572 
1573 #define SYMBOL_LOCATION_BATON(symbol)   (symbol)->aux_value
1574 
1575 inline const block *
value_block()1576 symbol::value_block () const
1577 {
1578   if (const symbol_block_ops *block_ops = this->block_ops ();
1579       block_ops != nullptr && block_ops->get_block_value != nullptr)
1580     return block_ops->get_block_value (this);
1581 
1582   return m_value.block;
1583 }
1584 
1585 extern int register_symbol_computed_impl (enum address_class,
1586                                                     const struct symbol_computed_ops *);
1587 
1588 extern int register_symbol_block_impl (enum address_class aclass,
1589                                                const struct symbol_block_ops *ops);
1590 
1591 extern int register_symbol_register_impl (enum address_class,
1592                                                     const struct symbol_register_ops *);
1593 
1594 /* An instance of this type is used to represent a C++ template
1595    function.  A symbol is really of this type iff
1596    symbol::is_cplus_template_function is true.  */
1597 
1598 struct template_symbol : public symbol
1599 {
1600   /* The number of template arguments.  */
1601   int n_template_arguments = 0;
1602 
1603   /* The template arguments.  This is an array with
1604      N_TEMPLATE_ARGUMENTS elements.  */
1605   struct symbol **template_arguments = nullptr;
1606 };
1607 
1608 /* A symbol that represents a Rust virtual table object.  */
1609 
1610 struct rust_vtable_symbol : public symbol
1611 {
1612   /* The concrete type for which this vtable was created; that is, in
1613      "impl Trait for Type", this is "Type".  */
1614   struct type *concrete_type = nullptr;
1615 };
1616 
1617 
1618 /* Each item represents a line-->pc (or the reverse) mapping.  This is
1619    somewhat more wasteful of space than one might wish, but since only
1620    the files which are actually debugged are read in to core, we don't
1621    waste much space.  */
1622 
1623 struct linetable_entry
1624 {
1625   /* Set the (unrelocated) PC for this entry.  */
set_unrelocated_pclinetable_entry1626   void set_unrelocated_pc (unrelocated_addr pc)
1627   { m_pc = pc; }
1628 
1629   /* Return the unrelocated PC for this entry.  */
unrelocated_pclinetable_entry1630   unrelocated_addr unrelocated_pc () const
1631   { return m_pc; }
1632 
1633   /* Return the relocated PC for this entry.  */
1634   CORE_ADDR pc (const struct objfile *objfile) const;
1635 
1636   bool operator< (const linetable_entry &other) const
1637   {
1638     if (m_pc == other.m_pc
1639           && (line != 0) != (other.line != 0))
1640       return line == 0;
1641     return m_pc < other.m_pc;
1642   }
1643 
1644   /* Two entries are equal if they have the same line and PC.  The
1645      other members are ignored.  */
1646   bool operator== (const linetable_entry &other) const
1647   { return line == other.line && m_pc == other.m_pc; }
1648 
1649   /* The line number for this entry.  */
1650   int line;
1651 
1652   /* True if this PC is a good location to place a breakpoint for LINE.  */
1653   bool is_stmt : 1;
1654 
1655   /* True if this location is a good location to place a breakpoint after a
1656      function prologue.  */
1657   bool prologue_end : 1;
1658 
1659   /* True if this location marks the start of the epilogue.  */
1660   bool epilogue_begin : 1;
1661 
1662 private:
1663 
1664   /* The address for this entry.  */
1665   unrelocated_addr m_pc;
1666 };
1667 
1668 /* The order of entries in the linetable is significant.  They should
1669    be sorted by increasing values of the pc field.  If there is more than
1670    one entry for a given pc, then I'm not sure what should happen (and
1671    I not sure whether we currently handle it the best way).
1672 
1673    Example: a C for statement generally looks like this
1674 
1675    10   0x100   - for the init/test part of a for stmt.
1676    20   0x200
1677    30   0x300
1678    10   0x400   - for the increment part of a for stmt.
1679 
1680    If an entry has a line number of zero, it marks the start of a PC
1681    range for which no line number information is available.  It is
1682    acceptable, though wasteful of table space, for such a range to be
1683    zero length.  */
1684 
1685 struct linetable
1686 {
1687   int nitems;
1688 
1689   /* Actually NITEMS elements.  If you don't like this use of the
1690      `struct hack', you can shove it up your ANSI (seriously, if the
1691      committee tells us how to do it, we can probably go along).  */
1692   struct linetable_entry item[1];
1693 };
1694 
1695 /* How to relocate the symbols from each section in a symbol file.
1696    The ordering and meaning of the offsets is file-type-dependent;
1697    typically it is indexed by section numbers or symbol types or
1698    something like that.  */
1699 
1700 typedef std::vector<CORE_ADDR> section_offsets;
1701 
1702 /* Each source file or header is represented by a struct symtab.
1703    The name "symtab" is historical, another name for it is "filetab".
1704    These objects are chained through the `next' field.  */
1705 
1706 struct symtab
1707 {
compunitsymtab1708   struct compunit_symtab *compunit () const
1709   {
1710     return m_compunit;
1711   }
1712 
set_compunitsymtab1713   void set_compunit (struct compunit_symtab *compunit)
1714   {
1715     m_compunit = compunit;
1716   }
1717 
linetablesymtab1718   const struct linetable *linetable () const
1719   {
1720     return m_linetable;
1721   }
1722 
set_linetablesymtab1723   void set_linetable (const struct linetable *linetable)
1724   {
1725     m_linetable = linetable;
1726   }
1727 
languagesymtab1728   enum language language () const
1729   {
1730     return m_language;
1731   }
1732 
set_languagesymtab1733   void set_language (enum language language)
1734   {
1735     m_language = language;
1736   }
1737 
1738   /* Unordered chain of all filetabs in the compunit,  with the exception
1739      that the "main" source file is the first entry in the list.  */
1740 
1741   struct symtab *next;
1742 
1743   /* Backlink to containing compunit symtab.  */
1744 
1745   struct compunit_symtab *m_compunit;
1746 
1747   /* Table mapping core addresses to line numbers for this file.
1748      Can be NULL if none.  Never shared between different symtabs.  */
1749 
1750   const struct linetable *m_linetable;
1751 
1752   /* Name of this source file, in a form appropriate to print to the user.
1753 
1754      This pointer is never nullptr.  */
1755 
1756   const char *filename;
1757 
1758   /* Filename for this source file, used as an identifier to link with
1759      related objects such as associated macro_source_file objects.  It must
1760      therefore match the name of any macro_source_file object created for this
1761      source file.  The value can be the same as FILENAME if it is known to
1762      follow that rule, or another form of the same file name, this is up to
1763      the specific debug info reader.
1764 
1765      This pointer is never nullptr.*/
1766   const char *filename_for_id;
1767 
1768   /* Language of this source file.  */
1769 
1770   enum language m_language;
1771 
1772   /* Full name of file as found by searching the source path.
1773      NULL if not yet known.  */
1774 
1775   char *fullname;
1776 };
1777 
1778 /* A range adapter to allowing iterating over all the file tables in a list.  */
1779 
1780 using symtab_range = next_range<symtab>;
1781 
1782 /* Compunit symtabs contain the actual "symbol table", aka blockvector, as well
1783    as the list of all source files (what gdb has historically associated with
1784    the term "symtab").
1785    Additional information is recorded here that is common to all symtabs in a
1786    compilation unit (DWARF or otherwise).
1787 
1788    Example:
1789    For the case of a program built out of these files:
1790 
1791    foo.c
1792      foo1.h
1793      foo2.h
1794    bar.c
1795      foo1.h
1796      bar.h
1797 
1798    This is recorded as:
1799 
1800    objfile -> foo.c(cu) -> bar.c(cu) -> NULL
1801                     |            |
1802                     v            v
1803                 foo.c        bar.c
1804                     |            |
1805                     v            v
1806                 foo1.h       foo1.h
1807                     |            |
1808                     v            v
1809                 foo2.h       bar.h
1810                     |            |
1811                     v            v
1812                  NULL         NULL
1813 
1814    where "foo.c(cu)" and "bar.c(cu)" are struct compunit_symtab objects,
1815    and the files foo.c, etc. are struct symtab objects.  */
1816 
1817 struct compunit_symtab
1818 {
objfilecompunit_symtab1819   struct objfile *objfile () const
1820   {
1821     return m_objfile;
1822   }
1823 
set_objfilecompunit_symtab1824   void set_objfile (struct objfile *objfile)
1825   {
1826     m_objfile = objfile;
1827   }
1828 
filetabscompunit_symtab1829   symtab_range filetabs () const
1830   {
1831     return symtab_range (m_filetabs);
1832   }
1833 
add_filetabcompunit_symtab1834   void add_filetab (symtab *filetab)
1835   {
1836     if (m_filetabs == nullptr)
1837       {
1838           m_filetabs = filetab;
1839           m_last_filetab = filetab;
1840       }
1841     else
1842       {
1843           m_last_filetab->next = filetab;
1844           m_last_filetab = filetab;
1845       }
1846   }
1847 
debugformatcompunit_symtab1848   const char *debugformat () const
1849   {
1850     return m_debugformat;
1851   }
1852 
set_debugformatcompunit_symtab1853   void set_debugformat (const char *debugformat)
1854   {
1855     m_debugformat = debugformat;
1856   }
1857 
producercompunit_symtab1858   const char *producer () const
1859   {
1860     return m_producer;
1861   }
1862 
set_producercompunit_symtab1863   void set_producer (const char *producer)
1864   {
1865     m_producer = producer;
1866   }
1867 
dirnamecompunit_symtab1868   const char *dirname () const
1869   {
1870     return m_dirname;
1871   }
1872 
set_dirnamecompunit_symtab1873   void set_dirname (const char *dirname)
1874   {
1875     m_dirname = dirname;
1876   }
1877 
blockvectorcompunit_symtab1878   struct blockvector *blockvector ()
1879   {
1880     return m_blockvector;
1881   }
1882 
blockvectorcompunit_symtab1883   const struct blockvector *blockvector () const
1884   {
1885     return m_blockvector;
1886   }
1887 
set_blockvectorcompunit_symtab1888   void set_blockvector (struct blockvector *blockvector)
1889   {
1890     m_blockvector = blockvector;
1891   }
1892 
locations_validcompunit_symtab1893   bool locations_valid () const
1894   {
1895     return m_locations_valid;
1896   }
1897 
set_locations_validcompunit_symtab1898   void set_locations_valid (bool locations_valid)
1899   {
1900     m_locations_valid = locations_valid;
1901   }
1902 
epilogue_unwind_validcompunit_symtab1903   bool epilogue_unwind_valid () const
1904   {
1905     return m_epilogue_unwind_valid;
1906   }
1907 
set_epilogue_unwind_validcompunit_symtab1908   void set_epilogue_unwind_valid (bool epilogue_unwind_valid)
1909   {
1910     m_epilogue_unwind_valid = epilogue_unwind_valid;
1911   }
1912 
macro_tablecompunit_symtab1913   struct macro_table *macro_table () const
1914   {
1915     return m_macro_table;
1916   }
1917 
set_macro_tablecompunit_symtab1918   void set_macro_table (struct macro_table *macro_table)
1919   {
1920     m_macro_table = macro_table;
1921   }
1922 
1923   /* Make PRIMARY_FILETAB the primary filetab of this compunit symtab.
1924 
1925      PRIMARY_FILETAB must already be a filetab of this compunit symtab.  */
1926 
1927   void set_primary_filetab (symtab *primary_filetab);
1928 
1929   /* Return the primary filetab of the compunit.  */
1930   symtab *primary_filetab () const;
1931 
1932   /* Set m_call_site_htab.  */
1933   void set_call_site_htab (htab_t call_site_htab);
1934 
1935   /* Find call_site info for PC.  */
1936   call_site *find_call_site (CORE_ADDR pc) const;
1937 
1938   /* Return the language of this compunit_symtab.  */
1939   enum language language () const;
1940 
1941   /* Unordered chain of all compunit symtabs of this objfile.  */
1942   struct compunit_symtab *next;
1943 
1944   /* Object file from which this symtab information was read.  */
1945   struct objfile *m_objfile;
1946 
1947   /* Name of the symtab.
1948      This is *not* intended to be a usable filename, and is
1949      for debugging purposes only.  */
1950   const char *name;
1951 
1952   /* Unordered list of file symtabs, except that by convention the "main"
1953      source file (e.g., .c, .cc) is guaranteed to be first.
1954      Each symtab is a file, either the "main" source file (e.g., .c, .cc)
1955      or header (e.g., .h).  */
1956   symtab *m_filetabs;
1957 
1958   /* Last entry in FILETABS list.
1959      Subfiles are added to the end of the list so they accumulate in order,
1960      with the main source subfile living at the front.
1961      The main reason is so that the main source file symtab is at the head
1962      of the list, and the rest appear in order for debugging convenience.  */
1963   symtab *m_last_filetab;
1964 
1965   /* Non-NULL string that identifies the format of the debugging information,
1966      such as "stabs", "dwarf 1", "dwarf 2", "coff", etc.  This is mostly useful
1967      for automated testing of gdb but may also be information that is
1968      useful to the user.  */
1969   const char *m_debugformat;
1970 
1971   /* String of producer version information, or NULL if we don't know.  */
1972   const char *m_producer;
1973 
1974   /* Directory in which it was compiled, or NULL if we don't know.  */
1975   const char *m_dirname;
1976 
1977   /* List of all symbol scope blocks for this symtab.  It is shared among
1978      all symtabs in a given compilation unit.  */
1979   struct blockvector *m_blockvector;
1980 
1981   /* Symtab has been compiled with both optimizations and debug info so that
1982      GDB may stop skipping prologues as variables locations are valid already
1983      at function entry points.  */
1984   unsigned int m_locations_valid : 1;
1985 
1986   /* DWARF unwinder for this CU is valid even for epilogues (PC at the return
1987      instruction).  This is supported by GCC since 4.5.0.  */
1988   unsigned int m_epilogue_unwind_valid : 1;
1989 
1990   /* struct call_site entries for this compilation unit or NULL.  */
1991   htab_t m_call_site_htab;
1992 
1993   /* The macro table for this symtab.  Like the blockvector, this
1994      is shared between different symtabs in a given compilation unit.
1995      It's debatable whether it *should* be shared among all the symtabs in
1996      the given compilation unit, but it currently is.  */
1997   struct macro_table *m_macro_table;
1998 
1999   /* If non-NULL, then this points to a NULL-terminated vector of
2000      included compunits.  When searching the static or global
2001      block of this compunit, the corresponding block of all
2002      included compunits will also be searched.  Note that this
2003      list must be flattened -- the symbol reader is responsible for
2004      ensuring that this vector contains the transitive closure of all
2005      included compunits.  */
2006   struct compunit_symtab **includes;
2007 
2008   /* If this is an included compunit, this points to one includer
2009      of the table.  This user is considered the canonical compunit
2010      containing this one.  An included compunit may itself be
2011      included by another.  */
2012   struct compunit_symtab *user;
2013 };
2014 
2015 using compunit_symtab_range = next_range<compunit_symtab>;
2016 
2017 /* Return true if this symtab is the "main" symtab of its compunit_symtab.  */
2018 
2019 static inline bool
is_main_symtab_of_compunit_symtab(struct symtab * symtab)2020 is_main_symtab_of_compunit_symtab (struct symtab *symtab)
2021 {
2022   return symtab == symtab->compunit ()->primary_filetab ();
2023 }
2024 
2025 /* Return true if epilogue unwind info of CUST is valid.  */
2026 
2027 static inline bool
compunit_epilogue_unwind_valid(struct compunit_symtab * cust)2028 compunit_epilogue_unwind_valid (struct compunit_symtab *cust)
2029 {
2030   /* In absence of producer information, assume epilogue unwind info is
2031      valid.  */
2032   if (cust == nullptr)
2033     return true;
2034 
2035   return cust->epilogue_unwind_valid ();
2036 }
2037 
2038 
2039 /* The virtual function table is now an array of structures which have the
2040    form { int16 offset, delta; void *pfn; }.
2041 
2042    In normal virtual function tables, OFFSET is unused.
2043    DELTA is the amount which is added to the apparent object's base
2044    address in order to point to the actual object to which the
2045    virtual function should be applied.
2046    PFN is a pointer to the virtual function.
2047 
2048    Note that this macro is g++ specific (FIXME).  */
2049 
2050 #define VTBL_FNADDR_OFFSET 2
2051 
2052 /* External variables and functions for the objects described above.  */
2053 
2054 /* True if we are nested inside psymtab_to_symtab.  */
2055 
2056 extern int currently_reading_symtab;
2057 
2058 /* symtab.c lookup functions */
2059 
2060 extern const char multiple_symbols_ask[];
2061 extern const char multiple_symbols_all[];
2062 extern const char multiple_symbols_cancel[];
2063 
2064 const char *multiple_symbols_select_mode (void);
2065 
2066 /* lookup a symbol table by source file name.  */
2067 
2068 extern struct symtab *lookup_symtab (const char *);
2069 
2070 /* An object of this type is passed as the 'is_a_field_of_this'
2071    argument to lookup_symbol and lookup_symbol_in_language.  */
2072 
2073 struct field_of_this_result
2074 {
2075   /* The type in which the field was found.  If this is NULL then the
2076      symbol was not found in 'this'.  If non-NULL, then one of the
2077      other fields will be non-NULL as well.  */
2078 
2079   struct type *type;
2080 
2081   /* If the symbol was found as an ordinary field of 'this', then this
2082      is non-NULL and points to the particular field.  */
2083 
2084   struct field *field;
2085 
2086   /* If the symbol was found as a function field of 'this', then this
2087      is non-NULL and points to the particular field.  */
2088 
2089   struct fn_fieldlist *fn_field;
2090 };
2091 
2092 /* Find the definition for a specified symbol name NAME
2093    in domain DOMAIN in language LANGUAGE, visible from lexical block BLOCK
2094    if non-NULL or from global/static blocks if BLOCK is NULL.
2095    Returns the struct symbol pointer, or NULL if no symbol is found.
2096    C++: if IS_A_FIELD_OF_THIS is non-NULL on entry, check to see if
2097    NAME is a field of the current implied argument `this'.  If so fill in the
2098    fields of IS_A_FIELD_OF_THIS, otherwise the fields are set to NULL.
2099    The symbol's section is fixed up if necessary.  */
2100 
2101 extern struct block_symbol
2102   lookup_symbol_in_language (const char *,
2103                                    const struct block *,
2104                                    const domain_search_flags,
2105                                    enum language,
2106                                    struct field_of_this_result *);
2107 
2108 /* Same as lookup_symbol_in_language, but using the current language.  */
2109 
2110 extern struct block_symbol lookup_symbol (const char *,
2111                                                     const struct block *,
2112                                                     const domain_search_flags,
2113                                                     struct field_of_this_result *);
2114 
2115 /* Find the definition for a specified symbol search name in domain
2116    DOMAIN, visible from lexical block BLOCK if non-NULL or from
2117    global/static blocks if BLOCK is NULL.  The passed-in search name
2118    should not come from the user; instead it should already be a
2119    search name as retrieved from a search_name () call.  See definition of
2120    symbol_name_match_type::SEARCH_NAME.  Returns the struct symbol
2121    pointer, or NULL if no symbol is found.  The symbol's section is
2122    fixed up if necessary.  */
2123 
2124 extern struct block_symbol lookup_symbol_search_name
2125      (const char *search_name,
2126       const struct block *block,
2127       domain_search_flags domain);
2128 
2129 /* Some helper functions for languages that need to write their own
2130    lookup_symbol_nonlocal functions.  */
2131 
2132 /* Lookup a symbol in the static block associated to BLOCK, if there
2133    is one; do nothing if BLOCK is NULL or a global block.
2134    Upon success fixes up the symbol's section if necessary.  */
2135 
2136 extern struct block_symbol
2137   lookup_symbol_in_static_block (const char *name,
2138                                          const struct block *block,
2139                                          const domain_search_flags domain);
2140 
2141 /* Search all static file-level symbols for NAME from DOMAIN.
2142    Upon success fixes up the symbol's section if necessary.  */
2143 
2144 extern struct block_symbol lookup_static_symbol
2145      (const char *name, const domain_search_flags domain);
2146 
2147 /* Lookup a symbol in all files' global blocks.
2148 
2149    If BLOCK is non-NULL then it is used for two things:
2150    1) If a target-specific lookup routine for libraries exists, then use the
2151       routine for the objfile of BLOCK, and
2152    2) The objfile of BLOCK is used to assist in determining the search order
2153       if the target requires it.
2154       See gdbarch_iterate_over_objfiles_in_search_order.
2155 
2156    Upon success fixes up the symbol's section if necessary.  */
2157 
2158 extern struct block_symbol
2159   lookup_global_symbol (const char *name,
2160                               const struct block *block,
2161                               const domain_search_flags domain);
2162 
2163 /* Lookup a symbol in block BLOCK.
2164    Upon success fixes up the symbol's section if necessary.  */
2165 
2166 extern struct symbol *
2167   lookup_symbol_in_block (const char *name,
2168                                 symbol_name_match_type match_type,
2169                                 const struct block *block,
2170                                 const domain_search_flags domain);
2171 
2172 /* Look up the `this' symbol for LANG in BLOCK.  Return the symbol if
2173    found, or NULL if not found.  */
2174 
2175 extern struct block_symbol
2176   lookup_language_this (const struct language_defn *lang,
2177                               const struct block *block);
2178 
2179 /* Lookup a [struct, union, enum] by name, within a specified block.  */
2180 
2181 extern struct type *lookup_struct (const char *, const struct block *);
2182 
2183 extern struct type *lookup_union (const char *, const struct block *);
2184 
2185 extern struct type *lookup_enum (const char *, const struct block *);
2186 
2187 /* from blockframe.c: */
2188 
2189 /* lookup the function symbol corresponding to the address.  The
2190    return value will not be an inlined function; the containing
2191    function will be returned instead.  */
2192 
2193 extern struct symbol *find_pc_function (CORE_ADDR);
2194 
2195 /* lookup the function corresponding to the address and section.  The
2196    return value will not be an inlined function; the containing
2197    function will be returned instead.  */
2198 
2199 extern struct symbol *find_pc_sect_function (CORE_ADDR, struct obj_section *);
2200 
2201 /* lookup the function symbol corresponding to the address and
2202    section.  The return value will be the closest enclosing function,
2203    which might be an inline function.  */
2204 
2205 extern struct symbol *find_pc_sect_containing_function
2206   (CORE_ADDR pc, struct obj_section *section);
2207 
2208 /* Find the symbol at the given address.  Returns NULL if no symbol
2209    found.  Only exact matches for ADDRESS are considered.  */
2210 
2211 extern struct symbol *find_symbol_at_address (CORE_ADDR);
2212 
2213 /* Finds the "function" (text symbol) that is smaller than PC but
2214    greatest of all of the potential text symbols in SECTION.  Sets
2215    *NAME and/or *ADDRESS conditionally if that pointer is non-null.
2216    If ENDADDR is non-null, then set *ENDADDR to be the end of the
2217    function (exclusive).  If the optional parameter BLOCK is non-null,
2218    then set *BLOCK to the address of the block corresponding to the
2219    function symbol, if such a symbol could be found during the lookup;
2220    nullptr is used as a return value for *BLOCK if no block is found.
2221    This function either succeeds or fails (not halfway succeeds).  If
2222    it succeeds, it sets *NAME, *ADDRESS, and *ENDADDR to real
2223    information and returns true.  If it fails, it sets *NAME, *ADDRESS
2224    and *ENDADDR to zero and returns false.
2225 
2226    If the function in question occupies non-contiguous ranges,
2227    *ADDRESS and *ENDADDR are (subject to the conditions noted above) set
2228    to the start and end of the range in which PC is found.  Thus
2229    *ADDRESS <= PC < *ENDADDR with no intervening gaps (in which ranges
2230    from other functions might be found).
2231 
2232    This property allows find_pc_partial_function to be used (as it had
2233    been prior to the introduction of non-contiguous range support) by
2234    various tdep files for finding a start address and limit address
2235    for prologue analysis.  This still isn't ideal, however, because we
2236    probably shouldn't be doing prologue analysis (in which
2237    instructions are scanned to determine frame size and stack layout)
2238    for any range that doesn't contain the entry pc.  Moreover, a good
2239    argument can be made that prologue analysis ought to be performed
2240    starting from the entry pc even when PC is within some other range.
2241    This might suggest that *ADDRESS and *ENDADDR ought to be set to the
2242    limits of the entry pc range, but that will cause the
2243    *ADDRESS <= PC < *ENDADDR condition to be violated; many of the
2244    callers of find_pc_partial_function expect this condition to hold.
2245 
2246    Callers which require the start and/or end addresses for the range
2247    containing the entry pc should instead call
2248    find_function_entry_range_from_pc.  */
2249 
2250 extern bool find_pc_partial_function (CORE_ADDR pc, const char **name,
2251                                               CORE_ADDR *address, CORE_ADDR *endaddr,
2252                                               const struct block **block = nullptr);
2253 
2254 /* Like find_pc_partial_function, above, but returns the underlying
2255    general_symbol_info (rather than the name) as an out parameter.  */
2256 
2257 extern bool find_pc_partial_function_sym
2258   (CORE_ADDR pc, const general_symbol_info **sym,
2259    CORE_ADDR *address, CORE_ADDR *endaddr,
2260    const struct block **block = nullptr);
2261 
2262 /* Like find_pc_partial_function, above, but *ADDRESS and *ENDADDR are
2263    set to start and end addresses of the range containing the entry pc.
2264 
2265    Note that it is not necessarily the case that (for non-NULL ADDRESS
2266    and ENDADDR arguments) the *ADDRESS <= PC < *ENDADDR condition will
2267    hold.
2268 
2269    See comment for find_pc_partial_function, above, for further
2270    explanation.  */
2271 
2272 extern bool find_function_entry_range_from_pc (CORE_ADDR pc,
2273                                                          const char **name,
2274                                                          CORE_ADDR *address,
2275                                                          CORE_ADDR *endaddr);
2276 
2277 /* Return the type of a function with its first instruction exactly at
2278    the PC address.  Return NULL otherwise.  */
2279 
2280 extern struct type *find_function_type (CORE_ADDR pc);
2281 
2282 /* See if we can figure out the function's actual type from the type
2283    that the resolver returns.  RESOLVER_FUNADDR is the address of the
2284    ifunc resolver.  */
2285 
2286 extern struct type *find_gnu_ifunc_target_type (CORE_ADDR resolver_funaddr);
2287 
2288 /* Find the GNU ifunc minimal symbol that matches SYM.  */
2289 extern bound_minimal_symbol find_gnu_ifunc (const symbol *sym);
2290 
2291 extern void clear_pc_function_cache (void);
2292 
2293 /* lookup full symbol table by address.  */
2294 
2295 extern struct compunit_symtab *find_pc_compunit_symtab (CORE_ADDR);
2296 
2297 /* lookup full symbol table by address and section.  */
2298 
2299 extern struct compunit_symtab *
2300   find_pc_sect_compunit_symtab (CORE_ADDR, struct obj_section *);
2301 
2302 extern bool find_pc_line_pc_range (CORE_ADDR, CORE_ADDR *, CORE_ADDR *);
2303 
2304 extern void reread_symbols (int from_tty);
2305 
2306 /* Look up a type named NAME in STRUCT_DOMAIN in the current language.
2307    The type returned must not be opaque -- i.e., must have at least one field
2308    defined.  */
2309 
2310 extern struct type *lookup_transparent_type
2311     (const char *name, domain_search_flags flags = SEARCH_STRUCT_DOMAIN);
2312 
2313 extern struct type *basic_lookup_transparent_type
2314      (const char *name, domain_search_flags flags = SEARCH_STRUCT_DOMAIN);
2315 
2316 /* Macro for name of symbol to indicate a file compiled with gcc.  */
2317 #ifndef GCC_COMPILED_FLAG_SYMBOL
2318 #define GCC_COMPILED_FLAG_SYMBOL "gcc_compiled."
2319 #endif
2320 
2321 /* Macro for name of symbol to indicate a file compiled with gcc2.  */
2322 #ifndef GCC2_COMPILED_FLAG_SYMBOL
2323 #define GCC2_COMPILED_FLAG_SYMBOL "gcc2_compiled."
2324 #endif
2325 
2326 extern bool in_gnu_ifunc_stub (CORE_ADDR pc);
2327 
2328 /* Functions for resolving STT_GNU_IFUNC symbols which are implemented only
2329    for ELF symbol files.  */
2330 
2331 struct gnu_ifunc_fns
2332 {
2333   /* See elf_gnu_ifunc_resolve_addr for its real implementation.  */
2334   CORE_ADDR (*gnu_ifunc_resolve_addr) (struct gdbarch *gdbarch, CORE_ADDR pc);
2335 
2336   /* See elf_gnu_ifunc_resolve_name for its real implementation.  */
2337   bool (*gnu_ifunc_resolve_name) (const char *function_name,
2338                                          CORE_ADDR *function_address_p);
2339 
2340   /* See elf_gnu_ifunc_resolver_stop for its real implementation.  */
2341   void (*gnu_ifunc_resolver_stop) (code_breakpoint *b);
2342 
2343   /* See elf_gnu_ifunc_resolver_return_stop for its real implementation.  */
2344   void (*gnu_ifunc_resolver_return_stop) (code_breakpoint *b);
2345 };
2346 
2347 #define gnu_ifunc_resolve_addr gnu_ifunc_fns_p->gnu_ifunc_resolve_addr
2348 #define gnu_ifunc_resolve_name gnu_ifunc_fns_p->gnu_ifunc_resolve_name
2349 #define gnu_ifunc_resolver_stop gnu_ifunc_fns_p->gnu_ifunc_resolver_stop
2350 #define gnu_ifunc_resolver_return_stop \
2351   gnu_ifunc_fns_p->gnu_ifunc_resolver_return_stop
2352 
2353 extern const struct gnu_ifunc_fns *gnu_ifunc_fns_p;
2354 
2355 extern CORE_ADDR find_solib_trampoline_target (const frame_info_ptr &, CORE_ADDR);
2356 
2357 struct symtab_and_line
2358 {
2359   /* The program space of this sal.  */
2360   struct program_space *pspace = NULL;
2361 
2362   struct symtab *symtab = NULL;
2363   struct symbol *symbol = NULL;
2364   struct obj_section *section = NULL;
2365   struct minimal_symbol *msymbol = NULL;
2366   /* Line number.  Line numbers start at 1 and proceed through symtab->nlines.
2367      0 is never a valid line number; it is used to indicate that line number
2368      information is not available.  */
2369   int line = 0;
2370 
2371   CORE_ADDR pc = 0;
2372   CORE_ADDR end = 0;
2373   bool explicit_pc = false;
2374   bool explicit_line = false;
2375 
2376   /* If the line number information is valid, then this indicates if this
2377      line table entry had the is-stmt flag set or not.  */
2378   bool is_stmt = false;
2379 
2380   /* The probe associated with this symtab_and_line.  */
2381   probe *prob = NULL;
2382   /* If PROBE is not NULL, then this is the objfile in which the probe
2383      originated.  */
2384   struct objfile *objfile = NULL;
2385 };
2386 
2387 
2388 
2389 /* Given a pc value, return line number it is in.  Second arg nonzero means
2390    if pc is on the boundary use the previous statement's line number.  */
2391 
2392 extern struct symtab_and_line find_pc_line (CORE_ADDR, int);
2393 
2394 /* Same function, but specify a section as well as an address.  */
2395 
2396 extern struct symtab_and_line find_pc_sect_line (CORE_ADDR,
2397                                                              struct obj_section *, int);
2398 
2399 /* Given PC, and assuming it is part of a range of addresses that is part of
2400    a line, go back through the linetable and find the starting PC of that
2401    line.
2402 
2403    For example, suppose we have 3 PC ranges for line X:
2404 
2405    Line X - [0x0 - 0x8]
2406    Line X - [0x8 - 0x10]
2407    Line X - [0x10 - 0x18]
2408 
2409    If we call the function with PC == 0x14, we want to return 0x0, as that is
2410    the starting PC of line X, and the ranges are contiguous.
2411 */
2412 
2413 extern std::optional<CORE_ADDR> find_line_range_start (CORE_ADDR pc);
2414 
2415 /* Wrapper around find_pc_line to just return the symtab.  */
2416 
2417 extern struct symtab *find_pc_line_symtab (CORE_ADDR);
2418 
2419 /* Given a symtab and line number, return the pc there.  */
2420 
2421 extern bool find_line_pc (struct symtab *, int, CORE_ADDR *);
2422 
2423 extern bool find_line_pc_range (struct symtab_and_line, CORE_ADDR *,
2424                                         CORE_ADDR *);
2425 
2426 extern void resolve_sal_pc (struct symtab_and_line *);
2427 
2428 /* The reason we're calling into a completion match list collector
2429    function.  */
2430 enum class complete_symbol_mode
2431   {
2432     /* Completing an expression.  */
2433     EXPRESSION,
2434 
2435     /* Completing a linespec.  */
2436     LINESPEC,
2437   };
2438 
2439 extern void default_collect_symbol_completion_matches_break_on
2440   (completion_tracker &tracker,
2441    complete_symbol_mode mode,
2442    symbol_name_match_type name_match_type,
2443    const char *text, const char *word, const char *break_on,
2444    enum type_code code);
2445 extern void collect_symbol_completion_matches
2446   (completion_tracker &tracker,
2447    complete_symbol_mode mode,
2448    symbol_name_match_type name_match_type,
2449    const char *, const char *);
2450 extern void collect_symbol_completion_matches_type (completion_tracker &tracker,
2451                                                                 const char *, const char *,
2452                                                                 enum type_code);
2453 
2454 extern void collect_file_symbol_completion_matches
2455   (completion_tracker &tracker,
2456    complete_symbol_mode,
2457    symbol_name_match_type name_match_type,
2458    const char *, const char *, const char *);
2459 
2460 extern completion_list
2461   make_source_files_completion_list (const char *, const char *);
2462 
2463 /* Return whether SYM is a function/method, as opposed to a data symbol.  */
2464 
2465 extern bool symbol_is_function_or_method (symbol *sym);
2466 
2467 /* Return whether MSYMBOL is a function/method, as opposed to a data
2468    symbol */
2469 
2470 extern bool symbol_is_function_or_method (minimal_symbol *msymbol);
2471 
2472 /* Return whether SYM should be skipped in completion mode MODE.  In
2473    linespec mode, we're only interested in functions/methods.  */
2474 
2475 template<typename Symbol>
2476 static bool
completion_skip_symbol(complete_symbol_mode mode,Symbol * sym)2477 completion_skip_symbol (complete_symbol_mode mode, Symbol *sym)
2478 {
2479   return (mode == complete_symbol_mode::LINESPEC
2480             && !symbol_is_function_or_method (sym));
2481 }
2482 
2483 /* symtab.c */
2484 
2485 bool matching_obj_sections (struct obj_section *, struct obj_section *);
2486 
2487 extern struct symtab *find_line_symtab (struct symtab *, int, int *, bool *);
2488 
2489 /* Given a function symbol SYM, find the symtab and line for the start
2490    of the function.  If FUNFIRSTLINE is true, we want the first line
2491    of real code inside the function.  */
2492 extern symtab_and_line find_function_start_sal (symbol *sym, bool
2493                                                             funfirstline);
2494 
2495 /* Same, but start with a function address/section instead of a
2496    symbol.  */
2497 extern symtab_and_line find_function_start_sal (CORE_ADDR func_addr,
2498                                                             obj_section *section,
2499                                                             bool funfirstline);
2500 
2501 extern void skip_prologue_sal (struct symtab_and_line *);
2502 
2503 /* symtab.c */
2504 
2505 extern CORE_ADDR skip_prologue_using_sal (struct gdbarch *gdbarch,
2506                                                     CORE_ADDR func_addr);
2507 
2508 /* If SYM requires a section index, find it either via minimal symbols
2509    or examining OBJFILE's sections.  Note that SYM's current address
2510    must not have any runtime offsets applied.  */
2511 
2512 extern void fixup_symbol_section (struct symbol *sym,
2513                                           struct objfile *objfile);
2514 
2515 /* If MSYMBOL is an text symbol, look for a function debug symbol with
2516    the same address.  Returns NULL if not found.  This is necessary in
2517    case a function is an alias to some other function, because debug
2518    information is only emitted for the alias target function's
2519    definition, not for the alias.  */
2520 extern symbol *find_function_alias_target (bound_minimal_symbol msymbol);
2521 
2522 /* Symbol searching */
2523 
2524 /* When using the symbol_searcher struct to search for symbols, a vector of
2525    the following structs is returned.  */
2526 struct symbol_search
2527 {
symbol_searchsymbol_search2528   symbol_search (block_enum block_, struct symbol *symbol_)
2529     : block (block_),
2530       symbol (symbol_)
2531   {
2532     msymbol.minsym = nullptr;
2533     msymbol.objfile = nullptr;
2534   }
2535 
symbol_searchsymbol_search2536   symbol_search (block_enum block_, struct minimal_symbol *minsym,
2537                      struct objfile *objfile)
2538     : block (block_),
2539       symbol (nullptr)
2540   {
2541     msymbol.minsym = minsym;
2542     msymbol.objfile = objfile;
2543   }
2544 
2545   bool operator< (const symbol_search &other) const
2546   {
2547     return compare_search_syms (*this, other) < 0;
2548   }
2549 
2550   bool operator== (const symbol_search &other) const
2551   {
2552     return compare_search_syms (*this, other) == 0;
2553   }
2554 
2555   /* The block in which the match was found.  Either STATIC_BLOCK or
2556      GLOBAL_BLOCK.  */
2557   block_enum block;
2558 
2559   /* Information describing what was found.
2560 
2561      If symbol is NOT NULL, then information was found for this match.  */
2562   struct symbol *symbol;
2563 
2564   /* If msymbol is non-null, then a match was made on something for
2565      which only minimal_symbols exist.  */
2566   struct bound_minimal_symbol msymbol;
2567 
2568 private:
2569 
2570   static int compare_search_syms (const symbol_search &sym_a,
2571                                           const symbol_search &sym_b);
2572 };
2573 
2574 /* In order to search for global symbols of a particular kind matching
2575    particular regular expressions, create an instance of this structure and
2576    call the SEARCH member function.  */
2577 class global_symbol_searcher
2578 {
2579 public:
2580 
2581   /* Constructor.  */
global_symbol_searcher(domain_search_flags kind,const char * symbol_name_regexp)2582   global_symbol_searcher (domain_search_flags kind,
2583                                 const char *symbol_name_regexp)
2584     : m_kind (kind),
2585       m_symbol_name_regexp (symbol_name_regexp)
2586   {
2587   }
2588 
2589   /* Set the optional regexp that matches against the symbol type.  */
set_symbol_type_regexp(const char * regexp)2590   void set_symbol_type_regexp (const char *regexp)
2591   {
2592     m_symbol_type_regexp = regexp;
2593   }
2594 
2595   /* Set the flag to exclude minsyms from the search results.  */
set_exclude_minsyms(bool exclude_minsyms)2596   void set_exclude_minsyms (bool exclude_minsyms)
2597   {
2598     m_exclude_minsyms = exclude_minsyms;
2599   }
2600 
2601   /* Set the maximum number of search results to be returned.  */
set_max_search_results(size_t max_search_results)2602   void set_max_search_results (size_t max_search_results)
2603   {
2604     m_max_search_results = max_search_results;
2605   }
2606 
2607   /* Search the symbols from all objfiles in the current program space
2608      looking for matches as defined by the current state of this object.
2609 
2610      Within each file the results are sorted locally; each symtab's global
2611      and static blocks are separately alphabetized.  Duplicate entries are
2612      removed.  */
2613   std::vector<symbol_search> search () const;
2614 
2615   /* The set of source files to search in for matching symbols.  This is
2616      currently public so that it can be populated after this object has
2617      been constructed.  */
2618   std::vector<const char *> filenames;
2619 
2620 private:
2621   /* The kind of symbols are we searching for.
2622      VARIABLES_DOMAIN - Search all symbols, excluding functions, type
2623                               names, and constants (enums).
2624      FUNCTIONS_DOMAIN - Search all functions..
2625      TYPES_DOMAIN     - Search all type names.
2626      MODULES_DOMAIN   - Search all Fortran modules.
2627      ALL_DOMAIN       - Not valid for this function.  */
2628   domain_search_flags m_kind;
2629 
2630   /* Regular expression to match against the symbol name.  */
2631   const char *m_symbol_name_regexp = nullptr;
2632 
2633   /* Regular expression to match against the symbol type.  */
2634   const char *m_symbol_type_regexp = nullptr;
2635 
2636   /* When this flag is false then minsyms that match M_SYMBOL_REGEXP will
2637      be included in the results, otherwise they are excluded.  */
2638   bool m_exclude_minsyms = false;
2639 
2640   /* Maximum number of search results.  We currently impose a hard limit
2641      of SIZE_MAX, there is no "unlimited".  */
2642   size_t m_max_search_results = SIZE_MAX;
2643 
2644   /* Expand symtabs in OBJFILE that match PREG, are of type M_KIND.  Return
2645      true if any msymbols were seen that we should later consider adding to
2646      the results list.  */
2647   bool expand_symtabs (objfile *objfile,
2648                            const std::optional<compiled_regex> &preg) const;
2649 
2650   /* Add symbols from symtabs in OBJFILE that match PREG, and TREG, and are
2651      of type M_KIND, to the results set RESULTS_SET.  Return false if we
2652      stop adding results early due to having already found too many results
2653      (based on M_MAX_SEARCH_RESULTS limit), otherwise return true.
2654      Returning true does not indicate that any results were added, just
2655      that we didn't _not_ add a result due to reaching MAX_SEARCH_RESULTS.  */
2656   bool add_matching_symbols (objfile *objfile,
2657                                    const std::optional<compiled_regex> &preg,
2658                                    const std::optional<compiled_regex> &treg,
2659                                    std::set<symbol_search> *result_set) const;
2660 
2661   /* Add msymbols from OBJFILE that match PREG and M_KIND, to the results
2662      vector RESULTS.  Return false if we stop adding results early due to
2663      having already found too many results (based on max search results
2664      limit M_MAX_SEARCH_RESULTS), otherwise return true.  Returning true
2665      does not indicate that any results were added, just that we didn't
2666      _not_ add a result due to reaching MAX_SEARCH_RESULTS.  */
2667   bool add_matching_msymbols (objfile *objfile,
2668                                     const std::optional<compiled_regex> &preg,
2669                                     std::vector<symbol_search> *results) const;
2670 
2671   /* Return true if MSYMBOL is of type KIND.  */
2672   static bool is_suitable_msymbol (const domain_search_flags kind,
2673                                            const minimal_symbol *msymbol);
2674 };
2675 
2676 /* When searching for Fortran symbols within modules (functions/variables)
2677    we return a vector of this type.  The first item in the pair is the
2678    module symbol, and the second item is the symbol for the function or
2679    variable we found.  */
2680 typedef std::pair<symbol_search, symbol_search> module_symbol_search;
2681 
2682 /* Searches the symbols to find function and variables symbols (depending
2683    on KIND) within Fortran modules.  The MODULE_REGEXP matches against the
2684    name of the module, REGEXP matches against the name of the symbol within
2685    the module, and TYPE_REGEXP matches against the type of the symbol
2686    within the module.  */
2687 extern std::vector<module_symbol_search> search_module_symbols
2688           (const char *module_regexp, const char *regexp,
2689            const char *type_regexp, domain_search_flags kind);
2690 
2691 /* Convert a global or static symbol SYM (based on BLOCK, which should be
2692    either GLOBAL_BLOCK or STATIC_BLOCK) into a string for use in 'info'
2693    type commands (e.g. 'info variables', 'info functions', etc).  */
2694 
2695 extern std::string symbol_to_info_string (struct symbol *sym, int block);
2696 
2697 extern bool treg_matches_sym_type_name (const compiled_regex &treg,
2698                                                   const struct symbol *sym);
2699 
2700 /* The name of the ``main'' function.  */
2701 extern const char *main_name ();
2702 extern enum language main_language (void);
2703 
2704 /* Lookup symbol NAME from DOMAIN in MAIN_OBJFILE's global or static blocks,
2705    as specified by BLOCK_INDEX.
2706    This searches MAIN_OBJFILE as well as any associated separate debug info
2707    objfiles of MAIN_OBJFILE.
2708    BLOCK_INDEX can be GLOBAL_BLOCK or STATIC_BLOCK.
2709    Upon success fixes up the symbol's section if necessary.  */
2710 
2711 extern struct block_symbol
2712   lookup_global_symbol_from_objfile (struct objfile *main_objfile,
2713                                              enum block_enum block_index,
2714                                              const char *name,
2715                                              const domain_search_flags domain);
2716 
2717 /* Return 1 if the supplied producer string matches the ARM RealView
2718    compiler (armcc).  */
2719 bool producer_is_realview (const char *producer);
2720 
2721 extern unsigned int symtab_create_debug;
2722 
2723 /* Print a "symtab-create" debug statement.  */
2724 
2725 #define symtab_create_debug_printf(fmt, ...) \
2726   debug_prefixed_printf_cond (symtab_create_debug >= 1, "symtab-create", fmt, ##__VA_ARGS__)
2727 
2728 /* Print a verbose "symtab-create" debug statement, only if
2729    "set debug symtab-create" is set to 2 or higher.  */
2730 
2731 #define symtab_create_debug_printf_v(fmt, ...) \
2732   debug_prefixed_printf_cond (symtab_create_debug >= 2, "symtab-create", fmt, ##__VA_ARGS__)
2733 
2734 extern unsigned int symbol_lookup_debug;
2735 
2736 /* Return true if symbol-lookup debug is turned on at all.  */
2737 
2738 static inline bool
symbol_lookup_debug_enabled()2739 symbol_lookup_debug_enabled ()
2740 {
2741   return symbol_lookup_debug > 0;
2742 }
2743 
2744 /* Return true if symbol-lookup debug is turned to verbose mode.  */
2745 
2746 static inline bool
symbol_lookup_debug_enabled_v()2747 symbol_lookup_debug_enabled_v ()
2748 {
2749   return symbol_lookup_debug > 1;
2750 }
2751 
2752 /* Print a "symbol-lookup" debug statement if symbol_lookup_debug is >= 1.  */
2753 
2754 #define symbol_lookup_debug_printf(fmt, ...) \
2755   debug_prefixed_printf_cond (symbol_lookup_debug_enabled (),         \
2756                                     "symbol-lookup", fmt, ##__VA_ARGS__)
2757 
2758 /* Print a "symbol-lookup" debug statement if symbol_lookup_debug is >= 2.  */
2759 
2760 #define symbol_lookup_debug_printf_v(fmt, ...) \
2761   debug_prefixed_printf_cond (symbol_lookup_debug_enabled_v (), \
2762                                     "symbol-lookup", fmt, ##__VA_ARGS__)
2763 
2764 /* Print "symbol-lookup" enter/exit debug statements.  */
2765 
2766 #define SYMBOL_LOOKUP_SCOPED_DEBUG_ENTER_EXIT \
2767   scoped_debug_enter_exit (symbol_lookup_debug_enabled, "symbol-lookup")
2768 
2769 extern bool basenames_may_differ;
2770 
2771 bool compare_filenames_for_search (const char *filename,
2772                                            const char *search_name);
2773 
2774 bool compare_glob_filenames_for_search (const char *filename,
2775                                                   const char *search_name);
2776 
2777 bool iterate_over_some_symtabs (const char *name,
2778                                         const char *real_path,
2779                                         struct compunit_symtab *first,
2780                                         struct compunit_symtab *after_last,
2781                                         gdb::function_view<bool (symtab *)> callback);
2782 
2783 void iterate_over_symtabs (const char *name,
2784                                  gdb::function_view<bool (symtab *)> callback);
2785 
2786 
2787 std::vector<CORE_ADDR> find_pcs_for_symtab_line
2788     (struct symtab *symtab, int line, const linetable_entry **best_entry);
2789 
2790 /* Prototype for callbacks for LA_ITERATE_OVER_SYMBOLS.  The callback
2791    is called once per matching symbol SYM.  The callback should return
2792    true to indicate that LA_ITERATE_OVER_SYMBOLS should continue
2793    iterating, or false to indicate that the iteration should end.  */
2794 
2795 typedef bool (symbol_found_callback_ftype) (struct block_symbol *bsym);
2796 
2797 /* Iterate over the symbols named NAME, matching DOMAIN, in BLOCK.
2798 
2799    For each symbol that matches, CALLBACK is called.  The symbol is
2800    passed to the callback.
2801 
2802    If CALLBACK returns false, the iteration ends and this function
2803    returns false.  Otherwise, the search continues, and the function
2804    eventually returns true.  */
2805 
2806 bool iterate_over_symbols (const struct block *block,
2807                                  const lookup_name_info &name,
2808                                  const domain_search_flags domain,
2809                                  gdb::function_view<symbol_found_callback_ftype> callback);
2810 
2811 /* Like iterate_over_symbols, but if all calls to CALLBACK return
2812    true, then calls CALLBACK one additional time with a block_symbol
2813    that has a valid block but a NULL symbol.  */
2814 
2815 bool iterate_over_symbols_terminated
2816   (const struct block *block,
2817    const lookup_name_info &name,
2818    const domain_search_flags domain,
2819    gdb::function_view<symbol_found_callback_ftype> callback);
2820 
2821 /* Storage type used by demangle_for_lookup.  demangle_for_lookup
2822    either returns a const char * pointer that points to either of the
2823    fields of this type, or a pointer to the input NAME.  This is done
2824    this way to avoid depending on the precise details of the storage
2825    for the string.  */
2826 class demangle_result_storage
2827 {
2828 public:
2829 
2830   /* Swap the malloc storage to STR, and return a pointer to the
2831      beginning of the new string.  */
set_malloc_ptr(gdb::unique_xmalloc_ptr<char> && str)2832   const char *set_malloc_ptr (gdb::unique_xmalloc_ptr<char> &&str)
2833   {
2834     m_malloc = std::move (str);
2835     return m_malloc.get ();
2836   }
2837 
2838   /* Set the malloc storage to now point at PTR.  Any previous malloc
2839      storage is released.  */
set_malloc_ptr(char * ptr)2840   const char *set_malloc_ptr (char *ptr)
2841   {
2842     m_malloc.reset (ptr);
2843     return ptr;
2844   }
2845 
2846 private:
2847 
2848   /* The storage.  */
2849   gdb::unique_xmalloc_ptr<char> m_malloc;
2850 };
2851 
2852 const char *
2853   demangle_for_lookup (const char *name, enum language lang,
2854                            demangle_result_storage &storage);
2855 
2856 /* Test to see if the symbol of language SYMBOL_LANGUAGE specified by
2857    SYMNAME (which is already demangled for C++ symbols) matches
2858    SYM_TEXT in the first SYM_TEXT_LEN characters.  If so, add it to
2859    the current completion list and return true.  Otherwise, return
2860    false.  */
2861 bool completion_list_add_name (completion_tracker &tracker,
2862                                      language symbol_language,
2863                                      const char *symname,
2864                                      const lookup_name_info &lookup_name,
2865                                      const char *text, const char *word);
2866 
2867 /* A simple symbol searching class.  */
2868 
2869 class symbol_searcher
2870 {
2871 public:
2872   /* Returns the symbols found for the search.  */
2873   const std::vector<block_symbol> &
matching_symbols()2874   matching_symbols () const
2875   {
2876     return m_symbols;
2877   }
2878 
2879   /* Returns the minimal symbols found for the search.  */
2880   const std::vector<bound_minimal_symbol> &
matching_msymbols()2881   matching_msymbols () const
2882   {
2883     return m_minimal_symbols;
2884   }
2885 
2886   /* Search for all symbols named NAME in LANGUAGE with DOMAIN, restricting
2887      search to FILE_SYMTABS and SEARCH_PSPACE, both of which may be NULL
2888      to search all symtabs and program spaces.  */
2889   void find_all_symbols (const std::string &name,
2890                                const struct language_defn *language,
2891                                domain_search_flags domain_search_flags,
2892                                std::vector<symtab *> *search_symtabs,
2893                                struct program_space *search_pspace);
2894 
2895   /* Reset this object to perform another search.  */
reset()2896   void reset ()
2897   {
2898     m_symbols.clear ();
2899     m_minimal_symbols.clear ();
2900   }
2901 
2902 private:
2903   /* Matching debug symbols.  */
2904   std::vector<block_symbol>  m_symbols;
2905 
2906   /* Matching non-debug symbols.  */
2907   std::vector<bound_minimal_symbol> m_minimal_symbols;
2908 };
2909 
2910 /* Class used to encapsulate the filename filtering for the "info sources"
2911    command.  */
2912 
2913 struct info_sources_filter
2914 {
2915   /* If filename filtering is being used (see M_C_REGEXP) then which part
2916      of the filename is being filtered against?  */
2917   enum class match_on
2918   {
2919     /* Match against the full filename.  */
2920     FULLNAME,
2921 
2922     /* Match only against the directory part of the full filename.  */
2923     DIRNAME,
2924 
2925     /* Match only against the basename part of the full filename.  */
2926     BASENAME
2927   };
2928 
2929   /* Create a filter of MATCH_TYPE using regular expression REGEXP.  If
2930      REGEXP is nullptr then all files will match the filter and MATCH_TYPE
2931      is ignored.
2932 
2933      The string pointed too by REGEXP must remain live and unchanged for
2934      this lifetime of this object as the object only retains a copy of the
2935      pointer.  */
2936   info_sources_filter (match_on match_type, const char *regexp);
2937 
2938   DISABLE_COPY_AND_ASSIGN (info_sources_filter);
2939 
2940   /* Does FULLNAME match the filter defined by this object, return true if
2941      it does, otherwise, return false.  If there is no filtering defined
2942      then this function will always return true.  */
2943   bool matches (const char *fullname) const;
2944 
2945 private:
2946 
2947   /* The type of filtering in place.  */
2948   match_on m_match_type;
2949 
2950   /* Points to the original regexp used to create this filter.  */
2951   const char *m_regexp;
2952 
2953   /* A compiled version of M_REGEXP.  This object is only given a value if
2954      M_REGEXP is not nullptr and is not the empty string.  */
2955   std::optional<compiled_regex> m_c_regexp;
2956 };
2957 
2958 /* Perform the core of the 'info sources' command.
2959 
2960    FILTER is used to perform regular expression based filtering on the
2961    source files that will be displayed.
2962 
2963    Output is written to UIOUT in CLI or MI style as appropriate.  */
2964 
2965 extern void info_sources_worker (struct ui_out *uiout,
2966                                          bool group_by_objfile,
2967                                          const info_sources_filter &filter);
2968 
2969 /* This function returns the address at which the function epilogue begins,
2970    according to the linetable.
2971 
2972    Returns an empty optional if EPILOGUE_BEGIN is never set in the
2973    linetable.  */
2974 
2975 std::optional<CORE_ADDR> find_epilogue_using_linetable (CORE_ADDR func_addr);
2976 
2977 #endif /* !defined(SYMTAB_H) */
2978