X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fsymtab.h;h=a4032f8ec5ee1142408d0ec6747cf309d544535f;hb=954d8cae714c546dd87fcb19ab32fe50d59cadc1;hp=c124242e3278971ed68e1f4bdae0db307fcf7af5;hpb=714835d5a63b86bb0e82c13d2a4840d8b5e633d3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/symtab.h b/gdb/symtab.h index c124242e32..a4032f8ec5 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -1,7 +1,7 @@ /* Symbol table definitions for GDB. Copyright (C) 1986, 1988, 1989, 1990, 1991, 1992, 1993, 1994, 1995, 1996, - 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008 + 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2007, 2008, 2009, 2010 Free Software Foundation, Inc. This file is part of GDB. @@ -32,6 +32,7 @@ struct block; struct blockvector; struct axs_value; struct agent_expr; +struct program_space; /* Some of the structures in this file are space critical. The space-critical structures are: @@ -74,7 +75,12 @@ struct agent_expr; --chastain 2003-08-21 */ +/* Struct for storing C++ specific information. Allocated when needed. */ +struct cplus_specific +{ + char *demangled_name; +}; /* Define a structure for the information that is common to all symbol types, including minimal symbols, partial symbols, and full symbols. In a @@ -119,16 +125,19 @@ struct general_symbol_info value; /* Since one and only one language can apply, wrap the language specific - information inside a union. */ + information inside a union. */ union { - struct cplus_specific + /* This is used by languages which wish to store a demangled name. + currently used by Ada, Java, and Objective C.*/ + struct mangled_lang { - /* This is in fact used for C++, Java, and Objective C. */ char *demangled_name; } - cplus_specific; + mangled_lang; + + struct cplus_specific *cplus_specific; } language_specific; @@ -147,17 +156,22 @@ struct general_symbol_info short section; - /* The section associated with this symbol. */ + /* The section associated with this symbol. It can be NULL. */ struct obj_section *obj_section; }; +extern void symbol_set_demangled_name (struct general_symbol_info *, char *, + struct objfile *); + +extern char *symbol_get_demangled_name (const struct general_symbol_info *); + extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *); /* Note that all the following SYMBOL_* macros are used with the SYMBOL argument being either a partial symbol, a minimal symbol or a full symbol. All three types have a ginfo field. In particular - the SYMBOL_INIT_LANGUAGE_SPECIFIC, SYMBOL_DEMANGLED_NAME, etc. + the SYMBOL_SET_LANGUAGE, SYMBOL_DEMANGLED_NAME, etc. macros cannot be entirely substituted by functions, unless the callers are changed to pass in the ginfo field only, instead of the SYMBOL parameter. */ @@ -171,29 +185,27 @@ extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *); #define SYMBOL_SECTION(symbol) (symbol)->ginfo.section #define SYMBOL_OBJ_SECTION(symbol) (symbol)->ginfo.obj_section -#define SYMBOL_CPLUS_DEMANGLED_NAME(symbol) \ - (symbol)->ginfo.language_specific.cplus_specific.demangled_name - /* Initializes the language dependent portion of a symbol depending upon the language for the symbol. */ -#define SYMBOL_INIT_LANGUAGE_SPECIFIC(symbol,language) \ - (symbol_init_language_specific (&(symbol)->ginfo, (language))) -extern void symbol_init_language_specific (struct general_symbol_info *symbol, - enum language language); +#define SYMBOL_SET_LANGUAGE(symbol,language) \ + (symbol_set_language (&(symbol)->ginfo, (language))) +extern void symbol_set_language (struct general_symbol_info *symbol, + enum language language); /* Set just the linkage name of a symbol; do not try to demangle it. Used for constructs which do not have a mangled name, e.g. struct tags. Unlike SYMBOL_SET_NAMES, linkage_name must - be terminated and already on the objfile's obstack. */ + be terminated and either already on the objfile's obstack or + permanently allocated. */ #define SYMBOL_SET_LINKAGE_NAME(symbol,linkage_name) \ (symbol)->ginfo.name = (linkage_name) /* Set the linkage and natural names of a symbol, by demangling the linkage name. */ -#define SYMBOL_SET_NAMES(symbol,linkage_name,len,objfile) \ - symbol_set_names (&(symbol)->ginfo, linkage_name, len, objfile) +#define SYMBOL_SET_NAMES(symbol,linkage_name,len,copy_name,objfile) \ + symbol_set_names (&(symbol)->ginfo, linkage_name, len, copy_name, objfile) extern void symbol_set_names (struct general_symbol_info *symbol, - const char *linkage_name, int len, + const char *linkage_name, int len, int copy_name, struct objfile *objfile); /* Now come lots of name accessor macros. Short version as to when to @@ -319,21 +331,6 @@ struct minimal_symbol struct general_symbol_info ginfo; - /* The info field is available for caching machine-specific - information so it doesn't have to rederive the info constantly - (over a serial line). It is initialized to zero and stays that - way until target-dependent code sets it. Storage for any data - pointed to by this field should be allocated on the - objfile_obstack for the associated objfile. The type would be - "void *" except for reasons of compatibility with older - compilers. This field is optional. - - Currently, the AMD 29000 tdep.c uses it to remember things it has decoded - from the instructions in the function header, and the MIPS-16 code uses - it to identify 16-bit procedures. */ - - char *info; - /* Size of this symbol. end_psymtab in dbxread.c uses this information to calculate the end of the partial symtab based on the address of the last symbol plus the size of the last symbol. */ @@ -347,6 +344,10 @@ struct minimal_symbol ENUM_BITFIELD(minimal_symbol_type) type : 8; + /* Two flag bits provided for the use of the target. */ + unsigned int target_flag_1 : 1; + unsigned int target_flag_2 : 1; + /* Minimal symbols with the same hash key are kept on a linked list. This is the link. */ @@ -358,7 +359,8 @@ struct minimal_symbol struct minimal_symbol *demangled_hash_next; }; -#define MSYMBOL_INFO(msymbol) (msymbol)->info +#define MSYMBOL_TARGET_FLAG_1(msymbol) (msymbol)->target_flag_1 +#define MSYMBOL_TARGET_FLAG_2(msymbol) (msymbol)->target_flag_2 #define MSYMBOL_SIZE(msymbol) (msymbol)->size #define MSYMBOL_TYPE(msymbol) (msymbol)->type @@ -388,26 +390,22 @@ typedef enum domain_enum_tag STRUCT_DOMAIN, - /* LABEL_DOMAIN may be used for names of labels (for gotos); - currently it is not used and labels are not recorded at all. */ + /* LABEL_DOMAIN may be used for names of labels (for gotos). */ LABEL_DOMAIN, /* Searching domains. These overlap with VAR_DOMAIN, providing some granularity with the search_symbols function. */ - /* Everything in VAR_DOMAIN minus FUNCTIONS_-, TYPES_-, and - METHODS_DOMAIN */ + /* Everything in VAR_DOMAIN minus FUNCTIONS_DOMAIN and + TYPES_DOMAIN. */ VARIABLES_DOMAIN, /* All functions -- for some reason not methods, though. */ FUNCTIONS_DOMAIN, /* All defined types */ - TYPES_DOMAIN, - - /* All class methods -- why is this separated out? */ - METHODS_DOMAIN + TYPES_DOMAIN } domain_enum; @@ -427,7 +425,11 @@ enum address_class LOC_STATIC, - /* Value is in register. SYMBOL_VALUE is the register number. + /* Value is in register. SYMBOL_VALUE is the register number + in the original debug format. SYMBOL_REGISTER_OPS holds a + function that can be called to transform this into the + actual register number this represents in a specific target + architecture (gdbarch). For some symbol formats (stabs, for some compilers at least), the compiler generates two symbols, an argument and a register. @@ -485,7 +487,13 @@ enum address_class 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. */ + unresolved. + + GDB would normally find the symbol in the minimal symbol table if it will + not find it in the full symbol table. But a reference to an external + symbol in a local block shadowing other definition requires full symbol + without possibly having its address available for LOC_STATIC. Testcase + is provided as `gdb.dwarf2/dw2-unresolved.exp'. */ LOC_UNRESOLVED, @@ -495,16 +503,16 @@ enum address_class LOC_OPTIMIZED_OUT, /* The variable's address is computed by a set of location - functions (see "struct symbol_ops" below). */ + functions (see "struct symbol_computed_ops" below). */ LOC_COMPUTED, }; -/* The methods needed to implement a symbol class. These methods can +/* The methods needed to implement LOC_COMPUTED. These methods can use the symbol's .aux_value for additional per-symbol information. At present this is only used to implement location expressions. */ -struct symbol_ops +struct symbol_computed_ops { /* Return the value of the variable SYMBOL, relative to the stack @@ -520,8 +528,9 @@ struct symbol_ops int (*read_needs_frame) (struct symbol * symbol); /* Write to STREAM a natural-language description of the location of - SYMBOL. */ - int (*describe_location) (struct symbol * symbol, struct ui_file * stream); + SYMBOL, in the context of ADDR. */ + void (*describe_location) (struct symbol * symbol, CORE_ADDR addr, + struct ui_file * stream); /* Tracepoint support. Append bytecodes to the tracepoint agent expression AX that push the address of the object SYMBOL. Set @@ -530,8 +539,15 @@ struct symbol_ops the caller will generate the right code in the process of treating this as an lvalue or rvalue. */ - void (*tracepoint_var_ref) (struct symbol * symbol, struct agent_expr * ax, - struct axs_value * value); + void (*tracepoint_var_ref) (struct symbol *symbol, struct gdbarch *gdbarch, + struct agent_expr *ax, struct axs_value *value); +}; + +/* Functions used with LOC_REGISTER and LOC_REGPARM_ADDR. */ + +struct symbol_register_ops +{ + int (*register_number) (struct symbol *symbol, struct gdbarch *gdbarch); }; /* This structure is space critical. See space comments at the top. */ @@ -548,7 +564,8 @@ struct symbol struct type *type; /* The symbol table containing this symbol. This is the file - associated with LINE. */ + associated with LINE. It can be NULL during symbols read-in but it is + never NULL during normal operation. */ struct symtab *symtab; /* Domain code. */ @@ -569,16 +586,36 @@ struct symbol unsigned is_argument : 1; - /* Line number of definition. FIXME: Should we really make the assumption - that nobody will try to debug files longer than 64K lines? What about - machine generated programs? */ + /* Whether this is an inlined function (class LOC_BLOCK only). */ + unsigned is_inlined : 1; + + /* True if this is a C++ function symbol with template arguments. + In this case the symbol is really a "struct template_symbol". */ + unsigned is_cplus_template_function : 1; + + /* Line number of this symbol's definition, except for inlined + functions. For an inlined function (class LOC_BLOCK and + SYMBOL_INLINED set) this is the line number of the function's call + site. Inlined function symbols are not definitions, and they are + never found by symbol table lookup. + + FIXME: Should we really make the assumption that nobody will try + to debug files longer than 64K lines? What about machine + generated programs? */ unsigned short line; /* Method's for symbol's of this class. */ /* NOTE: cagney/2003-11-02: See comment above attached to "aclass". */ - const struct symbol_ops *ops; + union + { + /* Used with LOC_COMPUTED. */ + const struct symbol_computed_ops *ops_computed; + + /* Used with LOC_REGISTER and LOC_REGPARM_ADDR. */ + const struct symbol_register_ops *ops_register; + } ops; /* An arbitrary data pointer, allowing symbol readers to record additional information on a per-symbol basis. Note that this data @@ -602,42 +639,36 @@ struct symbol #define SYMBOL_DOMAIN(symbol) (symbol)->domain #define SYMBOL_CLASS(symbol) (symbol)->aclass #define SYMBOL_IS_ARGUMENT(symbol) (symbol)->is_argument +#define SYMBOL_INLINED(symbol) (symbol)->is_inlined +#define SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION(symbol) \ + (symbol)->is_cplus_template_function #define SYMBOL_TYPE(symbol) (symbol)->type #define SYMBOL_LINE(symbol) (symbol)->line #define SYMBOL_SYMTAB(symbol) (symbol)->symtab -#define SYMBOL_OPS(symbol) (symbol)->ops +#define SYMBOL_COMPUTED_OPS(symbol) (symbol)->ops.ops_computed +#define SYMBOL_REGISTER_OPS(symbol) (symbol)->ops.ops_register #define SYMBOL_LOCATION_BATON(symbol) (symbol)->aux_value - -/* A partial_symbol records the name, domain, and address class of - symbols whose types we have not parsed yet. For functions, it also - contains their memory address, so we can find them from a PC value. - Each partial_symbol sits in a partial_symtab, all of which are chained - on a partial symtab list and which points to the corresponding - normal symtab once the partial_symtab has been referenced. */ -/* This structure is space critical. See space comments at the top. */ +/* An instance of this type is used to represent a C++ template + function. It includes a "struct symbol" as a kind of base class; + users downcast to "struct template_symbol *" when needed. A symbol + is really of this type iff SYMBOL_IS_CPLUS_TEMPLATE_FUNCTION is + true. */ -struct partial_symbol +struct template_symbol { + /* The base class. */ + struct symbol base; - /* The general symbol info required for all types of symbols. */ - - struct general_symbol_info ginfo; - - /* Name space code. */ - - ENUM_BITFIELD(domain_enum_tag) domain : 6; - - /* Address class (for info_symbols) */ - - ENUM_BITFIELD(address_class) aclass : 6; + /* The number of template arguments. */ + int n_template_arguments; + /* The template arguments. This is an array with + N_TEMPLATE_ARGUMENTS elements. */ + struct symbol **template_arguments; }; -#define PSYMBOL_DOMAIN(psymbol) (psymbol)->domain -#define PSYMBOL_CLASS(psymbol) (psymbol)->aclass - /* Each item represents a line-->pc (or the reverse) mapping. This is somewhat more wasteful of space than one might wish, but since only the files which are actually debugged are read in to core, we don't @@ -801,110 +832,7 @@ struct symtab #define BLOCKVECTOR(symtab) (symtab)->blockvector #define LINETABLE(symtab) (symtab)->linetable - - -/* Each source file that has not been fully read in is represented by - a partial_symtab. This contains the information on where in the - executable the debugging symbols for a specific file are, and a - list of names of global symbols which are located in this file. - They are all chained on partial symtab lists. - - Even after the source file has been read into a symtab, the - partial_symtab remains around. They are allocated on an obstack, - objfile_obstack. FIXME, this is bad for dynamic linking or VxWorks- - style execution of a bunch of .o's. */ - -struct partial_symtab -{ - - /* Chain of all existing partial symtabs. */ - - struct partial_symtab *next; - - /* Name of the source file which this partial_symtab defines */ - - char *filename; - - /* Full path of the source file. NULL if not known. */ - - char *fullname; - - /* Directory in which it was compiled, or NULL if we don't know. */ - - char *dirname; - - /* Information about the object file from which symbols should be read. */ - - struct objfile *objfile; - - /* Set of relocation offsets to apply to each section. */ - - struct section_offsets *section_offsets; - - /* Range of text addresses covered by this file; texthigh is the - beginning of the next section. */ - - CORE_ADDR textlow; - CORE_ADDR texthigh; - - /* Array of pointers to all of the partial_symtab's which this one - depends on. Since this array can only be set to previous or - the current (?) psymtab, this dependency tree is guaranteed not - to have any loops. "depends on" means that symbols must be read - for the dependencies before being read for this psymtab; this is - for type references in stabs, where if foo.c includes foo.h, declarations - in foo.h may use type numbers defined in foo.c. For other debugging - formats there may be no need to use dependencies. */ - - struct partial_symtab **dependencies; - - int number_of_dependencies; - - /* Global symbol list. This list will be sorted after readin to - improve access. Binary search will be the usual method of - finding a symbol within it. globals_offset is an integer offset - within global_psymbols[]. */ - - int globals_offset; - int n_global_syms; - - /* Static symbol list. This list will *not* be sorted after readin; - to find a symbol in it, exhaustive search must be used. This is - reasonable because searches through this list will eventually - lead to either the read in of a files symbols for real (assumed - to take a *lot* of time; check) or an error (and we don't care - how long errors take). This is an offset and size within - static_psymbols[]. */ - - int statics_offset; - int n_static_syms; - - /* Pointer to symtab eventually allocated for this source file, 0 if - !readin or if we haven't looked for the symtab after it was readin. */ - - struct symtab *symtab; - - /* Pointer to function which will read in the symtab corresponding to - this psymtab. */ - - void (*read_symtab) (struct partial_symtab *); - - /* Information that lets read_symtab() locate the part of the symbol table - that this psymtab corresponds to. This information is private to the - format-dependent symbol reading routines. For further detail examine - the various symbol reading modules. Should really be (void *) but is - (char *) as with other such gdb variables. (FIXME) */ - - char *read_symtab_private; - - /* Non-zero if the symtab corresponding to this psymtab has been readin */ - - unsigned char readin; -}; - -/* A fast way to get from a psymtab to its symtab (after the first time). */ -#define PSYMTAB_TO_SYMTAB(pst) \ - ((pst) -> symtab != NULL ? (pst) -> symtab : psymtab_to_symtab (pst)) +#define SYMTAB_PSPACE(symtab) (symtab)->objfile->pspace /* The virtual function table is now an array of structures which have the @@ -968,7 +896,6 @@ extern struct symbol *lookup_symbol (const char *, const struct block *, that can't think of anything better to do. */ extern struct symbol *basic_lookup_symbol_nonlocal (const char *, - const char *, const struct block *, const domain_enum); @@ -979,7 +906,6 @@ extern struct symbol *basic_lookup_symbol_nonlocal (const char *, is one; do nothing if BLOCK is NULL or a global block. */ extern struct symbol *lookup_symbol_static (const char *name, - const char *linkage_name, const struct block *block, const domain_enum domain); @@ -987,7 +913,6 @@ extern struct symbol *lookup_symbol_static (const char *name, necessary). */ extern struct symbol *lookup_symbol_global (const char *name, - const char *linkage_name, const struct block *block, const domain_enum domain); @@ -996,21 +921,18 @@ extern struct symbol *lookup_symbol_global (const char *name, will fix up the symbol if necessary. */ extern struct symbol *lookup_symbol_aux_block (const char *name, - const char *linkage_name, const struct block *block, const domain_enum domain); -/* Lookup a partial symbol. */ +/* Lookup a symbol only in the file static scope of all the objfiles. */ + +struct symbol *lookup_static_symbol_aux (const char *name, + const domain_enum domain); -extern struct partial_symbol *lookup_partial_symbol (struct partial_symtab *, - const char *, - const char *, int, - domain_enum); /* lookup a symbol by name, within a specified block */ extern struct symbol *lookup_block_symbol (const struct block *, const char *, - const char *, const domain_enum); /* lookup a [struct, union, enum] by name, within a specified block */ @@ -1038,20 +960,10 @@ extern int find_pc_partial_function (CORE_ADDR, char **, CORE_ADDR *, extern void clear_pc_function_cache (void); -/* from symtab.c: */ - -/* lookup partial symbol table by filename */ - -extern struct partial_symtab *lookup_partial_symtab (const char *); - -/* lookup partial symbol table by address */ - -extern struct partial_symtab *find_pc_psymtab (CORE_ADDR); - /* lookup partial symbol table by address and section */ -extern struct partial_symtab *find_pc_sect_psymtab (CORE_ADDR, - struct obj_section *); +extern struct symtab *find_pc_sect_symtab_via_partial (CORE_ADDR, + struct obj_section *); /* lookup full symbol table by address */ @@ -1061,17 +973,6 @@ extern struct symtab *find_pc_symtab (CORE_ADDR); extern struct symtab *find_pc_sect_symtab (CORE_ADDR, struct obj_section *); -/* lookup partial symbol by address */ - -extern struct partial_symbol *find_pc_psymbol (struct partial_symtab *, - CORE_ADDR); - -/* lookup partial symbol by address and section */ - -extern struct partial_symbol *find_pc_sect_psymbol (struct partial_symtab *, - CORE_ADDR, - struct obj_section *); - extern int find_pc_line_pc_range (CORE_ADDR, CORE_ADDR *, CORE_ADDR *); extern void reread_symbols (void); @@ -1097,10 +998,15 @@ extern void prim_record_minimal_symbol (const char *, CORE_ADDR, enum minimal_symbol_type, struct objfile *); +extern struct minimal_symbol *prim_record_minimal_symbol_full + (const char *, int, int, CORE_ADDR, + enum minimal_symbol_type, + int section, asection * bfd_section, struct objfile *); + extern struct minimal_symbol *prim_record_minimal_symbol_and_info (const char *, CORE_ADDR, enum minimal_symbol_type, - char *info, int section, asection * bfd_section, struct objfile *); + int section, asection * bfd_section, struct objfile *); extern unsigned int msymbol_hash_iw (const char *); @@ -1128,6 +1034,10 @@ extern struct minimal_symbol *lookup_minimal_symbol_by_pc_name extern struct minimal_symbol *lookup_minimal_symbol_by_pc (CORE_ADDR); +extern struct minimal_symbol * + lookup_minimal_symbol_and_objfile (const char *, + struct objfile **); + extern struct minimal_symbol *lookup_minimal_symbol_by_pc_section (CORE_ADDR, struct obj_section *); @@ -1148,6 +1058,9 @@ extern void msymbols_sort (struct objfile *objfile); struct symtab_and_line { + /* The program space of this sal. */ + struct program_space *pspace; + struct symtab *symtab; struct obj_section *section; /* Line number. Line numbers start at 1 and proceed through symtab->nlines. @@ -1235,8 +1148,6 @@ extern void free_symtab (struct symtab *); /* Symbol-reading stuff in symfile.c and solib.c. */ -extern struct symtab *psymtab_to_symtab (struct partial_symtab *); - extern void clear_solib (void); /* source.c */ @@ -1249,8 +1160,12 @@ extern void forget_cached_source_info (void); extern void select_source_symtab (struct symtab *); +extern char **default_make_symbol_completion_list_break_on + (char *text, char *word, const char *break_on); extern char **default_make_symbol_completion_list (char *, char *); extern char **make_symbol_completion_list (char *, char *); +extern char **make_symbol_completion_list_fn (struct cmd_list_element *, + char *, char *); extern char **make_file_symbol_completion_list (char *, char *, char *); @@ -1260,35 +1175,32 @@ extern char **make_source_files_completion_list (char *, char *); int matching_obj_sections (struct obj_section *, struct obj_section *); -extern struct partial_symtab *find_main_psymtab (void); +extern const char *find_main_filename (void); extern struct symtab *find_line_symtab (struct symtab *, int, int *, int *); -extern CORE_ADDR find_function_start_pc (struct gdbarch *, - CORE_ADDR, struct obj_section *); - extern struct symtab_and_line find_function_start_sal (struct symbol *sym, int); +extern void skip_prologue_sal (struct symtab_and_line *); + /* symfile.c */ -extern void clear_symtab_users (void); +extern void clear_symtab_users (int add_flags); -extern enum language deduce_language_from_filename (char *); +extern enum language deduce_language_from_filename (const char *); /* symtab.c */ -extern int in_prologue (CORE_ADDR pc, CORE_ADDR func_start); +extern int in_prologue (struct gdbarch *gdbarch, + CORE_ADDR pc, CORE_ADDR func_start); -extern CORE_ADDR skip_prologue_using_sal (CORE_ADDR func_addr); +extern CORE_ADDR skip_prologue_using_sal (struct gdbarch *gdbarch, + CORE_ADDR func_addr); extern struct symbol *fixup_symbol_section (struct symbol *, struct objfile *); -extern struct partial_symbol *fixup_psymbol_section (struct partial_symbol - *psym, - struct objfile *objfile); - /* Symbol searching */ /* When using search_symbols, a list of the following structs is returned. @@ -1326,14 +1238,22 @@ extern struct cleanup *make_cleanup_free_search_symbols (struct symbol_search const. */ extern void set_main_name (const char *name); extern /*const */ char *main_name (void); +extern enum language language_of_main; /* Check global symbols in objfile. */ struct symbol *lookup_global_symbol_from_objfile (const struct objfile *objfile, const char *name, - const char *linkage_name, const domain_enum domain); -extern struct symtabs_and_lines -expand_line_sal (struct symtab_and_line sal); +extern struct symtabs_and_lines expand_line_sal (struct symtab_and_line sal); + +/* Return 1 if the supplied producer string matches the ARM RealView + compiler (armcc). */ +int producer_is_realview (const char *producer); + +void fixup_section (struct general_symbol_info *ginfo, + CORE_ADDR addr, struct objfile *objfile); + +struct objfile *lookup_objfile_from_block (const struct block *block); #endif /* !defined(SYMTAB_H) */