From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp.polymtl.ca (smtp.polymtl.ca [132.207.4.11]) by sourceware.org (Postfix) with ESMTPS id 257633858C50 for ; Fri, 2 Dec 2022 20:51:20 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 257633858C50 Authentication-Results: sourceware.org; dmarc=pass (p=quarantine dis=none) header.from=polymtl.ca Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=polymtl.ca Received: from simark.ca (simark.ca [158.69.221.121]) (authenticated bits=0) by smtp.polymtl.ca (8.14.7/8.14.7) with ESMTP id 2B2KpEgR025572 (version=TLSv1/SSLv3 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 2 Dec 2022 15:51:19 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 smtp.polymtl.ca 2B2KpEgR025572 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=polymtl.ca; s=default; t=1670014279; bh=CIeULdRgvoR+b7dOHk26y2sg4nnmNlJcruwfX1D9fIQ=; h=Date:Subject:To:References:From:In-Reply-To:From; b=FktxGlwkWvHehpYD6b2cfFexXWTe49m4FmkioS0E9pepNu/iZO2xt4toS2ZxQ0vfR OrxYLb7+sysdSxuNOQKn0nIxExWGQUeo9KU8scGKVQTG9+eWeCfr9Z6Bj4NoX8nyRH 3o3bk6kma6ckAQ5NBHCC//ZaF83AvVT0xy+pLpiE= Received: from [10.0.0.11] (unknown [217.28.27.60]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by simark.ca (Postfix) with ESMTPSA id B856C1E112 for ; Fri, 2 Dec 2022 15:51:14 -0500 (EST) Message-ID: <0fd30882-32f3-1bed-128f-2c6eaa8ce912@polymtl.ca> Date: Fri, 2 Dec 2022 15:51:13 -0500 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.5.0 Subject: Re: [PATCH v1.1 3/3] gdb: remove target_ops parameter from gdbarch_core_read_description Content-Language: en-US To: gdb-patches@sourceware.org References: <20221129025048.44490-1-simon.marchi@polymtl.ca> <20221129025048.44490-3-simon.marchi@polymtl.ca> From: Simon Marchi In-Reply-To: <20221129025048.44490-3-simon.marchi@polymtl.ca> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Poly-FromMTA: (simark.ca [158.69.221.121]) at Fri, 2 Dec 2022 20:51:14 +0000 X-Spam-Status: No, score=-3038.3 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,NICE_REPLY_A,RCVD_IN_MSPIKE_H3,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,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 List-Id: Here's a slightly updated patch. I realized we could do further simplifications in target_auxv_search and callers. >From 868f295627164596ea8c868e6ad07e86e44ee7a1 Mon Sep 17 00:00:00 2001 From: Simon Marchi Date: Mon, 28 Nov 2022 16:09:25 -0500 Subject: [PATCH 3/3] gdb: remove target_ops parameter from gdbarch_core_read_description Following the previous patch ("gdb: change order of core_target initialization"), it is no longer necessary for the core target to pass a pointer to itself to gdbarch_core_read_description. Implementations of this method can just do regular calls to target_read_auxv, through the inferior target stack. This allows removing the target_ops parameter in gdbarch_core_read_description and a bunch of functions called downstream. Some auxv-related functions received the auxv data as a parameter, since they could not assume it could be read from the current inferior, that is also no longer needed. Regression tested. I also tested manually against an AArch64 MTE test case that Luis Machado sent me a while ago when we were working on this auxv caching issue, the desired behavior of reporting the MTE tags when opening the code still worked. Change-Id: I1e00361209028e9b65dde085d383cf950a7b5e3a --- gdb/aarch64-fbsd-tdep.c | 3 +-- gdb/aarch64-linux-tdep.c | 8 +++----- gdb/amd64-fbsd-tdep.c | 4 +--- gdb/amd64-linux-tdep.c | 4 +--- gdb/arc-linux-tdep.c | 4 +--- gdb/arm-fbsd-tdep.c | 20 +++++-------------- gdb/arm-fbsd-tdep.h | 12 ++++++------ gdb/arm-linux-tdep.c | 7 ++----- gdb/auxv.c | 41 ++++++++++++++------------------------- gdb/auxv.h | 14 ++++--------- gdb/corelow.c | 2 +- gdb/gdbarch-components.py | 2 +- gdb/gdbarch-gen.h | 4 ++-- gdb/gdbarch.c | 4 ++-- gdb/i386-fbsd-tdep.c | 4 +--- gdb/i386-linux-tdep.c | 4 +--- gdb/linux-tdep.c | 25 +++++++++--------------- gdb/linux-tdep.h | 14 ++++++------- gdb/mips-linux-tdep.c | 4 +--- gdb/ppc-linux-tdep.c | 7 ++----- gdb/s390-linux-tdep.c | 6 ++---- 21 files changed, 67 insertions(+), 126 deletions(-) diff --git a/gdb/aarch64-fbsd-tdep.c b/gdb/aarch64-fbsd-tdep.c index 39d193551059..b76ca24aacfd 100644 --- a/gdb/aarch64-fbsd-tdep.c +++ b/gdb/aarch64-fbsd-tdep.c @@ -195,8 +195,7 @@ aarch64_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, /* Implement the "core_read_description" gdbarch method. */ static const struct target_desc * -aarch64_fbsd_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, bfd *abfd) +aarch64_fbsd_core_read_description (gdbarch *gdbarch, bfd *abfd) { asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls"); diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c index a321aee036a0..fb9875f5701d 100644 --- a/gdb/aarch64-linux-tdep.c +++ b/gdb/aarch64-linux-tdep.c @@ -776,13 +776,11 @@ aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, /* Implement the "core_read_description" gdbarch method. */ static const struct target_desc * -aarch64_linux_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, bfd *abfd) +aarch64_linux_core_read_description (gdbarch *gdbarch, bfd *abfd) { asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls"); - gdb::optional auxv = target_read_auxv_raw (target); - CORE_ADDR hwcap = linux_get_hwcap (auxv, target, gdbarch); - CORE_ADDR hwcap2 = linux_get_hwcap2 (auxv, target, gdbarch); + CORE_ADDR hwcap = linux_get_hwcap (gdbarch); + CORE_ADDR hwcap2 = linux_get_hwcap2 (gdbarch); aarch64_features features; features.vq = aarch64_linux_core_read_vq (gdbarch, abfd); diff --git a/gdb/amd64-fbsd-tdep.c b/gdb/amd64-fbsd-tdep.c index 960bb0b5942f..90dad4cce98e 100644 --- a/gdb/amd64-fbsd-tdep.c +++ b/gdb/amd64-fbsd-tdep.c @@ -220,9 +220,7 @@ static const struct tramp_frame amd64_fbsd_sigframe = /* Implement the core_read_description gdbarch method. */ static const struct target_desc * -amd64fbsd_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +amd64fbsd_core_read_description (gdbarch *gdbarch, bfd *abfd) { return amd64_target_description (i386fbsd_core_read_xcr0 (abfd), true); } diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c index 07c1669f91e0..ace20ed738bd 100644 --- a/gdb/amd64-linux-tdep.c +++ b/gdb/amd64-linux-tdep.c @@ -1613,9 +1613,7 @@ amd64_linux_read_description (uint64_t xcr0_features_bit, bool is_x32) /* Get Linux/x86 target description from core dump. */ static const struct target_desc * -amd64_linux_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +amd64_linux_core_read_description (gdbarch *gdbarch, bfd *abfd) { /* Linux/x86-64. */ uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd); diff --git a/gdb/arc-linux-tdep.c b/gdb/arc-linux-tdep.c index da7f4758c195..805251d5f4fe 100644 --- a/gdb/arc-linux-tdep.c +++ b/gdb/arc-linux-tdep.c @@ -679,9 +679,7 @@ arc_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, /* Implement the `core_read_description` gdbarch method. */ static const struct target_desc * -arc_linux_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +arc_linux_core_read_description (gdbarch *gdbarch, bfd *abfd) { arc_arch_features features = arc_arch_features_create (abfd, diff --git a/gdb/arm-fbsd-tdep.c b/gdb/arm-fbsd-tdep.c index 75ee08eba506..cd8b55997d7d 100644 --- a/gdb/arm-fbsd-tdep.c +++ b/gdb/arm-fbsd-tdep.c @@ -215,14 +215,11 @@ arm_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, /* See arm-fbsd-tdep.h. */ const struct target_desc * -arm_fbsd_read_description_auxv (const gdb::optional &auxv, - target_ops *target, gdbarch *gdbarch, bool tls) +arm_fbsd_read_description_auxv (gdbarch *gdbarch, bool tls) { CORE_ADDR arm_hwcap = 0; - if (!auxv.has_value () - || target_auxv_search (*auxv, target, gdbarch, AT_FREEBSD_HWCAP, - &arm_hwcap) != 1) + if (target_auxv_search (gdbarch, AT_FREEBSD_HWCAP, &arm_hwcap) != 1) return arm_read_description (ARM_FP_TYPE_NONE, tls); if (arm_hwcap & HWCAP_VFP) @@ -244,24 +241,17 @@ arm_fbsd_read_description_auxv (const gdb::optional &auxv, const struct target_desc * arm_fbsd_read_description_auxv (bool tls) { - gdb::optional auxv = target_read_auxv (); - return arm_fbsd_read_description_auxv (auxv, - current_inferior ()->top_target (), - current_inferior ()->gdbarch, - tls); + return arm_fbsd_read_description_auxv (current_inferior ()->gdbarch, tls); } /* Implement the "core_read_description" gdbarch method. */ static const struct target_desc * -arm_fbsd_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +arm_fbsd_core_read_description (gdbarch *gdbarch, bfd *abfd) { asection *tls = bfd_get_section_by_name (abfd, ".reg-aarch-tls"); - gdb::optional auxv = target_read_auxv_raw (target); - return arm_fbsd_read_description_auxv (auxv, target, gdbarch, tls != nullptr); + return arm_fbsd_read_description_auxv (gdbarch, tls != nullptr); } /* Implement the get_thread_local_address gdbarch method. */ diff --git a/gdb/arm-fbsd-tdep.h b/gdb/arm-fbsd-tdep.h index b4137eb9a51a..00263fb420b5 100644 --- a/gdb/arm-fbsd-tdep.h +++ b/gdb/arm-fbsd-tdep.h @@ -22,6 +22,8 @@ #include "regset.h" +struct gdbarch; + /* The general-purpose regset consists of 13 R registers, plus SP, LR, PC, and CPSR registers. */ #define ARM_FBSD_SIZEOF_GREGSET (17 * 4) @@ -43,15 +45,13 @@ extern const struct regset arm_fbsd_tls_regset; #define HWCAP_VFPv3 0x00002000 #define HWCAP_VFPD32 0x00080000 -/* Lookup a target description based on the AT_HWCAP value in the auxv data - AUXV. */ +/* Lookup a target description based on the AT_HWCAP value in the current + inferior's auxv data. */ extern const struct target_desc * - arm_fbsd_read_description_auxv (const gdb::optional &auxv, - target_ops *target, gdbarch *gdbarch, - bool tls); + arm_fbsd_read_description_auxv (gdbarch *gdbarch, bool tls); -/* Same as the above, but read the auxv data from the current inferior. */ +/* Same as the above, but get the GDBARCH from the current inferior. */ extern const struct target_desc * arm_fbsd_read_description_auxv (bool tls); diff --git a/gdb/arm-linux-tdep.c b/gdb/arm-linux-tdep.c index 27aca0c39e6b..2f88bb036d15 100644 --- a/gdb/arm-linux-tdep.c +++ b/gdb/arm-linux-tdep.c @@ -728,12 +728,9 @@ arm_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, /* Determine target description from core file. */ static const struct target_desc * -arm_linux_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +arm_linux_core_read_description (gdbarch *gdbarch, bfd *abfd) { - gdb::optional auxv = target_read_auxv_raw (target); - CORE_ADDR arm_hwcap = linux_get_hwcap (auxv, target, gdbarch); + CORE_ADDR arm_hwcap = linux_get_hwcap (gdbarch); if (arm_hwcap & HWCAP_VFP) { diff --git a/gdb/auxv.c b/gdb/auxv.c index 73e84cf144db..62ad2bf84219 100644 --- a/gdb/auxv.c +++ b/gdb/auxv.c @@ -315,16 +315,16 @@ svr4_auxv_parse (struct gdbarch *gdbarch, const gdb_byte **readptr, Return 1 if an entry was read into *TYPEP and *VALP. */ static int -parse_auxv (target_ops *ops, gdbarch *gdbarch, const gdb_byte **readptr, +parse_auxv (gdbarch *gdbarch, const gdb_byte **readptr, const gdb_byte *endptr, CORE_ADDR *typep, CORE_ADDR *valp) { if (gdbarch_auxv_parse_p (gdbarch)) return gdbarch_auxv_parse (gdbarch, readptr, endptr, typep, valp); - return ops->auxv_parse (readptr, endptr, typep, valp); + return current_inferior ()->top_target ()->auxv_parse + (readptr, endptr, typep, valp); } - /* Auxiliary Vector information structure. This is used by GDB for caching purposes for each inferior. This helps reduce the overhead of transfering data from a remote target to the local host. */ @@ -363,7 +363,8 @@ target_read_auxv () if (info == nullptr) { info = auxv_inferior_data.emplace (inf); - info->data = target_read_auxv_raw (inf->top_target ()); + info->data + = target_read_alloc (inf->top_target (), TARGET_OBJECT_AUXV, NULL); } return info->data; @@ -371,25 +372,20 @@ target_read_auxv () /* See auxv.h. */ -gdb::optional -target_read_auxv_raw (target_ops *ops) -{ - return target_read_alloc (ops, TARGET_OBJECT_AUXV, NULL); -} - -/* See auxv.h. */ - int -target_auxv_search (const gdb::byte_vector &auxv, target_ops *ops, - gdbarch *gdbarch, CORE_ADDR match, CORE_ADDR *valp) +target_auxv_search (gdbarch *gdbarch, CORE_ADDR match, CORE_ADDR *valp) { + gdb::optional auxv = target_read_auxv (); + if (!auxv.has_value ()) + return 0; + CORE_ADDR type, val; - const gdb_byte *data = auxv.data (); + const gdb_byte *data = auxv->data (); const gdb_byte *ptr = data; - size_t len = auxv.size (); + size_t len = auxv->size (); while (1) - switch (parse_auxv (ops, gdbarch, &ptr, data + len, &type, &val)) + switch (parse_auxv (gdbarch, &ptr, data + len, &type, &val)) { case 1: /* Here's an entry, check it. */ if (type == match) @@ -410,13 +406,7 @@ target_auxv_search (const gdb::byte_vector &auxv, target_ops *ops, int target_auxv_search (CORE_ADDR match, CORE_ADDR *valp) { - gdb::optional auxv = target_read_auxv (); - - if (!auxv.has_value ()) - return -1; - - return target_auxv_search (*auxv, current_inferior ()->top_target (), - current_inferior ()->gdbarch, match, valp); + return target_auxv_search (current_inferior ()->gdbarch, match, valp); } /* Print the description of a single AUXV entry on the specified file. */ @@ -573,8 +563,7 @@ fprint_target_auxv (struct ui_file *file) const gdb_byte *ptr = data; size_t len = auxv->size (); - while (parse_auxv (current_inferior ()->top_target (), - current_inferior ()->gdbarch, + while (parse_auxv (current_inferior ()->gdbarch, &ptr, data + len, &type, &val) > 0) { gdbarch_print_auxv_entry (gdbarch, file, type, val); diff --git a/gdb/auxv.h b/gdb/auxv.h index 788d187b27a0..6b6ffedf1bdb 100644 --- a/gdb/auxv.h +++ b/gdb/auxv.h @@ -50,24 +50,18 @@ extern int svr4_auxv_parse (struct gdbarch *gdbarch, const gdb_byte **readptr, extern gdb::optional target_read_auxv (); -/* Read auxv data from OPS. */ - -extern gdb::optional target_read_auxv_raw (target_ops *ops); - /* Search AUXV for an entry with a_type matching MATCH. - OPS and GDBARCH are the target and architecture to use to parse auxv entries. + Use GDBARCH to parse auxv entries, instead of the current inferior's arch. Return zero if no such entry was found, or -1 if there was an error getting the information. On success, return 1 after storing the entry's value field in *VALP. */ -extern int target_auxv_search (const gdb::byte_vector &auxv, - target_ops *ops, gdbarch *gdbarch, - CORE_ADDR match, CORE_ADDR *valp); +extern int target_auxv_search (gdbarch *gdbarch, CORE_ADDR match, + CORE_ADDR *valp); -/* Same as the above, but read the auxv data from the current inferior. Use - the current inferior's top target and arch to parse auxv entries. */ +/* Same as the above, but get the gdbarch from the current inferior. */ extern int target_auxv_search (CORE_ADDR match, CORE_ADDR *valp); diff --git a/gdb/corelow.c b/gdb/corelow.c index 8cd6be436094..bdd23bc2a328 100644 --- a/gdb/corelow.c +++ b/gdb/corelow.c @@ -1123,7 +1123,7 @@ core_target::read_description () { const struct target_desc *result; - result = gdbarch_core_read_description (m_core_gdbarch, this, core_bfd); + result = gdbarch_core_read_description (m_core_gdbarch, core_bfd); if (result != NULL) return result; } diff --git a/gdb/gdbarch-components.py b/gdb/gdbarch-components.py index e7230949aad5..0791f373d7e4 100644 --- a/gdb/gdbarch-components.py +++ b/gdb/gdbarch-components.py @@ -1892,7 +1892,7 @@ Refresh overlay mapped state for section OSECT. Method( type="const struct target_desc *", name="core_read_description", - params=[("struct target_ops *", "target"), ("bfd *", "abfd")], + params=[("bfd *", "abfd")], predicate=True, invalid=True, ) diff --git a/gdb/gdbarch-gen.h b/gdb/gdbarch-gen.h index a663316df166..4de2b31bc2e3 100644 --- a/gdb/gdbarch-gen.h +++ b/gdb/gdbarch-gen.h @@ -1127,8 +1127,8 @@ extern void set_gdbarch_overlay_update (struct gdbarch *gdbarch, gdbarch_overlay extern bool gdbarch_core_read_description_p (struct gdbarch *gdbarch); -typedef const struct target_desc * (gdbarch_core_read_description_ftype) (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd); -extern const struct target_desc * gdbarch_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd); +typedef const struct target_desc * (gdbarch_core_read_description_ftype) (struct gdbarch *gdbarch, bfd *abfd); +extern const struct target_desc * gdbarch_core_read_description (struct gdbarch *gdbarch, bfd *abfd); extern void set_gdbarch_core_read_description (struct gdbarch *gdbarch, gdbarch_core_read_description_ftype *core_read_description); /* Set if the address in N_SO or N_FUN stabs may be zero. */ diff --git a/gdb/gdbarch.c b/gdb/gdbarch.c index ddb8dec1c72d..f6138a42219a 100644 --- a/gdb/gdbarch.c +++ b/gdb/gdbarch.c @@ -4211,13 +4211,13 @@ gdbarch_core_read_description_p (struct gdbarch *gdbarch) } const struct target_desc * -gdbarch_core_read_description (struct gdbarch *gdbarch, struct target_ops *target, bfd *abfd) +gdbarch_core_read_description (struct gdbarch *gdbarch, bfd *abfd) { gdb_assert (gdbarch != NULL); gdb_assert (gdbarch->core_read_description != NULL); if (gdbarch_debug >= 2) gdb_printf (gdb_stdlog, "gdbarch_core_read_description called\n"); - return gdbarch->core_read_description (gdbarch, target, abfd); + return gdbarch->core_read_description (gdbarch, abfd); } void diff --git a/gdb/i386-fbsd-tdep.c b/gdb/i386-fbsd-tdep.c index eef124fca0ce..fb3a384d9442 100644 --- a/gdb/i386-fbsd-tdep.c +++ b/gdb/i386-fbsd-tdep.c @@ -281,9 +281,7 @@ i386fbsd_core_read_xcr0 (bfd *abfd) /* Implement the core_read_description gdbarch method. */ static const struct target_desc * -i386fbsd_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +i386fbsd_core_read_description (gdbarch *gdbarch, bfd *abfd) { return i386_target_description (i386fbsd_core_read_xcr0 (abfd), true); } diff --git a/gdb/i386-linux-tdep.c b/gdb/i386-linux-tdep.c index 5c2fed39868c..63a56b86a974 100644 --- a/gdb/i386-linux-tdep.c +++ b/gdb/i386-linux-tdep.c @@ -703,9 +703,7 @@ i386_linux_read_description (uint64_t xcr0) /* Get Linux/x86 target description from core dump. */ static const struct target_desc * -i386_linux_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +i386_linux_core_read_description (gdbarch *gdbarch, bfd *abfd) { /* Linux/i386. */ uint64_t xcr0 = i386_linux_core_read_xcr0 (abfd); diff --git a/gdb/linux-tdep.c b/gdb/linux-tdep.c index c30d9fb13f8c..99eaec431a5d 100644 --- a/gdb/linux-tdep.c +++ b/gdb/linux-tdep.c @@ -2661,12 +2661,11 @@ linux_displaced_step_restore_all_in_ptid (inferior *parent_inf, ptid_t ptid) /* Helper for linux_get_hwcap and linux_get_hwcap2. */ static CORE_ADDR -linux_get_hwcap_helper (const gdb::optional &auxv, - target_ops *target, gdbarch *gdbarch, CORE_ADDR match) +linux_get_hwcap_helper (gdbarch *gdbarch, CORE_ADDR match) { CORE_ADDR field; - if (!auxv.has_value () - || target_auxv_search (*auxv, target, gdbarch, match, &field) != 1) + + if (target_auxv_search (gdbarch, match, &field) != 1) return 0; return field; } @@ -2674,10 +2673,9 @@ linux_get_hwcap_helper (const gdb::optional &auxv, /* See linux-tdep.h. */ CORE_ADDR -linux_get_hwcap (const gdb::optional &auxv, - target_ops *target, gdbarch *gdbarch) +linux_get_hwcap (gdbarch *gdbarch) { - return linux_get_hwcap_helper (auxv, target, gdbarch, AT_HWCAP); + return linux_get_hwcap_helper (gdbarch, AT_HWCAP); } /* See linux-tdep.h. */ @@ -2685,18 +2683,15 @@ linux_get_hwcap (const gdb::optional &auxv, CORE_ADDR linux_get_hwcap () { - return linux_get_hwcap (target_read_auxv (), - current_inferior ()->top_target (), - current_inferior ()->gdbarch); + return linux_get_hwcap (current_inferior ()->gdbarch); } /* See linux-tdep.h. */ CORE_ADDR -linux_get_hwcap2 (const gdb::optional &auxv, - target_ops *target, gdbarch *gdbarch) +linux_get_hwcap2 (gdbarch *gdbarch) { - return linux_get_hwcap_helper (auxv, target, gdbarch, AT_HWCAP2); + return linux_get_hwcap_helper (gdbarch, AT_HWCAP2); } /* See linux-tdep.h. */ @@ -2704,9 +2699,7 @@ linux_get_hwcap2 (const gdb::optional &auxv, CORE_ADDR linux_get_hwcap2 () { - return linux_get_hwcap2 (target_read_auxv (), - current_inferior ()->top_target (), - current_inferior ()->gdbarch); + return linux_get_hwcap2 (current_inferior ()->gdbarch); } /* Display whether the gcore command is using the diff --git a/gdb/linux-tdep.h b/gdb/linux-tdep.h index 95cc29c828c2..b7a52ccde235 100644 --- a/gdb/linux-tdep.h +++ b/gdb/linux-tdep.h @@ -90,23 +90,21 @@ extern void linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch, extern int linux_is_uclinux (void); -/* Fetch the AT_HWCAP entry from auxv data AUXV. Use TARGET and GDBARCH to - parse auxv entries. +/* Fetch the AT_HWCAP entry from the current inferior's auxv data. Use GDBARCH + to parse auxv entries. On error, 0 is returned. */ -extern CORE_ADDR linux_get_hwcap (const gdb::optional &auxv, - struct target_ops *target, gdbarch *gdbarch); +extern CORE_ADDR linux_get_hwcap (gdbarch *gdbarch); /* Same as the above, but obtain all the inputs from the current inferior. */ extern CORE_ADDR linux_get_hwcap (); -/* Fetch the AT_HWCAP2 entry from auxv data AUXV. Use TARGET and GDBARCH to - parse auxv entries. +/* Fetch the AT_HWCAP2 entry from the current inferior's auxv data. Use GDBARCH + to parse auxv entries. On error, 0 is returned. */ -extern CORE_ADDR linux_get_hwcap2 (const gdb::optional &auxv, - struct target_ops *target, gdbarch *gdbarch); +extern CORE_ADDR linux_get_hwcap2 (gdbarch *gdbarch); /* Same as the above, but obtain all the inputs from the current inferior. */ diff --git a/gdb/mips-linux-tdep.c b/gdb/mips-linux-tdep.c index 1b3b5f88edbc..534d47fc1ae5 100644 --- a/gdb/mips-linux-tdep.c +++ b/gdb/mips-linux-tdep.c @@ -554,9 +554,7 @@ mips_linux_iterate_over_regset_sections (struct gdbarch *gdbarch, } static const struct target_desc * -mips_linux_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +mips_linux_core_read_description (gdbarch *gdbarch, bfd *abfd) { asection *section = bfd_get_section_by_name (abfd, ".reg"); if (! section) diff --git a/gdb/ppc-linux-tdep.c b/gdb/ppc-linux-tdep.c index 39d692b2764c..cec3a31d7746 100644 --- a/gdb/ppc-linux-tdep.c +++ b/gdb/ppc-linux-tdep.c @@ -1566,9 +1566,7 @@ ppc_linux_write_pc (struct regcache *regcache, CORE_ADDR pc) } static const struct target_desc * -ppc_linux_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, - bfd *abfd) +ppc_linux_core_read_description (gdbarch *gdbarch, bfd *abfd) { struct ppc_linux_features features = ppc_linux_no_features; asection *altivec = bfd_get_section_by_name (abfd, ".reg-ppc-vmx"); @@ -1601,8 +1599,7 @@ ppc_linux_core_read_description (struct gdbarch *gdbarch, if (vsx) features.vsx = true; - gdb::optional auxv = target_read_auxv_raw (target); - CORE_ADDR hwcap = linux_get_hwcap (auxv, target, gdbarch); + CORE_ADDR hwcap = linux_get_hwcap (gdbarch); features.isa205 = ppc_linux_has_isa205 (hwcap); diff --git a/gdb/s390-linux-tdep.c b/gdb/s390-linux-tdep.c index 14d71134e0cd..d134332b7b16 100644 --- a/gdb/s390-linux-tdep.c +++ b/gdb/s390-linux-tdep.c @@ -328,12 +328,10 @@ s390_iterate_over_regset_sections (struct gdbarch *gdbarch, /* Implement core_read_description gdbarch method. */ static const struct target_desc * -s390_core_read_description (struct gdbarch *gdbarch, - struct target_ops *target, bfd *abfd) +s390_core_read_description (gdbarch *gdbarch, bfd *abfd) { asection *section = bfd_get_section_by_name (abfd, ".reg"); - gdb::optional auxv = target_read_auxv_raw (target); - CORE_ADDR hwcap = linux_get_hwcap (auxv, target, gdbarch); + CORE_ADDR hwcap = linux_get_hwcap (gdbarch); bool high_gprs, v1, v2, te, vx, gs; if (!section) -- 2.38.1