From patchwork Tue Mar 21 19:18:26 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 66714 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 94644384B120 for ; Tue, 21 Mar 2023 19:19:03 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from alt-proxy28.mail.unifiedlayer.com (alt-proxy28.mail.unifiedlayer.com [74.220.216.123]) by sourceware.org (Postfix) with ESMTPS id 1BF8C3858C52 for ; Tue, 21 Mar 2023 19:18:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 1BF8C3858C52 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 cmgw10.mail.unifiedlayer.com (unknown [10.0.90.125]) by progateway1.mail.pro1.eigbox.com (Postfix) with ESMTP id EF29E10038615 for ; Tue, 21 Mar 2023 19:18:31 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id ehV9p64paRSTPehV9p7Lzv; Tue, 21 Mar 2023 19:18:31 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=VeEygHl9 c=1 sm=1 tr=0 ts=641a0307 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=ZPYF-xXZonbc6vsVp0gA: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=edxM7Y1gUCwwMZyLH0hqVaP0VkLMHrYLMSzrXysi3LU=; b=l89MH8O3rBjKp1kJ3AV2L/+3lZ wXOCK65xWHadMwSWEOhMt7MgfUFEPpQiOeKC785TfZVBnHi5FcCWYILdauMSG39dumgo4N2rJ2gPi nsH/rDG+jKv19defBdKAnP7o/; 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 1pehV9-00150d-Jc for gdb-patches@sourceware.org; Tue, 21 Mar 2023 13:18:31 -0600 From: Tom Tromey Date: Tue, 21 Mar 2023 13:18:26 -0600 Subject: [PATCH 1/6] Use function_view in gdb_bfd_lookup_symbol MIME-Version: 1.0 Message-Id: <20230321-submit-unrelocated-type-v1-1-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: 1pehV9-00150d-Jc 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: 2 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 gdb_bfd_lookup_symbol to use a function_view. This simplifies the code a little bit. --- gdb/solib-dsbt.c | 17 +++++++---------- gdb/solib-frv.c | 15 ++++++--------- gdb/solib-svr4.c | 20 +++++++++----------- gdb/solib.c | 29 ++++++++++++----------------- gdb/solib.h | 14 +++++--------- 5 files changed, 39 insertions(+), 56 deletions(-) diff --git a/gdb/solib-dsbt.c b/gdb/solib-dsbt.c index 557df74eb00..866087ef3a5 100644 --- a/gdb/solib-dsbt.c +++ b/gdb/solib-dsbt.c @@ -662,14 +662,6 @@ enable_break_failure_warning (void) "and track explicitly loaded dynamic code.")); } -/* Helper function for gdb_bfd_lookup_symbol. */ - -static int -cmp_name (const asymbol *sym, const void *data) -{ - return (strcmp (sym->name, (const char *) data) == 0); -} - /* The dynamic linkers has, as part of its debugger interface, support for arranging for the inferior to hit a breakpoint after mapping in the shared libraries. This function enables that breakpoint. @@ -759,8 +751,13 @@ enable_break (void) = info->interp_plt_sect_low + bfd_section_size (interp_sect); } - addr = gdb_bfd_lookup_symbol (tmp_bfd.get (), cmp_name, - "_dl_debug_state"); + addr = (gdb_bfd_lookup_symbol + (tmp_bfd.get (), + [] (const asymbol *sym) + { + return strcmp (sym->name, "_dl_debug_state") == 0; + })); + if (addr != 0) { if (solib_dsbt_debug) diff --git a/gdb/solib-frv.c b/gdb/solib-frv.c index 38aed7a6ca4..240b4da5d9d 100644 --- a/gdb/solib-frv.c +++ b/gdb/solib-frv.c @@ -472,14 +472,6 @@ enable_break_failure_warning (void) "and track explicitly loaded dynamic code.")); } -/* Helper function for gdb_bfd_lookup_symbol. */ - -static int -cmp_name (const asymbol *sym, const void *data) -{ - return (strcmp (sym->name, (const char *) data) == 0); -} - /* Arrange for dynamic linker to hit breakpoint. The dynamic linkers has, as part of its debugger interface, support @@ -602,7 +594,12 @@ enable_break2 (void) interp_plt_sect_low + bfd_section_size (interp_sect); } - addr = gdb_bfd_lookup_symbol (tmp_bfd.get (), cmp_name, "_dl_debug_addr"); + addr = (gdb_bfd_lookup_symbol + (tmp_bfd.get (), + [] (const asymbol *sym) + { + return strcmp (sym->name, "_dl_debug_addr") == 0; + })); if (addr == 0) { diff --git a/gdb/solib-svr4.c b/gdb/solib-svr4.c index b3f6b6adaf2..5a728939111 100644 --- a/gdb/solib-svr4.c +++ b/gdb/solib-svr4.c @@ -2301,14 +2301,6 @@ svr4_create_solib_event_breakpoints (svr4_info *info, struct gdbarch *gdbarch, } } -/* Helper function for gdb_bfd_lookup_symbol. */ - -static int -cmp_name_and_sec_flags (const asymbol *sym, const void *data) -{ - return (strcmp (sym->name, (const char *) data) == 0 - && (sym->section->flags & (SEC_CODE | SEC_DATA)) != 0); -} /* Arrange for dynamic linker to hit breakpoint. Both the SunOS and the SVR4 dynamic linkers have, as part of their @@ -2553,9 +2545,15 @@ enable_break (struct svr4_info *info, int from_tty) /* Now try to set a breakpoint in the dynamic linker. */ for (bkpt_namep = solib_break_names; *bkpt_namep != NULL; bkpt_namep++) { - sym_addr = gdb_bfd_lookup_symbol (tmp_bfd.get (), - cmp_name_and_sec_flags, - *bkpt_namep); + sym_addr + = (gdb_bfd_lookup_symbol + (tmp_bfd.get (), + [=] (const asymbol *sym) + { + return (strcmp (sym->name, *bkpt_namep) == 0 + && ((sym->section->flags & (SEC_CODE | SEC_DATA)) + != 0)); + })); if (sym_addr != 0) break; } diff --git a/gdb/solib.c b/gdb/solib.c index ce10fc5aaf2..e6bccc85ca7 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -1475,13 +1475,11 @@ show_auto_solib_add (struct ui_file *file, int from_tty, /* Lookup the value for a specific symbol from dynamic symbol table. Look up symbol from ABFD. MATCH_SYM is a callback function to determine whether to pick up a symbol. DATA is the input of this callback - function. Return NULL if symbol is not found. */ + function. Return 0 if symbol is not found. */ CORE_ADDR -gdb_bfd_lookup_symbol_from_symtab (bfd *abfd, - int (*match_sym) (const asymbol *, - const void *), - const void *data) +gdb_bfd_lookup_symbol_from_symtab + (bfd *abfd, gdb::function_view match_sym) { long storage_needed = bfd_get_symtab_upper_bound (abfd); CORE_ADDR symaddr = 0; @@ -1499,7 +1497,7 @@ gdb_bfd_lookup_symbol_from_symtab (bfd *abfd, { asymbol *sym = *symbol_table++; - if (match_sym (sym, data)) + if (match_sym (sym)) { struct gdbarch *gdbarch = target_gdbarch (); symaddr = sym->value; @@ -1675,10 +1673,8 @@ gdb_bfd_read_elf_soname (const char *filename) if symbol is not found. */ static CORE_ADDR -bfd_lookup_symbol_from_dyn_symtab (bfd *abfd, - int (*match_sym) (const asymbol *, - const void *), - const void *data) +bfd_lookup_symbol_from_dyn_symtab + (bfd *abfd, gdb::function_view match_sym) { long storage_needed = bfd_get_dynamic_symtab_upper_bound (abfd); CORE_ADDR symaddr = 0; @@ -1695,7 +1691,7 @@ bfd_lookup_symbol_from_dyn_symtab (bfd *abfd, { asymbol *sym = *symbol_table++; - if (match_sym (sym, data)) + if (match_sym (sym)) { /* BFD symbols are section relative. */ symaddr = sym->value + sym->section->vma; @@ -1709,20 +1705,19 @@ bfd_lookup_symbol_from_dyn_symtab (bfd *abfd, /* Lookup the value for a specific symbol from symbol table and dynamic symbol table. Look up symbol from ABFD. MATCH_SYM is a callback function to determine whether to pick up a symbol. DATA is the - input of this callback function. Return NULL if symbol is not + input of this callback function. Return 0 if symbol is not found. */ CORE_ADDR -gdb_bfd_lookup_symbol (bfd *abfd, - int (*match_sym) (const asymbol *, const void *), - const void *data) +gdb_bfd_lookup_symbol + (bfd *abfd, gdb::function_view match_sym) { - CORE_ADDR symaddr = gdb_bfd_lookup_symbol_from_symtab (abfd, match_sym, data); + CORE_ADDR symaddr = gdb_bfd_lookup_symbol_from_symtab (abfd, match_sym); /* On FreeBSD, the dynamic linker is stripped by default. So we'll have to check the dynamic string table too. */ if (symaddr == 0) - symaddr = bfd_lookup_symbol_from_dyn_symtab (abfd, match_sym, data); + symaddr = bfd_lookup_symbol_from_dyn_symtab (abfd, match_sym); return symaddr; } diff --git a/gdb/solib.h b/gdb/solib.h index 24c365a0ae0..77e023002ed 100644 --- a/gdb/solib.h +++ b/gdb/solib.h @@ -28,6 +28,7 @@ struct program_space; #include "gdb_bfd.h" #include "symfile-add-flags.h" +#include "gdbsupport/function-view.h" /* Value of the 'set debug solib' configuration variable. */ @@ -107,18 +108,13 @@ extern bool libpthread_name_p (const char *name); /* Look up symbol from both symbol table and dynamic string table. */ -extern CORE_ADDR gdb_bfd_lookup_symbol (bfd *abfd, - int (*match_sym) (const asymbol *, - const void *), - const void *data); +extern CORE_ADDR gdb_bfd_lookup_symbol + (bfd *abfd, gdb::function_view match_sym); /* Look up symbol from symbol table. */ -extern CORE_ADDR gdb_bfd_lookup_symbol_from_symtab (bfd *abfd, - int (*match_sym) - (const asymbol *, - const void *), - const void *data); +extern CORE_ADDR gdb_bfd_lookup_symbol_from_symtab + (bfd *abfd, gdb::function_view match_sym); /* Scan for DESIRED_DYNTAG in .dynamic section of ABFD. If DESIRED_DYNTAG is found, 1 is returned and the corresponding PTR and PTR_ADDR are set. */ From patchwork Tue Mar 21 19:18:27 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 66713 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 7E367385023D for ; Tue, 21 Mar 2023 19:18:52 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from gproxy2-pub.mail.unifiedlayer.com (gproxy2-pub.mail.unifiedlayer.com [69.89.18.3]) by sourceware.org (Postfix) with ESMTPS id 2356D3858C66 for ; Tue, 21 Mar 2023 19:18:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2356D3858C66 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 cmgw10.mail.unifiedlayer.com (unknown [10.0.90.125]) by progateway4.mail.pro1.eigbox.com (Postfix) with ESMTP id E98C01004438B for ; Tue, 21 Mar 2023 19:18:31 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id ehV9p64phRSTPehV9p7M02; Tue, 21 Mar 2023 19:18:31 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=VeEygHl9 c=1 sm=1 tr=0 ts=641a0307 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=BH0TXZ1YmGb4xf6c5r8A: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=iF1svfvJdX/BeMPi2zoy/3bJmbakumPY/lOLqf+b4g0=; b=dzKaMmJOjtfhTzXjmDuEyTnH6W dik4Y7ps5VmmwmUWH4vY/06u39ICUGXo2SRn3efrevrGC1v5WBe6741Sz9Vb9WQHx6WgDE/5vUFnA iOec9M+5+Zte7SLkqCdNY41WZ; 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 1pehV9-00150d-No for gdb-patches@sourceware.org; Tue, 21 Mar 2023 13:18:31 -0600 From: Tom Tromey Date: Tue, 21 Mar 2023 13:18:27 -0600 Subject: [PATCH 2/6] Move definition of unrelocated_addr earlier MIME-Version: 1.0 Message-Id: <20230321-submit-unrelocated-type-v1-2-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: 1pehV9-00150d-No 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: 3 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 moves the definition of unrelocated_addr a bit earlier in symtab.h, so that it can be used elsewhere in the file. --- gdb/symtab.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/gdb/symtab.h b/gdb/symtab.h index 2fd56ce21bd..347f2d1fd1e 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -58,6 +58,12 @@ class probe; struct lookup_name_info; struct code_breakpoint; +/* Like a CORE_ADDR, but not directly convertible. This is used to + represent an unrelocated CORE_ADDR. DEFINE_OFFSET_TYPE is not used + here because there's no need to add or subtract values of this + type. */ +enum class unrelocated_addr : CORE_ADDR { }; + /* How to match a lookup name against a symbol search name. */ enum class symbol_name_match_type { @@ -1540,12 +1546,6 @@ struct rust_vtable_symbol : public symbol }; -/* Like a CORE_ADDR, but not directly convertible. This is used to - represent an unrelocated CORE_ADDR. DEFINE_OFFSET_TYPE is not used - here because there's no need to add or subtract values of this - type. */ -enum class unrelocated_addr : CORE_ADDR { }; - /* Each item represents a line-->pc (or the reverse) mapping. This is somewhat more wasteful of space than one might wish, but since only the files which are actually debugged are read in to core, we don't From patchwork Tue Mar 21 19:18:28 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 66718 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 DFCBA383FB98 for ; Tue, 21 Mar 2023 19:19:23 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from qproxy5-pub.mail.unifiedlayer.com (qproxy5-pub.mail.unifiedlayer.com [69.89.21.30]) by sourceware.org (Postfix) with ESMTPS id DD63E3858C1F for ; Tue, 21 Mar 2023 19:19:02 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org DD63E3858C1F 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 outbound-ss-761.bluehost.com (outbound-ss-761.bluehost.com [74.220.211.250]) by qproxy5.mail.unifiedlayer.com (Postfix) with ESMTP id 281C980402F8 for ; Tue, 21 Mar 2023 19:19:02 +0000 (UTC) Received: from cmgw13.mail.unifiedlayer.com (unknown [10.0.90.128]) by progateway8.mail.pro1.eigbox.com (Postfix) with ESMTP id 46E101003E917 for ; Tue, 21 Mar 2023 19:18:32 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id ehVApZXjDNX2aehVApFZmZ; Tue, 21 Mar 2023 19:18:32 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=NMAQR22g 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=cg9eeq0_zgdFXRHdC-sA: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=xmI0M93ghXjLFru0Sm4upFLBIRZsnlb9ikD8ZxAQyDY=; b=RMmosP2tjFZ/vznW/lzskcWOWM szTCybOqTGW62+GarvnhIiDAyGb1YzAxKGmS9yXPGACDc/0ZUv6EvVTt4BlzE5nJaj4idQ0w/uaeJ mauam6BDA+LivlP0LH7lSwfqC; 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 1pehV9-00150d-S8 for gdb-patches@sourceware.org; Tue, 21 Mar 2023 13:18:31 -0600 From: Tom Tromey Date: Tue, 21 Mar 2023 13:18:28 -0600 Subject: [PATCH 3/6] Use unrelocated_addr in partial symbol tables MIME-Version: 1.0 Message-Id: <20230321-submit-unrelocated-type-v1-3-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: 1pehV9-00150d-S8 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: 4 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_H3, RCVD_IN_MSPIKE_WL, 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 partial symbol tables to use unrelocated_addr for the text_high and text_low members. This revealed some latent bugs in ctfread.c, which are fixed here. --- gdb/ctfread.c | 15 +++++++------- gdb/dbxread.c | 60 ++++++++++++++++++++++++++++++++------------------------ gdb/mdebugread.c | 32 ++++++++++++++++++------------ gdb/psympriv.h | 30 +++++++++++++++------------- gdb/psymtab.c | 4 ++-- gdb/stabsread.h | 2 +- gdb/xcoffread.c | 15 ++++++++------ 7 files changed, 89 insertions(+), 69 deletions(-) diff --git a/gdb/ctfread.c b/gdb/ctfread.c index 42f2da7a88f..41411abef2b 100644 --- a/gdb/ctfread.c +++ b/gdb/ctfread.c @@ -127,7 +127,7 @@ struct ctf_psymtab : public standard_psymtab ctf_psymtab (const char *filename, psymtab_storage *partial_symtabs, objfile_per_bfd_storage *objfile_per_bfd, - CORE_ADDR addr) + unrelocated_addr addr) : standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr) { } @@ -1232,10 +1232,10 @@ add_stt_func (struct ctf_context *ccp) add_stt_entries (ccp, 1); } -/* Get text segment base for OBJFILE, TSIZE contains the segment size. */ +/* Get text section base for OBJFILE, TSIZE contains the size. */ static CORE_ADDR -get_objfile_text_range (struct objfile *of, int *tsize) +get_objfile_text_range (struct objfile *of, size_t *tsize) { bfd *abfd = of->obfd.get (); const asection *codes; @@ -1405,14 +1405,14 @@ ctf_psymtab::read_symtab (struct objfile *objfile) /* Start a symtab. */ CORE_ADDR offset; /* Start of text segment. */ - int tsize; + size_t tsize; offset = get_objfile_text_range (objfile, &tsize); ctf_start_compunit_symtab (this, objfile, offset); expand_psymtab (objfile); - set_text_low (offset); - set_text_high (offset + tsize); + set_text_low (unrelocated_addr (0)); + set_text_high (unrelocated_addr (tsize)); compunit_symtab = ctf_end_compunit_symtab (this, offset + tsize); /* Finish up the debug error message. */ @@ -1442,7 +1442,8 @@ create_partial_symtab (const char *name, { ctf_psymtab *pst; - pst = new ctf_psymtab (name, partial_symtabs, objfile->per_bfd, 0); + pst = new ctf_psymtab (name, partial_symtabs, objfile->per_bfd, + unrelocated_addr (0)); pst->context.arc = arc; pst->context.fp = cfp; diff --git a/gdb/dbxread.c b/gdb/dbxread.c index e5366ccd0d0..1ae527e9bf3 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -296,7 +296,7 @@ static void add_old_header_file (const char *, int); static void add_this_object_header_file (int); static legacy_psymtab *start_psymtab (psymtab_storage *, struct objfile *, - const char *, CORE_ADDR, int); + const char *, unrelocated_addr, int); /* Free up old header file tables. */ @@ -1125,16 +1125,18 @@ read_dbx_symtab (minimal_symbol_reader &reader, || (namestring[(nsl = strlen (namestring)) - 1] == 'o' && namestring[nsl - 2] == '.')) { + unrelocated_addr unrel_val = unrelocated_addr (nlist.n_value); + if (past_first_source_file && pst /* The gould NP1 uses low values for .o and -l symbols which are not the address. */ - && nlist.n_value >= pst->raw_text_low ()) + && unrel_val >= pst->raw_text_low ()) { dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - nlist.n_value > pst->raw_text_high () - ? nlist.n_value : pst->raw_text_high (), + unrel_val > pst->raw_text_high () + ? unrel_val : pst->raw_text_high (), dependency_list, dependencies_used, textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1246,11 +1248,12 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst) { + unrelocated_addr unrel_value = unrelocated_addr (valu); dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - (valu > pst->raw_text_high () - ? valu : pst->raw_text_high ()), + (unrel_value > pst->raw_text_high () + ? unrel_value : pst->raw_text_high ()), dependency_list, dependencies_used, prev_textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1291,7 +1294,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (!pst) { pst = start_psymtab (partial_symtabs, objfile, - namestring, valu, + namestring, + unrelocated_addr (valu), first_so_symnum * symbol_size); pst->dirname = dirname_nso; dirname_nso = NULL; @@ -1416,13 +1420,14 @@ read_dbx_symtab (minimal_symbol_reader &reader, /* See if this is an end of function stab. */ if (pst && nlist.n_type == N_FUN && *namestring == '\000') { - CORE_ADDR valu; + unrelocated_addr valu; /* It's value is the size (in bytes) of the function for function relative stabs, or the address of the function's end for old style stabs. */ - valu = nlist.n_value + last_function_start; - if (pst->raw_text_high () == 0 || valu > pst->raw_text_high ()) + valu = unrelocated_addr (nlist.n_value + last_function_start); + if (pst->raw_text_high () == unrelocated_addr (0) + || valu > pst->raw_text_high ()) pst->set_text_high (valu); break; } @@ -1673,7 +1678,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } /* End kludge. */ @@ -1688,10 +1693,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, the partial symbol table. */ if (pst && (textlow_not_set - || (nlist.n_value < pst->raw_text_low () + || (unrelocated_addr (nlist.n_value) + < pst->raw_text_low () && (nlist.n_value != 0)))) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } if (pst != nullptr) @@ -1729,7 +1735,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } /* End kludge. */ @@ -1744,10 +1750,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, the partial symbol table. */ if (pst && (textlow_not_set - || (nlist.n_value < pst->raw_text_low () + || (unrelocated_addr (nlist.n_value) + < pst->raw_text_low () && (nlist.n_value != 0)))) { - pst->set_text_low (nlist.n_value); + pst->set_text_low (unrelocated_addr (nlist.n_value)); textlow_not_set = 0; } if (pst != nullptr) @@ -1871,7 +1878,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - (CORE_ADDR) 0, dependency_list, + (unrelocated_addr) 0, dependency_list, dependencies_used, textlow_not_set); pst = (legacy_psymtab *) 0; includes_used = 0; @@ -1928,11 +1935,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, { /* Don't set high text address of PST lower than it already is. */ - CORE_ADDR text_end = - (lowest_text_address == (CORE_ADDR) -1 - ? text_addr - : lowest_text_address) - + text_size; + unrelocated_addr text_end + = unrelocated_addr ((lowest_text_address == (CORE_ADDR) -1 + ? text_addr + : lowest_text_address) + + text_size); dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, @@ -1952,7 +1959,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, static legacy_psymtab * start_psymtab (psymtab_storage *partial_symtabs, struct objfile *objfile, - const char *filename, CORE_ADDR textlow, int ldsymoff) + const char *filename, unrelocated_addr textlow, int ldsymoff) { legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs, objfile->per_bfd, textlow); @@ -1983,7 +1990,7 @@ legacy_psymtab * dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, legacy_psymtab *pst, const char **include_list, int num_includes, - int capping_symbol_offset, CORE_ADDR capping_text, + int capping_symbol_offset, unrelocated_addr capping_text, legacy_psymtab **dependency_list, int number_dependencies, int textlow_not_set) @@ -2037,8 +2044,9 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, } if (minsym.minsym) - pst->set_text_high (minsym.minsym->value_raw_address () - + minsym.minsym->size ()); + pst->set_text_high + (unrelocated_addr (minsym.minsym->value_raw_address () + + minsym.minsym->size ())); last_function_name = NULL; } diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 43542eae673..4bcda4b9d74 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -2601,7 +2601,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, { legacy_psymtab *save_pst; EXTR *ext_ptr; - CORE_ADDR textlow; + unrelocated_addr textlow; cur_fdr = fh = debug_info->fdr + f_idx; @@ -2614,9 +2614,9 @@ parse_partial_symbols (minimal_symbol_reader &reader, /* Determine the start address for this object file from the file header and relocate it, except for Irix 5.2 zero fh->adr. */ if (fh->cpd) - textlow = fh->adr; + textlow = unrelocated_addr (fh->adr); else - textlow = 0; + textlow = unrelocated_addr (0); pst = new legacy_psymtab (fdr_name (fh), partial_symtabs, objfile->per_bfd, textlow); pst->read_symtab_private = XOBNEW (&objfile->objfile_obstack, md_symloc); @@ -2695,7 +2695,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, { if (sh.st == stProc || sh.st == stStaticProc) { - CORE_ADDR procaddr; + unrelocated_addr procaddr; long isym; if (sh.st == stStaticProc) @@ -2705,7 +2705,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, mst_file_text, sh.sc, objfile); } - procaddr = sh.value; + procaddr = unrelocated_addr (sh.value); isym = AUX_GET_ISYM (fh->fBigendian, (debug_info->external_aux @@ -2718,7 +2718,9 @@ parse_partial_symbols (minimal_symbol_reader &reader, &sh); if (sh.st == stEnd) { - CORE_ADDR high = procaddr + sh.value; + unrelocated_addr high + = unrelocated_addr (CORE_ADDR (procaddr) + + sh.value); /* Kludge for Irix 5.2 zero fh->adr. */ if (!relocatable @@ -3304,8 +3306,12 @@ parse_partial_symbols (minimal_symbol_reader &reader, continue; case N_RBRAC: - if (sh.value > save_pst->raw_text_high ()) - save_pst->set_text_high (sh.value); + { + unrelocated_addr unrel_value + = unrelocated_addr (sh.value); + if (unrel_value > save_pst->raw_text_high ()) + save_pst->set_text_high (unrel_value); + } continue; case N_EINCL: case N_DSLINE: @@ -3409,8 +3415,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, switch (sh.st) { - CORE_ADDR high; - CORE_ADDR procaddr; + unrelocated_addr high; + unrelocated_addr procaddr; int new_sdx; case stStaticProc: @@ -3479,7 +3485,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, sh.value, psymtab_language, partial_symtabs, objfile); - procaddr = sh.value; + procaddr = unrelocated_addr (sh.value); cur_sdx = new_sdx; (*swap_sym_in) (cur_bfd, @@ -3496,7 +3502,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, || procaddr < pst->raw_text_low ())) pst->set_text_low (procaddr); - high = procaddr + sh.value; + high = unrelocated_addr (CORE_ADDR (procaddr) + sh.value); if (high > pst->raw_text_high ()) pst->set_text_high (high); continue; @@ -4005,7 +4011,7 @@ mdebug_expand_psymtab (legacy_psymtab *pst, struct objfile *objfile) if (! last_symtab_ended) { - cust = end_compunit_symtab (pst->raw_text_high ()); + cust = end_compunit_symtab (pst->text_high (objfile)); end_stabs (); } diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 332d6a62686..8fb595e2e0b 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -130,7 +130,7 @@ struct partial_symtab partial_symtab (const char *filename, psymtab_storage *partial_symtabs, objfile_per_bfd_storage *objfile_per_bfd, - CORE_ADDR addr) + unrelocated_addr addr) ATTRIBUTE_NONNULL (2) ATTRIBUTE_NONNULL (3); virtual ~partial_symtab () @@ -171,14 +171,16 @@ struct partial_symtab virtual struct compunit_symtab *get_compunit_symtab (struct objfile *) const = 0; - /* Return the raw low text address of this partial_symtab. */ - CORE_ADDR raw_text_low () const + /* Return the unrelocated low text address of this + partial_symtab. */ + unrelocated_addr raw_text_low () const { return m_text_low; } - /* Return the raw high text address of this partial_symtab. */ - CORE_ADDR raw_text_high () const + /* Return the unrelocated_addr high text address of this + partial_symtab. */ + unrelocated_addr raw_text_high () const { return m_text_high; } @@ -186,24 +188,24 @@ struct partial_symtab /* Return the relocated low text address of this partial_symtab. */ CORE_ADDR text_low (struct objfile *objfile) const { - return m_text_low + objfile->text_section_offset (); + return CORE_ADDR (m_text_low) + objfile->text_section_offset (); } /* Return the relocated high text address of this partial_symtab. */ CORE_ADDR text_high (struct objfile *objfile) const { - return m_text_high + objfile->text_section_offset (); + return CORE_ADDR (m_text_high) + objfile->text_section_offset (); } /* Set the low text address of this partial_symtab. */ - void set_text_low (CORE_ADDR addr) + void set_text_low (unrelocated_addr addr) { m_text_low = addr; text_low_valid = 1; } - /* Set the hight text address of this partial_symtab. */ - void set_text_high (CORE_ADDR addr) + /* Set the high text address of this partial_symtab. */ + void set_text_high (unrelocated_addr addr) { m_text_high = addr; text_high_valid = 1; @@ -283,8 +285,8 @@ struct partial_symtab fields; these are located later in this structure for better packing. */ - CORE_ADDR m_text_low = 0; - CORE_ADDR m_text_high = 0; + unrelocated_addr m_text_low {}; + unrelocated_addr m_text_high {}; /* If NULL, this is an ordinary partial symbol table. @@ -372,7 +374,7 @@ struct standard_psymtab : public partial_symtab standard_psymtab (const char *filename, psymtab_storage *partial_symtabs, objfile_per_bfd_storage *objfile_per_bfd, - CORE_ADDR addr) + unrelocated_addr addr) : partial_symtab (filename, partial_symtabs, objfile_per_bfd, addr) { } @@ -414,7 +416,7 @@ struct legacy_psymtab : public standard_psymtab legacy_psymtab (const char *filename, psymtab_storage *partial_symtabs, objfile_per_bfd_storage *objfile_per_bfd, - CORE_ADDR addr) + unrelocated_addr addr) : standard_psymtab (filename, partial_symtabs, objfile_per_bfd, addr) { } diff --git a/gdb/psymtab.c b/gdb/psymtab.c index 95a53b90edd..484199b4be2 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1110,7 +1110,7 @@ psymbol_functions::has_unexpanded_symtabs (struct objfile *objfile) partial_symtab::partial_symtab (const char *filename, psymtab_storage *partial_symtabs, objfile_per_bfd_storage *objfile_per_bfd, - CORE_ADDR textlow) + unrelocated_addr textlow) : partial_symtab (filename, partial_symtabs, objfile_per_bfd) { set_text_low (textlow); @@ -1653,7 +1653,7 @@ maintenance_check_psymtabs (const char *ignore, int from_tty) gdb_printf (" psymtab\n"); } } - if (ps->raw_text_high () != 0 + if (ps->raw_text_high () != unrelocated_addr (0) && (ps->text_low (objfile) < b->start () || ps->text_high (objfile) > b->end ())) { diff --git a/gdb/stabsread.h b/gdb/stabsread.h index 9df79bc7dfa..27ba176f63f 100644 --- a/gdb/stabsread.h +++ b/gdb/stabsread.h @@ -175,7 +175,7 @@ extern legacy_psymtab *dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, legacy_psymtab *pst, const char **include_list, int num_includes, - int capping_symbol_offset, CORE_ADDR capping_text, + int capping_symbol_offset, unrelocated_addr capping_text, legacy_psymtab **dependency_list, int number_dependencies, int textlow_not_set); diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index a07f40b5702..c829fb2aea0 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -1875,7 +1875,8 @@ xcoff_start_psymtab (psymtab_storage *partial_symtabs, { /* We fill in textlow later. */ legacy_psymtab *result = new legacy_psymtab (filename, partial_symtabs, - objfile->per_bfd, 0); + objfile->per_bfd, + unrelocated_addr (0)); result->read_symtab_private = XOBNEW (&objfile->objfile_obstack, struct xcoff_symloc); @@ -2172,14 +2173,16 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, } if (pst != NULL) { - CORE_ADDR highval = - symbol.n_value + csect_aux.x_csect.x_scnlen.l; + unrelocated_addr highval + = unrelocated_addr (symbol.n_value + + csect_aux.x_csect.x_scnlen.l); if (highval > pst->raw_text_high ()) pst->set_text_high (highval); - if (!pst->text_low_valid - || symbol.n_value < pst->raw_text_low ()) - pst->set_text_low (symbol.n_value); + unrelocated_addr loval + = unrelocated_addr (symbol.n_value); + if (!pst->text_low_valid || loval < pst->raw_text_low ()) + pst->set_text_low (loval); } misc_func_recorded = 0; break; 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; From patchwork Tue Mar 21 19:18:30 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 66717 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 1E60F3847833 for ; Tue, 21 Mar 2023 19:19:22 +0000 (GMT) X-Original-To: gdb-patches@sourceware.org Delivered-To: gdb-patches@sourceware.org Received: from gproxy1-pub.mail.unifiedlayer.com (gproxy1-pub.mail.unifiedlayer.com [69.89.25.95]) by sourceware.org (Postfix) with ESMTPS id 2092F3858C62 for ; Tue, 21 Mar 2023 19:18:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2092F3858C62 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 cmgw10.mail.unifiedlayer.com (unknown [10.0.90.125]) by progateway3.mail.pro1.eigbox.com (Postfix) with ESMTP id 678991003F507 for ; Tue, 21 Mar 2023 19:18:32 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id ehVAp64q6RSTPehVAp7M0R; Tue, 21 Mar 2023 19:18:32 +0000 X-Authority-Reason: nr=8 X-Authority-Analysis: v=2.4 cv=VeEygHl9 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=MXjOBQuO8C53K5ZXAgIA: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=Ra6H7pJJ9pKavqAkx4BiOrc5rvTFqXyveZA1v/MAwT4=; b=aqyRN9/STUHWYPOZ/7AVabRkuH DcEMKlgdBmT3lB/NUWkPXa4mSDO+EToVjJwRLJHN6OyEQDhn1ctOstblcNf2xZUwy/xJPwE4tCrhs grn5YYsG8KNkgEu+bZgMEr7HF; 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-4m for gdb-patches@sourceware.org; Tue, 21 Mar 2023 13:18:32 -0600 From: Tom Tromey Date: Tue, 21 Mar 2023 13:18:30 -0600 Subject: [PATCH 5/6] Use unrelocated_addr in minimal symbols MIME-Version: 1.0 Message-Id: <20230321-submit-unrelocated-type-v1-5-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-4m 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: 6 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3024.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_STOCKGEN, 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 minimal symbols to use unrelocated_addr. I believe this detected a latent bug in add_pe_forwarded_sym. --- gdb/coff-pe-read.c | 13 +++++-------- gdb/coffread.c | 12 +++++++----- gdb/dbxread.c | 28 ++++++++++++++++------------ gdb/elfread.c | 22 +++++++++++++--------- gdb/findvar.c | 4 ++-- gdb/machoread.c | 4 ++-- gdb/mdebugread.c | 17 ++++++++++------- gdb/minsyms.c | 40 ++++++++++++++++++++-------------------- gdb/minsyms.h | 6 +++--- gdb/mips-tdep.c | 6 ++++-- gdb/mipsread.c | 2 +- gdb/parse.c | 2 +- gdb/printcmd.c | 2 +- gdb/solib.c | 2 +- gdb/symmisc.c | 2 +- gdb/symtab.c | 2 +- gdb/symtab.h | 15 +++++++++++++-- gdb/xcoffread.c | 16 ++++++++-------- 18 files changed, 109 insertions(+), 86 deletions(-) diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c index 2b89e8a3542..07cd216b4b2 100644 --- a/gdb/coff-pe-read.c +++ b/gdb/coff-pe-read.c @@ -127,7 +127,8 @@ add_pe_exported_sym (minimal_symbol_reader &reader, const char *dll_name, struct objfile *objfile) { /* Add the stored offset to get the loaded address of the symbol. */ - CORE_ADDR vma = func_rva + section_data->vma_offset; + unrelocated_addr vma = unrelocated_addr (func_rva + + section_data->vma_offset); /* Generate a (hopefully unique) qualified name using the first part of the dll name, e.g. KERNEL32!AddAtomA. This matches the style @@ -174,7 +175,6 @@ add_pe_forwarded_sym (minimal_symbol_reader &reader, const char *forward_func_name, int ordinal, const char *dll_name, struct objfile *objfile) { - CORE_ADDR vma, baseaddr; struct bound_minimal_symbol msymbol; enum minimal_symbol_type msymtype; int forward_dll_name_len = strlen (forward_dll_name); @@ -210,7 +210,7 @@ add_pe_forwarded_sym (minimal_symbol_reader &reader, " \"%s\" in dll \"%s\", pointing to \"%s\"\n"), sym_name, dll_name, forward_qualified_name.c_str ()); - vma = msymbol.value_address (); + unrelocated_addr vma = msymbol.minsym->value_raw_address (); msymtype = msymbol.minsym->type (); section = msymbol.minsym->section_index (); @@ -232,14 +232,11 @@ add_pe_forwarded_sym (minimal_symbol_reader &reader, really be relocated properly, but nevertheless we make a stab at it, choosing an approach consistent with the history of this code. */ - baseaddr = objfile->text_section_offset (); - reader.record_with_info (qualified_name.c_str (), vma - baseaddr, msymtype, - section); + reader.record_with_info (qualified_name.c_str (), vma, msymtype, section); /* Enter the plain name as well, which might not be unique. */ - reader.record_with_info (bare_name.c_str(), vma - baseaddr, msymtype, - section); + reader.record_with_info (bare_name.c_str(), vma, msymtype, section); return 1; } diff --git a/gdb/coffread.c b/gdb/coffread.c index e993b17db09..837455a1d71 100644 --- a/gdb/coffread.c +++ b/gdb/coffread.c @@ -445,7 +445,7 @@ is_import_fixup_symbol (struct coff_symbol *cs, static struct minimal_symbol * record_minimal_symbol (minimal_symbol_reader &reader, - struct coff_symbol *cs, CORE_ADDR address, + struct coff_symbol *cs, unrelocated_addr address, enum minimal_symbol_type type, int section, struct objfile *objfile) { @@ -880,8 +880,9 @@ coff_symtab_read (minimal_symbol_reader &reader, tmpaddr = cs->c_value; /* Don't record unresolved symbols. */ if (!(cs->c_secnum <= 0 && cs->c_value == 0)) - record_minimal_symbol (reader, cs, tmpaddr, mst_text, - section, objfile); + record_minimal_symbol (reader, cs, + unrelocated_addr (tmpaddr), + mst_text, section, objfile); fcn_line_ptr = main_aux.x_sym.x_fcnary.x_fcn.x_lnnoptr; fcn_start_addr = tmpaddr; @@ -1041,8 +1042,9 @@ coff_symtab_read (minimal_symbol_reader &reader, ms_type = mst_unknown; } - msym = record_minimal_symbol (reader, cs, tmpaddr, ms_type, - sec, objfile); + msym = record_minimal_symbol (reader, cs, + unrelocated_addr (tmpaddr), + ms_type, sec, objfile); if (msym) gdbarch_coff_make_msymbol_special (gdbarch, cs->c_sclass, msym); diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 677e91d7725..9df9320bc7b 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -157,7 +157,7 @@ static unsigned char processing_acc_compilation; need to make guesses based on the symbols (which *are* relocated to reflect the address it will be loaded at). */ -static CORE_ADDR lowest_text_address; +static unrelocated_addr lowest_text_address; /* Non-zero if there is any line number info in the objfile. Prevents dbx_end_psymtab from discarding an otherwise empty psymtab. */ @@ -286,7 +286,7 @@ static void dbx_symfile_read (struct objfile *, symfile_add_flags); static void dbx_symfile_finish (struct objfile *); static void record_minimal_symbol (minimal_symbol_reader &, - const char *, CORE_ADDR, int, + const char *, unrelocated_addr, int, struct objfile *); static void add_new_header_file (const char *, int); @@ -428,7 +428,7 @@ explicit_lookup_type (int real_filenum, int index) static void record_minimal_symbol (minimal_symbol_reader &reader, - const char *name, CORE_ADDR address, int type, + const char *name, unrelocated_addr address, int type, struct objfile *objfile) { enum minimal_symbol_type ms_type; @@ -1009,7 +1009,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, set_last_source_file (NULL); - lowest_text_address = (CORE_ADDR) -1; + lowest_text_address = (unrelocated_addr) -1; symfile_bfd = objfile->obfd.get (); /* For next_text_symbol. */ abfd = objfile->obfd.get (); @@ -1103,7 +1103,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, record_it: namestring = set_namestring (objfile, &nlist); - record_minimal_symbol (reader, namestring, nlist.n_value, + record_minimal_symbol (reader, namestring, + unrelocated_addr (nlist.n_value), nlist.n_type, objfile); /* Always */ continue; @@ -1680,7 +1681,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, pst ? pst->filename : NULL, objfile); if (minsym.minsym != NULL) - nlist.n_value = minsym.minsym->value_raw_address (); + nlist.n_value + = CORE_ADDR (minsym.minsym->value_raw_address ()); } if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) @@ -1738,7 +1740,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, pst ? pst->filename : NULL, objfile); if (minsym.minsym != NULL) - nlist.n_value = minsym.minsym->value_raw_address (); + nlist.n_value + = CORE_ADDR (minsym.minsym->value_raw_address ()); } if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) @@ -1945,10 +1948,11 @@ read_dbx_symtab (minimal_symbol_reader &reader, /* Don't set high text address of PST lower than it already is. */ unrelocated_addr text_end - = unrelocated_addr ((lowest_text_address == (CORE_ADDR) -1 - ? text_addr - : lowest_text_address) - + text_size); + = (unrelocated_addr + (lowest_text_address == (unrelocated_addr) -1 + ? text_addr + : CORE_ADDR (lowest_text_address) + + text_size)); dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, @@ -2054,7 +2058,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, if (minsym.minsym) pst->set_text_high - (unrelocated_addr (minsym.minsym->value_raw_address () + (unrelocated_addr (CORE_ADDR (minsym.minsym->value_raw_address ()) + minsym.minsym->size ())); last_function_name = NULL; diff --git a/gdb/elfread.c b/gdb/elfread.c index b414da9ed21..55771492044 100644 --- a/gdb/elfread.c +++ b/gdb/elfread.c @@ -199,7 +199,7 @@ elf_locate_sections (asection *sectp, struct elfinfo *ei) static struct minimal_symbol * record_minimal_symbol (minimal_symbol_reader &reader, gdb::string_view name, bool copy_name, - CORE_ADDR address, + unrelocated_addr address, enum minimal_symbol_type ms_type, asection *bfd_section, struct objfile *objfile) { @@ -207,7 +207,9 @@ record_minimal_symbol (minimal_symbol_reader &reader, if (ms_type == mst_text || ms_type == mst_file_text || ms_type == mst_text_gnu_ifunc) - address = gdbarch_addr_bits_remove (gdbarch, address); + address + = unrelocated_addr (gdbarch_addr_bits_remove (gdbarch, + CORE_ADDR (address))); /* We only setup section information for allocatable sections. Usually we'd only expect to find msymbols for allocatable sections, but if the @@ -338,7 +340,8 @@ elf_symtab_read (minimal_symbol_reader &reader, msym = record_minimal_symbol (reader, sym->name, copy_names, - symaddr, mst_solib_trampoline, sect, objfile); + unrelocated_addr (symaddr), + mst_solib_trampoline, sect, objfile); if (msym != NULL) { msym->filename = filesymname; @@ -477,7 +480,7 @@ elf_symtab_read (minimal_symbol_reader &reader, continue; /* Skip this symbol. */ } msym = record_minimal_symbol - (reader, sym->name, copy_names, symaddr, + (reader, sym->name, copy_names, unrelocated_addr (symaddr), ms_type, sym->section, objfile); if (msym) @@ -509,8 +512,8 @@ elf_symtab_read (minimal_symbol_reader &reader, && (elf_sym->version & VERSYM_HIDDEN) == 0) record_minimal_symbol (reader, gdb::string_view (sym->name, len), - true, symaddr, ms_type, sym->section, - objfile); + true, unrelocated_addr (symaddr), + ms_type, sym->section, objfile); else if (is_plt) { /* For @plt symbols, also record a trampoline to the @@ -523,7 +526,8 @@ elf_symtab_read (minimal_symbol_reader &reader, mtramp = record_minimal_symbol (reader, gdb::string_view (sym->name, len), true, - symaddr, mst_solib_trampoline, sym->section, objfile); + unrelocated_addr (symaddr), + mst_solib_trampoline, sym->section, objfile); if (mtramp) { mtramp->set_size (msym->size()); @@ -641,8 +645,8 @@ elf_rel_plt_read (minimal_symbol_reader &reader, string_buffer.append (got_suffix, got_suffix + got_suffix_len); msym = record_minimal_symbol (reader, string_buffer, - true, address, mst_slot_got_plt, - msym_section, objfile); + true, unrelocated_addr (address), + mst_slot_got_plt, msym_section, objfile); if (msym) msym->set_size (ptr_size); } diff --git a/gdb/findvar.c b/gdb/findvar.c index 60b5ca3faf3..97cc9ba7660 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -754,9 +754,9 @@ language_defn::read_var_value (struct symbol *var, a TLS variable. */ if (obj_section == NULL || (obj_section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) - addr = bmsym.minsym->value_raw_address (); + addr = CORE_ADDR (bmsym.minsym->value_raw_address ()); else - addr = bmsym.value_address (); + addr = bmsym.value_address (); if (overlay_debugging) addr = symbol_overlayed_address (addr, obj_section); /* Determine address of TLS variable. */ diff --git a/gdb/machoread.c b/gdb/machoread.c index e8cae810788..9735de80d57 100644 --- a/gdb/machoread.c +++ b/gdb/machoread.c @@ -98,11 +98,11 @@ macho_symtab_add_minsym (minimal_symbol_reader &reader, if (sym->flags & (BSF_GLOBAL | BSF_LOCAL | BSF_WEAK)) { - CORE_ADDR symaddr; + unrelocated_addr symaddr; enum minimal_symbol_type ms_type; /* Bfd symbols are section relative. */ - symaddr = sym->value + sym->section->vma; + symaddr = unrelocated_addr (sym->value + sym->section->vma); if (sym->section == bfd_abs_section_ptr) ms_type = mst_abs; diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index e0415587646..8faf482b09c 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -2235,7 +2235,7 @@ function_outside_compilation_unit_complaint (const char *arg1) static void record_minimal_symbol (minimal_symbol_reader &reader, - const char *name, const CORE_ADDR address, + const char *name, const unrelocated_addr address, enum minimal_symbol_type ms_type, int storage_class, struct objfile *objfile) { @@ -2461,7 +2461,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, for (; ext_in < ext_in_end; ext_in++) { enum minimal_symbol_type ms_type = mst_text; - CORE_ADDR svalue = ext_in->asym.value; + unrelocated_addr svalue = unrelocated_addr (ext_in->asym.value); /* The Irix 5 native tools seem to sometimes generate bogus external symbols. */ @@ -2701,7 +2701,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, if (sh.st == stStaticProc) { namestring = debug_info->ss + fh->issBase + sh.iss; - record_minimal_symbol (reader, namestring, sh.value, + record_minimal_symbol (reader, namestring, + unrelocated_addr (sh.value), mst_file_text, sh.sc, objfile); } @@ -2747,7 +2748,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, case scPData: case scXData: namestring = debug_info->ss + fh->issBase + sh.iss; - record_minimal_symbol (reader, namestring, sh.value, + record_minimal_symbol (reader, namestring, + unrelocated_addr (sh.value), mst_file_data, sh.sc, objfile); break; @@ -2756,7 +2758,8 @@ parse_partial_symbols (minimal_symbol_reader &reader, /* FIXME! Shouldn't this use cases for bss, then have the default be abs? */ namestring = debug_info->ss + fh->issBase + sh.iss; - record_minimal_symbol (reader, namestring, sh.value, + record_minimal_symbol (reader, namestring, + unrelocated_addr (sh.value), mst_file_bss, sh.sc, objfile); break; @@ -3369,7 +3372,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, { char *sym_name; enum address_class theclass; - CORE_ADDR minsym_value; + unrelocated_addr minsym_value; short section = -1; (*swap_sym_in) (cur_bfd, @@ -3396,7 +3399,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, sym_name = debug_info->ss + fh->issBase + sh.iss; - minsym_value = sh.value; + minsym_value = unrelocated_addr (sh.value); switch (sh.sc) { diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 02e36cc6dd2..67bd4903a3e 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -672,19 +672,20 @@ lookup_minimal_symbol_by_pc_name (CORE_ADDR pc, const char *name, /* A helper function that makes *PC section-relative. This searches the sections of OBJFILE and if *PC is in a section, it subtracts - the section offset and returns true. Otherwise it returns - false. */ + the section offset, stores the result into UNREL_ADDR, and returns + true. Otherwise it returns false. */ static int -frob_address (struct objfile *objfile, CORE_ADDR *pc) +frob_address (struct objfile *objfile, CORE_ADDR pc, + unrelocated_addr *unrel_addr) { struct obj_section *iter; ALL_OBJFILE_OSECTIONS (objfile, iter) { - if (*pc >= iter->addr () && *pc < iter->endaddr ()) + if (pc >= iter->addr () && pc < iter->endaddr ()) { - *pc -= iter->offset (); + *unrel_addr = unrelocated_addr (pc - iter->offset ()); return 1; } } @@ -793,15 +794,16 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio Warning: this code is trickier than it would appear at first. */ - if (frob_address (objfile, &pc) - && pc >= msymbol[lo].value_raw_address ()) + unrelocated_addr unrel_pc; + if (frob_address (objfile, pc, &unrel_pc) + && unrel_pc >= msymbol[lo].value_raw_address ()) { - while (msymbol[hi].value_raw_address () > pc) + while (msymbol[hi].value_raw_address () > unrel_pc) { /* pc is still strictly less than highest address. */ /* Note "new" will always be >= lo. */ newobj = (lo + hi) / 2; - if ((msymbol[newobj].value_raw_address () >= pc) + if ((msymbol[newobj].value_raw_address () >= unrel_pc) || (lo == newobj)) { hi = newobj; @@ -894,10 +896,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio the cancellable variants, but both have sizes. */ if (hi > 0 && msymbol[hi].size () != 0 - && pc >= (msymbol[hi].value_raw_address () - + msymbol[hi].size ()) - && pc < (msymbol[hi - 1].value_raw_address () - + msymbol[hi - 1].size ())) + && unrel_pc >= msymbol[hi].value_raw_end_address () + && unrel_pc < msymbol[hi - 1].value_raw_end_address ()) { hi--; continue; @@ -926,8 +926,7 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio if (hi >= 0 && msymbol[hi].size () != 0 - && pc >= (msymbol[hi].value_raw_address () - + msymbol[hi].size ())) + && unrel_pc >= msymbol[hi].value_raw_end_address ()) { if (best_zero_sized != -1) hi = best_zero_sized; @@ -1092,7 +1091,7 @@ minimal_symbol_reader::~minimal_symbol_reader () /* See minsyms.h. */ void -minimal_symbol_reader::record (const char *name, CORE_ADDR address, +minimal_symbol_reader::record (const char *name, unrelocated_addr address, enum minimal_symbol_type ms_type) { int section; @@ -1152,7 +1151,7 @@ mst_str (minimal_symbol_type t) struct minimal_symbol * minimal_symbol_reader::record_full (gdb::string_view name, - bool copy_name, CORE_ADDR address, + bool copy_name, unrelocated_addr address, enum minimal_symbol_type ms_type, int section) { @@ -1178,8 +1177,9 @@ minimal_symbol_reader::record_full (gdb::string_view name, return (NULL); symtab_create_debug_printf_v ("recording minsym: %-21s %18s %4d %.*s", - mst_str (ms_type), hex_string (address), section, - (int) name.size (), name.data ()); + mst_str (ms_type), + hex_string (LONGEST (address)), + section, (int) name.size (), name.data ()); if (m_msym_bunch_index == BUNCH_SIZE) { @@ -1198,7 +1198,7 @@ minimal_symbol_reader::record_full (gdb::string_view name, else msymbol->m_name = name.data (); - msymbol->set_value_address (address); + msymbol->set_unrelocated_address (address); msymbol->set_section_index (section); msymbol->set_type (ms_type); diff --git a/gdb/minsyms.h b/gdb/minsyms.h index e9081495eb1..59c276f01f3 100644 --- a/gdb/minsyms.h +++ b/gdb/minsyms.h @@ -120,7 +120,7 @@ class minimal_symbol_reader struct minimal_symbol *record_full (gdb::string_view name, bool copy_name, - CORE_ADDR address, + unrelocated_addr address, enum minimal_symbol_type ms_type, int section); @@ -131,7 +131,7 @@ class minimal_symbol_reader This variant does not return the new symbol. */ - void record (const char *name, CORE_ADDR address, + void record (const char *name, unrelocated_addr address, enum minimal_symbol_type ms_type); /* Like record_full, but: @@ -140,7 +140,7 @@ class minimal_symbol_reader This variant does not return the new symbol. */ - void record_with_info (const char *name, CORE_ADDR address, + void record_with_info (const char *name, unrelocated_addr address, enum minimal_symbol_type ms_type, int section) { diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index 52799b926d3..b86bf61f4d1 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -436,12 +436,14 @@ mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym) if (ELF_ST_IS_MICROMIPS (st_other)) { SET_MSYMBOL_TARGET_FLAG_MICROMIPS (msym); - msym->set_value_address (msym->value_raw_address () | 1); + CORE_ADDR fixed = CORE_ADDR (msym->value_raw_address ()) | 1; + msym->set_unrelocated_address (unrelocated_addr (fixed)); } else if (ELF_ST_IS_MIPS16 (st_other)) { SET_MSYMBOL_TARGET_FLAG_MIPS16 (msym); - msym->set_value_address (msym->value_raw_address () | 1); + CORE_ADDR fixed = CORE_ADDR (msym->value_raw_address ()) | 1; + msym->set_unrelocated_address (unrelocated_addr (fixed)); } } diff --git a/gdb/mipsread.c b/gdb/mipsread.c index 5c2c88e81c2..efff2841974 100644 --- a/gdb/mipsread.c +++ b/gdb/mipsread.c @@ -358,7 +358,7 @@ read_alphacoff_dynamic_symtab (minimal_symbol_reader &reader, } } - reader.record (name, sym_value, ms_type); + reader.record (name, unrelocated_addr (sym_value), ms_type); } } diff --git a/gdb/parse.c b/gdb/parse.c index 24db3ca57d9..4bce63c58f7 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -115,7 +115,7 @@ find_minsym_type_and_address (minimal_symbol *msymbol, { /* Addresses of TLS symbols are really offsets into a per-objfile/per-thread storage block. */ - addr = bound_msym.minsym->value_raw_address (); + addr = CORE_ADDR (bound_msym.minsym->value_raw_address ()); } else if (msymbol_is_function (objfile, msymbol, &addr)) { diff --git a/gdb/printcmd.c b/gdb/printcmd.c index ae59a14aeb1..d4b3cce696f 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -1824,7 +1824,7 @@ info_address_command (const char *exp, int from_tty) if (section && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) { - load_addr = msym.minsym->value_raw_address (); + load_addr = CORE_ADDR (msym.minsym->value_raw_address ()); gdb_printf (_("a thread-local variable at offset %s " "in the thread-local storage for `%s'"), paddress (gdbarch, load_addr), diff --git a/gdb/solib.c b/gdb/solib.c index e6bccc85ca7..e839b634e04 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -1515,7 +1515,7 @@ gdb_bfd_lookup_symbol_from_symtab msym.set_value_address (symaddr); gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym); - symaddr = msym.value_raw_address (); + symaddr = CORE_ADDR (msym.value_raw_address ()); } /* BFD symbols are section relative. */ diff --git a/gdb/symmisc.c b/gdb/symmisc.c index 54dc570d282..df2bdb0d7c3 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -201,7 +201,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile) /* Use the relocated address as shown in the symbol here -- do not try to respect copy relocations. */ - CORE_ADDR addr = (msymbol->value_raw_address () + CORE_ADDR addr = (CORE_ADDR (msymbol->value_raw_address ()) + objfile->section_offsets[msymbol->section_index ()]); gdb_puts (paddress (gdbarch, addr), outfile); gdb_printf (outfile, " %s", msymbol->linkage_name ()); diff --git a/gdb/symtab.c b/gdb/symtab.c index 8ab1f58affe..ac6535fe983 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -424,7 +424,7 @@ minimal_symbol::value_address (objfile *objfile) const if (this->maybe_copied) return get_msymbol_address (objfile, this); else - return (this->value_raw_address () + return (CORE_ADDR (this->value_raw_address ()) + objfile->section_offsets[this->section_index ()]); } diff --git a/gdb/symtab.h b/gdb/symtab.h index 4d760863081..1f3e0b87b19 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -754,10 +754,21 @@ struct minimal_symbol : public general_symbol_info offsets from OBJFILE. */ CORE_ADDR value_address (objfile *objfile) const; + /* It does not make sense to call this for minimal symbols, as they + are stored unrelocated. */ + CORE_ADDR value_address () const = delete; + /* The unrelocated address of the minimal symbol. */ - CORE_ADDR value_raw_address () const + unrelocated_addr value_raw_address () const { - return m_value.address; + return m_value.unrel_addr; + } + + /* The unrelocated address just after the end of the the minimal + symbol. */ + unrelocated_addr value_raw_end_address () const + { + return unrelocated_addr (CORE_ADDR (value_raw_address ()) + size ()); } /* Return this minimal symbol's type. */ diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 5c20468e9e4..52ed13062f2 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -840,7 +840,7 @@ enter_line_range (struct subfile *subfile, unsigned beginoffset, static void record_minimal_symbol (minimal_symbol_reader &reader, - const char *name, CORE_ADDR address, + const char *name, unrelocated_addr address, enum minimal_symbol_type ms_type, int n_scnum, struct objfile *objfile) @@ -2055,7 +2055,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, unsigned int ssymnum; const char *last_csect_name = NULL; /* Last seen csect's name and value. */ - CORE_ADDR last_csect_val = 0; + unrelocated_addr last_csect_val = unrelocated_addr (0); int last_csect_sec = 0; int misc_func_recorded = 0; /* true if any misc. function. */ int textlow_not_set = 1; @@ -2168,7 +2168,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, || namestring[0] == '@')) { last_csect_name = namestring; - last_csect_val = symbol.n_value; + last_csect_val = unrelocated_addr (symbol.n_value); last_csect_sec = symbol.n_scnum; } if (pst != NULL) @@ -2193,7 +2193,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, table, except for section symbols. */ if (*namestring != '.') record_minimal_symbol - (reader, namestring, symbol.n_value, + (reader, namestring, unrelocated_addr (symbol.n_value), sclass == C_HIDEXT ? mst_file_data : mst_data, symbol.n_scnum, objfile); break; @@ -2231,7 +2231,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, main_aux[0].x_sym.x_fcnary.x_fcn.x_lnnoptr; record_minimal_symbol - (reader, namestring, symbol.n_value, + (reader, namestring, unrelocated_addr (symbol.n_value), sclass == C_HIDEXT ? mst_file_text : mst_text, symbol.n_scnum, objfile); misc_func_recorded = 1; @@ -2246,7 +2246,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, symbols, we will choose mst_text over mst_solib_trampoline. */ record_minimal_symbol - (reader, namestring, symbol.n_value, + (reader, namestring, unrelocated_addr (symbol.n_value), mst_solib_trampoline, symbol.n_scnum, objfile); misc_func_recorded = 1; break; @@ -2268,7 +2268,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, XMC_BS might be possible too. */ if (*namestring != '.') record_minimal_symbol - (reader, namestring, symbol.n_value, + (reader, namestring, unrelocated_addr (symbol.n_value), sclass == C_HIDEXT ? mst_file_data : mst_data, symbol.n_scnum, objfile); break; @@ -2284,7 +2284,7 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, table, except for section symbols. */ if (*namestring != '.') record_minimal_symbol - (reader, namestring, symbol.n_value, + (reader, namestring, unrelocated_addr (symbol.n_value), sclass == C_HIDEXT ? mst_file_bss : mst_bss, symbol.n_scnum, objfile); break; From patchwork Tue Mar 21 19:18:31 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tom Tromey X-Patchwork-Id: 66715 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 D508E38493E9 for ; Tue, 21 Mar 2023 19:19:07 +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 2BAAA3858C74 for ; Tue, 21 Mar 2023 19:18:33 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 2BAAA3858C74 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 8AE2910048524 for ; Tue, 21 Mar 2023 19:18:32 +0000 (UTC) Received: from box5379.bluehost.com ([162.241.216.53]) by cmsmtp with ESMTP id ehVApLYuQNAy0ehVApdEp0; 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=3CBxdbyWMqYYJz2d0yAA: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=wQTkO7aHiCIiw3JTMq7bP0j7mnX3W2+l5II2g+ABTP0=; b=qlScr+Cuv7O0f7DamcmYV4sXnO 9aL+1Q9e2frPwODaeBG/ZdsXrK7oikQVMVDDpofKawc2J7iML+MCoFH2jOWk3LNoejKw+2AuS5f1/ WEwOuZZ5GKnCFWvQnQkMdH3ea; 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-A2 for gdb-patches@sourceware.org; Tue, 21 Mar 2023 13:18:32 -0600 From: Tom Tromey Date: Tue, 21 Mar 2023 13:18:31 -0600 Subject: [PATCH 6/6] Rename "raw" to "unrelocated" MIME-Version: 1.0 Message-Id: <20230321-submit-unrelocated-type-v1-6-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-A2 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: 7 X-Source-Cap: ZWx5bnJvYmk7ZWx5bnJvYmk7Ym94NTM3OS5ibHVlaG9zdC5jb20= X-Local-Domain: yes X-Spam-Status: No, score=-3024.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, GIT_PATCH_0, JMQ_SPF_NEUTRAL, KAM_STOCKGEN, 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" Per an earlier discussion, this patch renames the existing "raw" APIs to use the word "unrelocated" instead. --- gdb/coff-pe-read.c | 2 +- gdb/dbxread.c | 33 +++++++++++++++++---------------- gdb/findvar.c | 2 +- gdb/mdebugread.c | 14 +++++++------- gdb/minsyms.c | 40 ++++++++++++++++++++-------------------- gdb/mips-tdep.c | 4 ++-- gdb/parse.c | 2 +- gdb/printcmd.c | 2 +- gdb/psympriv.h | 4 ++-- gdb/psymtab.c | 4 ++-- gdb/solib.c | 2 +- gdb/symmisc.c | 2 +- gdb/symtab.c | 2 +- gdb/symtab.h | 6 +++--- gdb/xcoffread.c | 5 +++-- 15 files changed, 63 insertions(+), 61 deletions(-) diff --git a/gdb/coff-pe-read.c b/gdb/coff-pe-read.c index 07cd216b4b2..fdd062f1b2e 100644 --- a/gdb/coff-pe-read.c +++ b/gdb/coff-pe-read.c @@ -210,7 +210,7 @@ add_pe_forwarded_sym (minimal_symbol_reader &reader, " \"%s\" in dll \"%s\", pointing to \"%s\"\n"), sym_name, dll_name, forward_qualified_name.c_str ()); - unrelocated_addr vma = msymbol.minsym->value_raw_address (); + unrelocated_addr vma = msymbol.minsym->unrelocated_address (); msymtype = msymbol.minsym->type (); section = msymbol.minsym->section_index (); diff --git a/gdb/dbxread.c b/gdb/dbxread.c index 9df9320bc7b..f7c44c14ae2 100644 --- a/gdb/dbxread.c +++ b/gdb/dbxread.c @@ -1131,13 +1131,13 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (past_first_source_file && pst /* The gould NP1 uses low values for .o and -l symbols which are not the address. */ - && unrel_val >= pst->raw_text_low ()) + && unrel_val >= pst->unrelocated_text_low ()) { dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - unrel_val > pst->raw_text_high () - ? unrel_val : pst->raw_text_high (), + unrel_val > pst->unrelocated_text_high () + ? unrel_val : pst->unrelocated_text_high (), dependency_list, dependencies_used, textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1253,8 +1253,9 @@ read_dbx_symtab (minimal_symbol_reader &reader, dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - (unrel_value > pst->raw_text_high () - ? unrel_value : pst->raw_text_high ()), + unrel_value > pst->unrelocated_text_high () + ? unrel_value + : pst->unrelocated_text_high (), dependency_list, dependencies_used, prev_textlow_not_set); pst = (legacy_psymtab *) 0; @@ -1427,8 +1428,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, function relative stabs, or the address of the function's end for old style stabs. */ valu = unrelocated_addr (nlist.n_value + last_function_start); - if (pst->raw_text_high () == unrelocated_addr (0) - || valu > pst->raw_text_high ()) + if (pst->unrelocated_text_high () == unrelocated_addr (0) + || valu > pst->unrelocated_text_high ()) pst->set_text_high (valu); break; } @@ -1682,7 +1683,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, objfile); if (minsym.minsym != NULL) nlist.n_value - = CORE_ADDR (minsym.minsym->value_raw_address ()); + = CORE_ADDR (minsym.minsym->unrelocated_address ()); } if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) @@ -1703,7 +1704,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst && (textlow_not_set || (unrelocated_addr (nlist.n_value) - < pst->raw_text_low () + < pst->unrelocated_text_low () && (nlist.n_value != 0)))) { pst->set_text_low (unrelocated_addr (nlist.n_value)); @@ -1741,7 +1742,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, objfile); if (minsym.minsym != NULL) nlist.n_value - = CORE_ADDR (minsym.minsym->value_raw_address ()); + = CORE_ADDR (minsym.minsym->unrelocated_address ()); } if (pst && textlow_not_set && gdbarch_sofun_address_maybe_missing (gdbarch)) @@ -1762,7 +1763,7 @@ read_dbx_symtab (minimal_symbol_reader &reader, if (pst && (textlow_not_set || (unrelocated_addr (nlist.n_value) - < pst->raw_text_low () + < pst->unrelocated_text_low () && (nlist.n_value != 0)))) { pst->set_text_low (unrelocated_addr (nlist.n_value)); @@ -1957,8 +1958,8 @@ read_dbx_symtab (minimal_symbol_reader &reader, dbx_end_psymtab (objfile, partial_symtabs, pst, psymtab_include_list, includes_used, symnum * symbol_size, - (text_end > pst->raw_text_high () - ? text_end : pst->raw_text_high ()), + (text_end > pst->unrelocated_text_high () + ? text_end : pst->unrelocated_text_high ()), dependency_list, dependencies_used, textlow_not_set); } } @@ -2058,7 +2059,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, if (minsym.minsym) pst->set_text_high - (unrelocated_addr (CORE_ADDR (minsym.minsym->value_raw_address ()) + (unrelocated_addr (CORE_ADDR (minsym.minsym->unrelocated_address ()) + minsym.minsym->size ())); last_function_name = NULL; @@ -2068,7 +2069,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, ; /* This test will be true if the last .o file is only data. */ else if (textlow_not_set) - pst->set_text_low (pst->raw_text_high ()); + pst->set_text_low (pst->unrelocated_text_high ()); else { /* If we know our own starting text address, then walk through all other @@ -2078,7 +2079,7 @@ dbx_end_psymtab (struct objfile *objfile, psymtab_storage *partial_symtabs, for (partial_symtab *p1 : partial_symtabs->range ()) if (!p1->text_high_valid && p1->text_low_valid && p1 != pst) - p1->set_text_high (pst->raw_text_low ()); + p1->set_text_high (pst->unrelocated_text_low ()); } /* End of kludge for patching Solaris textlow and texthigh. */ diff --git a/gdb/findvar.c b/gdb/findvar.c index 97cc9ba7660..1b7aa22888c 100644 --- a/gdb/findvar.c +++ b/gdb/findvar.c @@ -754,7 +754,7 @@ language_defn::read_var_value (struct symbol *var, a TLS variable. */ if (obj_section == NULL || (obj_section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) - addr = CORE_ADDR (bmsym.minsym->value_raw_address ()); + addr = CORE_ADDR (bmsym.minsym->unrelocated_address ()); else addr = bmsym.value_address (); if (overlay_debugging) diff --git a/gdb/mdebugread.c b/gdb/mdebugread.c index 8faf482b09c..697ce0b5b1a 100644 --- a/gdb/mdebugread.c +++ b/gdb/mdebugread.c @@ -2659,7 +2659,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, psymtab_language = prev_language; PST_PRIVATE (pst)->pst_language = psymtab_language; - pst->set_text_high (pst->raw_text_low ()); + pst->set_text_high (pst->unrelocated_text_low ()); /* For stabs-in-ecoff files, the second symbol must be @stab. This symbol is emitted by mips-tfile to signal that the @@ -2726,9 +2726,9 @@ parse_partial_symbols (minimal_symbol_reader &reader, /* Kludge for Irix 5.2 zero fh->adr. */ if (!relocatable && (!pst->text_low_valid - || procaddr < pst->raw_text_low ())) + || procaddr < pst->unrelocated_text_low ())) pst->set_text_low (procaddr); - if (high > pst->raw_text_high ()) + if (high > pst->unrelocated_text_high ()) pst->set_text_high (high); } } @@ -3319,7 +3319,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, { unrelocated_addr unrel_value = unrelocated_addr (sh.value); - if (unrel_value > save_pst->raw_text_high ()) + if (unrel_value > save_pst->unrelocated_text_high ()) save_pst->set_text_high (unrel_value); } continue; @@ -3511,11 +3511,11 @@ parse_partial_symbols (minimal_symbol_reader &reader, /* Kludge for Irix 5.2 zero fh->adr. */ if (!relocatable && (!pst->text_low_valid - || procaddr < pst->raw_text_low ())) + || procaddr < pst->unrelocated_text_low ())) pst->set_text_low (procaddr); high = unrelocated_addr (CORE_ADDR (procaddr) + sh.value); - if (high > pst->raw_text_high ()) + if (high > pst->unrelocated_text_high ()) pst->set_text_high (high); continue; @@ -3696,7 +3696,7 @@ parse_partial_symbols (minimal_symbol_reader &reader, fdr_to_pst[f_idx].pst = dbx_end_psymtab (objfile, partial_symtabs, save_pst, psymtab_include_list, includes_used, - -1, save_pst->raw_text_high (), + -1, save_pst->unrelocated_text_high (), dependency_list, dependencies_used, textlow_not_set); includes_used = 0; diff --git a/gdb/minsyms.c b/gdb/minsyms.c index 67bd4903a3e..3fa07f47b9f 100644 --- a/gdb/minsyms.c +++ b/gdb/minsyms.c @@ -796,14 +796,14 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio unrelocated_addr unrel_pc; if (frob_address (objfile, pc, &unrel_pc) - && unrel_pc >= msymbol[lo].value_raw_address ()) + && unrel_pc >= msymbol[lo].unrelocated_address ()) { - while (msymbol[hi].value_raw_address () > unrel_pc) + while (msymbol[hi].unrelocated_address () > unrel_pc) { /* pc is still strictly less than highest address. */ /* Note "new" will always be >= lo. */ newobj = (lo + hi) / 2; - if ((msymbol[newobj].value_raw_address () >= unrel_pc) + if ((msymbol[newobj].unrelocated_address () >= unrel_pc) || (lo == newobj)) { hi = newobj; @@ -818,8 +818,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio hi to point to the last one. That way we can find the right symbol if it has an index greater than hi. */ while (hi < objfile->per_bfd->minimal_symbol_count - 1 - && (msymbol[hi].value_raw_address () - == msymbol[hi + 1].value_raw_address ())) + && (msymbol[hi].unrelocated_address () + == msymbol[hi + 1].unrelocated_address ())) hi++; /* Skip various undesirable symbols. */ @@ -866,8 +866,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio && msymbol[hi].type () != want_type && msymbol[hi - 1].type () == want_type && (msymbol[hi].size () == msymbol[hi - 1].size ()) - && (msymbol[hi].value_raw_address () - == msymbol[hi - 1].value_raw_address ()) + && (msymbol[hi].unrelocated_address () + == msymbol[hi - 1].unrelocated_address ()) && (msymbol[hi].obj_section (objfile) == msymbol[hi - 1].obj_section (objfile))) { @@ -896,8 +896,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio the cancellable variants, but both have sizes. */ if (hi > 0 && msymbol[hi].size () != 0 - && unrel_pc >= msymbol[hi].value_raw_end_address () - && unrel_pc < msymbol[hi - 1].value_raw_end_address ()) + && unrel_pc >= msymbol[hi].unrelocated_end_address () + && unrel_pc < msymbol[hi - 1].unrelocated_end_address ()) { hi--; continue; @@ -926,7 +926,7 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio if (hi >= 0 && msymbol[hi].size () != 0 - && unrel_pc >= msymbol[hi].value_raw_end_address ()) + && unrel_pc >= msymbol[hi].unrelocated_end_address ()) { if (best_zero_sized != -1) hi = best_zero_sized; @@ -937,8 +937,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio if (previous != nullptr) { if (previous->minsym == nullptr - || (msymbol[hi].value_raw_address () - > previous->minsym->value_raw_address ())) + || (msymbol[hi].unrelocated_address () + > previous->minsym->unrelocated_address ())) { previous->minsym = &msymbol[hi]; previous->objfile = objfile; @@ -955,8 +955,8 @@ lookup_minimal_symbol_by_pc_section (CORE_ADDR pc_in, struct obj_section *sectio if (hi >= 0 && ((best_symbol == NULL) || - (best_symbol->value_raw_address () < - msymbol[hi].value_raw_address ()))) + (best_symbol->unrelocated_address () < + msymbol[hi].unrelocated_address ()))) { best_symbol = &msymbol[hi]; best_objfile = objfile; @@ -1222,11 +1222,11 @@ static inline bool minimal_symbol_is_less_than (const minimal_symbol &fn1, const minimal_symbol &fn2) { - if ((&fn1)->value_raw_address () < (&fn2)->value_raw_address ()) + if ((&fn1)->unrelocated_address () < (&fn2)->unrelocated_address ()) { return true; /* addr 1 is less than addr 2. */ } - else if ((&fn1)->value_raw_address () > (&fn2)->value_raw_address ()) + else if ((&fn1)->unrelocated_address () > (&fn2)->unrelocated_address ()) { return false; /* addr 1 is greater than addr 2. */ } @@ -1286,8 +1286,8 @@ compact_minimal_symbols (struct minimal_symbol *msymbol, int mcount, copyfrom = copyto = msymbol; while (copyfrom < msymbol + mcount - 1) { - if (copyfrom->value_raw_address () - == (copyfrom + 1)->value_raw_address () + if (copyfrom->unrelocated_address () + == (copyfrom + 1)->unrelocated_address () && (copyfrom->section_index () == (copyfrom + 1)->section_index ()) && strcmp (copyfrom->linkage_name (), @@ -1593,8 +1593,8 @@ minimal_symbol_upper_bound (struct bound_minimal_symbol minsym) section = msymbol->section_index (); for (iter = msymbol + 1; iter != past_the_end; ++iter) { - if ((iter->value_raw_address () - != msymbol->value_raw_address ()) + if ((iter->unrelocated_address () + != msymbol->unrelocated_address ()) && iter->section_index () == section) break; } diff --git a/gdb/mips-tdep.c b/gdb/mips-tdep.c index b86bf61f4d1..7092b266db3 100644 --- a/gdb/mips-tdep.c +++ b/gdb/mips-tdep.c @@ -436,13 +436,13 @@ mips_elf_make_msymbol_special (asymbol * sym, struct minimal_symbol *msym) if (ELF_ST_IS_MICROMIPS (st_other)) { SET_MSYMBOL_TARGET_FLAG_MICROMIPS (msym); - CORE_ADDR fixed = CORE_ADDR (msym->value_raw_address ()) | 1; + CORE_ADDR fixed = CORE_ADDR (msym->unrelocated_address ()) | 1; msym->set_unrelocated_address (unrelocated_addr (fixed)); } else if (ELF_ST_IS_MIPS16 (st_other)) { SET_MSYMBOL_TARGET_FLAG_MIPS16 (msym); - CORE_ADDR fixed = CORE_ADDR (msym->value_raw_address ()) | 1; + CORE_ADDR fixed = CORE_ADDR (msym->unrelocated_address ()) | 1; msym->set_unrelocated_address (unrelocated_addr (fixed)); } } diff --git a/gdb/parse.c b/gdb/parse.c index 4bce63c58f7..c0c9fa0a448 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -115,7 +115,7 @@ find_minsym_type_and_address (minimal_symbol *msymbol, { /* Addresses of TLS symbols are really offsets into a per-objfile/per-thread storage block. */ - addr = CORE_ADDR (bound_msym.minsym->value_raw_address ()); + addr = CORE_ADDR (bound_msym.minsym->unrelocated_address ()); } else if (msymbol_is_function (objfile, msymbol, &addr)) { diff --git a/gdb/printcmd.c b/gdb/printcmd.c index d4b3cce696f..dd92e31d31b 100644 --- a/gdb/printcmd.c +++ b/gdb/printcmd.c @@ -1824,7 +1824,7 @@ info_address_command (const char *exp, int from_tty) if (section && (section->the_bfd_section->flags & SEC_THREAD_LOCAL) != 0) { - load_addr = CORE_ADDR (msym.minsym->value_raw_address ()); + load_addr = CORE_ADDR (msym.minsym->unrelocated_address ()); gdb_printf (_("a thread-local variable at offset %s " "in the thread-local storage for `%s'"), paddress (gdbarch, load_addr), diff --git a/gdb/psympriv.h b/gdb/psympriv.h index 8f059dc5975..17c45e9220a 100644 --- a/gdb/psympriv.h +++ b/gdb/psympriv.h @@ -173,14 +173,14 @@ struct partial_symtab /* Return the unrelocated low text address of this partial_symtab. */ - unrelocated_addr raw_text_low () const + unrelocated_addr unrelocated_text_low () const { return m_text_low; } /* Return the unrelocated_addr high text address of this partial_symtab. */ - unrelocated_addr raw_text_high () const + unrelocated_addr unrelocated_text_high () const { return m_text_high; } diff --git a/gdb/psymtab.c b/gdb/psymtab.c index c74280761dd..64b67078641 100644 --- a/gdb/psymtab.c +++ b/gdb/psymtab.c @@ -1115,7 +1115,7 @@ partial_symtab::partial_symtab (const char *filename, : partial_symtab (filename, partial_symtabs, objfile_per_bfd) { set_text_low (textlow); - set_text_high (raw_text_low ()); /* default */ + set_text_high (unrelocated_text_low ()); /* default */ } /* Perform "finishing up" operations of a partial symtab. */ @@ -1654,7 +1654,7 @@ maintenance_check_psymtabs (const char *ignore, int from_tty) gdb_printf (" psymtab\n"); } } - if (ps->raw_text_high () != unrelocated_addr (0) + if (ps->unrelocated_text_high () != unrelocated_addr (0) && (ps->text_low (objfile) < b->start () || ps->text_high (objfile) > b->end ())) { diff --git a/gdb/solib.c b/gdb/solib.c index e839b634e04..761cace2306 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -1515,7 +1515,7 @@ gdb_bfd_lookup_symbol_from_symtab msym.set_value_address (symaddr); gdbarch_elf_make_msymbol_special (gdbarch, sym, &msym); - symaddr = CORE_ADDR (msym.value_raw_address ()); + symaddr = CORE_ADDR (msym.unrelocated_address ()); } /* BFD symbols are section relative. */ diff --git a/gdb/symmisc.c b/gdb/symmisc.c index df2bdb0d7c3..65564712282 100644 --- a/gdb/symmisc.c +++ b/gdb/symmisc.c @@ -201,7 +201,7 @@ dump_msymbols (struct objfile *objfile, struct ui_file *outfile) /* Use the relocated address as shown in the symbol here -- do not try to respect copy relocations. */ - CORE_ADDR addr = (CORE_ADDR (msymbol->value_raw_address ()) + CORE_ADDR addr = (CORE_ADDR (msymbol->unrelocated_address ()) + objfile->section_offsets[msymbol->section_index ()]); gdb_puts (paddress (gdbarch, addr), outfile); gdb_printf (outfile, " %s", msymbol->linkage_name ()); diff --git a/gdb/symtab.c b/gdb/symtab.c index ac6535fe983..42e7f5cd908 100644 --- a/gdb/symtab.c +++ b/gdb/symtab.c @@ -424,7 +424,7 @@ minimal_symbol::value_address (objfile *objfile) const if (this->maybe_copied) return get_msymbol_address (objfile, this); else - return (CORE_ADDR (this->value_raw_address ()) + return (CORE_ADDR (this->unrelocated_address ()) + objfile->section_offsets[this->section_index ()]); } diff --git a/gdb/symtab.h b/gdb/symtab.h index 1f3e0b87b19..e55a613bd84 100644 --- a/gdb/symtab.h +++ b/gdb/symtab.h @@ -759,16 +759,16 @@ struct minimal_symbol : public general_symbol_info CORE_ADDR value_address () const = delete; /* The unrelocated address of the minimal symbol. */ - unrelocated_addr value_raw_address () const + unrelocated_addr unrelocated_address () const { return m_value.unrel_addr; } /* The unrelocated address just after the end of the the minimal symbol. */ - unrelocated_addr value_raw_end_address () const + unrelocated_addr unrelocated_end_address () const { - return unrelocated_addr (CORE_ADDR (value_raw_address ()) + size ()); + return unrelocated_addr (CORE_ADDR (unrelocated_address ()) + size ()); } /* Return this minimal symbol's type. */ diff --git a/gdb/xcoffread.c b/gdb/xcoffread.c index 52ed13062f2..131a4e398be 100644 --- a/gdb/xcoffread.c +++ b/gdb/xcoffread.c @@ -2177,11 +2177,12 @@ scan_xcoff_symtab (minimal_symbol_reader &reader, = unrelocated_addr (symbol.n_value + csect_aux.x_csect.x_scnlen.l); - if (highval > pst->raw_text_high ()) + if (highval > pst->unrelocated_text_high ()) pst->set_text_high (highval); unrelocated_addr loval = unrelocated_addr (symbol.n_value); - if (!pst->text_low_valid || loval < pst->raw_text_low ()) + if (!pst->text_low_valid + || loval < pst->unrelocated_text_low ()) pst->set_text_low (loval); } misc_func_recorded = 0;