#include "vec.h"
#include "gdb_vecs.h"
+#include "gdbtypes.h"
/* Opaque declarations. */
struct ui_file;
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:
CORE_ADDR address;
+ /* A common block. Used with COMMON_BLOCK_DOMAIN. */
+
+ struct common_block *common_block;
+
/* For opaque typedef struct chain. */
struct symbol *chain;
#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
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. */
#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"
/* 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
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. */
/* 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: */
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);
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);
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 *);
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,