Index | Thread | Search

From:
Jeremie Courreges-Anglas <jca@wxcvbn.org>
Subject:
Re: Update to gdb-13.2 - tests wanted
To:
George Koehler <kernigh@gmail.com>, ports@openbsd.org, Pascal Stumpf <pascal@stumpf.co>, tb@openbsd.org, gkoehler@openbsd.org, kettenis@openbsd.org, miod@openbsd.org, visa@openbsd.org
Date:
Wed, 13 Nov 2024 22:45:43 +0100

Download raw body.

Thread
  • Jeremie Courreges-Anglas:

    Update to gdb-13.2 - tests wanted

  • On Sat, Nov 09, 2024 at 11:50:12AM +0100, Jeremie Courreges-Anglas wrote:
    > On Sat, Nov 09, 2024 at 12:57:56AM -0500, George Koehler wrote:
    > > On Fri, 8 Nov 2024 14:03:17 +0100
    > > Jeremie Courreges-Anglas <jca@wxcvbn.org> wrote:
    > > 
    > > > I can't infer from gkoehler's report and yours whether 32 bits powerpc
    > > > support is fine.
    > > 
    > > It was fine until I tried switching threads.  gdb-13.2 on powerpc gets
    > > registers from only the 1st thread, so thread switches have the wrong
    > > registers and backtrace.  A fix might be to change
    > > 	regcache->ptid ().pid()
    > > to
    > > 	get_ptrace_pid (regcache->ptid ())
    > > to match other archs, which I will try later, when I have a few hours
    > > to rebuild gdb.
    > 
    > Ah, yes, that's definitely something we want to fix on all platforms.
    > But that's not a regression introduced by 13.2, and I suggest you
    > handle this in a subsequent commit.
    
    Diff below adds similar fixes for arm, hppa and mips64.  The hppa code
    didn't build anyway.
    
    > > On powerpc64, gdb-13.2 refusing to run programs or load core dumps was
    > > a regression from 9.2.  I have edited my ppc64-obsd-*.c and my 13.2 now
    > > works about as well as 9.2, so I will mail my patches later.
    > 
    > That's great.  As far as I know, besides arm native support, it is the
    > last missing piece for this update.  I propose I commit this update,
    > and then you add your runtime fix for powerpc64 on top.  And I'll
    > handle arm later, as time permits.
    > 
    > kettenis@ has confirmed that using the latest diff, gdb compiles on arm
    > but with no runtime support.
    
    The diff below re-adds native process support for arm
    (patches/patch-gdb_configure_nat).  Single stepping seems to be
    broken, but that's also the case with gdb-9.2.  The Makefile diff
    overrides a dumb and broken gnulib check so that our malloc is used
    instead of a useless wrapper.
    
    ok?
    
    
    Index: Makefile
    ===================================================================
    RCS file: /cvs/ports/devel/gdb/Makefile,v
    diff -u -p -r1.87 Makefile
    --- Makefile	11 Nov 2024 00:15:33 -0000	1.87
    +++ Makefile	13 Nov 2024 21:34:14 -0000
    @@ -2,7 +2,7 @@ COMMENT=	GNU debugger
     CATEGORIES=	devel
     
     DISTNAME=	gdb-13.2
    -REVISION=	0
    +REVISION=	1
     
     HOMEPAGE=	https://www.gnu.org/software/gdb/
     
    @@ -42,6 +42,8 @@ CONFIGURE_ARGS=	--program-prefix=e \
     
     USE_GMAKE=	Yes
     MAKE_FLAGS=	V=1 LDFLAGS="-L${LOCALBASE}/lib ${LDFLAGS}"
    +# Avoid using malloc replacement for no good reason
    +MAKE_ENV=	gl_cv_malloc_ptrdiff=yes
     
     MODULES +=	lang/python
     
    Index: patches/patch-gdb_arm-obsd-nat_c
    ===================================================================
    RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_arm-obsd-nat_c,v
    diff -u -p -r1.1 patch-gdb_arm-obsd-nat_c
    --- patches/patch-gdb_arm-obsd-nat_c	9 Nov 2024 13:33:19 -0000	1.1
    +++ patches/patch-gdb_arm-obsd-nat_c	13 Nov 2024 21:34:14 -0000
    @@ -1,10 +1,9 @@
    -
    -TODO Reinstate OpenBSD/arm native support.
    +Add OpenBSD/arm native support.
     
     Index: gdb/arm-obsd-nat.c
     --- gdb/arm-obsd-nat.c.orig
     +++ gdb/arm-obsd-nat.c
    -@@ -0,0 +1,421 @@
    +@@ -0,0 +1,427 @@
     +/* Native-dependent code for BSD Unix running on ARM's, for GDB.
     +
     +   Copyright (C) 1988-2020 Free Software Foundation, Inc.
    @@ -89,8 +88,9 @@ Index: gdb/arm-obsd-nat.c
     +{
     +  struct reg inferior_registers;
     +  int ret;
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
    -+  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_GETREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
     +
     +  if (ret < 0)
    @@ -138,8 +138,9 @@ Index: gdb/arm-obsd-nat.c
     +  struct reg inferior_registers;
     +  int ret;
     +  int regno;
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
    -+  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_GETREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
     +
     +  if (ret < 0)
    @@ -156,8 +157,9 @@ Index: gdb/arm-obsd-nat.c
     +{
     +  struct fpreg inferior_fp_registers;
     +  int ret;
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
    -+  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_GETFPREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
     +
     +  if (ret < 0)
    @@ -186,8 +188,9 @@ Index: gdb/arm-obsd-nat.c
     +  struct fpreg inferior_fp_registers;
     +  int ret;
     +  int regno;
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
    -+  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_GETFPREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
     +
     +  if (ret < 0)
    @@ -223,8 +226,9 @@ Index: gdb/arm-obsd-nat.c
     +  gdbarch *gdbarch = regcache->arch ();
     +  struct reg inferior_registers;
     +  int ret;
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
    -+  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_GETREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
     +
     +  if (ret < 0)
    @@ -282,7 +286,7 @@ Index: gdb/arm-obsd-nat.c
     +      break;
     +    }
     +
    -+  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_SETREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
     +
     +  if (ret < 0)
    @@ -296,7 +300,7 @@ Index: gdb/arm-obsd-nat.c
     +  struct reg inferior_registers;
     +  int ret;
     +  int regno;
    -+
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
     +  for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++)
     +    regcache->raw_collect (regno, (char *) &inferior_registers.r[regno]);
    @@ -324,7 +328,7 @@ Index: gdb/arm-obsd-nat.c
     +      inferior_registers.r_pc = pc_val | psr_val;
     +    }
     +
    -+  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_SETREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
     +
     +  if (ret < 0)
    @@ -336,8 +340,9 @@ Index: gdb/arm-obsd-nat.c
     +{
     +  struct fpreg inferior_fp_registers;
     +  int ret;
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
    -+  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_GETFPREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
     +
     +  if (ret < 0)
    @@ -359,7 +364,7 @@ Index: gdb/arm-obsd-nat.c
     +      break;
     +    }
     +
    -+  ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_SETFPREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
     +
     +  if (ret < 0)
    @@ -372,7 +377,7 @@ Index: gdb/arm-obsd-nat.c
     +  struct fpreg inferior_fp_registers;
     +  int ret;
     +  int regno;
    -+
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
     +
     +  for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
     +    regcache->raw_collect
    @@ -381,7 +386,7 @@ Index: gdb/arm-obsd-nat.c
     +  regcache->raw_collect (ARM_FPS_REGNUM,
     +			 (char *) &inferior_fp_registers.fp_scr);
     +
    -+  ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
    ++  ret = ptrace (PT_SETFPREGS, pid,
     +		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
     +
     +  if (ret < 0)
    Index: patches/patch-gdb_configure_nat
    ===================================================================
    RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_configure_nat,v
    diff -u -p -r1.3 patch-gdb_configure_nat
    --- patches/patch-gdb_configure_nat	9 Nov 2024 13:33:19 -0000	1.3
    +++ patches/patch-gdb_configure_nat	13 Nov 2024 21:34:15 -0000
    @@ -1,6 +1,6 @@
     All our targets need obsd-nat.o and kvm etc -> dedup.
     Add aarch64, powerpc64 and riscv64 support.
    -Use OpenBSD-specific files for arm. (TBD)
    +Use OpenBSD-specific files for arm.
     
     Index: gdb/configure.nat
     --- gdb/configure.nat.orig
    @@ -28,8 +28,8 @@ Index: gdb/configure.nat
          obsd)
      	case ${gdb_host_cpu} in
     +	    arm)
    -+		# Host: OpenBSD/arm XXX TODO
    -+		#NATDEPFILES="${NATDEPFILES} arm-obsd-nat.o"
    ++		# Host: OpenBSD/arm
    ++		NATDEPFILES="${NATDEPFILES} arm-obsd-nat.o"
     +		;;
      	    i386)
      		# Host: OpenBSD/i386 ELF
    Index: patches/patch-gdb_hppa-obsd-nat_c
    ===================================================================
    RCS file: patches/patch-gdb_hppa-obsd-nat_c
    diff -N patches/patch-gdb_hppa-obsd-nat_c
    --- /dev/null	1 Jan 1970 00:00:00 -0000
    +++ patches/patch-gdb_hppa-obsd-nat_c	13 Nov 2024 21:34:15 -0000
    @@ -0,0 +1,24 @@
    +Add support for threads.
    +Fix build (undefined variable).
    +
    +Index: gdb/hppa-obsd-nat.c
    +--- gdb/hppa-obsd-nat.c.orig
    ++++ gdb/hppa-obsd-nat.c
    +@@ -196,7 +196,7 @@ hppaobsd_collect_fpregset (struct regcache *regcache,
    + void
    + hppa_obsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
    + {
    +-  pid_t pid = regcache->ptid ().pid ();
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
    + 
    +   if (regnum == -1 || hppaobsd_gregset_supplies_p (regnum))
    +     {
    +@@ -225,6 +225,8 @@ hppa_obsd_nat_target::fetch_registers (struct regcache
    + void
    + hppa_obsd_nat_target::store_registers (struct regcache *regcache, int regnum)
    + {
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
    ++
    +   if (regnum == -1 || hppaobsd_gregset_supplies_p (regnum))
    +     {
    +       struct reg regs;
    Index: patches/patch-gdb_mips64-obsd-nat_c
    ===================================================================
    RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_mips64-obsd-nat_c,v
    diff -u -p -r1.2 patch-gdb_mips64-obsd-nat_c
    --- patches/patch-gdb_mips64-obsd-nat_c	11 Mar 2022 18:50:04 -0000	1.2
    +++ patches/patch-gdb_mips64-obsd-nat_c	13 Nov 2024 21:34:15 -0000
    @@ -1,3 +1,6 @@
    +Fix build errors.
    +Add support for threads.
    +
     Index: gdb/mips64-obsd-nat.c
     --- gdb/mips64-obsd-nat.c.orig
     +++ gdb/mips64-obsd-nat.c
    @@ -19,7 +22,16 @@ Index: gdb/mips64-obsd-nat.c
        int i;
      
        for (i = MIPS_ZERO_REGNUM; i <= MIPS_PC_REGNUM; i++)
    -@@ -100,7 +100,7 @@ mips64_obsd_nat_target::fetch_registers (struct regcac
    +@@ -89,7 +89,7 @@ void
    + mips64_obsd_nat_target::fetch_registers (struct regcache *regcache, int regnum)
    + {
    +   struct reg regs;
    +-  pid_t pid = regcache->ptid ().pid ();
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
    + 
    +   if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
    +     perror_with_name (_("Couldn't get registers"));
    +@@ -100,11 +100,11 @@ mips64_obsd_nat_target::fetch_registers (struct regcac
      /* Store register REGNUM back into the inferior.  If REGNUM is -1, do
         this for all registers.  */
      
    @@ -28,3 +40,8 @@ Index: gdb/mips64-obsd-nat.c
      mips64_obsd_nat_target::store_registers (struct regcache *regcache, int regnum)
      {
        struct reg regs;
    +-  pid_t pid = regcache->ptid ().pid ();
    ++  pid_t pid = get_ptrace_pid (regcache->ptid ());
    + 
    +   if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
    +     perror_with_name (_("Couldn't get registers"));
    -- 
    jca
    
    
    
  • Jeremie Courreges-Anglas:

    Update to gdb-13.2 - tests wanted