public inbox for gcc-regression@sourceware.org
help / color / mirror / Atom feed
* [TCWG CI] Regression caused by gdb: gdb: fix gdbarch_tdep ODR violation
@ 2021-11-15 19:41 ci_notify
  0 siblings, 0 replies; only message in thread
From: ci_notify @ 2021-11-15 19:41 UTC (permalink / raw)
  To: Simon Marchi; +Cc: gcc-regression

[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain; charset=UTF-8, Size: 48230 bytes --]

[TCWG CI] Regression caused by gdb: gdb: fix gdbarch_tdep ODR violation:
commit 345bd07cce33565f1cd66acabdaf387ca3a7ccb3
Author: Simon Marchi <simon.marchi@polymtl.ca>

    gdb: fix gdbarch_tdep ODR violation

Results regressed to
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe gcc:
2
# build_abe linux:
4
# build_abe glibc:
5
# First few build errors in logs:
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:362:17: error: ‘struct gdbarch_tdep’ has no member named ‘vfp_register_count’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:391:11: error: ‘struct gdbarch_tdep’ has no member named ‘vfp_register_count’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:421:17: error: ‘struct gdbarch_tdep’ has no member named ‘have_wmmx_registers’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:423:17: error: ‘struct gdbarch_tdep’ has no member named ‘vfp_register_count’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:425:17: error: ‘struct gdbarch_tdep’ has no member named ‘have_fpa_registers’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:434:22: error: ‘struct gdbarch_tdep’ has no member named ‘have_wmmx_registers’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:437:22: error: ‘struct gdbarch_tdep’ has no member named ‘vfp_register_count’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:439:43: error: ‘struct gdbarch_tdep’ has no member named ‘vfp_register_count’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:458:17: error: ‘struct gdbarch_tdep’ has no member named ‘have_wmmx_registers’
# 00:02:11 ../../../../../../gdb/gdb/arm-linux-nat.c:460:17: error: ‘struct gdbarch_tdep’ has no member named ‘vfp_register_count’

from
# reset_artifacts:
-10
# true:
0
# build_abe binutils:
1
# build_abe gcc:
2
# build_abe linux:
4
# build_abe glibc:
5
# build_abe gdb:
6

THIS IS THE END OF INTERESTING STUFF.  BELOW ARE LINKS TO BUILDS, REPRODUCTION INSTRUCTIONS, AND THE RAW COMMIT.

This commit has regressed these CI configurations:
 - tcwg_gnu_native_build/master-arm

First_bad build: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/3/artifact/artifacts/build-345bd07cce33565f1cd66acabdaf387ca3a7ccb3/
Last_good build: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/3/artifact/artifacts/build-eae06bb301512a21277dd48a4bff025c4dceda9e/
Baseline build: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/3/artifact/artifacts/build-baseline/
Even more details: https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/3/artifact/artifacts/

Reproduce builds:
<cut>
mkdir investigate-gdb-345bd07cce33565f1cd66acabdaf387ca3a7ccb3
cd investigate-gdb-345bd07cce33565f1cd66acabdaf387ca3a7ccb3

# Fetch scripts
git clone https://git.linaro.org/toolchain/jenkins-scripts

# Fetch manifests and test.sh script
mkdir -p artifacts/manifests
curl -o artifacts/manifests/build-baseline.sh https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/3/artifact/artifacts/manifests/build-baseline.sh --fail
curl -o artifacts/manifests/build-parameters.sh https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/3/artifact/artifacts/manifests/build-parameters.sh --fail
curl -o artifacts/test.sh https://ci.linaro.org/job/tcwg_gnu_native_build-bisect-master-arm/3/artifact/artifacts/test.sh --fail
chmod +x artifacts/test.sh

# Reproduce the baseline build (build all pre-requisites)
./jenkins-scripts/tcwg_gnu-build.sh @@ artifacts/manifests/build-baseline.sh

# Save baseline build state (which is then restored in artifacts/test.sh)
mkdir -p ./bisect
rsync -a --del --delete-excluded --exclude /bisect/ --exclude /artifacts/ --exclude /gdb/ ./ ./bisect/baseline/

cd gdb

# Reproduce first_bad build
git checkout --detach 345bd07cce33565f1cd66acabdaf387ca3a7ccb3
../artifacts/test.sh

# Reproduce last_good build
git checkout --detach eae06bb301512a21277dd48a4bff025c4dceda9e
../artifacts/test.sh

cd ..
</cut>

Full commit (up to 1000 lines):
<cut>
commit 345bd07cce33565f1cd66acabdaf387ca3a7ccb3
Author: Simon Marchi <simon.marchi@polymtl.ca>
Date:   Mon Nov 15 11:29:39 2021 -0500

    gdb: fix gdbarch_tdep ODR violation
    
    I would like to be able to use non-trivial types in gdbarch_tdep types.
    This is not possible at the moment (in theory), because of the one
    definition rule.
    
    To allow it, rename all gdbarch_tdep types to <arch>_gdbarch_tdep, and
    make them inherit from a gdbarch_tdep base class.  The inheritance is
    necessary to be able to pass pointers to all these <arch>_gdbarch_tdep
    objects to gdbarch_alloc, which takes a pointer to gdbarch_tdep.
    
    These objects are never deleted through a base class pointer, so I
    didn't include a virtual destructor.  In the future, if gdbarch objects
    deletable, I could imagine that the gdbarch_tdep objects could become
    owned by the gdbarch objects, and then it would become useful to have a
    virtual destructor (so that the gdbarch object can delete the owned
    gdbarch_tdep object).  But that's not necessary right now.
    
    It turns out that RISC-V already has a gdbarch_tdep that is
    non-default-constructible, so that provides a good motivation for this
    change.
    
    Most changes are fairly straightforward, mostly needing to add some
    casts all over the place.  There is however the xtensa architecture,
    doing its own little weird thing to define its gdbarch_tdep.  I did my
    best to adapt it, but I can't test those changes.
    
    Change-Id: Ic001903f91ddd106bd6ca09a79dabe8df2d69f3b
