[RFA 38/42] Introduce legacy-buildsym.h

Tom Tromey
2018-05-23T06:16:20Z

This introduces a new header, legacy-buildsym.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 legacy-buildsym.h, so it's easy
to be sure that the new API is used everywhere.

gdb/ChangeLog
2018-05-22 Tom Tromey <tom@tromey.com>

* xcoffread.c: Include legacy-buildsym.h.
* windows-nat.c: Include legacy-buildsym.h.
* stabsread.c: Include legacy-buildsym.h.
* mdebugread.c: Include legacy-buildsym.h.
* legacy-buildsym.h: New file.
* go32-nat.c: Include legacy-buildsym.h.
* dwarf2read.c: Include legacy-buildsym.h.
* dbxread.c: Include legacy-buildsym.h.
* cp-namespace.c: Include legacy-buildsym.h.
* coffread.c: Include legacy-buildsym.h.
* buildsym.h: Move some contents to legacy-buildsym.h.
* buildsym.c: Include legacy-buildsym.h.
* Makefile.in (HFILES_NO_SRCDIR): Add legacy-buildsym.h.
---
gdb/ChangeLog | 16 ++++
gdb/Makefile.in | 1 +
gdb/buildsym.c | 47 +----------
gdb/buildsym.h | 142 ----------------------------------
gdb/coffread.c | 2 +-
gdb/cp-namespace.c | 2 +-
gdb/dbxread.c | 2 +-
gdb/dwarf2read.c | 2 +-
gdb/go32-nat.c | 2 +-
gdb/legacy-buildsym.h | 210 ++++++++++++++++++++++++++++++++++++++++++++++++++
gdb/mdebugread.c | 2 +-
gdb/stabsread.c | 2 +-
gdb/windows-nat.c | 2 +-
gdb/xcoffread.c | 2 +-
14 files changed, 237 insertions(+), 197 deletions(-)
create mode 100644 gdb/legacy-buildsym.h

diff --git a/gdb/Makefile.in b/gdb/Makefile.in
index 09a2ad2ca3..ac1031ca58 100644
--- a/gdb/Makefile.in
+++ b/gdb/Makefile.in
@@ -1282,6 +1282,7 @@ HFILES_NO_SRCDIR = \
interps.h \
jit.h \
language.h \
+ legacy-buildsym.h \
linespec.h \
linux-fork.h \
linux-nat.h \
diff --git a/gdb/buildsym.c b/gdb/buildsym.c
index 2f4b0c79ef..3e3170f0ee 100644
--- a/gdb/buildsym.c
+++ b/gdb/buildsym.c
@@ -16,53 +16,8 @@
You should have received a copy of the GNU General Public License
along with this program. If not, see <http://www.gnu.org/licenses/>. */

