X-Git-Url: https://repo.jachan.dev/binutils.git/blobdiff_plain/21578747f0e17fc823bfe562ea6dc84017d47d40..a77bf669dce7d953f2c32b162ccec49ed844f962:/gdb/symtab.h diff --git a/gdb/symtab.h b/gdb/symtab.h index d7f62a87d6..0a20db51dd 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1,5 +1,5 @@ /* Symbol table definitions for GDB. - Copyright (C) 1986, 1989, 1991, 1992 Free Software Foundation, Inc. + Copyright 1986, 1989, 1991, 1992, 1993, 1994, 1995, 1996 Free Software Foundation, Inc. This file is part of GDB. @@ -15,7 +15,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software -Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #if !defined (SYMTAB_H) #define SYMTAB_H 1 @@ -26,8 +26,12 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ #define obstack_chunk_alloc xmalloc #define obstack_chunk_free free -/* GNU C supports enums that are bitfields. Some old compilers don't. */ -#if defined(__GNUC__) && !defined(BYTE_BITFIELD) +/* Don't do this; it means that if some .o's are compiled with GNU C + and some are not (easy to do accidentally the way we configure + things; also it is a pain to have to "make clean" every time you + want to switch compilers), then GDB dies a horrible death. */ +/* GNU C supports enums that are bitfields. Some compilers don't. */ +#if 0 && defined(__GNUC__) && !defined(BYTE_BITFIELD) #define BYTE_BITFIELD :8; #else #define BYTE_BITFIELD /*nothing*/ @@ -57,7 +61,10 @@ struct general_symbol_info union { - long value; + /* The fact that this is a long not a LONGEST mainly limits the + range of a LOC_CONST. Since LOC_CONST_BYTES exists, I'm not + sure that is a big deal. */ + long ivalue; struct block *block; @@ -99,11 +106,11 @@ struct general_symbol_info expect all symbol-reading code to set it correctly (the ELF code also tries to set it correctly). */ - unsigned short section; + short section; }; #define SYMBOL_NAME(symbol) (symbol)->ginfo.name -#define SYMBOL_VALUE(symbol) (symbol)->ginfo.value.value +#define SYMBOL_VALUE(symbol) (symbol)->ginfo.value.ivalue #define SYMBOL_VALUE_ADDRESS(symbol) (symbol)->ginfo.value.address #define SYMBOL_VALUE_BYTES(symbol) (symbol)->ginfo.value.bytes #define SYMBOL_BLOCK_VALUE(symbol) (symbol)->ginfo.value.block @@ -114,9 +121,6 @@ struct general_symbol_info #define SYMBOL_CPLUS_DEMANGLED_NAME(symbol) \ (symbol)->ginfo.language_specific.cplus_specific.demangled_name - -extern int demangle; /* We reference it, so go ahead and declare it. */ - /* Macro that initializes the language dependent portion of a symbol depending upon the language for the symbol. */ @@ -225,10 +229,6 @@ extern int demangle; /* We reference it, so go ahead and declare it. */ ? SYMBOL_DEMANGLED_NAME (symbol) \ : SYMBOL_NAME (symbol)) -/* From utils.c. */ -extern int demangle; -extern int asm_demangle; - /* Macro that tests a symbol for a match against a specified name string. First test the unencoded name, then looks for and test a C++ encoded name if it exists. Note that whitespace is ignored while attempting to @@ -284,6 +284,11 @@ struct minimal_symbol char *info; +#ifdef SOFUN_ADDRESS_MAYBE_MISSING + /* Which source file is this symbol in? Only relevant for mst_file_*. */ + char *filename; +#endif + /* Classification types for this symbol. These should be taken as "advisory only", since if gdb can't easily figure out a classification it simply selects mst_unknown. It may also have to guess when it can't figure out @@ -299,6 +304,15 @@ struct minimal_symbol mst_data, /* Generally initialized data */ mst_bss, /* Generally uninitialized data */ mst_abs, /* Generally absolute (nonrelocatable) */ + /* GDB uses mst_solib_trampoline for the start address of a shared + library trampoline entry. Breakpoints for shared library functions + are put there if the shared library is not yet loaded. + After the shared library is loaded, lookup_minimal_symbol will + prefer the minimal symbol from the shared library (usually + a mst_text symbol) over the mst_solib_trampoline symbol, and the + breakpoints will be moved to their true address in the shared + library via breakpoint_re_set. */ + mst_solib_trampoline, /* Shared library trampoline code */ /* For the mst_file* types, the names are only guaranteed to be unique within a given .o file. */ mst_file_text, /* Static version of mst_text */ @@ -418,8 +432,8 @@ struct block /* Different name spaces for symbols. Looking up a symbol specifies a namespace and ignores symbol definitions in other name spaces. */ - -enum namespace + +typedef enum { /* UNDEF_NAMESPACE is used when a namespace has not been discovered or none of the following apply. This usually indicates an error either @@ -442,7 +456,7 @@ enum namespace currently it is not used and labels are not recorded at all. */ LABEL_NAMESPACE -}; +} namespace_enum; /* An address-class says where to find the value of a symbol. */ @@ -545,6 +559,18 @@ enum address_class LOC_BASEREG_ARG, + /* Value is at fixed address, but the address of the variable has + to be determined from the minimal symbol table whenever the + variable is referenced. + This happens if debugging information for a global symbol is + emitted and the corresponding minimal symbol is defined + in another object file or runtime common storage. + The linker might even remove the minimal symbol if the global + symbol is never referenced, in which case the symbol remains + unresolved. */ + + LOC_UNRESOLVED, + /* The variable does not actually exist in the program. The value is ignored. */ @@ -564,11 +590,11 @@ struct symbol /* Name space code. */ - enum namespace namespace BYTE_BITFIELD; + namespace_enum namespace BYTE_BITFIELD; /* Address class */ - enum address_class class BYTE_BITFIELD; + enum address_class aclass BYTE_BITFIELD; /* Line number of definition. FIXME: Should we really make the assumption that nobody will try to debug files longer than 64K lines? What about @@ -588,7 +614,7 @@ struct symbol }; #define SYMBOL_NAMESPACE(symbol) (symbol)->namespace -#define SYMBOL_CLASS(symbol) (symbol)->class +#define SYMBOL_CLASS(symbol) (symbol)->aclass #define SYMBOL_TYPE(symbol) (symbol)->type #define SYMBOL_LINE(symbol) (symbol)->line #define SYMBOL_BASEREG(symbol) (symbol)->aux_value.basereg @@ -609,16 +635,16 @@ struct partial_symbol /* Name space code. */ - enum namespace namespace BYTE_BITFIELD; + namespace_enum namespace BYTE_BITFIELD; /* Address class (for info_symbols) */ - enum address_class class BYTE_BITFIELD; + enum address_class aclass BYTE_BITFIELD; }; #define PSYMBOL_NAMESPACE(psymbol) (psymbol)->namespace -#define PSYMBOL_CLASS(psymbol) (psymbol)->class +#define PSYMBOL_CLASS(psymbol) (psymbol)->aclass /* Source-file information. This describes the relation between source files, @@ -712,7 +738,7 @@ struct symtab struct linetable *linetable; /* Section in objfile->section_offsets for the blockvector and - the linetable. */ + the linetable. Probably always SECT_OFF_TEXT. */ int block_line_section; @@ -908,10 +934,14 @@ struct partial_symtab ((NAME)[0] == 'o' && (NAME)[1] == 'p' && (NAME)[2] == CPLUS_MARKER) /* Macro that yields non-zero value iff NAME is the prefix for C++ vtbl - names. Note that this macro is g++ specific (FIXME). */ + names. Note that this macro is g++ specific (FIXME). + '_vt$' is the old cfront-style vtables; '_VT$' is the new + style, using thunks (where '$' is really CPLUS_MARKER). */ #define VTBL_PREFIX_P(NAME) \ - ((NAME)[3] == CPLUS_MARKER && !strncmp ((NAME), "_vt", 3)) + ((NAME)[3] == CPLUS_MARKER && (NAME)[0] == '_' \ + && (((NAME)[1] == 'V' && (NAME)[2] == 'T') \ + || ((NAME)[1] == 'v' && (NAME)[2] == 't'))) /* Macro that yields non-zero value iff NAME is the prefix for C++ destructor names. Note that this macro is g++ specific (FIXME). */ @@ -934,16 +964,20 @@ extern int current_source_line; extern struct objfile *current_objfile; +/* From utils.c. */ +extern int demangle; +extern int asm_demangle; + extern struct symtab * lookup_symtab PARAMS ((char *)); extern struct symbol * lookup_symbol PARAMS ((const char *, const struct block *, - const enum namespace, int *, struct symtab **)); + const namespace_enum, int *, struct symtab **)); extern struct symbol * lookup_block_symbol PARAMS ((const struct block *, const char *, - const enum namespace)); + const namespace_enum)); extern struct type * lookup_struct PARAMS ((char *, struct block *)); @@ -1004,18 +1038,33 @@ extern void prim_record_minimal_symbol PARAMS ((const char *, CORE_ADDR, enum minimal_symbol_type, struct objfile *)); -extern void prim_record_minimal_symbol_and_info +extern struct minimal_symbol *prim_record_minimal_symbol_and_info PARAMS ((const char *, CORE_ADDR, enum minimal_symbol_type, char *info, int section, struct objfile *)); +#ifdef SOFUN_ADDRESS_MAYBE_MISSING +extern CORE_ADDR find_stab_function_addr PARAMS ((char *, + struct partial_symtab *, + struct objfile *)); +#endif + +extern struct minimal_symbol * +lookup_minimal_symbol PARAMS ((const char *, const char *, struct objfile *)); + extern struct minimal_symbol * -lookup_minimal_symbol PARAMS ((const char *, struct objfile *)); +lookup_minimal_symbol_text PARAMS ((const char *, const char *, struct objfile *)); extern struct minimal_symbol * lookup_minimal_symbol_by_pc PARAMS ((CORE_ADDR)); +extern struct minimal_symbol * +lookup_solib_trampoline_symbol_by_pc PARAMS ((CORE_ADDR)); + +extern CORE_ADDR +find_solib_trampoline_target PARAMS ((CORE_ADDR)); + extern void init_minimal_symbol_collection PARAMS ((void)); @@ -1025,6 +1074,10 @@ discard_minimal_symbols PARAMS ((int)); extern void install_minimal_symbols PARAMS ((struct objfile *)); +/* Sort all the minimal symbols in OBJFILE. */ + +extern void msymbols_sort PARAMS ((struct objfile *objfile)); + struct symtab_and_line { struct symtab *symtab; @@ -1050,6 +1103,13 @@ struct symtabs_and_lines extern struct symtab_and_line find_pc_line PARAMS ((CORE_ADDR, int)); +/* Given an address, return the nearest symbol at or below it in memory. + Optionally return the symtab it's from through 2nd arg, and the + address in inferior memory of the symbol through 3rd arg. */ + +extern struct symbol * +find_addr_symbol PARAMS ((CORE_ADDR, struct symtab **, CORE_ADDR *)); + /* Given a symtab and line number, return the pc there. */ extern CORE_ADDR @@ -1090,6 +1150,9 @@ maintenance_print_msymbols PARAMS ((char *, int)); void maintenance_print_objfiles PARAMS ((char *, int)); +void +maintenance_check_symtabs PARAMS ((char *, int)); + #endif extern void @@ -1108,8 +1171,6 @@ symbol_file_add PARAMS ((char *, int, CORE_ADDR, int, int, int)); /* source.c */ -extern int frame_file_full_name; /* in stack.c */ - extern int identify_source_line PARAMS ((struct symtab *, int, int, CORE_ADDR)); @@ -1142,4 +1203,9 @@ clear_symtab_users PARAMS ((void)); extern enum language deduce_language_from_filename PARAMS ((char *)); +/* symtab.c */ + +extern int +in_prologue PARAMS ((CORE_ADDR pc, CORE_ADDR func_start)); + #endif /* !defined(SYMTAB_H) */