---
 gdb/aarch64-fbsd-tdep.c   |   2 +-
 gdb/aarch64-linux-tdep.c  |  11 +-
 gdb/aarch64-newlib-tdep.c |   2 +-
 gdb/aarch64-tdep.c        |  60 ++++++-----
 gdb/aarch64-tdep.h        |  32 +++---
 gdb/alpha-linux-tdep.c    |   4 +-
 gdb/alpha-netbsd-tdep.c   |   2 +-
 gdb/alpha-obsd-tdep.c     |   2 +-
 gdb/alpha-tdep.c          |  26 ++---
 gdb/alpha-tdep.h          |  24 +++--
 gdb/amd64-darwin-tdep.c   |   2 +-
 gdb/amd64-fbsd-tdep.c     |   4 +-
 gdb/amd64-linux-tdep.c    |   8 +-
 gdb/amd64-netbsd-tdep.c   |   2 +-
 gdb/amd64-obsd-tdep.c     |   2 +-
 gdb/amd64-sol2-tdep.c     |   2 +-
 gdb/amd64-tdep.c          |  36 +++----
 gdb/amd64-windows-tdep.c  |   2 +-
 gdb/arc-linux-tdep.c      |   4 +-
 gdb/arc-tdep.c            |  20 ++--
 gdb/arc-tdep.h            |  14 +--
 gdb/arm-fbsd-tdep.c       |   4 +-
 gdb/arm-linux-tdep.c      |   4 +-
 gdb/arm-netbsd-tdep.c     |   4 +-
 gdb/arm-none-tdep.c       |   2 +-
 gdb/arm-obsd-tdep.c       |   2 +-
 gdb/arm-tdep.c            | 123 ++++++++++++----------
 gdb/arm-tdep.h            |  65 ++++++------
 gdb/arm-wince-tdep.c      |   2 +-
 gdb/avr-tdep.c            |  36 ++++---
 gdb/bfin-tdep.c           |  12 ++-
 gdb/bfin-tdep.h           |   4 +-
 gdb/bpf-tdep.c            |   4 +-
 gdb/cris-linux-tdep.c     |   2 +-
 gdb/cris-tdep.c           |  31 +++---
 gdb/cris-tdep.h           |   8 +-
 gdb/csky-tdep.c           |   3 +-
 gdb/csky-tdep.h           |   2 +-
 gdb/frv-tdep.c            |  37 +++----
 gdb/ft32-tdep.c           |   8 +-
 gdb/ft32-tdep.h           |   4 +-
 gdb/gdbarch.h             |   2 +
 gdb/gdbarch.sh            |   2 +
 gdb/hppa-bsd-tdep.c       |   2 +-
 gdb/hppa-linux-tdep.c     |   4 +-
 gdb/hppa-tdep.c           |  22 ++--
 gdb/hppa-tdep.h           |  23 +++--
 gdb/i386-bsd-tdep.c       |   2 +-
 gdb/i386-darwin-tdep.c    |   4 +-
 gdb/i386-fbsd-tdep.c      |   8 +-
 gdb/i386-gnu-tdep.c       |   2 +-
 gdb/i386-go32-tdep.c      |   2 +-
 gdb/i386-linux-tdep.c     |   4 +-
 gdb/i386-netbsd-tdep.c    |   4 +-
 gdb/i386-nto-tdep.c       |   6 +-
 gdb/i386-obsd-tdep.c      |   2 +-
 gdb/i386-sol2-tdep.c      |   2 +-
 gdb/i386-tdep.c           | 111 ++++++++++----------
 gdb/i386-tdep.h           | 136 ++++++++++++-------------
 gdb/i386-windows-tdep.c   |   2 +-
 gdb/i387-tdep.c           |  23 +++--
 gdb/ia64-linux-tdep.c     |   2 +-
 gdb/ia64-tdep.c           |  14 +--
 gdb/ia64-tdep.h           |  23 +++--
 gdb/lm32-tdep.c           |   5 +-
 gdb/m32c-tdep.c           | 113 ++++++++++++---------
 gdb/m32r-tdep.c           |   3 +-
 gdb/m32r-tdep.h           |   4 +-
 gdb/m68hc11-tdep.c        |  60 +++++++----
 gdb/m68k-bsd-tdep.c       |   2 +-
 gdb/m68k-linux-tdep.c     |   2 +-
 gdb/m68k-tdep.c           |  57 ++++++-----
 gdb/m68k-tdep.h           |  22 ++--
 gdb/mep-tdep.c            |  28 +++--
 gdb/microblaze-tdep.c     |   3 +-
 gdb/microblaze-tdep.h     |   2 +-
 gdb/mips-linux-tdep.c     |   4 +-
 gdb/mips-tdep.c           | 164 +++++++++++++++++++-----------
 gdb/mips-tdep.h           |  30 +++---
 gdb/mn10300-tdep.c        |   7 +-
 gdb/mn10300-tdep.h        |  11 +-
 gdb/moxie-tdep.c          |   3 +-
 gdb/moxie-tdep.h          |   2 +-
 gdb/msp430-tdep.c         |  32 +++---
 gdb/nds32-tdep.c          |  24 ++---
 gdb/nds32-tdep.h          |  10 +-
 gdb/nios2-linux-tdep.c    |   2 +-
 gdb/nios2-tdep.c          |   7 +-
 gdb/nios2-tdep.h          |  10 +-
 gdb/or1k-tdep.c           |  23 +++--
 gdb/ppc-fbsd-tdep.c       |   8 +-
 gdb/ppc-linux-tdep.c      |  18 ++--
 gdb/ppc-netbsd-tdep.c     |   2 +-
 gdb/ppc-obsd-tdep.c       |   2 +-
 gdb/ppc-sysv-tdep.c       |  22 ++--
 gdb/ppc-tdep.h            | 104 +++++++++----------
 gdb/ppc64-tdep.c          |   2 +-
 gdb/riscv-linux-tdep.c    |   2 +-
 gdb/riscv-tdep.c          |  37 ++++---
 gdb/riscv-tdep.h          |   5 +-
 gdb/rl78-tdep.c           |  41 ++++----
 gdb/rs6000-aix-tdep.c     |  19 ++--
 gdb/rs6000-lynx178-tdep.c |   6 +-
 gdb/rs6000-tdep.c         | 121 +++++++++++-----------
 gdb/rx-tdep.c             |  16 +--
 gdb/s12z-tdep.c           |   4 +-
 gdb/s390-linux-tdep.c     |  20 ++--
 gdb/s390-tdep.c           |  74 +++++++-------
 gdb/s390-tdep.h           |  33 +++---
 gdb/sh-linux-tdep.c       |   2 +-
 gdb/sh-netbsd-tdep.c      |   2 +-
 gdb/sh-tdep.c             |  11 +-
 gdb/sh-tdep.h             |  14 +--
 gdb/sparc-linux-tdep.c    |   5 +-
 gdb/sparc-netbsd-tdep.c   |   2 +-
 gdb/sparc-sol2-tdep.c     |   2 +-
 gdb/sparc-tdep.c          |  21 ++--
 gdb/sparc-tdep.h          |  43 ++++----
 gdb/sparc64-fbsd-tdep.c   |   2 +-
 gdb/sparc64-linux-tdep.c  |   5 +-
 gdb/sparc64-netbsd-tdep.c |   2 +-
 gdb/sparc64-obsd-tdep.c   |   2 +-
 gdb/sparc64-sol2-tdep.c   |   2 +-
 gdb/sparc64-tdep.c        |  10 +-
 gdb/tic6x-linux-tdep.c    |   6 +-
 gdb/tic6x-tdep.c          |  11 +-
 gdb/tic6x-tdep.h          |  10 +-
 gdb/v850-tdep.c           |  30 +++---
 gdb/xtensa-config.c       |   9 +-
 gdb/xtensa-linux-tdep.c   |   2 +-
 gdb/xtensa-tdep.c         | 254 +++++++++++++++++++++++++---------------------
 gdb/xtensa-tdep.h         | 180 +++++++++++++-------------------
 gdb/z80-tdep.c            |  26 +++--
 133 files changed, 1514 insertions(+), 1325 deletions(-)

