[3/3] gdb: remove target_ops parameter from gdbarch_core_read_description
Commit Message
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 | 24 +++++-------------------
gdb/arm-fbsd-tdep.h | 15 +++++----------
gdb/arm-linux-tdep.c | 7 ++-----
gdb/auxv.c | 11 ++---------
gdb/auxv.h | 4 ----
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 | 24 ++++++++++--------------
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, 50 insertions(+), 109 deletions(-)
Comments
On 11/28/22 6:50 PM, Simon Marchi via Gdb-patches wrote:
> 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 | 24 +++++-------------------
> gdb/arm-fbsd-tdep.h | 15 +++++----------
> gdb/arm-linux-tdep.c | 7 ++-----
> gdb/auxv.c | 11 ++---------
> gdb/auxv.h | 4 ----
> 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 | 24 ++++++++++--------------
> 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, 50 insertions(+), 109 deletions(-)
>
> diff --git a/gdb/arm-fbsd-tdep.c b/gdb/arm-fbsd-tdep.c
> index 75ee08eba506..4ea238de7c7f 100644
> --- a/gdb/arm-fbsd-tdep.c
> +++ b/gdb/arm-fbsd-tdep.c
> @@ -215,10 +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<gdb::byte_vector> &auxv,
> - target_ops *target, gdbarch *gdbarch, bool tls)
> +arm_fbsd_read_description_auxv (gdbarch *gdbarch, bool tls)
> {
> CORE_ADDR arm_hwcap = 0;
> + gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
> + target_ops *target = current_inferior ()->top_target ();
>
> if (!auxv.has_value ()
> || target_auxv_search (*auxv, target, gdbarch, AT_FREEBSD_HWCAP,
> @@ -239,29 +240,14 @@ arm_fbsd_read_description_auxv (const gdb::optional<gdb::byte_vector> &auxv,
> return arm_read_description (ARM_FP_TYPE_NONE, tls);
> }
>
> -/* See arm-fbsd-tdep.h. */
> -
> -const struct target_desc *
> -arm_fbsd_read_description_auxv (bool tls)
> -{
> - gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
> - return arm_fbsd_read_description_auxv (auxv,
> - current_inferior ()->top_target (),
> - current_inferior ()->gdbarch,
> - tls);
> -}
> -
This function is used by arm-fbsd-nat.c in the read_description target
method. Probably that function just needs to be updated to pass in the
gdbarch explicitly rather than keeping this wrapper method though:
diff --git a/gdb/arm-fbsd-nat.c b/gdb/arm-fbsd-nat.c
index 340b8e0d710..0ed3104d12d 100644
--- a/gdb/arm-fbsd-nat.c
+++ b/gdb/arm-fbsd-nat.c
@@ -96,7 +96,7 @@ arm_fbsd_nat_target::read_description ()
#ifdef PT_GETREGSET
tls = have_regset (inferior_ptid, NT_ARM_TLS) != 0;
#endif
- desc = arm_fbsd_read_description_auxv (tls);
+ desc = arm_fbsd_read_description_auxv (current_inferior ()->gdbarch, tls);
if (desc == NULL)
desc = this->beneath ()->read_description ();
return desc;
On 11/29/22 14:16, John Baldwin wrote:
> On 11/28/22 6:50 PM, Simon Marchi via Gdb-patches wrote:
>> 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 | 24 +++++-------------------
>> gdb/arm-fbsd-tdep.h | 15 +++++----------
>> gdb/arm-linux-tdep.c | 7 ++-----
>> gdb/auxv.c | 11 ++---------
>> gdb/auxv.h | 4 ----
>> 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 | 24 ++++++++++--------------
>> 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, 50 insertions(+), 109 deletions(-)
>>
>> diff --git a/gdb/arm-fbsd-tdep.c b/gdb/arm-fbsd-tdep.c
>> index 75ee08eba506..4ea238de7c7f 100644
>> --- a/gdb/arm-fbsd-tdep.c
>> +++ b/gdb/arm-fbsd-tdep.c
>> @@ -215,10 +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<gdb::byte_vector> &auxv,
>> - target_ops *target, gdbarch *gdbarch, bool tls)
>> +arm_fbsd_read_description_auxv (gdbarch *gdbarch, bool tls)
>> {
>> CORE_ADDR arm_hwcap = 0;
>> + gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
>> + target_ops *target = current_inferior ()->top_target ();
>> if (!auxv.has_value ()
>> || target_auxv_search (*auxv, target, gdbarch, AT_FREEBSD_HWCAP,
>> @@ -239,29 +240,14 @@ arm_fbsd_read_description_auxv (const gdb::optional<gdb::byte_vector> &auxv,
>> return arm_read_description (ARM_FP_TYPE_NONE, tls);
>> }
>> -/* See arm-fbsd-tdep.h. */
>> -
>> -const struct target_desc *
>> -arm_fbsd_read_description_auxv (bool tls)
>> -{
>> - gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
>> - return arm_fbsd_read_description_auxv (auxv,
>> - current_inferior ()->top_target (),
>> - current_inferior ()->gdbarch,
>> - tls);
>> -}
>> -
>
> This function is used by arm-fbsd-nat.c in the read_description target
> method. Probably that function just needs to be updated to pass in the
> gdbarch explicitly rather than keeping this wrapper method though:
>
> diff --git a/gdb/arm-fbsd-nat.c b/gdb/arm-fbsd-nat.c
> index 340b8e0d710..0ed3104d12d 100644
> --- a/gdb/arm-fbsd-nat.c
> +++ b/gdb/arm-fbsd-nat.c
> @@ -96,7 +96,7 @@ arm_fbsd_nat_target::read_description ()
> #ifdef PT_GETREGSET
> tls = have_regset (inferior_ptid, NT_ARM_TLS) != 0;
> #endif
> - desc = arm_fbsd_read_description_auxv (tls);
> + desc = arm_fbsd_read_description_auxv (current_inferior ()->gdbarch, tls);
> if (desc == NULL)
> desc = this->beneath ()->read_description ();
> return desc;
Woops, thanks for pointing it out. Actually, I'll leave the
one-parameter version there and adapt it, so no change should be needed
in the nat file.
Thanks,
Simon
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 <simon.marchi@polymtl.ca>
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<gdb::byte_vector> 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<gdb::byte_vector> &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<gdb::byte_vector> &auxv,
const struct target_desc *
arm_fbsd_read_description_auxv (bool tls)
{
- gdb::optional<gdb::byte_vector> 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<gdb::byte_vector> 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<gdb::byte_vector> &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<gdb::byte_vector> 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<gdb::byte_vector>
-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<gdb::byte_vector> 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<gdb::byte_vector> 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<gdb::byte_vector> target_read_auxv ();
-/* Read auxv data from OPS. */
-
-extern gdb::optional<gdb::byte_vector> 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<gdb::byte_vector> &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<gdb::byte_vector> &auxv,
/* See linux-tdep.h. */
CORE_ADDR
-linux_get_hwcap (const gdb::optional<gdb::byte_vector> &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<gdb::byte_vector> &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<gdb::byte_vector> &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<gdb::byte_vector> &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<gdb::byte_vector> &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<gdb::byte_vector> &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<gdb::byte_vector> 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<gdb::byte_vector> 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)
@@ -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");
@@ -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<gdb::byte_vector> 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);
@@ -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);
}
@@ -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);
@@ -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,
@@ -215,10 +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<gdb::byte_vector> &auxv,
- target_ops *target, gdbarch *gdbarch, bool tls)
+arm_fbsd_read_description_auxv (gdbarch *gdbarch, bool tls)
{
CORE_ADDR arm_hwcap = 0;
+ gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
+ target_ops *target = current_inferior ()->top_target ();
if (!auxv.has_value ()
|| target_auxv_search (*auxv, target, gdbarch, AT_FREEBSD_HWCAP,
@@ -239,29 +240,14 @@ arm_fbsd_read_description_auxv (const gdb::optional<gdb::byte_vector> &auxv,
return arm_read_description (ARM_FP_TYPE_NONE, tls);
}
-/* See arm-fbsd-tdep.h. */
-
-const struct target_desc *
-arm_fbsd_read_description_auxv (bool tls)
-{
- gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
- return arm_fbsd_read_description_auxv (auxv,
- current_inferior ()->top_target (),
- 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<gdb::byte_vector> 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. */
@@ -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,17 +45,10 @@ 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. */
-
-extern const struct target_desc *
- arm_fbsd_read_description_auxv (const gdb::optional<gdb::byte_vector> &auxv,
- target_ops *target, gdbarch *gdbarch,
- bool tls);
-
-/* Same as the above, but read the auxv data from the current inferior. */
+/* 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 (bool tls);
+ arm_fbsd_read_description_auxv (gdbarch *gdbarch, bool tls);
#endif /* ARM_FBSD_TDEP_H */
@@ -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<gdb::byte_vector> 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)
{
@@ -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,14 +372,6 @@ target_read_auxv ()
/* See auxv.h. */
-gdb::optional<gdb::byte_vector>
-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)
@@ -50,10 +50,6 @@ extern int svr4_auxv_parse (struct gdbarch *gdbarch, const gdb_byte **readptr,
extern gdb::optional<gdb::byte_vector> target_read_auxv ();
-/* Read auxv data from OPS. */
-
-extern gdb::optional<gdb::byte_vector> 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.
@@ -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;
}
@@ -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,
)
@@ -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. */
@@ -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
@@ -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);
}
@@ -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);
@@ -2661,10 +2661,12 @@ 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<gdb::byte_vector> &auxv,
- target_ops *target, gdbarch *gdbarch, CORE_ADDR match)
+linux_get_hwcap_helper (gdbarch *gdbarch, CORE_ADDR match)
{
+ gdb::optional<gdb::byte_vector> auxv = target_read_auxv ();
+ target_ops *target = current_inferior ()->top_target ();
CORE_ADDR field;
+
if (!auxv.has_value ()
|| target_auxv_search (*auxv, target, gdbarch, match, &field) != 1)
return 0;
@@ -2674,10 +2676,9 @@ linux_get_hwcap_helper (const gdb::optional<gdb::byte_vector> &auxv,
/* See linux-tdep.h. */
CORE_ADDR
-linux_get_hwcap (const gdb::optional<gdb::byte_vector> &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 +2686,15 @@ linux_get_hwcap (const gdb::optional<gdb::byte_vector> &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<gdb::byte_vector> &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 +2702,7 @@ linux_get_hwcap2 (const gdb::optional<gdb::byte_vector> &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
@@ -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<gdb::byte_vector> &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<gdb::byte_vector> &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. */
@@ -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)
@@ -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<gdb::byte_vector> 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);
@@ -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<gdb::byte_vector> 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)