diff options
author | Tom Tromey <tom@tromey.com> | 2018-05-22 14:39:24 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-07-20 09:42:53 -0600 |
commit | 0baae8dbd38534c0f3dcedc7b9204bbc8f18de1b (patch) | |
tree | 177d401b531eb4a32c230f11c58e39de2dff3fd5 /gdb/buildsym-legacy.h | |
parent | ab209f6fa9dbaf0d3d0c42e2a8f14bf3ff7dfce8 (diff) | |
download | gdb-0baae8dbd38534c0f3dcedc7b9204bbc8f18de1b.zip gdb-0baae8dbd38534c0f3dcedc7b9204bbc8f18de1b.tar.gz gdb-0baae8dbd38534c0f3dcedc7b9204bbc8f18de1b.tar.bz2 |
Introduce buildsym-legacy.h
This introduces a new header, buildsym-legacy.h, and changes all the
symbol readers to use it. The idea is to put the function-based
interface, that relies on the buildsym_compunit global, into a
separate header. Then when a symbol reader is updated to use the new
interface, it can simply not include buildsym-legacy.h, so it's easy
to be sure that the new API is used everywhere.
gdb/ChangeLog
2018-07-20 Tom Tromey <tom@tromey.com>
* xcoffread.c: Include buildsym-legacy.h.
* windows-nat.c: Include buildsym-legacy.h.
* stabsread.c: Include buildsym-legacy.h.
* mdebugread.c: Include buildsym-legacy.h.
* buildsym-legacy.h: New file.
* buildsym-legacy.c: New file, from buildsym.c.
* go32-nat.c: Include buildsym-legacy.h.
* dwarf2read.c: Include buildsym-legacy.h.
* dbxread.c: Include buildsym-legacy.h.
* cp-namespace.c: Include buildsym-legacy.h.
* coffread.c: Include buildsym-legacy.h.
* buildsym.h: Move some contents to buildsym-legacy.h.
* buildsym.c: Include buildsym-legacy.h. Move many functions to
buildsym-legacy.c.
* Makefile.in (HFILES_NO_SRCDIR): Add buildsym-legacy.h.
Diffstat (limited to 'gdb/buildsym-legacy.h')
-rw-r--r-- | gdb/buildsym-legacy.h | 210 |
1 files changed, 210 insertions, 0 deletions
diff --git a/gdb/buildsym-legacy.h b/gdb/buildsym-legacy.h new file mode 100644 index 0000000..78a5644 --- /dev/null +++ b/gdb/buildsym-legacy.h @@ -0,0 +1,210 @@ +/* Build symbol tables in GDB's internal format - legacy APIs + Copyright (C) 1986-2018 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/>. */ + +#if !defined (LEGACY_BUILDSYM_H) +#define LEGACY_BUILDSYM_H 1 + +#include "buildsym.h" + +/* This module provides definitions used for creating and adding to + the symbol table. These routines are called from various symbol- + file-reading routines. This file holds the legacy API, which + relies on a global variable to work properly. New or maintained + symbol readers should use the builder API in buildsym.h. + + The basic way this module is used is as follows: + + scoped_free_pendings free_pending; + cust = start_symtab (...); + ... read debug info ... + cust = end_symtab (...); + + The compunit symtab pointer ("cust") is returned from both start_symtab + and end_symtab to simplify the debug info readers. + + There are minor variations on this, e.g., dwarf2read.c splits end_symtab + into two calls: end_symtab_get_static_block, end_symtab_from_static_block, + but all debug info readers follow this basic flow. + + Reading DWARF Type Units is another variation: + + scoped_free_pendings free_pending; + cust = start_symtab (...); + ... read debug info ... + cust = end_expandable_symtab (...); + + And then reading subsequent Type Units within the containing "Comp Unit" + will use a second flow: + + scoped_free_pendings free_pending; + cust = restart_symtab (...); + ... read debug info ... + cust = augment_type_symtab (...); + + dbxread.c and xcoffread.c use another variation: + + scoped_free_pendings free_pending; + cust = start_symtab (...); + ... read debug info ... + cust = end_symtab (...); + ... start_symtab + read + end_symtab repeated ... +*/ + +class scoped_free_pendings +{ +public: + + scoped_free_pendings () = default; + ~scoped_free_pendings (); + + DISABLE_COPY_AND_ASSIGN (scoped_free_pendings); +}; + +extern struct block *finish_block (struct symbol *symbol, + struct pending_block *old_blocks, + const struct dynamic_prop *static_link, + CORE_ADDR start, + CORE_ADDR end); + +extern void record_block_range (struct block *, + CORE_ADDR start, CORE_ADDR end_inclusive); + +extern void start_subfile (const char *name); + +extern void patch_subfile_names (struct subfile *subfile, const char *name); + +extern void push_subfile (); + +extern const char *pop_subfile (); + +extern struct block *end_symtab_get_static_block (CORE_ADDR end_addr, + int expandable, + int required); + +extern struct compunit_symtab * + end_symtab_from_static_block (struct block *static_block, + int section, int expandable); + +extern struct compunit_symtab *end_symtab (CORE_ADDR end_addr, int section); + +extern struct compunit_symtab *end_expandable_symtab (CORE_ADDR end_addr, + int section); + +extern void augment_type_symtab (void); + +extern struct context_stack *push_context (int desc, CORE_ADDR valu); + +extern struct context_stack pop_context (); + +extern record_line_ftype record_line; + +extern struct compunit_symtab *start_symtab (struct objfile *objfile, + const char *name, + const char *comp_dir, + CORE_ADDR start_addr, + enum language language); + +extern void restart_symtab (struct compunit_symtab *cust, + const char *name, CORE_ADDR start_addr); + +/* Record the name of the debug format in the current pending symbol + table. FORMAT must be a string with a lifetime at least as long as + the symtab's objfile. */ + +extern void record_debugformat (const char *format); + +/* Record the name of the debuginfo producer (usually the compiler) in + the current pending symbol table. PRODUCER must be a string with a + lifetime at least as long as the symtab's objfile. */ + +extern void record_producer (const char *producer); + +/* Set the name of the last source file. NAME is copied by this + function. */ + +extern void set_last_source_file (const char *name); + +/* Fetch the name of the last source file. */ + +extern const char *get_last_source_file (void); + +/* Return the compunit symtab object. + It is only valid to call this between calls to start_symtab and the + end_symtab* functions. */ + +extern struct compunit_symtab *buildsym_compunit_symtab (void); + +/* Return the macro table. + Initialize it if this is the first use. + It is only valid to call this between calls to start_symtab and the + end_symtab* functions. */ + +extern struct macro_table *get_macro_table (void); + +/* Set the last source start address. Can only be used between + start_symtab and end_symtab* calls. */ + +extern void set_last_source_start_addr (CORE_ADDR addr); + +/* Get the last source start address. Can only be used between + start_symtab and end_symtab* calls. */ + +extern CORE_ADDR get_last_source_start_addr (); + +/* Return the local using directives. */ + +extern struct using_direct **get_local_using_directives (); + +/* Set the list of local using directives. */ + +extern void set_local_using_directives (struct using_direct *new_local); + +/* Return the global using directives. */ + +extern struct using_direct **get_global_using_directives (); + +/* True if the context stack is empty. */ + +extern bool outermost_context_p (); + +/* Return the top of the context stack, or nullptr if there is an + entry. */ + +extern struct context_stack *get_current_context_stack (); + +/* Return the context stack depth. */ + +extern int get_context_stack_depth (); + +/* Return the current subfile. */ + +extern struct subfile *get_current_subfile (); + +/* Return the local symbol list. */ + +extern struct pending **get_local_symbols (); + +/* Return the file symbol list. */ + +extern struct pending **get_file_symbols (); + +/* Return the global symbol list. */ + +extern struct pending **get_global_symbols (); + +#endif /* defined (LEGACY_BUILDSYM_H) */ |