diff --git a/gdb/aarch64-fbsd-tdep.c b/gdb/aarch64-fbsd-tdep.c
index 3f22d419438..7342e7b9002 100644
--- a/gdb/aarch64-fbsd-tdep.c
+++ b/gdb/aarch64-fbsd-tdep.c
@@ -153,7 +153,7 @@ aarch64_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
 static void
 aarch64_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* Generic FreeBSD support.  */
   fbsd_init_abi (info, gdbarch);
diff --git a/gdb/aarch64-linux-tdep.c b/gdb/aarch64-linux-tdep.c
index abb8be30731..7a9cf0c87e9 100644
--- a/gdb/aarch64-linux-tdep.c
+++ b/gdb/aarch64-linux-tdep.c
@@ -286,7 +286,7 @@ aarch64_linux_sigframe_init (const struct tramp_frame *self,
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   CORE_ADDR sp = get_frame_register_unsigned (this_frame, AARCH64_SP_REGNUM);
   CORE_ADDR sigcontext_addr = (sp + AARCH64_RT_SIGFRAME_UCONTEXT_OFFSET
 			       + AARCH64_UCONTEXT_SIGCONTEXT_OFFSET );
@@ -640,7 +640,8 @@ aarch64_linux_collect_sve_regset (const struct regset *regset,
   gdb_byte *header = (gdb_byte *) buf;
   struct gdbarch *gdbarch = regcache->arch ();
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-  uint64_t vq = gdbarch_tdep (gdbarch)->vq;
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+  uint64_t vq = tdep->vq;
 
   gdb_assert (buf != NULL);
   gdb_assert (size > SVE_HEADER_SIZE);
@@ -675,7 +676,7 @@ aarch64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
 					    void *cb_data,
 					    const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   cb (".reg", AARCH64_LINUX_SIZEOF_GREGSET, AARCH64_LINUX_SIZEOF_GREGSET,
       &aarch64_linux_gregset, NULL, cb_data);
@@ -1719,7 +1720,7 @@ aarch64_linux_report_signal_info (struct gdbarch *gdbarch,
 				  struct ui_out *uiout,
 				  enum gdb_signal siggnal)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (!tdep->has_mte () || siggnal != GDB_SIGNAL_SEGV)
     return;
@@ -1788,7 +1789,7 @@ aarch64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 								    NULL };
   static const char *const stap_register_indirection_suffixes[] = { "]",
 								    NULL };
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   tdep->lowest_pc = 0x8000;
 
diff --git a/gdb/aarch64-newlib-tdep.c b/gdb/aarch64-newlib-tdep.c
index b5e57bcd95f..9805967a205 100644
--- a/gdb/aarch64-newlib-tdep.c
+++ b/gdb/aarch64-newlib-tdep.c
@@ -29,7 +29,7 @@
 static void
 aarch64_newlib_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* Jump buffer - support for longjmp.
      Offset of original PC in jump buffer (in registers).  */
diff --git a/gdb/aarch64-tdep.c b/gdb/aarch64-tdep.c
index 42b8494980c..392110afd2b 100644
--- a/gdb/aarch64-tdep.c
+++ b/gdb/aarch64-tdep.c
@@ -248,7 +248,7 @@ class instruction_reader : public abstract_instruction_reader
    THIS_FRAME.  */
 
 static CORE_ADDR
-aarch64_frame_unmask_lr (struct gdbarch_tdep *tdep,
+aarch64_frame_unmask_lr (aarch64_gdbarch_tdep *tdep,
 			 struct frame_info *this_frame, CORE_ADDR addr)
 {
   if (tdep->has_pauth ()
@@ -500,7 +500,8 @@ aarch64_analyze_prologue (struct gdbarch *gdbarch,
 	}
       else if (inst.opcode->iclass == ic_system)
 	{
-	  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+	  aarch64_gdbarch_tdep *tdep
+	    = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 	  int ra_state_val = 0;
 
 	  if (insn == 0xd503233f /* paciasp.  */
@@ -635,7 +636,7 @@ aarch64_analyze_prologue_test (void)
   struct aarch64_prologue_cache cache;
   cache.saved_regs = trad_frame_alloc_saved_regs (gdbarch);
 
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* Test the simple prologue in which frame pointer is used.  */
   {
@@ -1037,7 +1038,9 @@ aarch64_prologue_frame_unwind_stop_reason (struct frame_info *this_frame,
     return UNWIND_UNAVAILABLE;
 
   /* Halt the backtrace at "_start".  */
-  if (cache->prev_pc <= gdbarch_tdep (get_frame_arch (this_frame))->lowest_pc)
+  gdbarch *arch = get_frame_arch (this_frame);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (arch);
+  if (cache->prev_pc <= tdep->lowest_pc)
     return UNWIND_OUTERMOST;
 
   /* We've hit a wall, stop.  */
@@ -1079,7 +1082,8 @@ aarch64_prologue_prev_register (struct frame_info *this_frame,
     {
       CORE_ADDR lr;
       struct gdbarch *gdbarch = get_frame_arch (this_frame);
-      struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+      aarch64_gdbarch_tdep *tdep
+	= (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
       lr = frame_unwind_register_unsigned (this_frame, AARCH64_LR_REGNUM);
 
@@ -1247,7 +1251,8 @@ static struct value *
 aarch64_dwarf2_prev_register (struct frame_info *this_frame,
 			      void **this_cache, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
+  gdbarch *arch = get_frame_arch (this_frame);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (arch);
   CORE_ADDR lr;
 
   switch (regnum)
@@ -1273,7 +1278,7 @@ aarch64_dwarf2_frame_init_reg (struct gdbarch *gdbarch, int regnum,
 			       struct dwarf2_frame_state_reg *reg,
 			       struct frame_info *this_frame)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   switch (regnum)
     {
@@ -1313,7 +1318,7 @@ static bool
 aarch64_execute_dwarf_cfa_vendor_op (struct gdbarch *gdbarch, gdb_byte op,
 				     struct dwarf2_frame_state *fs)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   struct dwarf2_frame_state_reg *ra_state;
 
   if (op == DW_CFA_AARCH64_negate_ra_state)
@@ -1952,7 +1957,7 @@ aarch64_frame_align (struct gdbarch *gdbarch, CORE_ADDR sp)
 static struct type *
 aarch64_vnq_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (tdep->vnq_type == NULL)
     {
@@ -1979,7 +1984,7 @@ aarch64_vnq_type (struct gdbarch *gdbarch)
 static struct type *
 aarch64_vnd_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (tdep->vnd_type == NULL)
     {
@@ -2009,7 +2014,7 @@ aarch64_vnd_type (struct gdbarch *gdbarch)
 static struct type *
 aarch64_vns_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (tdep->vns_type == NULL)
     {
@@ -2039,7 +2044,7 @@ aarch64_vns_type (struct gdbarch *gdbarch)
 static struct type *
 aarch64_vnh_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (tdep->vnh_type == NULL)
     {
@@ -2072,7 +2077,7 @@ aarch64_vnh_type (struct gdbarch *gdbarch)
 static struct type *
 aarch64_vnb_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (tdep->vnb_type == NULL)
     {
@@ -2099,7 +2104,7 @@ aarch64_vnb_type (struct gdbarch *gdbarch)
 static struct type *
 aarch64_vnv_type (struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (tdep->vnv_type == NULL)
     {
@@ -2170,7 +2175,7 @@ aarch64_vnv_type (struct gdbarch *gdbarch)
 static int
 aarch64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (reg >= AARCH64_DWARF_X0 && reg <= AARCH64_DWARF_X0 + 30)
     return AARCH64_X0_REGNUM + reg - AARCH64_DWARF_X0;
@@ -2457,7 +2462,7 @@ aarch64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
   CORE_ADDR jb_addr;
   gdb_byte buf[X_REGISTER_SIZE];
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
 
   jb_addr = get_frame_register_unsigned (frame, AARCH64_X0_REGNUM);
@@ -2488,7 +2493,7 @@ aarch64_gen_return_address (struct gdbarch *gdbarch,
 static const char *
 aarch64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   static const char *const q_name[] =
     {
@@ -2602,7 +2607,7 @@ aarch64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
 static struct type *
 aarch64_pseudo_register_type (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   int p_regnum = regnum - gdbarch_num_regs (gdbarch);
 
@@ -2639,7 +2644,7 @@ static int
 aarch64_pseudo_register_reggroup_p (struct gdbarch *gdbarch, int regnum,
 				    struct reggroup *group)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   int p_regnum = regnum - gdbarch_num_regs (gdbarch);
 
@@ -2693,7 +2698,7 @@ static struct value *
 aarch64_pseudo_read_value (struct gdbarch *gdbarch, readable_regcache *regcache,
 			   int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   struct value *result_value = allocate_value (register_type (gdbarch, regnum));
 
   VALUE_LVAL (result_value) = lval_register;
@@ -2763,7 +2768,7 @@ static void
 aarch64_pseudo_write (struct gdbarch *gdbarch, struct regcache *regcache,
 		      int regnum, const gdb_byte *buf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   regnum -= gdbarch_num_regs (gdbarch);
 
   if (regnum >= AARCH64_Q0_REGNUM && regnum < AARCH64_Q0_REGNUM + 32)
@@ -3328,7 +3333,7 @@ aarch64_add_reggroups (struct gdbarch *gdbarch)
 static int
 aarch64_cannot_store_register (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (!tdep->has_pauth ())
     return 0;
@@ -3375,7 +3380,8 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
        best_arch != nullptr;
        best_arch = gdbarch_list_lookup_by_info (best_arch->next, &info))
     {
-      struct gdbarch_tdep *tdep = gdbarch_tdep (best_arch->gdbarch);
+      aarch64_gdbarch_tdep *tdep
+	= (aarch64_gdbarch_tdep *) gdbarch_tdep (best_arch->gdbarch);
       if (tdep && tdep->vq == vq)
 	return best_arch->gdbarch;
     }
@@ -3483,7 +3489,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   /* AArch64 code is always little-endian.  */
   info.byte_order_for_code = BFD_ENDIAN_LITTLE;
 
-  struct gdbarch_tdep *tdep = XCNEW (struct gdbarch_tdep);
+  aarch64_gdbarch_tdep *tdep = new aarch64_gdbarch_tdep;
   struct gdbarch *gdbarch = gdbarch_alloc (&info, tdep);
 
   /* This should be low enough for everything.  */
@@ -3605,7 +3611,7 @@ aarch64_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 static void
 aarch64_dump_tdep (struct gdbarch *gdbarch, struct ui_file *file)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  aarch64_gdbarch_tdep *tdep = (aarch64_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (tdep == NULL)
     return;
@@ -3825,7 +3831,9 @@ aarch64_record_data_proc_imm (insn_decode_record *aarch64_insn_r)
 static unsigned int
 aarch64_record_branch_except_sys (insn_decode_record *aarch64_insn_r)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (aarch64_insn_r->gdbarch);
+
+  aarch64_gdbarch_tdep *tdep
+    = (aarch64_gdbarch_tdep *) gdbarch_tdep (aarch64_insn_r->gdbarch);
   uint8_t insn_bits24_27, insn_bits28_31, insn_bits22_23;
   uint32_t record_buf[4];
 
diff --git a/gdb/aarch64-tdep.h b/gdb/aarch64-tdep.h
index 7bf612b012a..efb0fa2d5b2 100644
--- a/gdb/aarch64-tdep.h
+++ b/gdb/aarch64-tdep.h
@@ -25,6 +25,7 @@
 #include "arch/aarch64.h"
 #include "displaced-stepping.h"
 #include "infrun.h"
+#include "gdbarch.h"
 
 /* Forward declarations.  */
 struct gdbarch;
@@ -60,31 +61,32 @@ struct regset;
 #define AARCH64_DISPLACED_MODIFIED_INSNS 1
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct aarch64_gdbarch_tdep : gdbarch_tdep
 {
   /* Lowest address at which instructions will appear.  */
-  CORE_ADDR lowest_pc;
+  CORE_ADDR lowest_pc = 0;
 
   /* Offset to PC value in jump buffer.  If this is negative, longjmp
      support will be disabled.  */
-  int jb_pc;
+  int jb_pc = 0;
 
   /* And the size of each entry in the buf.  */
-  size_t jb_elt_size;
+  size_t jb_elt_size = 0;
 
   /* Types for AdvSISD registers.  */
-  struct type *vnq_type;
-  struct type *vnd_type;
-  struct type *vns_type;
-  struct type *vnh_type;
-  struct type *vnb_type;
-  struct type *vnv_type;
+  struct type *vnq_type = nullptr;
+  struct type *vnd_type = nullptr;
+  struct type *vns_type = nullptr;
+  struct type *vnh_type = nullptr;
+  struct type *vnb_type = nullptr;
+  struct type *vnv_type = nullptr;
 
   /* syscall record.  */
-  int (*aarch64_syscall_record) (struct regcache *regcache, unsigned long svc_number);
+  int (*aarch64_syscall_record) (struct regcache *regcache,
+				 unsigned long svc_number) = nullptr;
 
   /* The VQ value for SVE targets, or zero if SVE is not supported.  */
-  uint64_t vq;
+  uint64_t vq = 0;
 
   /* Returns true if the target supports SVE.  */
   bool has_sve () const
@@ -92,8 +94,8 @@ struct gdbarch_tdep
     return vq != 0;
   }
 
-  int pauth_reg_base;
-  int pauth_ra_state_regnum;
+  int pauth_reg_base = 0;
+  int pauth_ra_state_regnum = 0;
 
   /* Returns true if the target supports pauth.  */
   bool has_pauth () const
@@ -102,7 +104,7 @@ struct gdbarch_tdep
   }
 
   /* First MTE register.  This is -1 if no MTE registers are available.  */
-  int mte_reg_base;
+  int mte_reg_base = 0;
 
   /* Returns true if the target supports MTE.  */
   bool has_mte () const
diff --git a/gdb/alpha-linux-tdep.c b/gdb/alpha-linux-tdep.c
index 0a00fc1f310..b821a6bd93a 100644
--- a/gdb/alpha-linux-tdep.c
+++ b/gdb/alpha-linux-tdep.c
@@ -354,8 +354,6 @@ alpha_linux_gdb_signal_to_target (struct gdbarch *gdbarch,
 static void
 alpha_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep;
-
   linux_init_abi (info, gdbarch, 0);
 
   /* Hook into the DWARF CFI frame unwinder.  */
@@ -364,7 +362,7 @@ alpha_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
   /* Hook into the MDEBUG frame unwinder.  */
   alpha_mdebug_init_abi (info, gdbarch);
 
-  tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   tdep->dynamic_sigtramp_offset = alpha_linux_sigtramp_offset;
   tdep->sigcontext_addr = alpha_linux_sigcontext_addr;
   tdep->pc_in_sigtramp = alpha_linux_pc_in_sigtramp;
diff --git a/gdb/alpha-netbsd-tdep.c b/gdb/alpha-netbsd-tdep.c
index 0b03aa19de1..b19f76bef06 100644
--- a/gdb/alpha-netbsd-tdep.c
+++ b/gdb/alpha-netbsd-tdep.c
@@ -250,7 +250,7 @@ static void
 alphanbsd_init_abi (struct gdbarch_info info,
 		    struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* Hook into the DWARF CFI frame unwinder.  */
   alpha_dwarf2_init_abi (info, gdbarch);
diff --git a/gdb/alpha-obsd-tdep.c b/gdb/alpha-obsd-tdep.c
index 0afd4dc56d8..7ca5ca17c6e 100644
--- a/gdb/alpha-obsd-tdep.c
+++ b/gdb/alpha-obsd-tdep.c
@@ -97,7 +97,7 @@ alphaobsd_sigcontext_addr (struct frame_info *this_frame)
 static void
 alphaobsd_init_abi(struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* Hook into the DWARF CFI frame unwinder.  */
   alpha_dwarf2_init_abi (info, gdbarch);
diff --git a/gdb/alpha-tdep.c b/gdb/alpha-tdep.c
index 03935d1db78..760a18a178a 100644
--- a/gdb/alpha-tdep.c
+++ b/gdb/alpha-tdep.c
@@ -615,11 +615,12 @@ alpha_return_value (struct gdbarch *gdbarch, struct value *function,
 		    gdb_byte *readbuf, const gdb_byte *writebuf)
 {
   enum type_code code = type->code ();
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if ((code == TYPE_CODE_STRUCT
        || code == TYPE_CODE_UNION
        || code == TYPE_CODE_ARRAY)
-      && gdbarch_tdep (gdbarch)->return_in_memory (type))
+      && tdep->return_in_memory (type))
     {
       if (readbuf)
 	{
@@ -850,7 +851,7 @@ static int
 alpha_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
 {
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   CORE_ADDR jb_addr;
   gdb_byte raw_buffer[ALPHA_REGISTER_SIZE];
@@ -882,7 +883,6 @@ alpha_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
 				   void **this_prologue_cache)
 {
   struct alpha_sigtramp_unwind_cache *info;
-  struct gdbarch_tdep *tdep;
 
   if (*this_prologue_cache)
     return (struct alpha_sigtramp_unwind_cache *) *this_prologue_cache;
@@ -890,7 +890,8 @@ alpha_sigtramp_frame_unwind_cache (struct frame_info *this_frame,
   info = FRAME_OBSTACK_ZALLOC (struct alpha_sigtramp_unwind_cache);
   *this_prologue_cache = info;
 
-  tdep = gdbarch_tdep (get_frame_arch (this_frame));
+  gdbarch *arch = get_frame_arch (this_frame);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (arch);
   info->sigcontext_addr = tdep->sigcontext_addr (this_frame);
 
   return info;
@@ -903,7 +904,7 @@ static CORE_ADDR
 alpha_sigtramp_register_address (struct gdbarch *gdbarch,
 				 CORE_ADDR sigcontext_addr, int regnum)
 { 
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (regnum >= 0 && regnum < 32)
     return sigcontext_addr + tdep->sc_regs_offset + regnum * 8;
@@ -924,7 +925,7 @@ alpha_sigtramp_frame_this_id (struct frame_info *this_frame,
 			      struct frame_id *this_id)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   struct alpha_sigtramp_unwind_cache *info
     = alpha_sigtramp_frame_unwind_cache (this_frame, this_prologue_cache);
   CORE_ADDR stack_addr, code_addr;
@@ -999,14 +1000,16 @@ alpha_sigtramp_frame_sniffer (const struct frame_unwind *self,
 
   /* We shouldn't even bother to try if the OSABI didn't register a
      sigcontext_addr handler or pc_in_sigtramp handler.  */
-  if (gdbarch_tdep (gdbarch)->sigcontext_addr == NULL)
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+  if (tdep->sigcontext_addr == NULL)
     return 0;
-  if (gdbarch_tdep (gdbarch)->pc_in_sigtramp == NULL)
+
+  if (tdep->pc_in_sigtramp == NULL)
     return 0;
 
   /* Otherwise we should be in a signal frame.  */
   find_pc_partial_function (pc, &name, NULL, NULL);
-  if (gdbarch_tdep (gdbarch)->pc_in_sigtramp (gdbarch, pc, name))
+  if (tdep->pc_in_sigtramp (gdbarch, pc, name))
     return 1;
 
   return 0;
@@ -1038,7 +1041,7 @@ static int heuristic_fence_post = 0;
 static CORE_ADDR
 alpha_heuristic_proc_start (struct gdbarch *gdbarch, CORE_ADDR pc)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  alpha_gdbarch_tdep *tdep = (alpha_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   CORE_ADDR last_non_nop = pc;
   CORE_ADDR fence = pc - heuristic_fence_post;
   CORE_ADDR orig_pc = pc;
@@ -1724,7 +1727,6 @@ alpha_software_single_step (struct regcache *regcache)
 static struct gdbarch *
 alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
 {
-  struct gdbarch_tdep *tdep;
   struct gdbarch *gdbarch;
 
   /* Find a candidate among extant architectures.  */
@@ -1732,7 +1734,7 @@ alpha_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches)
   if (arches != NULL)
     return arches->gdbarch;
 
-  tdep = XCNEW (struct gdbarch_tdep);
+  alpha_gdbarch_tdep *tdep = new alpha_gdbarch_tdep;
   gdbarch = gdbarch_alloc (&info, tdep);
 
   /* Lowest text address.  This is used by heuristic_proc_start()
diff --git a/gdb/alpha-tdep.h b/gdb/alpha-tdep.h
index c1fd69493e8..c1674fea8cb 100644
--- a/gdb/alpha-tdep.h
+++ b/gdb/alpha-tdep.h
@@ -19,6 +19,8 @@
 #ifndef ALPHA_TDEP_H
 #define ALPHA_TDEP_H
 
+#include "gdbarch.h"
+
 struct regcache;
 
 /* Say how long (ordinary) registers are.  This is a piece of bogosity
@@ -68,38 +70,38 @@ struct regcache;
 #define ALPHA_NUM_ARG_REGS   6
 
 /* Target-dependent structure in gdbarch.  */
-struct gdbarch_tdep
+struct alpha_gdbarch_tdep : gdbarch_tdep
 {
-  CORE_ADDR vm_min_address;	/* Used by alpha_heuristic_proc_start.  */
+  CORE_ADDR vm_min_address = 0;	/* Used by alpha_heuristic_proc_start.  */
 
   /* If PC is inside a dynamically-generated signal trampoline function
      (i.e. one copied onto the user stack at run-time), return how many
      bytes PC is beyond the start of that function.  Otherwise, return -1.  */
-  LONGEST (*dynamic_sigtramp_offset) (struct gdbarch *, CORE_ADDR);
+  LONGEST (*dynamic_sigtramp_offset) (struct gdbarch *, CORE_ADDR) = nullptr;
 
   /* Translate a signal handler stack base address into the address of
      the sigcontext structure for that signal handler.  */
-  CORE_ADDR (*sigcontext_addr) (struct frame_info *);
+  CORE_ADDR (*sigcontext_addr) (struct frame_info *) = nullptr;
 
   /* Does the PC fall in a signal trampoline.  */
   /* NOTE: cagney/2004-04-30: Do not copy/clone this code.  Instead
      look at tramp-frame.h and other simpler per-architecture
      sigtramp unwinders.  */
   int (*pc_in_sigtramp) (struct gdbarch *gdbarch, CORE_ADDR pc,
-			 const char *name);
+			 const char *name) = nullptr;
 
   /* If TYPE will be returned in memory, return true.  */
-  int (*return_in_memory) (struct type *type);
+  int (*return_in_memory) (struct type *type) = nullptr;
 
   /* Offset of registers in `struct sigcontext'.  */
-  int sc_pc_offset;
-  int sc_regs_offset;
-  int sc_fpregs_offset;
+  int sc_pc_offset = 0;
+  int sc_regs_offset = 0;
+  int sc_fpregs_offset = 0;
 
-  int jb_pc;			/* Offset to PC value in jump buffer.
+  int jb_pc = 0;			/* Offset to PC value in jump buffer.
 				   If htis is negative, longjmp support
 				   will be disabled.  */
-  size_t jb_elt_size;		/* And the size of each entry in the buf.  */
+  size_t jb_elt_size = 0;		/* And the size of each entry in the buf.  */
 };
 
 extern unsigned int alpha_read_insn (struct gdbarch *gdbarch, CORE_ADDR pc);
diff --git a/gdb/amd64-darwin-tdep.c b/gdb/amd64-darwin-tdep.c
index 3bd6296626d..5cf3ff266a4 100644
--- a/gdb/amd64-darwin-tdep.c
+++ b/gdb/amd64-darwin-tdep.c
@@ -97,7 +97,7 @@ amd64_darwin_sigcontext_addr (struct frame_info *this_frame)
 static void
 x86_darwin_init_abi_64 (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   amd64_init_abi (info, gdbarch,
 		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
diff --git a/gdb/amd64-fbsd-tdep.c b/gdb/amd64-fbsd-tdep.c
index 289431306ab..5069342ca73 100644
--- a/gdb/amd64-fbsd-tdep.c
+++ b/gdb/amd64-fbsd-tdep.c
@@ -195,7 +195,7 @@ amd64fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
 					void *cb_data,
 					const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   cb (".reg", tdep->sizeof_gregset, tdep->sizeof_gregset, &i386_gregset, NULL,
       cb_data);
@@ -229,7 +229,7 @@ amd64fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid,
 static void
 amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* Generic FreeBSD support. */
   fbsd_init_abi (info, gdbarch);
diff --git a/gdb/amd64-linux-tdep.c b/gdb/amd64-linux-tdep.c
index 715add8a7b0..817a197ceaa 100644
--- a/gdb/amd64-linux-tdep.c
+++ b/gdb/amd64-linux-tdep.c
@@ -1650,7 +1650,7 @@ amd64_linux_iterate_over_regset_sections (struct gdbarch *gdbarch,
 					  void *cb_data,
 					  const struct regcache *regcache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   cb (".reg", 27 * 8, 27 * 8, &i386_gregset, NULL, cb_data);
   cb (".reg2", 512, 512, &amd64_fpregset, NULL, cb_data);
@@ -1787,7 +1787,7 @@ static void
 amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch,
 			    int num_disp_step_buffers)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   linux_init_abi (info, gdbarch, num_disp_step_buffers);
 
@@ -1840,7 +1840,7 @@ amd64_linux_init_abi_common(struct gdbarch_info info, struct gdbarch *gdbarch,
 static void
 amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   struct tdesc_arch_data *tdesc_data = info.tdesc_data;
   const struct tdesc_feature *feature;
   int valid_p;
@@ -2054,7 +2054,7 @@ amd64_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 static void
 amd64_x32_linux_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   struct tdesc_arch_data *tdesc_data = info.tdesc_data;
   const struct tdesc_feature *feature;
   int valid_p;
diff --git a/gdb/amd64-netbsd-tdep.c b/gdb/amd64-netbsd-tdep.c
index 439dd91febb..be8ee3725f6 100644
--- a/gdb/amd64-netbsd-tdep.c
+++ b/gdb/amd64-netbsd-tdep.c
@@ -97,7 +97,7 @@ int amd64nbsd_r_reg_offset[] =
 static void
 amd64nbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   /* Initialize general-purpose register set details first.  */
   tdep->gregset_reg_offset = amd64nbsd_r_reg_offset;
diff --git a/gdb/amd64-obsd-tdep.c b/gdb/amd64-obsd-tdep.c
index 070f19635aa..0da1dbf4e4b 100644
--- a/gdb/amd64-obsd-tdep.c
+++ b/gdb/amd64-obsd-tdep.c
@@ -420,7 +420,7 @@ static const struct frame_unwind amd64obsd_trapframe_unwind =
 static void
 amd64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   amd64_init_abi (info, gdbarch,
 		  amd64_target_description (X86_XSTATE_SSE_MASK, true));
diff --git a/gdb/amd64-sol2-tdep.c b/gdb/amd64-sol2-tdep.c
index e561c0d300c..4cb243bda40 100644
--- a/gdb/amd64-sol2-tdep.c
+++ b/gdb/amd64-sol2-tdep.c
@@ -80,7 +80,7 @@ amd64_sol2_mcontext_addr (struct frame_info *this_frame)
 static void
 amd64_sol2_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   tdep->gregset_reg_offset = amd64_sol2_gregset_reg_offset;
   tdep->gregset_num_regs = ARRAY_SIZE (amd64_sol2_gregset_reg_offset);
diff --git a/gdb/amd64-tdep.c b/gdb/amd64-tdep.c
index de04bbd07c1..7c67359678b 100644
--- a/gdb/amd64-tdep.c
+++ b/gdb/amd64-tdep.c
@@ -247,7 +247,7 @@ static const int amd64_dwarf_regmap_len =
 static int
 amd64_dwarf_reg_to_regnum (struct gdbarch *gdbarch, int reg)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   int ymm0_regnum = tdep->ymm0_regnum;
   int regnum = -1;
 
@@ -331,7 +331,7 @@ static const char * const amd64_dword_names[] =
 static const char *
 amd64_pseudo_register_name (struct gdbarch *gdbarch, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   if (i386_byte_regnum_p (gdbarch, regnum))
     return amd64_byte_names[regnum - tdep->al_regnum];
   else if (i386_zmm_regnum_p (gdbarch, regnum))
@@ -353,7 +353,7 @@ amd64_pseudo_register_read_value (struct gdbarch *gdbarch,
 				  readable_regcache *regcache,
 				  int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   value *result_value = allocate_value (register_type (gdbarch, regnum));
   VALUE_LVAL (result_value) = lval_register;
@@ -413,7 +413,7 @@ amd64_pseudo_register_write (struct gdbarch *gdbarch,
 			     struct regcache *regcache,
 			     int regnum, const gdb_byte *buf)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (i386_byte_regnum_p (gdbarch, regnum))
     {
@@ -465,7 +465,7 @@ static int
 amd64_ax_pseudo_register_collect (struct gdbarch *gdbarch,
 				  struct agent_expr *ax, int regnum)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   if (i386_byte_regnum_p (gdbarch, regnum))
     {
@@ -2739,7 +2739,7 @@ static struct amd64_frame_cache *
 amd64_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
 {
   struct gdbarch *gdbarch = get_frame_arch (this_frame);
-  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
   enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
   struct amd64_frame_cache *cache;
   CORE_ADDR addr;
@@ -2821,7 +2821,8 @@ amd64_sigtramp_frame_sniffer (const struct frame_unwind *self,
 			      struct frame_info *this_frame,
 			      void **this_cache)
 {
-  struct gdbarch_tdep *tdep = gdbarch_tdep (get_frame_arch (this_frame));
+  gdbarch *arch = get_frame_arch (this_frame);
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (arch);
 
   /* We shouldn't even bother if we don't have a sigcontext_addr
      handler.  */
@@ -3021,7 +3022,7 @@ amd64_supply_fpregset (const struct regset *regset, struct regcache *regcache,
 		       int regnum, const void *fpregs, size_t len)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  const i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   gdb_assert (len >= tdep->sizeof_fpregset);
   amd64_supply_fxsave (regcache, regnum, fpregs);
@@ -3038,7 +3039,7 @@ amd64_collect_fpregset (const struct regset *regset,
 			int regnum, void *fpregs, size_t len)
 {
   struct gdbarch *gdbarch = regcache->arch ();
-  const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
+  const i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
 
   gdb_assert (len >= tdep->sizeof_fpregset);
   amd64_collect_fxsave (regcache, regnum, fpregs);
@@ -3062,7 +3063,8 @@ amd64_get_longjmp_target (struct frame_info *frame, CORE_ADDR *pc)
   gdb_byte buf[8];
   CORE_ADDR jb_addr;
   struct gdbarch *gdbarch = get_frame_arch (frame);
-  int jb_pc_offset = gdbarch_tdep (gdbarch)->jb_pc_offset;
+  i386_gdbarch_tdep *tdep = (i386_gdbarch_tdep *) gdbarch_tdep (gdbarch);
+  int jb_pc_offset = tdep->jb_pc_offset;
   int len = TYPE_LENGTH (builtin_type (gdbarch)->builtin_func_ptr);
 
   /* If JB_PC_OFFSET is -1, we have no way to find out where the
@@ -3105,7 +3107,7 @@ void
 amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch,
 		const target_desc *default_tdesc)
</cut>
>From hjl@sc.intel.com  Mon Nov 15 22:41:38 2021
Return-Path: <hjl@sc.intel.com>
X-Original-To: gcc-regression@gcc.gnu.org
Delivered-To: gcc-regression@gcc.gnu.org
Received: from mga17.intel.com (mga17.intel.com [192.55.52.151])
 by sourceware.org (Postfix) with ESMTPS id EC9D2385843A
 for <gcc-regression@gcc.gnu.org>; Mon, 15 Nov 2021 22:41:36 +0000 (GMT)
DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org EC9D2385843A
X-IronPort-AV: E=McAfee;i="6200,9189,10169"; a="214271918"
X-IronPort-AV: E=Sophos;i="5.87,237,1631602800"; d="scan'208";a="214271918"
Received: from orsmga008.jf.intel.com ([10.7.209.65])
 by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384;
 15 Nov 2021 14:41:35 -0800
X-ExtLoop1: 1
X-IronPort-AV: E=Sophos;i="5.87,237,1631602800"; d="scan'208";a="506125932"
Received: from scymds01.sc.intel.com ([10.148.94.138])
 by orsmga008.jf.intel.com with ESMTP; 15 Nov 2021 14:41:35 -0800
Received: from gnu-clx-1.sc.intel.com (gnu-clx-1.sc.intel.com [172.25.70.216])
 by scymds01.sc.intel.com with ESMTP id 1AFMfZ2q021087;
 Mon, 15 Nov 2021 14:41:35 -0800
Received: by gnu-clx-1.sc.intel.com (Postfix, from userid 1000)
 id 774423E001F; Mon, 15 Nov 2021 14:41:35 -0800 (PST)
Date: Mon, 15 Nov 2021 14:41:35 -0800
To: skpgkp2@gmail.com, hjl.tools@gmail.com, gcc-regression@gcc.gnu.org
Subject: Regressions on native/master at commit r12-5281 vs commit
 r12-5276 on Linux/x86_64
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20211115224135.774423E001F@gnu-clx-1.sc.intel.com>
From: "H. J. Lu" <hjl@sc.intel.com>
X-Spam-Status: No, score=-3468.4 required=5.0 testsºYES_00, KAM_DMARC_STATUS,
 KAM_LAZY_DOMAIN_SECURITY, KAM_NUMSUBJECT, SPF_HELO_NONE, SPF_NONE,
 TXREP autolearn=no autolearn_force=no version=3.4.4
X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on
 server2.sourceware.org
X-BeenThere: gcc-regression@gcc.gnu.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: Gcc-regression mailing list <gcc-regression.gcc.gnu.org>
List-Unsubscribe: <https://gcc.gnu.org/mailman/options/gcc-regression>,
 <mailto:gcc-regression-request@gcc.gnu.org?subject=unsubscribe>
List-Archive: <https://gcc.gnu.org/pipermail/gcc-regression/>
List-Post: <mailto:gcc-regression@gcc.gnu.org>
List-Help: <mailto:gcc-regression-request@gcc.gnu.org?subject=help>
List-Subscribe: <https://gcc.gnu.org/mailman/listinfo/gcc-regression>,
 <mailto:gcc-regression-request@gcc.gnu.org?subject=subscribe>
X-List-Received-Date: Mon, 15 Nov 2021 22:41:38 -0000

New failures:

New passes:
FAIL: gcc.c-torture/execute/20061220-1.c   -O1  (internal compiler error)
FAIL: gcc.c-torture/execute/20061220-1.c   -O1  (test for excess errors)


^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-11-15 19:41 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-15 19:41 [TCWG CI] Regression caused by gdb: gdb: fix gdbarch_tdep ODR violation ci_notify

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).