From patchwork Wed May 23 04:58:47 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 27450 Received: (qmail 100973 invoked by alias); 23 May 2018 06:16:20 -0000 Mailing-List: contact gdb-patches-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: gdb-patches-owner@sourceware.org Delivered-To: mailing list gdb-patches@sourceware.org Received: (qmail 100154 invoked by uid 89); 23 May 2018 06:15:25 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS, TIME_LIMIT_EXCEEDED autolearn=unavailable version=3.3.2 spammy=Secret X-HELO: gateway22.websitewelcome.com Received: from gateway22.websitewelcome.com (HELO gateway22.websitewelcome.com) (192.185.47.100) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 23 May 2018 06:15:07 +0000 Received: from cm17.websitewelcome.com (cm17.websitewelcome.com [100.42.49.20]) by gateway22.websitewelcome.com (Postfix) with ESMTP id 50C96E924 for ; Wed, 23 May 2018 01:15:06 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id LN3CfsTgNPvAdLN3Cf7tcd; Wed, 23 May 2018 01:15:06 -0500 X-Authority-Reason: nr=8 Received: from 174-29-44-154.hlrn.qwest.net ([174.29.44.154]:56108 helo=bapiya.Home) by box5379.bluehost.com with esmtpsa (TLSv1.2:ECDHE-RSA-AES256-GCM-SHA384:256) (Exim 4.89_1) (envelope-from ) id 1fLLrj-003S5D-IX; Tue, 22 May 2018 23:59:11 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA 38/42] Introduce legacy-buildsym.h Date: Tue, 22 May 2018 22:58:47 -0600 Message-Id: <20180523045851.11660-39-tom@tromey.com> In-Reply-To: <20180523045851.11660-1-tom@tromey.com> References: <20180523045851.11660-1-tom@tromey.com> X-BWhitelist: no X-Source-L: No X-Exim-ID: 1fLLrj-003S5D-IX X-Source-Sender: 174-29-44-154.hlrn.qwest.net (bapiya.Home) [174.29.44.154]:56108 X-Source-Auth: tom+tromey.com X-Email-Count: 1 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes 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 * 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 . */ -/* 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 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 . */ + +#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 -#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"