Index | Thread | Search

From:
Pascal Stumpf <pascal@stumpf.co>
Subject:
Re: Update to gdb-13.2 - tests wanted
To:
ports@openbsd.org, tb@openbsd.org, gkoehler@openbsd.org, kettenis@openbsd.org, miod@openbsd.org, visa@openbsd.org
Date:
Thu, 07 Nov 2024 17:50:05 +0100

Download raw body.

Thread
On Thu, 7 Nov 2024 17:28:50 +0100, Jeremie Courreges-Anglas wrote:
> 
> So pascal@ shared an update to gdb-13.2 some time ago.  At least tb@
> is using it because of better support for IBT/endbrxx.  Instead of
> backporting fixes to our gdb-9.2 port, it would be nice to move the
> port to gdb-13.2, but that requires some cross-platform efforts*.
> 
> The diff below seems to work for me on amd64, riscv64 and sparc64.
> There's a good chance that the blind fixes I have added for arm64 and
> powerpc64 are not enough.  Also, the NetBSD native support we've been
> using for arm has changed significantly so it's probably better to
> have a separate implementation.  For now, I have added the file but
> I have unhooked native support on that arch.
> 
> Build tests would be most welcome on: arm, arm64, i386, powerpc,
> powerpc64, mips64.  Bonus points for alpha or hppa, they were not
> tested during the upgrade to gdb-9.2.  If you hit an issue and produce
> build or runtime fixes, please share the resulting
> patches/patch-... file(s).
> 
> Runtime tests welcome on all platforms.  Among other things I'm
> curious about support for PAC-enabled platforms.  What's the status
> with the current package and with the updated port?

Thank you for picking this up.  I will be testing on arm64, powerpc, arm
and hppa.

> * an alternative discussed with tb would be to have several versions
>   of gdb in the ports tree.  I'd slightly prefer that we work on
>   having a single one that works, even if updates are a bit painful.
>   Hopefully we can upstream support for some of our new architectures
>   at some point.  Thoughts?

I would prefer keeping a single version.  But let's see what works on
which architectures.

