From patchwork Tue Mar 21 19:18:29 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 66716 Return-Path: X-Original-To: patchwork@sourceware.org Delivered-To: patchwork@sourceware.org Received: from server2.sourceware.org (localhost [IPv6:::1]) by sourceware.org (Postfix) with ESMTP id 46C8D3848434 for ; Tue, 21 Mar 2023 19:19:11 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from outbound-ss-820.bluehost.com (outbound-ss-820.bluehost.com [69.89.24.241]) by sourceware.org (Postfix) with ESMTPS id E25233858D3C for ; Tue, 21 Mar 2023 19:18:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org E25233858D3C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=tromey.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=tromey.com Received: from cmgw14.mail.unifiedlayer.com (unknown [10.0.90.129]) by progateway2.mail.pro1.eigbox.com (Postfix) with ESMTP id 4608810048542 for ; Tue, 21 Mar 2023 19:18:32 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id ehVApLYu8NAy0ehVApdEoi; Tue, 21 Mar 2023 19:18:32 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=UI0YoATy c=1 sm=1 tr=0 ts=641a0308 a=ApxJNpeYhEAb1aAlGBBbmA==:117 a=ApxJNpeYhEAb1aAlGBBbmA==:17 a=dLZJa+xiwSxG16/P+YVxDGlgEgI=:19 a=IkcTkHD0fZMA:10:nop_charset_1 a=k__wU0fu6RkA:10:nop_rcvd_month_year a=Qbun_eYptAEA:10:endurance_base64_authed_username_1 a=jvTFSWc0fegrfNRtY8YA:9 a=QEXdDO2ut3YA:10:nop_charset_2 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=tromey.com; s=default; h=To:In-Reply-To:References:Message-Id:Content-Transfer-Encoding: Content-Type:MIME-Version:Subject:Date:From:Sender:Reply-To:Cc:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=VSQ86z/dudUmUBJjBHlovhKvzlxintzaG5YUzhOBcb0=; b=nmyh2TJkxdPsqz6KWkRQ6nJiXs IzqfW2Qv704hUEECVWyfFrAz5DZIB2FgwixTeaGREw41lkb3YQ9Bd20PU7+jmXJBegMiNBfOFyPV7 JRINJDZNRDlERnW4EHHCCt26B; Received: from 71-211-185-113.hlrn.qwest.net ([71.211.185.113]:53618 helo=[192.168.0.21]) by box5379.bluehost.com with esmtpsa (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.95) (envelope-from ) id 1pehVA-00150d-0M for gdb-patches@sourceware.org; Tue, 21 Mar 2023 13:18:32 -0600 From: Tom Tromey Date: Tue, 21 Mar 2023 13:18:29 -0600 Subject: [PATCH 4/6] Use unrelocated_addr in psymbols MIME-Version: 1.0 Message-Id: <20230321-submit-unrelocated-type-v1-4-2a1fb6117abf@tromey.com> References: <20230321-submit-unrelocated-type-v1-0-2a1fb6117abf@tromey.com> In-Reply-To: <20230321-submit-unrelocated-type-v1-0-2a1fb6117abf@tromey.com> To: gdb-patches@sourceware.org X-Mailer: b4 0.12.1 X-AntiAbuse: This header was added to track abuse, please include it with any abuse report X-AntiAbuse: Primary Hostname - box5379.bluehost.com X-AntiAbuse: Original Domain - sourceware.org X-AntiAbuse: Originator/Caller UID/GID - [47 12] / [47 12] X-AntiAbuse: Sender Address Domain - tromey.com X-BWhitelist: no X-Source-IP: 71.211.185.113 X-Source-L: No X-Exim-ID: 1pehVA-00150d-0M X-Source: X-Source-Args: X-Source-Dir: X-Source-Sender: 71-211-185-113.hlrn.qwest.net ([192.168.0.21]) [71.211.185.113]:53618 X-Source-Auth: tom+tromey.com X-Email-Count: 5 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3025.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, RCVD_IN_ABUSEAT, RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: gdb-patches@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gdb-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: gdb-patches-bounces+patchwork=sourceware.org@sourceware.org Sender: "Gdb-patches" This changes psymbols themselves to use unrelocated_addr. This transform is largely mechanical. I don't think it finds any bugs. --- gdb/ctfread.c | 12 ++++++++---- gdb/dbxread.c | 27 ++++++++++++++++++--------- gdb/mdebugread.c | 43 ++++++++++++++++++++++++++++--------------- gdb/psympriv.h | 12 ++++++------ gdb/psymtab.c | 5 +++-- gdb/symtab.h | 16 ++++++++++++++++ gdb/xcoffread.c | 23 ++++++++++++++--------- 7 files changed, 93 insertions(+), 45 deletions(-) diff --git a/gdb/ctfread.c b/gdb/ctfread.c index 41411abef2b..005862c1097 100644 --- a/gdb/ctfread.c +++ b/gdb/ctfread.c @@ -1291,7 +1291,8 @@ ctf_psymtab_add_enums (struct ctf_context *ccp, ctf_id_t tid) ccp->pst->add_psymbol (ename, true, VAR_DOMAIN, LOC_CONST, -1, psymbol_placement::GLOBAL, - 0, language_c, ccp->partial_symtabs, ccp->of); + unrelocated_addr (0), + language_c, ccp->partial_symtabs, ccp->of); } if (ctf_errno (ccp->fp) != ECTF_NEXT_END) complaint (_("ctf_enum_next ctf_psymtab_add_enums failed - %s"), @@ -1336,7 +1337,8 @@ ctf_psymtab_add_stt_entries (ctf_dict_t *cfp, ctf_psymtab *pst, pst->add_psymbol (tname, true, tdomain, aclass, -1, psymbol_placement::GLOBAL, - 0, language_c, pst->context.partial_symtabs, of); + unrelocated_addr (0), + language_c, pst->context.partial_symtabs, of); } } @@ -1513,7 +1515,8 @@ ctf_psymtab_type_cb (ctf_id_t tid, void *arg) ccp->pst->add_psymbol (name, false, domain, aclass, section, psymbol_placement::STATIC, - 0, language_c, ccp->partial_symtabs, ccp->of); + unrelocated_addr (0), + language_c, ccp->partial_symtabs, ccp->of); return 0; } @@ -1528,7 +1531,8 @@ ctf_psymtab_var_cb (const char *name, ctf_id_t id, void *arg) ccp->pst->add_psymbol (name, true, VAR_DOMAIN, LOC_STATIC, -1, psymbol_placement::GLOBAL, - 0, language_c, ccp->partial_symtabs, ccp->of); + unrelocated_addr (0), + language_c, ccp->partial_symtabs, ccp->of); return 0; } diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 1ae527e9bf3..677e91d7725 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -1484,7 +1484,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, VAR_DOMAIN, LOC_STATIC, data_sect_index, psymbol_placement::STATIC, - nlist.n_value, psymtab_language, + unrelocated_addr (nlist.n_value), + psymtab_language, partial_symtabs, objfile); else complaint (_("static `%*s' appears to be defined " @@ -1500,7 +1501,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, VAR_DOMAIN, LOC_STATIC, data_sect_index, psymbol_placement::GLOBAL, - nlist.n_value, psymtab_language, + unrelocated_addr (nlist.n_value), + psymtab_language, partial_symtabs, objfile); else complaint (_("global `%*s' appears to be defined " @@ -1523,7 +1525,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); else complaint (_("enum, struct, or union `%*s' appears " @@ -1537,7 +1540,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, VAR_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); else complaint (_("typedef `%*s' appears to be defined " @@ -1555,7 +1559,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, VAR_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); else complaint (_("typename `%*s' appears to be defined " @@ -1621,7 +1626,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst != nullptr) pst->add_psymbol (gdb::string_view (p, q - p), true, VAR_DOMAIN, LOC_CONST, -1, - psymbol_placement::STATIC, 0, + psymbol_placement::STATIC, + unrelocated_addr (0), psymtab_language, partial_symtabs, objfile); else @@ -1645,7 +1651,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst != nullptr) pst->add_psymbol (gdb::string_view (sym_name, sym_len), true, VAR_DOMAIN, LOC_CONST, -1, - psymbol_placement::STATIC, 0, + psymbol_placement::STATIC, + unrelocated_addr (0), psymtab_language, partial_symtabs, objfile); else @@ -1705,7 +1712,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::STATIC, - nlist.n_value, psymtab_language, + unrelocated_addr (nlist.n_value), + psymtab_language, partial_symtabs, objfile); continue; @@ -1762,7 +1770,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::GLOBAL, - nlist.n_value, psymtab_language, + unrelocated_addr (nlist.n_value), + psymtab_language, partial_symtabs, objfile); continue; diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 4bcda4b9d74..e0415587646 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -3056,7 +3056,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_STATIC, SECT_OFF_DATA (objfile), psymbol_placement::STATIC, - sh.value, + unrelocated_addr (sh.value), psymtab_language, partial_symtabs, objfile); continue; @@ -3069,7 +3069,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_STATIC, SECT_OFF_DATA (objfile), psymbol_placement::GLOBAL, - sh.value, + unrelocated_addr (sh.value), psymtab_language, partial_symtabs, objfile); continue; @@ -3088,7 +3088,9 @@ parse_partial_symbols (minimal_symbol_reader &reader, pst->add_psymbol (gdb::string_view (namestring, p - namestring), true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, 0, psymtab_language, + psymbol_placement::STATIC, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); if (p[2] == 't') { @@ -3097,7 +3099,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, (gdb::string_view (namestring, p - namestring), true, VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, 0, + psymbol_placement::STATIC, + unrelocated_addr (0), psymtab_language, partial_symtabs, objfile); p += 1; @@ -3112,7 +3115,9 @@ parse_partial_symbols (minimal_symbol_reader &reader, (gdb::string_view (namestring, p - namestring), true, VAR_DOMAIN, LOC_TYPEDEF, -1, - psymbol_placement::STATIC, 0, psymtab_language, + psymbol_placement::STATIC, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); } check_enum: @@ -3179,7 +3184,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_CONST, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); /* Point past the name. */ p = q; @@ -3198,7 +3204,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, p - namestring), true, VAR_DOMAIN, LOC_CONST, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); continue; @@ -3214,7 +3221,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::STATIC, - sh.value, + unrelocated_addr (sh.value), psymtab_language, partial_symtabs, objfile); continue; @@ -3235,7 +3242,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::GLOBAL, - sh.value, + unrelocated_addr (sh.value), psymtab_language, partial_symtabs, objfile); continue; @@ -3475,14 +3482,16 @@ parse_partial_symbols (minimal_symbol_reader &reader, VAR_DOMAIN, LOC_BLOCK, section, psymbol_placement::GLOBAL, - sh.value, psymtab_language, + unrelocated_addr (sh.value), + psymtab_language, partial_symtabs, objfile); else pst->add_psymbol (sym_name, true, VAR_DOMAIN, LOC_BLOCK, section, psymbol_placement::STATIC, - sh.value, psymtab_language, + unrelocated_addr (sh.value), + psymtab_language, partial_symtabs, objfile); procaddr = unrelocated_addr (sh.value); @@ -3549,7 +3558,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, pst->add_psymbol (sym_name, true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); } handle_psymbol_enumerators (objfile, partial_symtabs, @@ -3591,7 +3601,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, pst->add_psymbol (sym_name, true, VAR_DOMAIN, theclass, section, psymbol_placement::STATIC, - sh.value, psymtab_language, + unrelocated_addr (sh.value), + psymtab_language, partial_symtabs, objfile); skip: cur_sdx++; /* Go to next file symbol. */ @@ -3671,7 +3682,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, VAR_DOMAIN, theclass, section, psymbol_placement::GLOBAL, - svalue, psymtab_language, + unrelocated_addr (svalue), + psymtab_language, partial_symtabs, objfile); } } @@ -3805,7 +3817,8 @@ handle_psymbol_enumerators (struct objfile *objfile, in psymtabs, just in symtabs. */ pst->add_psymbol (name, true, VAR_DOMAIN, LOC_CONST, -1, - psymbol_placement::STATIC, 0, + psymbol_placement::STATIC, + unrelocated_addr (0), psymtab_language, partial_symtabs, objfile); ext_sym += external_sym_size; } diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 8fb595e2e0b..8f059dc5975 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -44,24 +44,24 @@ struct partial_symbol } /* Return the unrelocated address of this partial symbol. */ - CORE_ADDR unrelocated_address () const + unrelocated_addr unrelocated_address () const { - return ginfo.value_address (); + return ginfo.unrelocated_address (); } /* Return the address of this partial symbol, relocated according to the offsets provided in OBJFILE. */ CORE_ADDR address (const struct objfile *objfile) const { - return (ginfo.value_address () + return (CORE_ADDR (ginfo.unrelocated_address ()) + objfile->section_offsets[ginfo.section_index ()]); } /* Set the address of this partial symbol. The address must be unrelocated. */ - void set_unrelocated_address (CORE_ADDR addr) + void set_unrelocated_address (unrelocated_addr addr) { - ginfo.set_value_address (addr); + ginfo.set_unrelocated_address (addr); } /* Note that partial_symbol does not derive from general_symbol_info @@ -241,7 +241,7 @@ struct partial_symtab enum address_class theclass, short section, psymbol_placement where, - CORE_ADDR coreaddr, + unrelocated_addr coreaddr, enum language language, psymtab_storage *partial_symtabs, struct objfile *objfile); diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 484199b4be2..c74280761dd 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -675,7 +675,8 @@ print_partial_symbols (struct gdbarch *gdbarch, struct objfile *objfile, break; } gdb_puts (", ", outfile); - gdb_puts (paddress (gdbarch, p->unrelocated_address ()), outfile); + gdb_puts (paddress (gdbarch, CORE_ADDR (p->unrelocated_address ())), + outfile); gdb_printf (outfile, "\n"); } } @@ -1212,7 +1213,7 @@ partial_symtab::add_psymbol (gdb::string_view name, bool copy_name, enum address_class theclass, short section, psymbol_placement where, - CORE_ADDR coreaddr, + unrelocated_addr coreaddr, enum language language, psymtab_storage *partial_symtabs, struct objfile *objfile) diff --git a/gdb/symtab.h b/gdb/symtab.h index 347f2d1fd1e..4d760863081 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -530,6 +530,18 @@ struct general_symbol_info m_value.address = address; } + /* Return the unrelocated address of this symbol. */ + unrelocated_addr unrelocated_address () const + { + return m_value.unrel_addr; + } + + /* Set the unrelocated address of this symbol. */ + void set_unrelocated_address (unrelocated_addr addr) + { + m_value.unrel_addr = addr; + } + /* Name of the symbol. This is a required field. Storage for the name is allocated on the objfile_obstack for the associated objfile. For languages like C++ that make a distinction between @@ -554,6 +566,10 @@ struct general_symbol_info CORE_ADDR address; + /* The address, if unrelocated. An unrelocated symbol does not + have the runtime section offset applied. */ + unrelocated_addr unrel_addr; + /* A common block. Used with LOC_COMMON_BLOCK. */ const struct common_block *common_block; diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index c829fb2aea0..5c20468e9e4 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -2499,7 +2499,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_STATIC, SECT_OFF_DATA (objfile), psymbol_placement::STATIC, - symbol.n_value, + unrelocated_addr (symbol.n_value), psymtab_language, partial_symtabs, objfile); continue; @@ -2512,7 +2512,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_STATIC, SECT_OFF_DATA (objfile), psymbol_placement::GLOBAL, - symbol.n_value, + unrelocated_addr (symbol.n_value), psymtab_language, partial_symtabs, objfile); continue; @@ -2532,7 +2532,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, p - namestring), true, STRUCT_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); if (p[2] == 't') { @@ -2541,7 +2542,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, p - namestring), true, VAR_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); p += 1; } @@ -2555,7 +2557,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, p - namestring), true, VAR_DOMAIN, LOC_TYPEDEF, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); } check_enum: @@ -2618,7 +2621,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, pst->add_psymbol (gdb::string_view (p, q - p), true, VAR_DOMAIN, LOC_CONST, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); /* Point past the name. */ p = q; @@ -2638,7 +2642,8 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, p - namestring), true, VAR_DOMAIN, LOC_CONST, -1, psymbol_placement::STATIC, - 0, psymtab_language, + unrelocated_addr (0), + psymtab_language, partial_symtabs, objfile); continue; @@ -2653,7 +2658,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::STATIC, - symbol.n_value, + unrelocated_addr (symbol.n_value), psymtab_language, partial_symtabs, objfile); continue; @@ -2680,7 +2685,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, true, VAR_DOMAIN, LOC_BLOCK, SECT_OFF_TEXT (objfile), psymbol_placement::GLOBAL, - symbol.n_value, + unrelocated_addr (symbol.n_value), psymtab_language, partial_symtabs, objfile); continue;