-/* This module provides subroutines used for creating and adding to
- the symbol table. These routines are called from various symbol-
- file-reading routines.
-
- Routines to support specific debugging information formats (stabs,
- DWARF, etc) belong somewhere else.
-
- 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 ...
-*/
-
#include "defs.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "bfd.h"
#include "gdb_obstack.h"
#include "symtab.h"
diff --git a/gdb/buildsym.h b/gdb/buildsym.h
index a089623fa2..05b80f5cb7 100644
--- a/gdb/buildsym.h
+++ b/gdb/buildsym.h
@@ -411,146 +411,4 @@ extern void add_symbol_to_list (struct symbol *symbol,
extern struct symbol *find_symbol_in_list (struct pending *list,
char *name, int length);

-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);
-
-class scoped_free_pendings
-{
-public:
-
- scoped_free_pendings ();
- ~scoped_free_pendings ();
-
- DISABLE_COPY_AND_ASSIGN (scoped_free_pendings);
-};
-
-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 (void);
-
-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 ();
-
-/* Non-zero if the context stack is empty. */
-
-extern bool outermost_context_p ();
-
-/* Return the top of the context stack, or nullptr if there is
- 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 (BUILDSYM_H) */
diff --git a/gdb/coffread.c b/gdb/coffread.c
index 3bb6639914..f44b2180f7 100644
--- a/gdb/coffread.c
+++ b/gdb/coffread.c
@@ -30,7 +30,7 @@
#include "coff/internal.h" /* Internal format of COFF symbols in BFD */
#include "libcoff.h" /* FIXME secret internal data from BFD */
#include "objfiles.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "gdb-stabs.h"
#include "stabsread.h"
#include "complaints.h"
diff --git a/gdb/cp-namespace.c b/gdb/cp-namespace.c
index 22b7af00d6..41affca3a8 100644
--- a/gdb/cp-namespace.c
+++ b/gdb/cp-namespace.c
@@ -29,7 +29,7 @@
#include "dictionary.h"
#include "command.h"
#include "frame.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "language.h"
#include "namespace.h"
#include <string>
diff --git a/gdb/dbxread.c b/gdb/dbxread.c
index d660157a61..52d19310cb 100644
--- a/gdb/dbxread.c
+++ b/gdb/dbxread.c
@@ -45,7 +45,7 @@
#include "libaout.h" /* FIXME Secret internal BFD stuff for a.out */
#include "filenames.h"
#include "objfiles.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "stabsread.h"
#include "gdb-stabs.h"
#include "demangle.h"
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 9753a5b57d..75a121073c 100644
--- a/gdb/dwarf2read.c
+++ b/gdb/dwarf2read.c
@@ -37,7 +37,7 @@
#include "gdbtypes.h"
#include "objfiles.h"
#include "dwarf2.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "demangle.h"
#include "gdb-demangle.h"
#include "expression.h"
diff --git a/gdb/go32-nat.c b/gdb/go32-nat.c
index 980180b23a..9796d15f0e 100644
--- a/gdb/go32-nat.c
+++ b/gdb/go32-nat.c
@@ -94,7 +94,7 @@
#include "command.h"
#include "gdbcmd.h"
#include "floatformat.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "i387-tdep.h"
#include "i386-tdep.h"
#include "nat/x86-cpuid.h"
diff --git a/gdb/legacy-buildsym.h b/gdb/legacy-buildsym.h
new file mode 100644
index 0000000000..66a3ea8cd0
--- /dev/null
+++ b/gdb/legacy-buildsym.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 ();
+ ~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 (void);
+
+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 ();
+
+/* Non-zero if the context stack is empty. */
+
+extern bool outermost_context_p ();
+
+/* Return the top of the context stack, or nullptr if there is
+ 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) */
diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c
index 466e36599b..bebefcb724 100644
--- a/gdb/mdebugread.c
+++ b/gdb/mdebugread.c
@@ -46,7 +46,7 @@
#include "filenames.h"
#include "objfiles.h"
#include "gdb_obstack.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "stabsread.h"
#include "complaints.h"
#include "demangle.h"
diff --git a/gdb/stabsread.c b/gdb/stabsread.c
index ebb844d2c5..62221d03cf 100644
--- a/gdb/stabsread.c
+++ b/gdb/stabsread.c
@@ -36,7 +36,7 @@
#include "libaout.h"
#include "aout/aout64.h"
#include "gdb-stabs.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "complaints.h"
#include "demangle.h"
#include "gdb-demangle.h"
diff --git a/gdb/windows-nat.c b/gdb/windows-nat.c
index 16ebd17607..f706b1db39 100644
--- a/gdb/windows-nat.c
+++ b/gdb/windows-nat.c
@@ -44,7 +44,7 @@
#endif
#include <algorithm>

-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "filenames.h"
#include "symfile.h"
#include "objfiles.h"
diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c
index 6b561a82b3..92d6934af7 100644
--- a/gdb/xcoffread.c
+++ b/gdb/xcoffread.c
@@ -41,7 +41,7 @@
/* FIXME: ezannoni/2004-02-13 Verify if the include below is really needed. */
#include "symfile.h"
#include "objfiles.h"
-#include "buildsym.h"
+#include "legacy-buildsym.h"
#include "stabsread.h"
#include "expression.h"
#include "complaints.h"
--
2.13.6