> Index: Makefile
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/Makefile,v
> diff -u -p -r1.85 Makefile
> --- Makefile	1 Oct 2024 07:41:42 -0000	1.85
> +++ Makefile	7 Nov 2024 15:55:58 -0000
> @@ -1,8 +1,7 @@
>  COMMENT=	GNU debugger
>  CATEGORIES=	devel
>  
> -DISTNAME=	gdb-9.2
> -REVISION=	7
> +DISTNAME=	gdb-13.2
>  
>  HOMEPAGE=	https://www.gnu.org/software/gdb/
>  
> @@ -17,7 +16,8 @@ EXTRACT_SUFX=	.tar.xz
>  
>  MODGNU_CONFIG_GUESS_DIRS=	${WRKSRC} ${WRKSRC}/gdb
>  
> -WANTLIB = c curses expat kvm intl m pthread ${MODPY_WANTLIB} ${COMPILER_LIBCXX} util
> +WANTLIB += ${MODPY_WANTLIB} ${COMPILER_LIBCXX}
> +WANTLIB += c curses expat kvm iconv intl m pthread util zstd
>  
>  DEBUG_PACKAGES=	${BUILD_PACKAGES}
>  
> @@ -29,7 +29,6 @@ CONFIGURE_STYLE=gnu
>  CONFIGURE_ARGS=	--program-prefix=e \
>  		--disable-nls \
>  		--disable-sim \
> -		--without-gmp \
>  		--without-guile \
>  		--without-isl \
>  		--without-lzma \
> @@ -45,7 +44,10 @@ MAKE_FLAGS=	V=1 LDFLAGS="${LDFLAGS}"
>  MODULES +=	lang/python
>  
>  BUILD_DEPENDS =	sysutils/xxhash
> -LIB_DEPENDS +=	${MODPY_LIB_DEPENDS}
> +# static link
> +BUILD_DEPENDS+=	devel/gmp,-main
> +LIB_DEPENDS +=	${MODPY_LIB_DEPENDS} \
> +		archivers/zstd
>  TEST_DEPENDS +=	devel/dejagnu
>  
>  post-install:
> Index: distinfo
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/distinfo,v
> diff -u -p -r1.23 distinfo
> --- distinfo	22 Oct 2021 18:30:35 -0000	1.23
> +++ distinfo	7 Nov 2024 15:55:58 -0000
> @@ -1,2 +1,2 @@
> -SHA256 (gdb/gdb-9.2.tar.xz) = NgzXrnm3dpiOidj5oByYXQsfohx2ekKV5fiMtJF1xVU=
> -SIZE (gdb/gdb-9.2.tar.xz) = 20979436
> +SHA256 (gdb/gdb-13.2.tar.xz) = /Vvrt74YM6vbbgI8L0mKNUSYKB350FUj2JFbq+uJPwo=
> +SIZE (gdb/gdb-13.2.tar.xz) = 23664644
> Index: patches/patch-bfd_config_bfd
> ===================================================================
> RCS file: patches/patch-bfd_config_bfd
> diff -N patches/patch-bfd_config_bfd
> --- patches/patch-bfd_config_bfd	11 Mar 2022 18:50:04 -0000	1.5
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,32 +0,0 @@
> -Index: bfd/config.bfd
> ---- bfd/config.bfd.orig
> -+++ bfd/config.bfd
> -@@ -81,7 +81,6 @@ case $targ in
> -  arm*-*-aout | \
> -  arm-*-coff | \
> -  arm-*-netbsd* | \
> -- arm-*-openbsd* | \
> -  arm-*-oabi | \
> -  arm-*-riscix* | \
> -  arm-epoc-pe* | \
> -@@ -257,6 +256,11 @@ case "${targ}" in
> -     targ_selvecs="aarch64_elf64_be_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_le_vec arm_elf32_be_vec"
> -     want64=true
> -     ;;
> -+  aarch64-*-openbsd*)
> -+    targ_defvec=aarch64_elf64_le_vec
> -+    targ_selvecs="aarch64_elf32_le_vec arm_elf32_le_vec"
> -+    want64=true
> -+    ;;
> -   aarch64_be-*-linux*)
> -     targ_defvec=aarch64_elf64_be_vec
> -     targ_selvecs="aarch64_elf64_le_vec aarch64_elf32_le_vec aarch64_elf32_be_vec arm_elf32_be_vec arm_elf32_le_vec"
> -@@ -352,7 +356,7 @@ case "${targ}" in
> -     targ_defvec=arm_elf32_be_vec
> -     targ_selvecs="arm_elf32_le_vec"
> -     ;;
> --  arm-*-netbsdelf*)
> -+  arm-*-netbsdelf* | arm-*-openbsd*)
> -     targ_defvec=arm_elf32_le_vec
> -     targ_selvecs="arm_elf32_be_vec"
> -     ;;
> Index: patches/patch-bfd_elf_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-bfd_elf_c,v
> diff -u -p -r1.12 patch-bfd_elf_c
> --- patches/patch-bfd_elf_c	10 Jun 2023 19:19:12 -0000	1.12
> +++ patches/patch-bfd_elf_c	7 Nov 2024 15:55:58 -0000
> @@ -1,8 +1,8 @@
>  Index: bfd/elf.c
>  --- bfd/elf.c.orig
>  +++ bfd/elf.c
> -@@ -10758,6 +10758,11 @@ elfcore_grok_openbsd_procinfo (bfd *abfd, Elf_Internal
> - static bfd_boolean
> +@@ -11438,6 +11438,11 @@ elfcore_grok_solaris_note (bfd *abfd, Elf_Internal_Not
> + static bool
>   elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Note *note)
>   {
>  +  int lwp;
> @@ -13,13 +13,13 @@ Index: bfd/elf.c
>     if (note->type == NT_OPENBSD_PROCINFO)
>       return elfcore_grok_openbsd_procinfo (abfd, note);
>   
> -@@ -10786,6 +10791,9 @@ elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Not
> +@@ -11466,6 +11471,9 @@ elfcore_grok_openbsd_note (bfd *abfd, Elf_Internal_Not
>   
> -       return TRUE;
> +       return true;
>       }
>  +
>  +  if (note->type == NT_OPENBSD_PACMASK)
>  +    return elfcore_make_note_pseudosection (abfd, ".reg-aarch-pauth", note);
>   
> -   return TRUE;
> +   return true;
>   }
> Index: patches/patch-bfd_peXXigen_c
> ===================================================================
> RCS file: patches/patch-bfd_peXXigen_c
> diff -N patches/patch-bfd_peXXigen_c
> --- patches/patch-bfd_peXXigen_c	11 Mar 2022 18:50:04 -0000	1.8
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,22 +0,0 @@
> -Fix out-of-bounds memcpys (FILNMLEN is 18, sizeof x_fname is 14).
> -Index: bfd/peXXigen.c
> ---- bfd/peXXigen.c.orig
> -+++ bfd/peXXigen.c
> -@@ -318,7 +318,7 @@ _bfd_XXi_swap_aux_in (bfd *	abfd,
> - 	  in->x_file.x_n.x_offset = H_GET_32 (abfd, ext->x_file.x_n.x_offset);
> - 	}
> -       else
> --	memcpy (in->x_file.x_fname, ext->x_file.x_fname, FILNMLEN);
> -+	memcpy (in->x_file.x_fname, ext->x_file.x_fname, sizeof in->x_file.x_fname);
> -       return;
> - 
> -     case C_STAT:
> -@@ -392,7 +392,7 @@ _bfd_XXi_swap_aux_out (bfd *  abfd,
> - 	  H_PUT_32 (abfd, in->x_file.x_n.x_offset, ext->x_file.x_n.x_offset);
> - 	}
> -       else
> --	memcpy (ext->x_file.x_fname, in->x_file.x_fname, FILNMLEN);
> -+	memcpy (ext->x_file.x_fname, in->x_file.x_fname, sizeof ext->x_file.x_fname);
> - 
> -       return AUXESZ;
> - 
> Index: patches/patch-gdb_Makefile_in
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_Makefile_in,v
> diff -u -p -r1.5 patch-gdb_Makefile_in
> --- patches/patch-gdb_Makefile_in	11 Mar 2022 18:50:04 -0000	1.5
> +++ patches/patch-gdb_Makefile_in	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,11 @@
> +
> +Add support for aarch64, powerpc64 and riscv64.
> +TODO Use OpenBSD-specific files for arm.
> +
>  Index: gdb/Makefile.in
>  --- gdb/Makefile.in.orig
>  +++ gdb/Makefile.in
> -@@ -651,6 +651,7 @@ ALL_64_TARGET_OBS = \
> +@@ -699,6 +699,7 @@ ALL_64_TARGET_OBS = \
>   	aarch64-fbsd-tdep.o \
>   	aarch64-linux-tdep.o \
>   	aarch64-newlib-tdep.o \
> @@ -9,23 +13,23 @@ Index: gdb/Makefile.in
>   	aarch64-ravenscar-thread.o \
>   	aarch64-tdep.o \
>   	alpha-bsd-tdep.o \
> -@@ -675,6 +676,7 @@ ALL_64_TARGET_OBS = \
> - 	ia64-tdep.o \
> - 	ia64-vms-tdep.o \
> - 	mips64-obsd-tdep.o \
> +@@ -737,6 +738,7 @@ ALL_64_TARGET_OBS = \
> + 	riscv-fbsd-tdep.o \
> + 	riscv-linux-tdep.o \
> + 	riscv-none-tdep.o \
>  +	riscv-obsd-tdep.o \
> + 	riscv-ravenscar-thread.o \
> + 	riscv-tdep.o \
>   	sparc64-fbsd-tdep.o \
> - 	sparc64-linux-tdep.o \
> - 	sparc64-nbsd-tdep.o \
> -@@ -1381,6 +1383,7 @@ HFILES_NO_SRCDIR = \
> - 	remote-notif.h \
> +@@ -1436,6 +1438,7 @@ HFILES_NO_SRCDIR = \
>   	riscv-fbsd-tdep.h \
> + 	riscv-ravenscar-thread.h \
>   	riscv-tdep.h \
>  +	riscv-obsd-tdep.h \
>   	rs6000-aix-tdep.h \
> - 	rs6000-tdep.h \
>   	run-on-main-thread.h \
> -@@ -2157,6 +2160,8 @@ ALLDEPFILES = \
> + 	s390-linux-tdep.h \
> +@@ -1627,6 +1630,8 @@ ALLDEPFILES = \
>   	aarch64-linux-nat.c \
>   	aarch64-linux-tdep.c \
>   	aarch64-newlib-tdep.c \
> @@ -34,12 +38,12 @@ Index: gdb/Makefile.in
>   	aarch64-ravenscar-thread.c \
>   	aarch64-tdep.c \
>   	aix-thread.c \
> -@@ -2300,6 +2305,8 @@ ALLDEPFILES = \
> - 	riscv-linux-nat.c \
> - 	riscv-linux-tdep.c \
> +@@ -1776,6 +1781,8 @@ ALLDEPFILES = \
> + 	riscv-none-tdep.c \
> + 	riscv-ravenscar-thread.c \
>   	riscv-tdep.c \
>  +	riscv-obsd-nat.c \
>  +	riscv-obsd-tdep.c \
>   	rl78-tdep.c \
> + 	rs6000-aix-nat.c \
>   	rs6000-lynx178-tdep.c \
> - 	rs6000-nat.c \
> Index: patches/patch-gdb_aarch64-obsd-nat_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_aarch64-obsd-nat_c,v
> diff -u -p -r1.3 patch-gdb_aarch64-obsd-nat_c
> --- patches/patch-gdb_aarch64-obsd-nat_c	10 Jun 2023 19:19:12 -0000	1.3
> +++ patches/patch-gdb_aarch64-obsd-nat_c	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: gdb/aarch64-obsd-nat.c
>  --- gdb/aarch64-obsd-nat.c.orig
>  +++ gdb/aarch64-obsd-nat.c
> -@@ -0,0 +1,162 @@
> +@@ -0,0 +1,169 @@
>  +/* Native-dependent code for OpenBSD/aarch64.
>  +
>  +   Copyright (C) 2017-2020 Free Software Foundation, Inc.
> @@ -27,6 +27,7 @@ Index: gdb/aarch64-obsd-nat.c
>  +#include "target.h"
>  +
>  +#include <sys/types.h>
> ++#include <sys/auxv.h>
>  +#include <sys/ptrace.h>
>  +#include <machine/reg.h>
>  +
> @@ -156,7 +157,13 @@ Index: gdb/aarch64-obsd-nat.c
>  +const struct target_desc *
>  +aarch64_obsd_nat_target::read_description ()
>  +{
> -+  return aarch64_read_description(0, true);
> ++  aarch64_features features;
> ++  unsigned long hwcap;
> ++
> ++  if (elf_aux_info(AT_HWCAP, &hwcap, sizeof hwcap) == 0)
> ++    features.pauth = hwcap & HWCAP_PACA;
> ++
> ++  return aarch64_read_description (features);
>  +}
>  +
>  +void
> Index: patches/patch-gdb_aarch64-obsd-tdep_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_aarch64-obsd-tdep_c,v
> diff -u -p -r1.3 patch-gdb_aarch64-obsd-tdep_c
> --- patches/patch-gdb_aarch64-obsd-tdep_c	10 Jun 2023 19:19:12 -0000	1.3
> +++ patches/patch-gdb_aarch64-obsd-tdep_c	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: gdb/aarch64-obsd-tdep.c
>  --- gdb/aarch64-obsd-tdep.c.orig
>  +++ gdb/aarch64-obsd-tdep.c
> -@@ -0,0 +1,334 @@
> +@@ -0,0 +1,338 @@
>  +/* Target-dependent code for OpenBSD/aarch64.
>  +
>  +   Copyright (C) 2006-2017 Free Software Foundation, Inc.
> @@ -59,7 +59,7 @@ Index: gdb/aarch64-obsd-tdep.c
>  +
>  +static int
>  +aarch64obsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
> -+				    struct frame_info *this_frame,
> ++				    frame_info_ptr this_frame,
>  +				    void **this_cache)
>  +{
>  +  struct gdbarch *gdbarch = get_frame_arch (this_frame);
> @@ -78,8 +78,7 @@ Index: gdb/aarch64-obsd-tdep.c
>  +      gdb_byte buf[8];
>  +      unsigned long insn;
>  +
> -+      if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
> -+				     buf, sizeof buf))
> ++      if (!safe_frame_unwind_memory (this_frame, start_pc + *offset, buf)
>  +	continue;
>  +
>  +      /* Check for "mov x8, #SYS_sigreturn".  */
> @@ -134,10 +133,10 @@ Index: gdb/aarch64-obsd-tdep.c
>  +#define AARCH64_SIGCONTEXT_X0_OFFSET		40
>  +
>  +static struct trad_frame_cache *
> -+aarch64obsd_sigtramp_frame_cache (struct frame_info *this_frame, void **this_cache)
> ++aarch64obsd_sigtramp_frame_cache (frame_info_ptr this_frame, void **this_cache)
>  +{
>  +  struct gdbarch *gdbarch = get_frame_arch (this_frame);
> -+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
> ++  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
>  +  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
>  +  struct trad_frame_cache *cache;
>  +  CORE_ADDR sp, sigcontext_addr, x0_addr, func;
> @@ -153,7 +152,7 @@ Index: gdb/aarch64-obsd-tdep.c
>  +
>  +  func = get_frame_pc (this_frame);
>  +  func &= ~(aarch64obsd_page_size - 1);
> -+  if (!safe_frame_unwind_memory (this_frame, func, buf, sizeof buf))
> ++  if (!safe_frame_unwind_memory (this_frame, func, buf))
>  +    return cache;
>  +
>  +  /* Calculate the offset where we can find `struct sigframe'.  In 6.1
> @@ -188,7 +187,7 @@ Index: gdb/aarch64-obsd-tdep.c
>  +}
>  +
>  +static void
> -+aarch64obsd_sigtramp_frame_this_id (struct frame_info *this_frame,
> ++aarch64obsd_sigtramp_frame_this_id (frame_info_ptr this_frame,
>  +				    void **this_cache,
>  +				    struct frame_id *this_id)
>  +{
> @@ -199,7 +198,7 @@ Index: gdb/aarch64-obsd-tdep.c
>  +}
>  +
>  +static struct value *
> -+aarch64obsd_sigtramp_frame_prev_register (struct frame_info *this_frame,
> ++aarch64obsd_sigtramp_frame_prev_register (frame_info_ptr this_frame,
>  +				      void **this_cache, int regnum)
>  +{
>  +  struct trad_frame_cache *cache =
> @@ -268,7 +267,7 @@ Index: gdb/aarch64-obsd-tdep.c
>  +					   void *cb_data,
>  +					   const struct regcache *regcache)
>  +{
> -+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
> ++  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
>  +
>  +  cb (".reg", AARCH64_OBSD_SIZEOF_GREGSET, AARCH64_OBSD_SIZEOF_GREGSET,
>  +      &aarch64_obsd_gregset, NULL, cb_data);
> @@ -299,14 +298,19 @@ Index: gdb/aarch64-obsd-tdep.c
>  +aarch64_obsd_core_read_description (struct gdbarch *gdbarch,
>  +				    struct target_ops *target, bfd *abfd)
>  +{
> -+  return aarch64_read_description (0, true);
> ++  asection *pauth = bfd_get_section_by_name (abfd, ".reg-aarch-pauth");
> ++
> ++  aarch64_features features;
> ++  features.pauth = pauth != nullptr ? 1 : 0;
> ++
> ++  return aarch64_read_description (features);
>  +}
>  +␌
>  +
>  +static void
>  +aarch64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
>  +{
> -+  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
> ++  aarch64_gdbarch_tdep *tdep = gdbarch_tdep<aarch64_gdbarch_tdep> (gdbarch);
>  +
>  +  obsd_init_abi (info, gdbarch);
>  +
> Index: patches/patch-gdb_amd64-obsd-tdep_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_amd64-obsd-tdep_c,v
> diff -u -p -r1.3 patch-gdb_amd64-obsd-tdep_c
> --- patches/patch-gdb_amd64-obsd-tdep_c	10 Dec 2023 12:06:58 -0000	1.3
> +++ patches/patch-gdb_amd64-obsd-tdep_c	7 Nov 2024 15:55:58 -0000
> @@ -47,7 +47,7 @@ Index: gdb/amd64-obsd-tdep.c
>   /* Return whether THIS_FRAME corresponds to an OpenBSD sigtramp
>      routine.  */
>   
> -@@ -49,20 +85,8 @@ amd64obsd_sigtramp_p (struct frame_info *this_frame)
> +@@ -49,20 +85,8 @@ amd64obsd_sigtramp_p (frame_info_ptr this_frame)
>   {
>     CORE_ADDR pc = get_frame_pc (this_frame);
>     CORE_ADDR start_pc = (pc & ~(amd64obsd_page_size - 1));
> @@ -70,19 +70,19 @@ Index: gdb/amd64-obsd-tdep.c
>     const char *name;
>   
>     /* If the function has a valid symbol name, it isn't a
> -@@ -76,22 +100,21 @@ amd64obsd_sigtramp_p (struct frame_info *this_frame)
> +@@ -76,22 +100,21 @@ amd64obsd_sigtramp_p (frame_info_ptr this_frame)
>     if (find_pc_section (pc) != NULL)
>       return 0;
>   
>  -  /* If we can't read the instructions at START_PC, return zero.  */
>  -  buf = (gdb_byte *) alloca ((sizeof sigreturn) + 1);
> --  if (!safe_frame_unwind_memory (this_frame, start_pc + 6, buf, buflen))
> +-  if (!safe_frame_unwind_memory (this_frame, start_pc + 6, {buf, buflen}))
>  -    return 0;
>  +  for (info = amd64obsd_sigreturn_info; info->offset != -1; info++)
>  +    {
>  +      /* If we can't read the instructions, return zero.  */
>  +      if (!safe_frame_unwind_memory (this_frame,
> -+        start_pc + info->offset, buf, sizeof buf))
> ++        start_pc + info->offset, buf))
>  +        continue;
>   
>  -  /* Check for sigreturn(2).  Depending on how the assembler encoded
> @@ -107,7 +107,7 @@ Index: gdb/amd64-obsd-tdep.c
>   
>   /* Assuming THIS_FRAME is for a BSD sigtramp routine, return the
>  @@ -101,7 +124,10 @@ static CORE_ADDR
> - amd64obsd_sigcontext_addr (struct frame_info *this_frame)
> + amd64obsd_sigcontext_addr (frame_info_ptr this_frame)
>   {
>     CORE_ADDR pc = get_frame_pc (this_frame);
>  +  CORE_ADDR start_pc = (pc & ~(amd64obsd_page_size - 1));
> @@ -117,7 +117,7 @@ Index: gdb/amd64-obsd-tdep.c
>   
>     /* The %rsp register points at `struct sigcontext' upon entry of a
>        signal trampoline.  The relevant part of the trampoline is
> -@@ -115,10 +141,22 @@ amd64obsd_sigcontext_addr (struct frame_info *this_fra
> +@@ -115,10 +141,22 @@ amd64obsd_sigcontext_addr (frame_info_ptr this_frame)
>        (see /usr/src/sys/arch/amd64/amd64/locore.S).  The `pushq'
>        instruction clobbers %rsp, but its value is saved in `%rdi'.  */
>   
> @@ -129,7 +129,7 @@ Index: gdb/amd64-obsd-tdep.c
>  +    {
>  +      /* If we can't read the instructions, return %rsp.  */
>  +      if (!safe_frame_unwind_memory (this_frame,
> -+        start_pc + info->offset, buf, sizeof buf))
> ++        start_pc + info->offset, buf))
>  +        continue;
>  +
>  +      /* Check for sigreturn(2).  */
> Index: patches/patch-gdb_arm-nbsd-nat_c
> ===================================================================
> RCS file: patches/patch-gdb_arm-nbsd-nat_c
> diff -N patches/patch-gdb_arm-nbsd-nat_c
> --- patches/patch-gdb_arm-nbsd-nat_c	11 Mar 2022 18:50:04 -0000	1.2
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,76 +0,0 @@
> -Index: gdb/arm-nbsd-nat.c
> ---- gdb/arm-nbsd-nat.c.orig
> -+++ gdb/arm-nbsd-nat.c
> -@@ -69,9 +69,9 @@ arm_supply_fparegset (struct regcache *regcache, struc
> - 
> -   for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
> -     regcache->raw_supply (regno,
> --			  (char *) &fparegset->fpr[regno - ARM_F0_REGNUM]);
> -+			  (char *) &fparegset->fp_reg[regno - ARM_F0_REGNUM]);
> - 
> --  regcache->raw_supply (ARM_FPS_REGNUM, (char *) &fparegset->fpr_fpsr);
> -+  regcache->raw_supply (ARM_FPS_REGNUM, (char *) &fparegset->fp_scr);
> - }
> - 
> - static void
> -@@ -160,12 +160,12 @@ fetch_fp_register (struct regcache *regcache, int regn
> -     {
> -     case ARM_FPS_REGNUM:
> -       regcache->raw_supply (ARM_FPS_REGNUM,
> --			    (char *) &inferior_fp_registers.fpr_fpsr);
> -+			    (char *) &inferior_fp_registers.fp_scr);
> -       break;
> - 
> -     default:
> -       regcache->raw_supply
> --	(regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]);
> -+	(regno, (char *) &inferior_fp_registers.fp_reg[regno - ARM_F0_REGNUM]);
> -       break;
> -     }
> - }
> -@@ -190,7 +190,7 @@ fetch_fp_regs (struct regcache *regcache)
> - }
> - 
> - void
> --arm_nbsd_nat_target::fetch_registers (struct regcache *regcache, int regno)
> -+arm_netbsd_nat_target::fetch_registers (struct regcache *regcache, int regno)
> - {
> -   if (regno >= 0)
> -     {
> -@@ -340,12 +340,12 @@ store_fp_register (const struct regcache *regcache, in
> -     {
> -     case ARM_FPS_REGNUM:
> -       regcache->raw_collect (ARM_FPS_REGNUM,
> --			     (char *) &inferior_fp_registers.fpr_fpsr);
> -+			     (char *) &inferior_fp_registers.fp_scr);
> -       break;
> - 
> -     default:
> -       regcache->raw_collect
> --	(regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]);
> -+	(regno, (char *) &inferior_fp_registers.fp_reg[regno - ARM_F0_REGNUM]);
> -       break;
> -     }
> - 
> -@@ -366,10 +366,10 @@ store_fp_regs (const struct regcache *regcache)
> - 
> -   for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
> -     regcache->raw_collect
> --      (regno, (char *) &inferior_fp_registers.fpr[regno - ARM_F0_REGNUM]);
> -+      (regno, (char *) &inferior_fp_registers.fp_reg[regno - ARM_F0_REGNUM]);
> - 
> -   regcache->raw_collect (ARM_FPS_REGNUM,
> --			 (char *) &inferior_fp_registers.fpr_fpsr);
> -+			 (char *) &inferior_fp_registers.fp_scr);
> - 
> -   ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
> - 		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
> -@@ -379,7 +379,7 @@ store_fp_regs (const struct regcache *regcache)
> - }
> - 
> - void
> --arm_nbsd_nat_target::store_registers (struct regcache *regcache, int regno)
> -+arm_netbsd_nat_target::store_registers (struct regcache *regcache, int regno)
> - {
> -   if (regno >= 0)
> -     {
> Index: patches/patch-gdb_arm-obsd-nat_c
> ===================================================================
> RCS file: patches/patch-gdb_arm-obsd-nat_c
> diff -N patches/patch-gdb_arm-obsd-nat_c
> --- /dev/null	1 Jan 1970 00:00:00 -0000
> +++ patches/patch-gdb_arm-obsd-nat_c	7 Nov 2024 15:55:58 -0000
> @@ -0,0 +1,428 @@
> +
> +TODO Reinstate 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 @@
> ++/* Native-dependent code for BSD Unix running on ARM's, for GDB.
> ++
> ++   Copyright (C) 1988-2020 Free Software Foundation, Inc.
> ++
> ++   This file is part of GDB.
> ++
> ++   This program is free software; you can redistribute it and/or modify
> ++   it under the terms of the GNU General Public License as published by
> ++   the Free Software Foundation; either version 3 of the License, or
> ++   (at your option) any later version.
> ++
> ++   This program is distributed in the hope that it will be useful,
> ++   but WITHOUT ANY WARRANTY; without even the implied warranty of
> ++   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> ++   GNU General Public License for more details.
> ++
> ++   You should have received a copy of the GNU General Public License
> ++   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
> ++
> ++#include "defs.h"
> ++#include "gdbcore.h"
> ++#include "inferior.h"
> ++#include "regcache.h"
> ++#include "target.h"
> ++#include <sys/types.h>
> ++#include <sys/ptrace.h>
> ++#include <machine/reg.h>
> ++#include <machine/frame.h>
> ++
> ++#include "arm-tdep.h"
> ++#include "inf-ptrace.h"
> ++#include "obsd-nat.h"
> ++
> ++class arm_openbsd_nat_target final : public obsd_nat_target
> ++{
> ++public:
> ++  /* Add our register access methods.  */
> ++  void fetch_registers (struct regcache *, int) override;
> ++  void store_registers (struct regcache *, int) override;
> ++
> ++  const struct target_desc *read_description () override;
> ++};
> ++
> ++static arm_openbsd_nat_target the_arm_openbsd_nat_target;
> ++
> ++static void
> ++arm_supply_gregset (struct regcache *regcache, struct reg *gregset)
> ++{
> ++  int regno;
> ++  CORE_ADDR r_pc;
> ++
> ++  /* Integer registers.  */
> ++  for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++)
> ++    regcache->raw_supply (regno, (char *) &gregset->r[regno]);
> ++
> ++  regcache->raw_supply (ARM_SP_REGNUM, (char *) &gregset->r_sp);
> ++  regcache->raw_supply (ARM_LR_REGNUM, (char *) &gregset->r_lr);
> ++  /* This is ok: we're running native...  */
> ++  r_pc = gdbarch_addr_bits_remove (regcache->arch (), gregset->r_pc);
> ++  regcache->raw_supply (ARM_PC_REGNUM, (char *) &r_pc);
> ++
> ++  if (arm_apcs_32)
> ++    regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->r_cpsr);
> ++  else
> ++    regcache->raw_supply (ARM_PS_REGNUM, (char *) &gregset->r_pc);
> ++}
> ++
> ++static void
> ++arm_supply_fparegset (struct regcache *regcache, struct fpreg *fparegset)
> ++{
> ++  int regno;
> ++
> ++  for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
> ++    regcache->raw_supply (regno,
> ++			  (char *) &fparegset->fp_reg[regno - ARM_F0_REGNUM]);
> ++
> ++  regcache->raw_supply (ARM_FPS_REGNUM, (char *) &fparegset->fp_scr);
> ++}
> ++
> ++static void
> ++fetch_register (struct regcache *regcache, int regno)
> ++{
> ++  struct reg inferior_registers;
> ++  int ret;
> ++
> ++  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
> ++
> ++  if (ret < 0)
> ++    {
> ++      warning (_("unable to fetch general register"));
> ++      return;
> ++    }
> ++
> ++  switch (regno)
> ++    {
> ++    case ARM_SP_REGNUM:
> ++      regcache->raw_supply (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
> ++      break;
> ++
> ++    case ARM_LR_REGNUM:
> ++      regcache->raw_supply (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
> ++      break;
> ++
> ++    case ARM_PC_REGNUM:
> ++      /* This is ok: we're running native...  */
> ++      inferior_registers.r_pc = gdbarch_addr_bits_remove
> ++				  (regcache->arch (),
> ++				   inferior_registers.r_pc);
> ++      regcache->raw_supply (ARM_PC_REGNUM, (char *) &inferior_registers.r_pc);
> ++      break;
> ++
> ++    case ARM_PS_REGNUM:
> ++      if (arm_apcs_32)
> ++	regcache->raw_supply (ARM_PS_REGNUM,
> ++			      (char *) &inferior_registers.r_cpsr);
> ++      else
> ++	regcache->raw_supply (ARM_PS_REGNUM,
> ++			      (char *) &inferior_registers.r_pc);
> ++      break;
> ++
> ++    default:
> ++      regcache->raw_supply (regno, (char *) &inferior_registers.r[regno]);
> ++      break;
> ++    }
> ++}
> ++
> ++static void
> ++fetch_regs (struct regcache *regcache)
> ++{
> ++  struct reg inferior_registers;
> ++  int ret;
> ++  int regno;
> ++
> ++  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
> ++
> ++  if (ret < 0)
> ++    {
> ++      warning (_("unable to fetch general registers"));
> ++      return;
> ++    }
> ++
> ++  arm_supply_gregset (regcache, &inferior_registers);
> ++}
> ++
> ++static void
> ++fetch_fp_register (struct regcache *regcache, int regno)
> ++{
> ++  struct fpreg inferior_fp_registers;
> ++  int ret;
> ++
> ++  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
> ++
> ++  if (ret < 0)
> ++    {
> ++      warning (_("unable to fetch floating-point register"));
> ++      return;
> ++    }
> ++
> ++  switch (regno)
> ++    {
> ++    case ARM_FPS_REGNUM:
> ++      regcache->raw_supply (ARM_FPS_REGNUM,
> ++			    (char *) &inferior_fp_registers.fp_scr);
> ++      break;
> ++
> ++    default:
> ++      regcache->raw_supply
> ++	(regno, (char *) &inferior_fp_registers.fp_reg[regno - ARM_F0_REGNUM]);
> ++      break;
> ++    }
> ++}
> ++
> ++static void
> ++fetch_fp_regs (struct regcache *regcache)
> ++{
> ++  struct fpreg inferior_fp_registers;
> ++  int ret;
> ++  int regno;
> ++
> ++  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
> ++
> ++  if (ret < 0)
> ++    {
> ++      warning (_("unable to fetch general registers"));
> ++      return;
> ++    }
> ++
> ++  arm_supply_fparegset (regcache, &inferior_fp_registers);
> ++}
> ++
> ++void
> ++arm_openbsd_nat_target::fetch_registers (struct regcache *regcache, int regno)
> ++{
> ++  if (regno >= 0)
> ++    {
> ++      if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM)
> ++	fetch_register (regcache, regno);
> ++      else
> ++	fetch_fp_register (regcache, regno);
> ++    }
> ++  else
> ++    {
> ++      fetch_regs (regcache);
> ++      fetch_fp_regs (regcache);
> ++    }
> ++}
> ++
> ++
> ++static void
> ++store_register (const struct regcache *regcache, int regno)
> ++{
> ++  gdbarch *gdbarch = regcache->arch ();
> ++  struct reg inferior_registers;
> ++  int ret;
> ++
> ++  ret = ptrace (PT_GETREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
> ++
> ++  if (ret < 0)
> ++    {
> ++      warning (_("unable to fetch general registers"));
> ++      return;
> ++    }
> ++
> ++  switch (regno)
> ++    {
> ++    case ARM_SP_REGNUM:
> ++      regcache->raw_collect (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
> ++      break;
> ++
> ++    case ARM_LR_REGNUM:
> ++      regcache->raw_collect (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
> ++      break;
> ++
> ++    case ARM_PC_REGNUM:
> ++      if (arm_apcs_32)
> ++	regcache->raw_collect (ARM_PC_REGNUM,
> ++			       (char *) &inferior_registers.r_pc);
> ++      else
> ++	{
> ++	  unsigned pc_val;
> ++
> ++	  regcache->raw_collect (ARM_PC_REGNUM, (char *) &pc_val);
> ++	  
> ++	  pc_val = gdbarch_addr_bits_remove (gdbarch, pc_val);
> ++	  inferior_registers.r_pc ^= gdbarch_addr_bits_remove
> ++				       (gdbarch, inferior_registers.r_pc);
> ++	  inferior_registers.r_pc |= pc_val;
> ++	}
> ++      break;
> ++
> ++    case ARM_PS_REGNUM:
> ++      if (arm_apcs_32)
> ++	regcache->raw_collect (ARM_PS_REGNUM,
> ++			       (char *) &inferior_registers.r_cpsr);
> ++      else
> ++	{
> ++	  unsigned psr_val;
> ++
> ++	  regcache->raw_collect (ARM_PS_REGNUM, (char *) &psr_val);
> ++
> ++	  psr_val ^= gdbarch_addr_bits_remove (gdbarch, psr_val);
> ++	  inferior_registers.r_pc = gdbarch_addr_bits_remove
> ++				      (gdbarch, inferior_registers.r_pc);
> ++	  inferior_registers.r_pc |= psr_val;
> ++	}
> ++      break;
> ++
> ++    default:
> ++      regcache->raw_collect (regno, (char *) &inferior_registers.r[regno]);
> ++      break;
> ++    }
> ++
> ++  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
> ++
> ++  if (ret < 0)
> ++    warning (_("unable to write register %d to inferior"), regno);
> ++}
> ++
> ++static void
> ++store_regs (const struct regcache *regcache)
> ++{
> ++  struct gdbarch *gdbarch = regcache->arch ();
> ++  struct reg inferior_registers;
> ++  int ret;
> ++  int regno;
> ++
> ++
> ++  for (regno = ARM_A1_REGNUM; regno < ARM_SP_REGNUM; regno++)
> ++    regcache->raw_collect (regno, (char *) &inferior_registers.r[regno]);
> ++
> ++  regcache->raw_collect (ARM_SP_REGNUM, (char *) &inferior_registers.r_sp);
> ++  regcache->raw_collect (ARM_LR_REGNUM, (char *) &inferior_registers.r_lr);
> ++
> ++  if (arm_apcs_32)
> ++    {
> ++      regcache->raw_collect (ARM_PC_REGNUM, (char *) &inferior_registers.r_pc);
> ++      regcache->raw_collect (ARM_PS_REGNUM,
> ++			     (char *) &inferior_registers.r_cpsr);
> ++    }
> ++  else
> ++    {
> ++      unsigned pc_val;
> ++      unsigned psr_val;
> ++
> ++      regcache->raw_collect (ARM_PC_REGNUM, (char *) &pc_val);
> ++      regcache->raw_collect (ARM_PS_REGNUM, (char *) &psr_val);
> ++	  
> ++      pc_val = gdbarch_addr_bits_remove (gdbarch, pc_val);
> ++      psr_val ^= gdbarch_addr_bits_remove (gdbarch, psr_val);
> ++
> ++      inferior_registers.r_pc = pc_val | psr_val;
> ++    }
> ++
> ++  ret = ptrace (PT_SETREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_registers, 0);
> ++
> ++  if (ret < 0)
> ++    warning (_("unable to store general registers"));
> ++}
> ++
> ++static void
> ++store_fp_register (const struct regcache *regcache, int regno)
> ++{
> ++  struct fpreg inferior_fp_registers;
> ++  int ret;
> ++
> ++  ret = ptrace (PT_GETFPREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
> ++
> ++  if (ret < 0)
> ++    {
> ++      warning (_("unable to fetch floating-point registers"));
> ++      return;
> ++    }
> ++
> ++  switch (regno)
> ++    {
> ++    case ARM_FPS_REGNUM:
> ++      regcache->raw_collect (ARM_FPS_REGNUM,
> ++			     (char *) &inferior_fp_registers.fp_scr);
> ++      break;
> ++
> ++    default:
> ++      regcache->raw_collect
> ++	(regno, (char *) &inferior_fp_registers.fp_reg[regno - ARM_F0_REGNUM]);
> ++      break;
> ++    }
> ++
> ++  ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
> ++
> ++  if (ret < 0)
> ++    warning (_("unable to write register %d to inferior"), regno);
> ++}
> ++
> ++static void
> ++store_fp_regs (const struct regcache *regcache)
> ++{
> ++  struct fpreg inferior_fp_registers;
> ++  int ret;
> ++  int regno;
> ++
> ++
> ++  for (regno = ARM_F0_REGNUM; regno <= ARM_F7_REGNUM; regno++)
> ++    regcache->raw_collect
> ++      (regno, (char *) &inferior_fp_registers.fp_reg[regno - ARM_F0_REGNUM]);
> ++
> ++  regcache->raw_collect (ARM_FPS_REGNUM,
> ++			 (char *) &inferior_fp_registers.fp_scr);
> ++
> ++  ret = ptrace (PT_SETFPREGS, regcache->ptid ().pid (),
> ++		(PTRACE_TYPE_ARG3) &inferior_fp_registers, 0);
> ++
> ++  if (ret < 0)
> ++    warning (_("unable to store floating-point registers"));
> ++}
> ++
> ++void
> ++arm_openbsd_nat_target::store_registers (struct regcache *regcache, int regno)
> ++{
> ++  if (regno >= 0)
> ++    {
> ++      if (regno < ARM_F0_REGNUM || regno > ARM_FPS_REGNUM)
> ++	store_register (regcache, regno);
> ++      else
> ++	store_fp_register (regcache, regno);
> ++    }
> ++  else
> ++    {
> ++      store_regs (regcache);
> ++      store_fp_regs (regcache);
> ++    }
> ++}
> ++
> ++const struct target_desc *
> ++arm_openbsd_nat_target::read_description ()
> ++{
> ++#ifdef notyet
> ++/*
> ++ * XXX clang on OpenBSD/arm enables NEON by default
> ++ * Should we try to use that code path?
> ++ */
> ++  if (neon)
> ++    return aarch32_read_description ();
> ++#endif
> ++
> ++  return arm_read_description (ARM_FP_TYPE_VFPV3, false);
> ++}
> ++
> ++void _initialize_arm_openbsd_nat ();
> ++void
> ++_initialize_arm_openbsd_nat ()
> ++{
> ++  add_inf_child_target (&the_arm_openbsd_nat_target);
> ++}
> Index: patches/patch-gdb_cli_cli-cmds_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_cli_cli-cmds_c,v
> diff -u -p -r1.1 patch-gdb_cli_cli-cmds_c
> --- patches/patch-gdb_cli_cli-cmds_c	1 Oct 2024 07:41:42 -0000	1.1
> +++ patches/patch-gdb_cli_cli-cmds_c	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: gdb/cli/cli-cmds.c
>  --- gdb/cli/cli-cmds.c.orig
>  +++ gdb/cli/cli-cmds.c
> -@@ -956,7 +956,7 @@ edit_command (const char *arg, int from_tty)
> +@@ -1043,7 +1043,7 @@ edit_command (const char *arg, int from_tty)
>       }
>   
>     if ((editor = getenv ("EDITOR")) == NULL)
> Index: patches/patch-gdb_configure_host
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_configure_host,v
> diff -u -p -r1.4 patch-gdb_configure_host
> --- patches/patch-gdb_configure_host	11 Mar 2022 18:50:04 -0000	1.4
> +++ patches/patch-gdb_configure_host	7 Nov 2024 15:55:58 -0000
> @@ -1,16 +1,29 @@
> +
> +Add support for aarch64, powerpc64 and riscv64.
> +Use OpenBSD-specific files for arm (TBD).
> +
>  Index: gdb/configure.host
>  --- gdb/configure.host.orig
>  +++ gdb/configure.host
> -@@ -85,6 +85,7 @@ case "${host}" in
> +@@ -81,6 +81,7 @@ case "${host}" in
>   
>   aarch64*-*-linux*)	gdb_host=linux ;;
>   aarch64*-*-freebsd*)	gdb_host=fbsd ;;
>  +aarch64*-*-openbsd*)	gdb_host=obsd64 ;;
>   
>   alpha*-*-linux*)	gdb_host=alpha-linux ;;
> - alpha*-*-netbsd* | alpha*-*-knetbsd*-gnu)
> -@@ -139,12 +140,14 @@ powerpc*-*-freebsd*)	gdb_host=fbsd ;;
> - powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
> + alpha*-*-netbsdaout* | alpha*-*-knetbsdaout*-gnu)
> +@@ -93,7 +94,7 @@ arm*-*-freebsd*)	gdb_host=fbsd ;;
> + arm*-*-linux*)		gdb_host=linux ;;
> + arm*-*-netbsd* | arm*-*-knetbsd*-gnu)
> + 			gdb_host=nbsdelf ;;
> +-arm*-*-openbsd*)	gdb_host=nbsdelf ;;
> ++arm*-*-openbsd*)	gdb_host=obsd ;;
> + 
> + hppa*-*-linux*)		gdb_host=linux ;;
> + hppa*-*-netbsd*)	gdb_host=nbsd ;;
> +@@ -141,12 +142,14 @@ powerpc*-*-freebsd*)	gdb_host=fbsd ;;
> + powerpc-*-netbsdaout* | powerpc-*-knetbsd*-gnu)
>   			gdb_host=nbsd ;;
>   powerpc-*-openbsd*)	gdb_host=obsd ;;
>  +powerpc64-*-openbsd*)	gdb_host=obsd64 ;;
> Index: patches/patch-gdb_configure_nat
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_configure_nat,v
> diff -u -p -r1.2 patch-gdb_configure_nat
> --- patches/patch-gdb_configure_nat	11 Mar 2022 18:50:04 -0000	1.2
> +++ patches/patch-gdb_configure_nat	7 Nov 2024 15:55:58 -0000
> @@ -1,5 +1,6 @@
>  All our targets need obsd-nat.o and kvm etc -> dedup.
> -Add aarch64 and riscv64 support.
> +Add aarch64, powerpc64 and riscv64 support.
> +Use OpenBSD-specific files for arm. (TBD)
>  
>  Index: gdb/configure.nat
>  --- gdb/configure.nat.orig
> @@ -21,9 +22,15 @@ Index: gdb/configure.nat
>  +	LOADLIBES='-lkvm'
>   	;;
>       cygwin*)
> - 	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o'
> -@@ -416,49 +416,54 @@ case ${gdb_host} in
> + 	NATDEPFILES='x86-nat.o nat/x86-dregs.o windows-nat.o nat/windows-nat.o'
> +@@ -430,50 +430,60 @@ case ${gdb_host} in
> + 	;;
> +     obsd)
>   	case ${gdb_host_cpu} in
> ++	    arm)
> ++		# Host: OpenBSD/arm XXX TODO
> ++		#NATDEPFILES="${NATDEPFILES} arm-obsd-nat.o"
> ++		;;
>   	    i386)
>   		# Host: OpenBSD/i386 ELF
>  -		NATDEPFILES="${NATDEPFILES} obsd-nat.o x86-bsd-nat.o \
> @@ -65,9 +72,8 @@ Index: gdb/configure.nat
>  +		;;
>   	    i386)
>   		# Host: OpenBSD/amd64
> --		NATDEPFILES="${NATDEPFILES} obsd-nat.o amd64-nat.o x86-nat.o \
> --		x86-bsd-nat.o amd64-bsd-nat.o amd64-obsd-nat.o bsd-kvm.o \
> --		nat/x86-dregs.o"
> +-		NATDEPFILES="${NATDEPFILES} obsd-nat.o amd64-nat.o \
> +-		x86-bsd-nat.o amd64-bsd-nat.o amd64-obsd-nat.o bsd-kvm.o"
>  -		LOADLIBES='-lkvm'
>  +		NATDEPFILES="${NATDEPFILES} amd64-nat.o \
>  +		x86-bsd-nat.o amd64-bsd-nat.o amd64-obsd-nat.o"
> Index: patches/patch-gdb_configure_tgt
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_configure_tgt,v
> diff -u -p -r1.4 patch-gdb_configure_tgt
> --- patches/patch-gdb_configure_tgt	11 Mar 2022 18:50:04 -0000	1.4
> +++ patches/patch-gdb_configure_tgt	7 Nov 2024 15:55:58 -0000
> @@ -1,8 +1,10 @@
> +Add support for aarch64, powerpc64 and riscv64.
> +
>  Index: gdb/configure.tgt
>  --- gdb/configure.tgt.orig
>  +++ gdb/configure.tgt
> -@@ -131,6 +131,13 @@ aarch64*-*-linux*)
> - 	build_gdbserver=yes
> +@@ -145,6 +145,13 @@ aarch64*-*-linux*)
> + 			symfile-mem.o linux-record.o"
>   	;;
>   
>  +aarch64*-*-openbsd*)
> @@ -15,7 +17,7 @@ Index: gdb/configure.tgt
>   alpha*-*-linux*)
>   	# Target: Little-endian Alpha running Linux
>   	gdb_target_obs="alpha-mdebug-tdep.o alpha-linux-tdep.o \
> -@@ -506,6 +513,12 @@ powerpc-*-openbsd*)
> +@@ -492,6 +499,12 @@ powerpc-*-openbsd*)
>   	gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppc-obsd-tdep.o \
>   			ravenscar-thread.o ppc-ravenscar-thread.o"
>   	;;
> @@ -28,7 +30,7 @@ Index: gdb/configure.tgt
>   powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
>   	# Target: PowerPC running AIX
>   	gdb_target_obs="rs6000-tdep.o rs6000-aix-tdep.o xcoffread.o \
> -@@ -552,6 +565,12 @@ riscv*-*-linux*)
> +@@ -534,6 +547,12 @@ riscv*-*-linux*)
>   	# Target: Linux/RISC-V
>   	gdb_target_obs="riscv-linux-tdep.o glibc-tdep.o \
>    			linux-tdep.o solib-svr4.o symfile-mem.o linux-record.o"
> Index: patches/patch-gdb_data-directory_Makefile_in
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_data-directory_Makefile_in,v
> diff -u -p -r1.11 patch-gdb_data-directory_Makefile_in
> --- patches/patch-gdb_data-directory_Makefile_in	11 Mar 2022 18:50:04 -0000	1.11
> +++ patches/patch-gdb_data-directory_Makefile_in	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: gdb/data-directory/Makefile.in
>  --- gdb/data-directory/Makefile.in.orig
>  +++ gdb/data-directory/Makefile.in
> -@@ -198,7 +198,7 @@ stamp-syscalls: Makefile $(SYSCALLS_FILES)
> +@@ -200,7 +200,7 @@ stamp-syscalls: Makefile $(SYSCALLS_FILES)
>   	for file in $$files ; do \
>   	  f=$(SYSCALLS_SRCDIR)/$$file ; \
>   	  if test -f $$f ; then \
> @@ -10,7 +10,7 @@ Index: gdb/data-directory/Makefile.in
>   	  fi ; \
>   	done
>   	touch $@
> -@@ -240,8 +240,8 @@ stamp-python: Makefile $(PYTHON_FILES)
> +@@ -242,8 +242,8 @@ stamp-python: Makefile $(PYTHON_FILES)
>   	if test "x$$files" != x ; then \
>   	  for file in $$files ; do \
>   	    dir=`echo "$$file" | sed 's,/[^/]*$$,,'` ; \
> @@ -21,7 +21,7 @@ Index: gdb/data-directory/Makefile.in
>   	  done ; \
>   	fi
>   	touch $@
> -@@ -334,7 +334,7 @@ stamp-system-gdbinit: Makefile $(SYSTEM_GDBINIT_FILES)
> +@@ -336,7 +336,7 @@ stamp-system-gdbinit: Makefile $(SYSTEM_GDBINIT_FILES)
>   	for file in $$files ; do \
>   	  f=$(SYSTEM_GDBINIT_SRCDIR)/$$file ; \
>   	  if test -f $$f ; then \
> Index: patches/patch-gdb_doc_gdb_info-2
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_doc_gdb_info-2,v
> diff -u -p -r1.1 patch-gdb_doc_gdb_info-2
> --- patches/patch-gdb_doc_gdb_info-2	1 Oct 2024 07:41:42 -0000	1.1
> +++ patches/patch-gdb_doc_gdb_info-2	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: gdb/doc/gdb.info-2
>  --- gdb/doc/gdb.info-2.orig
>  +++ gdb/doc/gdb.info-2
> -@@ -626,7 +626,7 @@ parts of the program:
> +@@ -1156,7 +1156,7 @@ parts of the program:
>   --------------------------
>   
>   You can customize GDB to use any editor you want (1).  By default, it is
> Index: patches/patch-gdb_gdbsupport_enum-flags_h
> ===================================================================
> RCS file: patches/patch-gdb_gdbsupport_enum-flags_h
> diff -N patches/patch-gdb_gdbsupport_enum-flags_h
> --- patches/patch-gdb_gdbsupport_enum-flags_h	6 Sep 2023 21:03:04 -0000	1.1
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,22 +0,0 @@
> -From 12e3f3bc6ec74eb50e04675f5bcf962482d3ff25 Mon Sep 17 00:00:00 2001
> -From: Simon Marchi <simon.marchi@efficios.com>
> -Date: Thu, 23 Feb 2023 12:35:40 -0500
> -Subject: [PATCH] gdbsupport: ignore -Wenum-constexpr-conversion in
> - enum-flags.h
> -
> -Index: gdb/gdbsupport/enum-flags.h
> ---- gdb/gdbsupport/enum-flags.h.orig
> -+++ gdb/gdbsupport/enum-flags.h
> -@@ -81,9 +81,12 @@ template<> struct integer_for_size<8, 1> { typedef int
> - template<typename T>
> - struct enum_underlying_type
> - {
> -+  DIAGNOSTIC_PUSH
> -+  DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
> -   typedef typename
> -     integer_for_size<sizeof (T), static_cast<bool>(T (-1) < T (0))>::type
> -     type;
> -+  DIAGNOSTIC_POP
> - };
> - 
> - template <typename E>
> Index: patches/patch-gdb_i386-bsd-nat_h
> ===================================================================
> RCS file: patches/patch-gdb_i386-bsd-nat_h
> diff -N patches/patch-gdb_i386-bsd-nat_h
> --- patches/patch-gdb_i386-bsd-nat_h	11 Mar 2022 18:50:04 -0000	1.2
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,14 +0,0 @@
> -Missing include.
> -
> -Index: gdb/i386-bsd-nat.h
> ---- gdb/i386-bsd-nat.h.orig
> -+++ gdb/i386-bsd-nat.h
> -@@ -20,6 +20,8 @@
> - #ifndef I386_BSD_NAT_H
> - #define I386_BSD_NAT_H
> - 
> -+#include "x86-bsd-nat.h"
> -+
> - /* Helper functions.  See definitions.  */
> - extern void i386bsd_fetch_inferior_registers (struct regcache *regcache,
> - 					      int regnum);
> Index: patches/patch-gdb_i386-obsd-nat_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_i386-obsd-nat_c,v
> diff -u -p -r1.2 patch-gdb_i386-obsd-nat_c
> --- patches/patch-gdb_i386-obsd-nat_c	11 Mar 2022 18:50:04 -0000	1.2
> +++ patches/patch-gdb_i386-obsd-nat_c	7 Nov 2024 15:55:58 -0000
> @@ -3,9 +3,9 @@ Bogus variable name.
>  Index: gdb/i386-obsd-nat.c
>  --- gdb/i386-obsd-nat.c.orig
>  +++ gdb/i386-obsd-nat.c
> -@@ -93,7 +93,7 @@ static i386_bsd_nat_target<obsd_nat_target> the_i386_o
> +@@ -94,7 +94,7 @@ void _initialize_i386obsd_nat ();
>   void
> - _initialize_i386obsd_nat (void)
> + _initialize_i386obsd_nat ()
>   {
>  -  add_inf_child_target (&i386_obsd_nat_target);
>  +  add_inf_child_target (&the_i386_obsd_nat_target);
> Index: patches/patch-gdb_ppc64-obsd-tdep_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_ppc64-obsd-tdep_c,v
> diff -u -p -r1.2 patch-gdb_ppc64-obsd-tdep_c
> --- patches/patch-gdb_ppc64-obsd-tdep_c	11 Mar 2022 18:50:04 -0000	1.2
> +++ patches/patch-gdb_ppc64-obsd-tdep_c	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: gdb/ppc64-obsd-tdep.c
>  --- gdb/ppc64-obsd-tdep.c.orig
>  +++ gdb/ppc64-obsd-tdep.c
> -@@ -0,0 +1,411 @@
> +@@ -0,0 +1,410 @@
>  +/* Target-dependent code for OpenBSD/powerpc64.
>  +
>  +   Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc.
> @@ -230,7 +230,7 @@ Index: gdb/ppc64-obsd-tdep.c
>  +
>  +static int
>  +ppc64obsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
> -+				  struct frame_info *this_frame,
> ++				  frame_info_ptr this_frame,
>  +				  void **this_cache)
>  +{
>  +  struct gdbarch *gdbarch = get_frame_arch (this_frame);
> @@ -249,8 +249,7 @@ Index: gdb/ppc64-obsd-tdep.c
>  +      gdb_byte buf[2 * PPC_INSN_SIZE];
>  +      unsigned long insn;
>  +
> -+      if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
> -+				     buf, sizeof buf))
> ++      if (!safe_frame_unwind_memory (this_frame, start_pc + *offset, buf))
>  +	continue;
>  +
>  +      /* Check for "li r0,SYS_sigreturn".  */
> @@ -271,7 +270,7 @@ Index: gdb/ppc64-obsd-tdep.c
>  +}
>  +
>  +static struct trad_frame_cache *
> -+ppc64obsd_sigtramp_frame_cache (struct frame_info *this_frame,
> ++ppc64obsd_sigtramp_frame_cache (frame_info_ptr this_frame,
>  +				void **this_cache)
>  +{
>  +  struct gdbarch *gdbarch = get_frame_arch (this_frame);
> @@ -291,7 +290,7 @@ Index: gdb/ppc64-obsd-tdep.c
>  +
>  +  func = get_frame_pc (this_frame);
>  +  func &= ~(ppc64obsd_page_size - 1);
> -+  if (!safe_frame_unwind_memory (this_frame, func, buf, sizeof buf))
> ++  if (!safe_frame_unwind_memory (this_frame, func, buf))
>  +    return cache;
>  +
>  +  /* Calculate the offset where we can find `struct sigcontext'.  We
> @@ -326,7 +325,7 @@ Index: gdb/ppc64-obsd-tdep.c
>  +}
>  +
>  +static void
> -+ppc64obsd_sigtramp_frame_this_id (struct frame_info *this_frame,
> ++ppc64obsd_sigtramp_frame_this_id (frame_info_ptr this_frame,
>  +				void **this_cache, struct frame_id *this_id)
>  +{
>  +  struct trad_frame_cache *cache =
> @@ -336,7 +335,7 @@ Index: gdb/ppc64-obsd-tdep.c
>  +}
>  +
>  +static struct value *
> -+ppc64obsd_sigtramp_frame_prev_register (struct frame_info *this_frame,
> ++ppc64obsd_sigtramp_frame_prev_register (frame_info_ptr this_frame,
>  +					void **this_cache, int regnum)
>  +{
>  +  struct trad_frame_cache *cache =
> Index: patches/patch-gdb_python_python-config_py
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_python_python-config_py,v
> diff -u -p -r1.6 patch-gdb_python_python-config_py
> --- patches/patch-gdb_python_python-config_py	11 Mar 2022 18:50:04 -0000	1.6
> +++ patches/patch-gdb_python_python-config_py	7 Nov 2024 15:55:58 -0000
> @@ -1,12 +1,12 @@
>  Index: gdb/python/python-config.py
>  --- gdb/python/python-config.py.orig
>  +++ gdb/python/python-config.py
> -@@ -71,6 +71,8 @@ for opt in opt_flags:
> -                     libs.insert(0, '-L' + getvar('LIBPL'))
> -                 elif os.name == 'nt':
> -                     libs.insert(0, '-L' + sysconfig.PREFIX + '/libs')
> +@@ -77,6 +77,8 @@ for opt in opt_flags:
> +                     libs.insert(0, "-L" + getvar("LIBPL"))
> +                 elif os.name == "nt":
> +                     libs.insert(0, "-L" + os.path.normpath(sys.prefix) + "/libs")
>  +            if getvar('CONFIGURE_LDFLAGS') is not None:
>  +                libs.insert(0, getvar('CONFIGURE_LDFLAGS'))
> -             if getvar('LINKFORSHARED') is not None:
> -                 libs.extend(getvar('LINKFORSHARED').split())
> -         print (to_unix_path(' '.join(libs)))
> +             if getvar("LINKFORSHARED") is not None:
> +                 libs.extend(getvar("LINKFORSHARED").split())
> +         print(to_unix_path(" ".join(libs)))
> Index: patches/patch-gdb_python_python_c
> ===================================================================
> RCS file: patches/patch-gdb_python_python_c
> diff -N patches/patch-gdb_python_python_c
> --- patches/patch-gdb_python_python_c	11 Mar 2022 18:50:04 -0000	1.4
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,99 +0,0 @@
> -From c47bae859a5af0d95224d90000df0e529f7c5aa0 Mon Sep 17 00:00:00 2001
> -From: Kevin Buettner <kevinb@redhat.com>
> -Date: Wed, 27 May 2020 20:05:40 -0700
> -Subject: [PATCH] Fix Python3.9 related runtime problems
> -
> -Index: gdb/python/python.c
> ---- gdb/python/python.c.orig
> -+++ gdb/python/python.c
> -@@ -234,6 +234,30 @@ gdbpy_enter::~gdbpy_enter ()
> -   PyGILState_Release (m_state);
> - }
> - 
> -+/* A helper class to save and restore the GIL, but without touching
> -+   the other globals that are handled by gdbpy_enter.  */
> -+
> -+class gdbpy_gil
> -+{
> -+public:
> -+
> -+  gdbpy_gil ()
> -+    : m_state (PyGILState_Ensure ())
> -+  {
> -+  }
> -+
> -+  ~gdbpy_gil ()
> -+  {
> -+    PyGILState_Release (m_state);
> -+  }
> -+
> -+  DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
> -+
> -+private:
> -+
> -+  PyGILState_STATE m_state;
> -+};
> -+
> - /* Set the quit flag.  */
> - 
> - static void
> -@@ -247,6 +271,10 @@ gdbpy_set_quit_flag (const struct extension_language_d
> - static int
> - gdbpy_check_quit_flag (const struct extension_language_defn *extlang)
> - {
> -+  if (!gdb_python_initialized)
> -+    return 0;
> -+
> -+  gdbpy_gil gil;
> -   return PyOS_InterruptOccurred ();
> - }
> - 
> -@@ -924,30 +952,6 @@ gdbpy_source_script (const struct extension_language_d
> - 
> - /* Posting and handling events.  */
> - 
> --/* A helper class to save and restore the GIL, but without touching
> --   the other globals that are handled by gdbpy_enter.  */
> --
> --class gdbpy_gil
> --{
> --public:
> --
> --  gdbpy_gil ()
> --    : m_state (PyGILState_Ensure ())
> --  {
> --  }
> --
> --  ~gdbpy_gil ()
> --  {
> --    PyGILState_Release (m_state);
> --  }
> --
> --  DISABLE_COPY_AND_ASSIGN (gdbpy_gil);
> --
> --private:
> --
> --  PyGILState_STATE m_state;
> --};
> --
> - /* A single event.  */
> - struct gdbpy_event
> - {
> -@@ -1548,6 +1552,7 @@ finalize_python (void *ignore)
> - 
> -   Py_Finalize ();
> - 
> -+  gdb_python_initialized = false;
> -   restore_active_ext_lang (previous_active);
> - }
> - 
> -@@ -1715,8 +1720,7 @@ do_start_initialization ()
> -     return false;
> - 
> -   /* Release the GIL while gdb runs.  */
> --  PyThreadState_Swap (NULL);
> --  PyEval_ReleaseLock ();
> -+  PyEval_SaveThread ();
> - 
> -   make_final_cleanup (finalize_python, NULL);
> - 
> Index: patches/patch-gdb_riscv-obsd-tdep_c
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_riscv-obsd-tdep_c,v
> diff -u -p -r1.2 patch-gdb_riscv-obsd-tdep_c
> --- patches/patch-gdb_riscv-obsd-tdep_c	11 Mar 2022 18:50:04 -0000	1.2
> +++ patches/patch-gdb_riscv-obsd-tdep_c	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: gdb/riscv-obsd-tdep.c
>  --- gdb/riscv-obsd-tdep.c.orig
>  +++ gdb/riscv-obsd-tdep.c
> -@@ -0,0 +1,235 @@
> +@@ -0,0 +1,219 @@
>  +/* Target-dependent code for OpenBSD on RISC-V processors.
>  +   Copyright (C) 2018-2021 Free Software Foundation, Inc.
>  +
> @@ -57,32 +57,16 @@ Index: gdb/riscv-obsd-tdep.c
>  +    { 0 }
>  +  };
>  +
> -+/* Supply the general-purpose registers stored in GREGS to REGCACHE.
> -+   This function only exists to supply the always-zero x0 in addition
> -+   to the registers in GREGS.  */
> -+
> -+static void
> -+riscv_obsd_supply_gregset (const struct regset *regset,
> -+			   struct regcache *regcache, int regnum,
> -+			   const void *gregs, size_t len)
> -+{
> -+  regcache->supply_regset (&riscv_obsd_gregset, regnum, gregs, len);
> -+  if (regnum == -1 || regnum == RISCV_ZERO_REGNUM)
> -+    regcache->raw_supply_zeroed (RISCV_ZERO_REGNUM);
> -+}
> -+
>  +/* Register set definitions.  */
>  +
>  +const struct regset riscv_obsd_gregset =
>  +  {
> -+    riscv_obsd_gregmap,
> -+    riscv_obsd_supply_gregset, regcache_collect_regset
> ++    riscv_obsd_gregmap, riscv_supply_regset, regcache_collect_regset
>  +  };
>  +
>  +const struct regset riscv_obsd_fpregset =
>  +  {
> -+    riscv_obsd_fpregmap,
> -+    regcache_supply_regset, regcache_collect_regset
> ++    riscv_obsd_fpregmap, riscv_supply_regset, regcache_collect_regset
>  +  };
>  +
>  +/* Implement the "iterate_over_regset_sections" gdbarch method.  */
> @@ -128,7 +112,7 @@ Index: gdb/riscv-obsd-tdep.c
>  +
>  +static void
>  +riscv_obsd_sigframe_init (const struct tramp_frame *self,
> -+			  struct frame_info *this_frame,
> ++			  frame_info_ptr this_frame,
>  +			  struct trad_frame_cache *this_cache,
>  +			  CORE_ADDR func)
>  +{
> Index: patches/patch-gdb_x86-bsd-nat_h
> ===================================================================
> RCS file: patches/patch-gdb_x86-bsd-nat_h
> diff -N patches/patch-gdb_x86-bsd-nat_h
> --- patches/patch-gdb_x86-bsd-nat_h	11 Mar 2022 18:50:04 -0000	1.2
> +++ /dev/null	1 Jan 1970 00:00:00 -0000
> @@ -1,32 +0,0 @@
> -Don't compile x86 debug register support on OpenBSD.
> -Upstream commit 757e686afb4ac97bcf9333b10a6a0880bdd310f8
> -
> -Index: gdb/x86-bsd-nat.h
> ---- gdb/x86-bsd-nat.h.orig
> -+++ gdb/x86-bsd-nat.h
> -@@ -27,18 +27,23 @@ extern size_t x86bsd_xsave_len;
> - 
> - /* A prototype *BSD/x86 target.  */
> - 
> -+#ifdef HAVE_PT_GETDBREGS
> - template<typename BaseTarget>
> - class x86bsd_nat_target : public x86_nat_target<BaseTarget>
> - {
> -   using base_class = x86_nat_target<BaseTarget>;
> - public:
> --#ifdef HAVE_PT_GETDBREGS
> -   void mourn_inferior () override
> -   {
> -     x86_cleanup_dregs ();
> -     base_class::mourn_inferior ();
> -   }
> --#endif /* HAVE_PT_GETDBREGS */
> - };
> -+#else /* !HAVE_PT_GETDBREGS */
> -+template<typename BaseTarget>
> -+class x86bsd_nat_target : public BaseTarget
> -+{
> -+};
> -+#endif /* HAVE_PT_GETDBREGS */
> - 
> - #endif /* x86-bsd-nat.h */
> Index: patches/patch-include_diagnostics_h
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-include_diagnostics_h,v
> diff -u -p -r1.1 patch-include_diagnostics_h
> --- patches/patch-include_diagnostics_h	6 Sep 2023 21:03:04 -0000	1.1
> +++ patches/patch-include_diagnostics_h	7 Nov 2024 15:55:58 -0000
> @@ -7,9 +7,9 @@ Subject: [PATCH] gdbsupport: ignore -Wen
>  Index: include/diagnostics.h
>  --- include/diagnostics.h.orig
>  +++ include/diagnostics.h
> -@@ -63,6 +63,11 @@
> - # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL \
> -   DIAGNOSTIC_IGNORE ("-Wformat-nonliteral")
> +@@ -81,6 +81,11 @@
> +    DIAGNOSTIC_IGNORE ("-Wenum-constexpr-conversion")
> + # endif
>   
>  +# if __has_warning ("-Wenum-constexpr-conversion")
>  +#  define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION \
> @@ -18,8 +18,8 @@ Index: include/diagnostics.h
>  +
>   #elif defined (__GNUC__) /* GCC */
>   
> - # define DIAGNOSTIC_IGNORE_UNUSED_FUNCTION \
> -@@ -102,6 +107,10 @@
> + # define DIAGNOSTIC_IGNORE_DEPRECATED_DECLARATIONS \
> +@@ -146,6 +151,10 @@
>   
>   #ifndef DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
>   # define DIAGNOSTIC_IGNORE_FORMAT_NONLITERAL
> @@ -29,4 +29,4 @@ Index: include/diagnostics.h
>  +# define DIAGNOSTIC_IGNORE_ENUM_CONSTEXPR_CONVERSION
>   #endif
>   
> - #endif /* DIAGNOSTICS_H */
> + #ifndef DIAGNOSTIC_IGNORE_USER_DEFINED_WARNINGS
> Index: patches/patch-include_elf_common_h
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-include_elf_common_h,v
> diff -u -p -r1.1 patch-include_elf_common_h
> --- patches/patch-include_elf_common_h	10 Jun 2023 19:19:12 -0000	1.1
> +++ patches/patch-include_elf_common_h	7 Nov 2024 15:55:58 -0000
> @@ -1,11 +1,11 @@
>  Index: include/elf/common.h
>  --- include/elf/common.h.orig
>  +++ include/elf/common.h
> -@@ -698,6 +698,7 @@
> +@@ -763,6 +763,7 @@
>   #define NT_OPENBSD_FPREGS	21
>   #define NT_OPENBSD_XFPREGS	22
>   #define NT_OPENBSD_WCOOKIE	23
>  +#define NT_OPENBSD_PACMASK	24
>   
>   
> - /* Note segments for core files on SPU systems.  Note name
> + /* Note segments for core files on Solaris systems.  Note name
> Index: patches/patch-include_filenames_h
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-include_filenames_h,v
> diff -u -p -r1.3 patch-include_filenames_h
> --- patches/patch-include_filenames_h	11 Mar 2022 18:50:04 -0000	1.3
> +++ patches/patch-include_filenames_h	7 Nov 2024 15:55:58 -0000
> @@ -6,7 +6,7 @@ Fixes linking against libbfd with our sy
>  Index: include/filenames.h
>  --- include/filenames.h.orig
>  +++ include/filenames.h
> -@@ -80,11 +80,10 @@ extern "C" {
> +@@ -81,11 +81,10 @@ extern "C" {
>     (IS_DIR_SEPARATOR_1 (dos_based, (f)[0])		 \
>      || HAS_DRIVE_SPEC_1 (dos_based, f))
>   
> Index: patches/patch-libiberty_Makefile_in
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/patches/patch-libiberty_Makefile_in,v
> diff -u -p -r1.9 patch-libiberty_Makefile_in
> --- patches/patch-libiberty_Makefile_in	11 Mar 2022 18:50:04 -0000	1.9
> +++ patches/patch-libiberty_Makefile_in	7 Nov 2024 15:55:58 -0000
> @@ -1,7 +1,7 @@
>  Index: libiberty/Makefile.in
>  --- libiberty/Makefile.in.orig
>  +++ libiberty/Makefile.in
> -@@ -355,7 +355,7 @@ libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
> +@@ -376,7 +376,7 @@ libiberty.html : $(srcdir)/libiberty.texi $(TEXISRC)
>   @MAINT@	echo stamp > stamp-functions
>   
>   INSTALL_DEST = @INSTALL_DEST@
> Index: pkg/PLIST
> ===================================================================
> RCS file: /cvs/ports/devel/gdb/pkg/PLIST,v
> diff -u -p -r1.25 PLIST
> --- pkg/PLIST	28 May 2024 16:48:39 -0000	1.25
> +++ pkg/PLIST	7 Nov 2024 15:55:58 -0000
> @@ -2,7 +2,6 @@
>  bin/egdb-add-index
>  include/ansidecl.h
>  include/bfd.h
> -include/bfd_stdint.h
>  include/bfdlink.h
>  include/ctf-api.h
>  include/ctf.h
> @@ -11,10 +10,14 @@ include/dis-asm.h
>  include/gdb/
>  include/gdb/jit-reader.h
>  include/plugin-api.h
> +include/sframe-api.h
> +include/sframe.h
>  include/symcat.h
>  @info info/annotate.info
>  @info info/bfd.info
> +@info info/ctf-spec.info
>  @info info/gdb.info
> +@comment @info info/sframe-spec.info
>  @info info/stabs.info
>  @comment lib/charset.alias
>  @static-lib lib/libbfd.a
> @@ -25,6 +28,8 @@ lib/libctf-nobfd.la
>  lib/libctf.la
>  @static-lib lib/libopcodes.a
>  lib/libopcodes.la
> +@static-lib lib/libsframe.a
> +lib/libsframe.la
>  @man man/man1/egdb-add-index.1
>  @man man/man1/egdb.1
>  @man man/man1/egdbserver.1
> @@ -79,6 +84,7 @@ share/gdb/python/gdb/command/prompt.py
>  share/gdb/python/gdb/command/type_printers.py
>  share/gdb/python/gdb/command/unwinders.py
>  share/gdb/python/gdb/command/xmethods.py
> +share/gdb/python/gdb/disassembler.py
>  share/gdb/python/gdb/frames.py
>  share/gdb/python/gdb/function/
>  share/gdb/python/gdb/function/__init__.py
> @@ -104,6 +110,7 @@ share/gdb/python/gdb/printer/${MODPY_PYC
>  share/gdb/python/gdb/printer/bound_registers.py
>  share/gdb/python/gdb/printing.py
>  share/gdb/python/gdb/prompt.py
> +share/gdb/python/gdb/styling.py
>  share/gdb/python/gdb/types.py
>  share/gdb/python/gdb/unwinder.py
>  share/gdb/python/gdb/xmethod.py
> @@ -117,6 +124,7 @@ share/gdb/syscalls/i386-linux.xml
>  share/gdb/syscalls/mips-n32-linux.xml
>  share/gdb/syscalls/mips-n64-linux.xml
>  share/gdb/syscalls/mips-o32-linux.xml
> +share/gdb/syscalls/netbsd.xml
>  share/gdb/syscalls/ppc-linux.xml
>  share/gdb/syscalls/ppc64-linux.xml
>  share/gdb/syscalls/s390-linux.xml
> 
> 
> -- 
> jca