From patchwork Wed May 23 04:58:16 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 27421 Received: (qmail 113648 invoked by alias); 23 May 2018 04:59:10 -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 113291 invoked by uid 89); 23 May 2018 04:59:04 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.2 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, SPF_HELO_PASS autolearn=ham version=3.3.2 spammy=luckily X-HELO: gateway31.websitewelcome.com Received: from gateway31.websitewelcome.com (HELO gateway31.websitewelcome.com) (192.185.143.47) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Wed, 23 May 2018 04:59:01 +0000 Received: from cm15.websitewelcome.com (cm15.websitewelcome.com [100.42.49.9]) by gateway31.websitewelcome.com (Postfix) with ESMTP id 965FE7E for ; Tue, 22 May 2018 23:59:00 -0500 (CDT) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with SMTP id LLrYfGDJHbXuJLLrYfXsU9; Tue, 22 May 2018 23:59:00 -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 1fLLrY-003S5D-CL; Tue, 22 May 2018 23:59:00 -0500 From: Tom Tromey To: gdb-patches@sourceware.org Cc: Tom Tromey Subject: [RFA 07/42] Move last_source_start_addr to buildsym_compunit Date: Tue, 22 May 2018 22:58:16 -0600 Message-Id: <20180523045851.11660-8-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: 1fLLrY-003S5D-CL 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: 8 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes This moves the global last_source_start_addr into buildsym_compunit, adding some accessors as well. gdb/ChangeLog 2018-05-22 Tom Tromey * xcoffread.c (aix_process_linenos, complete_symtab): Update. * dbxread.c (read_ofile_symtab): Update. * coffread.c (coff_start_symtab, coff_end_symtab): Update. * buildsym.h (last_source_start_addr): Remove. (set_last_source_start_addr, get_last_source_start_addr): Declare. * buildsym.c (buildsym_compunit::buildsym_compunit): Add last_addr parameter. (struct buildsym_compunit) : New member. (prepare_for_building): Remove start_addr parameter. (start_symtab, restart_symtab, end_symtab_get_static_block) (end_symtab_with_blockvector): Update. (set_last_source_start_addr, get_last_source_start_addr): New functions. --- gdb/ChangeLog | 18 ++++++++++++++++++ gdb/buildsym.c | 48 ++++++++++++++++++++++++++++++++++++------------ gdb/buildsym.h | 16 ++++++++++------ gdb/coffread.c | 6 +++--- gdb/dbxread.c | 8 ++++---- gdb/xcoffread.c | 4 ++-- 6 files changed, 73 insertions(+), 27 deletions(-) diff --git a/gdb/buildsym.c b/gdb/buildsym.c index d0dfa4cd02..583c294790 100644 --- a/gdb/buildsym.c +++ b/gdb/buildsym.c @@ -106,11 +106,13 @@ struct buildsym_compunit (or NULL if not known). */ buildsym_compunit (struct objfile *objfile_, const char *name, - const char *comp_dir_, enum language language_) + const char *comp_dir_, enum language language_, + CORE_ADDR last_addr) : objfile (objfile_), m_last_source_file (name == nullptr ? nullptr : xstrdup (name)), comp_dir (comp_dir_ == nullptr ? nullptr : xstrdup (comp_dir_)), - language (language_) + language (language_), + m_last_source_start_addr (last_addr) { } @@ -196,6 +198,11 @@ struct buildsym_compunit /* True if symtab has line number info. This prevents an otherwise empty symtab from being tossed. */ bool m_have_line_numbers = false; + + /* Core address of start of text of current source file. This too + comes from the N_SO symbol. For Dwarf it typically comes from the + DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE. */ + CORE_ADDR m_last_source_start_addr; }; /* The work-in-progress of the compunit we are building. @@ -1022,10 +1029,8 @@ get_macro_table (void) buildsym_init. */ static void -prepare_for_building (CORE_ADDR start_addr) +prepare_for_building () { - last_source_start_addr = start_addr; - local_symbols = NULL; local_using_directives = NULL; within_function = 0; @@ -1058,10 +1063,10 @@ struct compunit_symtab * start_symtab (struct objfile *objfile, const char *name, const char *comp_dir, CORE_ADDR start_addr, enum language language) { - prepare_for_building (start_addr); + prepare_for_building (); buildsym_compunit = new struct buildsym_compunit (objfile, name, comp_dir, - language); + language, start_addr); /* Allocate the compunit symtab now. The caller needs it to allocate non-primary symtabs. It is also needed by get_macro_table. */ @@ -1095,13 +1100,14 @@ void restart_symtab (struct compunit_symtab *cust, const char *name, CORE_ADDR start_addr) { - prepare_for_building (start_addr); + prepare_for_building (); buildsym_compunit = new struct buildsym_compunit (COMPUNIT_OBJFILE (cust), name, COMPUNIT_DIRNAME (cust), - compunit_language (cust)); + compunit_language (cust), + start_addr); buildsym_compunit->compunit_symtab = cust; } @@ -1297,8 +1303,8 @@ end_symtab_get_static_block (CORE_ADDR end_addr, int expandable, int required) { /* Define the STATIC_BLOCK. */ return finish_block_internal (NULL, &file_symbols, NULL, NULL, - last_source_start_addr, end_addr, - 0, expandable); + buildsym_compunit->m_last_source_start_addr, + end_addr, 0, expandable); } } @@ -1325,7 +1331,7 @@ end_symtab_with_blockvector (struct block *static_block, /* Create the GLOBAL_BLOCK and build the blockvector. */ finish_block_internal (NULL, &global_symbols, NULL, NULL, - last_source_start_addr, end_addr, + buildsym_compunit->m_last_source_start_addr, end_addr, 1, expandable); blockvector = make_blockvector (); @@ -1735,6 +1741,24 @@ get_last_source_file (void) return buildsym_compunit->m_last_source_file.get (); } +/* See buildsym.h. */ + +void +set_last_source_start_addr (CORE_ADDR addr) +{ + gdb_assert (buildsym_compunit != nullptr); + buildsym_compunit->m_last_source_start_addr = addr; +} + +/* See buildsym.h. */ + +CORE_ADDR +get_last_source_start_addr () +{ + gdb_assert (buildsym_compunit != nullptr); + return buildsym_compunit->m_last_source_start_addr; +} + /* Initialize anything that needs initializing when starting to read a diff --git a/gdb/buildsym.h b/gdb/buildsym.h index 536d50a58e..61ffc0fd89 100644 --- a/gdb/buildsym.h +++ b/gdb/buildsym.h @@ -49,12 +49,6 @@ struct dynamic_prop; #define HASHSIZE 127 /* Size of things hashed via hashname(). */ -/* Core address of start of text of current source file. This too - comes from the N_SO symbol. For Dwarf it typically comes from the - DW_AT_low_pc attribute of a DW_TAG_compile_unit DIE. */ - -EXTERN CORE_ADDR last_source_start_addr; - /* The list of sub-source-files within the current individual compilation. Each file gets its own symtab with its own linetable and associated info, but they all share one blockvector. */ @@ -310,6 +304,16 @@ extern struct compunit_symtab *buildsym_compunit_symtab (void); 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 (); + #undef EXTERN #endif /* defined (BUILDSYM_H) */ diff --git a/gdb/coffread.c b/gdb/coffread.c index f24ec0713a..5c97e7b949 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -390,8 +390,8 @@ coff_start_symtab (struct objfile *objfile, const char *name) xstrdup (name), /* We never know the directory name for COFF. */ NULL, - /* The start address is irrelevant, since we set - last_source_start_addr in coff_end_symtab. */ + /* The start address is irrelevant, since we call + set_last_source_start_addr in coff_end_symtab. */ 0, /* Let buildsym.c deduce the language for this symtab. */ language_unknown); @@ -420,7 +420,7 @@ complete_symtab (const char *name, CORE_ADDR start_addr, unsigned int size) static void coff_end_symtab (struct objfile *objfile) { - last_source_start_addr = current_source_start_addr; + set_last_source_start_addr (current_source_start_addr); end_symtab (current_source_end_addr, SECT_OFF_TEXT (objfile)); diff --git a/gdb/dbxread.c b/gdb/dbxread.c index d0926896e2..31de714cc7 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -2435,14 +2435,14 @@ read_ofile_symtab (struct objfile *objfile, struct partial_symtab *pst) /* In a Solaris elf file, this variable, which comes from the value of the N_SO symbol, will still be 0. Luckily, text_offset, which comes from pst->textlow is correct. */ - if (last_source_start_addr == 0) - last_source_start_addr = text_offset; + if (get_last_source_start_addr () == 0) + set_last_source_start_addr (text_offset); /* In reordered executables last_source_start_addr may not be the lower bound for this symtab, instead use text_offset which comes from pst->textlow which is correct. */ - if (last_source_start_addr > text_offset) - last_source_start_addr = text_offset; + if (get_last_source_start_addr () > text_offset) + set_last_source_start_addr (text_offset); pst->compunit_symtab = end_symtab (text_offset + text_size, SECT_OFF_TEXT (objfile)); diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 7cf5e259d9..8bb244618c 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -817,7 +817,7 @@ aix_process_linenos (struct objfile *objfile) return; /* Process line numbers and enter them into line vector. */ - process_linenos (last_source_start_addr, cur_src_end_addr); + process_linenos (get_last_source_start_addr (), cur_src_end_addr); } @@ -904,7 +904,7 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset, #define complete_symtab(name, start_addr) { \ set_last_source_file (name); \ - last_source_start_addr = start_addr; \ + set_last_source_start_addr (start_addr); \ }