X-Git-Url: http://drtracing.org/?a=blobdiff_plain;f=gdb%2Fsymtab.h;h=ea393261499c405a88bda34de4aa71df1d08e448;hb=b57a636e4b4d23ba89c9d18118ed231500b0de06;hp=8ee187e0eb89c839c39a06bb0b37e22f02d5a4cd;hpb=422d65e705c7d6842497a01208ee5668b61cc0ca;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/symtab.h b/gdb/symtab.h index 8ee187e0eb..ea39326149 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -23,6 +23,7 @@ #include "vec.h" #include "gdb_vecs.h" +#include "gdbtypes.h" /* Opaque declarations. */ struct ui_file; @@ -37,6 +38,7 @@ struct agent_expr; struct program_space; struct language_defn; struct probe; +struct common_block; /* Some of the structures in this file are space critical. The space-critical structures are: @@ -119,6 +121,10 @@ struct general_symbol_info CORE_ADDR address; + /* A common block. Used with COMMON_BLOCK_DOMAIN. */ + + struct common_block *common_block; + /* For opaque typedef struct chain. */ struct symbol *chain; @@ -181,6 +187,7 @@ extern CORE_ADDR symbol_overlayed_address (CORE_ADDR, struct obj_section *); #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_VALUE_COMMON_BLOCK(symbol) (symbol)->ginfo.value.common_block #define SYMBOL_BLOCK_VALUE(symbol) (symbol)->ginfo.value.block #define SYMBOL_VALUE_CHAIN(symbol) (symbol)->ginfo.value.chain #define SYMBOL_LANGUAGE(symbol) (symbol)->ginfo.language @@ -348,6 +355,11 @@ struct minimal_symbol unsigned int target_flag_1 : 1; unsigned int target_flag_2 : 1; + /* Nonzero iff the size of the minimal symbol has been set. + Symbol size information can sometimes not be determined, because + the object file format may not carry that piece of information. */ + unsigned int has_size : 1; + /* Minimal symbols with the same hash key are kept on a linked list. This is the link. */ @@ -361,7 +373,14 @@ struct minimal_symbol #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_SIZE(msymbol) ((msymbol)->size + 0) +#define SET_MSYMBOL_SIZE(msymbol, sz) \ + do \ + { \ + (msymbol)->size = sz; \ + (msymbol)->has_size = 1; \ + } while (0) +#define MSYMBOL_HAS_SIZE(msymbol) ((msymbol)->has_size + 0) #define MSYMBOL_TYPE(msymbol) (msymbol)->type #include "minsyms.h" @@ -394,7 +413,10 @@ typedef enum domain_enum_tag /* LABEL_DOMAIN may be used for names of labels (for gotos). */ - LABEL_DOMAIN + LABEL_DOMAIN, + + /* Fortran common blocks. Their naming must be separate from VAR_DOMAIN. */ + COMMON_BLOCK_DOMAIN } domain_enum; /* Searching domains, used for `search_symbols'. Element numbers are @@ -897,19 +919,42 @@ int symbol_matches_domain (enum language symbol_language, extern struct symtab *lookup_symtab (const char *); +/* An object of this type is passed as the 'is_a_field_of_this' + argument to lookup_symbol and lookup_symbol_in_language. */ + +struct field_of_this_result +{ + /* The type in which the field was found. If this is NULL then the + symbol was not found in 'this'. If non-NULL, then one of the + other fields will be non-NULL as well. */ + + struct type *type; + + /* If the symbol was found as an ordinary field of 'this', then this + is non-NULL and points to the particular field. */ + + struct field *field; + + /* If the symbol was found as an function field of 'this', then this + is non-NULL and points to the particular field. */ + + struct fn_fieldlist *fn_field; +}; + /* lookup a symbol by name (optional block) in language. */ extern struct symbol *lookup_symbol_in_language (const char *, const struct block *, const domain_enum, enum language, - int *); + struct field_of_this_result *); /* lookup a symbol by name (optional block, optional symtab) in the current language. */ extern struct symbol *lookup_symbol (const char *, const struct block *, - const domain_enum, int *); + const domain_enum, + struct field_of_this_result *); /* A default version of lookup_symbol_nonlocal for use by languages that can't think of anything better to do. */ @@ -959,11 +1004,11 @@ extern struct symbol *lookup_block_symbol (const struct block *, const char *, /* lookup a [struct, union, enum] by name, within a specified block. */ -extern struct type *lookup_struct (const char *, struct block *); +extern struct type *lookup_struct (const char *, const struct block *); -extern struct type *lookup_union (const char *, struct block *); +extern struct type *lookup_union (const char *, const struct block *); -extern struct type *lookup_enum (const char *, struct block *); +extern struct type *lookup_enum (const char *, const struct block *); /* from blockframe.c: */ @@ -1113,13 +1158,6 @@ extern int find_line_pc_range (struct symtab_and_line, CORE_ADDR *, extern void resolve_sal_pc (struct symtab_and_line *); -/* Given a string, return the line specified by it. For commands like "list" - and "breakpoint". */ - -extern struct symtabs_and_lines decode_line_spec (char *, int); - -extern struct symtabs_and_lines decode_line_spec_1 (char *, int); - /* Symmisc.c */ void maintenance_print_symbols (char *, int); @@ -1148,7 +1186,19 @@ extern void clear_solib (void); extern int identify_source_line (struct symtab *, int, int, CORE_ADDR); -extern void print_source_lines (struct symtab *, int, int, int); +/* Flags passed as 4th argument to print_source_lines. */ + +enum print_source_lines_flags + { + /* Do not print an error message. */ + PRINT_SOURCE_LINES_NOERROR = (1 << 0), + + /* Print the filename in front of the source lines. */ + PRINT_SOURCE_LINES_FILENAME = (1 << 1) + }; + +extern void print_source_lines (struct symtab *, int, int, + enum print_source_lines_flags); extern void forget_cached_source_info_for_objfile (struct objfile *); extern void forget_cached_source_info (void); @@ -1156,9 +1206,13 @@ extern void forget_cached_source_info (void); extern void select_source_symtab (struct symtab *); extern VEC (char_ptr) *default_make_symbol_completion_list_break_on - (char *text, char *word, const char *break_on); -extern VEC (char_ptr) *default_make_symbol_completion_list (char *, char *); + (char *text, char *word, const char *break_on, + enum type_code code); +extern VEC (char_ptr) *default_make_symbol_completion_list (char *, char *, + enum type_code); extern VEC (char_ptr) *make_symbol_completion_list (char *, char *); +extern VEC (char_ptr) *make_symbol_completion_type (char *, char *, + enum type_code); extern VEC (char_ptr) *make_symbol_completion_list_fn (struct cmd_list_element *, char *, char *); @@ -1250,11 +1304,12 @@ void fixup_section (struct general_symbol_info *ginfo, struct objfile *lookup_objfile_from_block (const struct block *block); +extern int symtab_create_debug; + extern int basenames_may_differ; int compare_filenames_for_search (const char *filename, - const char *search_name, - int search_len); + const char *search_name); int iterate_over_some_symtabs (const char *name, const char *full_path,