- /* Include file for stabs debugging format support functions.
- Copyright (C) 1986-2015 Free Software Foundation, Inc.
- This file is part of GDB.
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 3 of the License, or
- (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- 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, see <http://www.gnu.org/licenses/>. */
- struct objfile;
- /* Definitions, prototypes, etc for stabs debugging format support
- functions.
- Variables declared in this file can be defined by #define-ing
- the name EXTERN to null. It is used to declare variables that
- are normally extern, but which get defined in a single module
- using this technique. */
- #ifndef EXTERN
- #define EXTERN extern
- #endif
- /* Hash table of global symbols whose values are not known yet.
- They are chained thru the SYMBOL_VALUE_CHAIN, since we don't
- have the correct data for that slot yet.
- The use of the LOC_BLOCK code in this chain is nonstandard--
- it refers to a FORTRAN common block rather than the usual meaning, and
- the such LOC_BLOCK symbols use their fields in nonstandard ways. */
- EXTERN struct symbol *global_sym_chain[HASHSIZE];
- extern void common_block_start (char *, struct objfile *);
- extern void common_block_end (struct objfile *);
- /* Kludge for xcoffread.c */
- struct pending_stabs
- {
- int count;
- int length;
- char *stab[1];
- };
- EXTERN struct pending_stabs *global_stabs;
- /* The type code that process_one_symbol saw on its previous invocation.
- Used to detect pairs of N_SO symbols. */
- EXTERN int previous_stab_code;
- /* Support for Sun changes to dbx symbol format. */
- /* For each identified header file, we have a table of types defined
- in that header file.
- header_files maps header file names to their type tables.
- It is a vector of n_header_files elements.
- Each element describes one header file.
- It contains a vector of types.
- Sometimes it can happen that the same header file produces
- different results when included in different places.
- This can result from conditionals or from different
- things done before including the file.
- When this happens, there are multiple entries for the file in this table,
- one entry for each distinct set of results.
- The entries are distinguished by the INSTANCE field.
- The INSTANCE field appears in the N_BINCL and N_EXCL symbol table and is
- used to match header-file references to their corresponding data. */
- struct header_file
- {
- /* Name of header file */
- char *name;
- /* Numeric code distinguishing instances of one header file that
- produced different results when included. It comes from the
- N_BINCL or N_EXCL. */
- int instance;
- /* Pointer to vector of types */
- struct type **vector;
- /* Allocated length (# elts) of that vector */
- int length;
- };
- /* The table of header_files of this OBJFILE. */
- #define HEADER_FILES(OBJFILE) (DBX_SYMFILE_INFO (OBJFILE)->header_files)
- /* The actual length of HEADER_FILES. */
- #define N_HEADER_FILES(OBJFILE) (DBX_SYMFILE_INFO (OBJFILE)->n_header_files)
- /* The allocated lengh of HEADER_FILES. */
- #define N_ALLOCATED_HEADER_FILES(OBJFILE) \
- (DBX_SYMFILE_INFO (OBJFILE)->n_allocated_header_files)
- /* Within each object file, various header files are assigned numbers.
- A type is defined or referred to with a pair of numbers
- (FILENUM,TYPENUM) where FILENUM is the number of the header file
- and TYPENUM is the number within that header file.
- TYPENUM is the index within the vector of types for that header file.
- FILENUM == 0 is special; it refers to the main source of the object file,
- and not to any header file. FILENUM != 1 is interpreted by looking it up
- in the following table, which contains indices in header_files. */
- EXTERN int *this_object_header_files;
- EXTERN int n_this_object_header_files;
- EXTERN int n_allocated_this_object_header_files;
- extern void cleanup_undefined_stabs_types (struct objfile *);
- extern long read_number (char **, int);
- extern struct symbol *define_symbol (CORE_ADDR, char *, int, int,
- struct objfile *);
- extern void stabsread_init (void);
- extern void stabsread_new_init (void);
- extern void start_stabs (void);
- extern void end_stabs (void);
- extern void finish_global_stabs (struct objfile *objfile);
- /* COFF files can have multiple .stab sections, if they are linked
- using --split-by-reloc. This linked list is used to pass the
- information into the functions in dbxread.c. */
- struct stab_section_list
- {
- /* Next in list. */
- struct stab_section_list *next;
- /* Stab section. */
- asection *section;
- };
- /* Functions exported by dbxread.c. These are not in stabsread.c because
- they are only used by some stabs readers. */
- extern struct partial_symtab *end_psymtab (struct objfile *objfile,
- struct partial_symtab *pst,
- const char **include_list,
- int num_includes,
- int capping_symbol_offset,
- CORE_ADDR capping_text,
- struct partial_symtab
- **dependency_list,
- int number_dependencies,
- int textlow_not_set);
- extern void process_one_symbol (int, int, CORE_ADDR, char *,
- const struct section_offsets *,
- struct objfile *);
- extern void elfstab_build_psymtabs (struct objfile *objfile,
- asection *stabsect,
- file_ptr stabstroffset,
- unsigned int stabstrsize);
- extern void coffstab_build_psymtabs
- (struct objfile *objfile,
- CORE_ADDR textaddr, unsigned int textsize,
- struct stab_section_list *stabs,
- file_ptr stabstroffset, unsigned int stabstrsize);
- extern void stabsect_build_psymtabs (struct objfile *objfile, char *stab_name,
- char *stabstr_name, char *text_name);
- extern void elfstab_offset_sections (struct objfile *,
- struct partial_symtab *);
- extern int symbol_reference_defined (char **);
- extern void ref_add (int, struct symbol *, char *, CORE_ADDR);
- extern struct symbol *ref_search (int);
- extern void free_header_files (void);
- extern void init_header_files (void);
- #undef EXTERN