This adds basic powerpc64 support to the ports gdb.  Only really
implements target support, so this can only really look at core dumps.
But it does a better job than base gdb.

Since the ports tree is still locked, I may actually work on improving
this a bit.  But at least people have the diff if they need it.

Index: devel/gdb/patches/patch-gdb_config_powerpc_obsd64_mh
===================================================================
RCS file: devel/gdb/patches/patch-gdb_config_powerpc_obsd64_mh
diff -N devel/gdb/patches/patch-gdb_config_powerpc_obsd64_mh
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ devel/gdb/patches/patch-gdb_config_powerpc_obsd64_mh        30 Sep 2020 
20:18:56 -0000
@@ -0,0 +1,10 @@
+$OpenBSD$
+
+Index: gdb/config/powerpc/obsd64.mh
+--- gdb/config/powerpc/obsd64.mh.orig
++++ gdb/config/powerpc/obsd64.mh
+@@ -0,0 +1,4 @@
++# Host: OpenBSD/powerpc
++NATDEPFILES= fork-child.o inf-ptrace.o obsd-nat.o ppc64obsd-nat.o bsd-kvm.o
++
++LOADLIBES= -lkvm
Index: devel/gdb/patches/patch-gdb_configure_host
===================================================================
RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_configure_host,v
retrieving revision 1.1
diff -u -p -r1.1 patch-gdb_configure_host
--- devel/gdb/patches/patch-gdb_configure_host  10 Jul 2018 11:03:46 -0000      
1.1
+++ devel/gdb/patches/patch-gdb_configure_host  30 Sep 2020 20:18:56 -0000
@@ -1,6 +1,7 @@
 $OpenBSD: patch-gdb_configure_host,v 1.1 2018/07/10 11:03:46 kettenis Exp $
---- gdb/configure.host.orig    Sat Jan 21 05:48:42 2017
-+++ gdb/configure.host Tue Mar  7 23:52:43 2017
+Index: gdb/configure.host
+--- gdb/configure.host.orig
++++ gdb/configure.host
 @@ -82,6 +82,7 @@ case "${host}" in
  *-*-darwin*)          gdb_host=darwin ;;
  
@@ -9,3 +10,11 @@ $OpenBSD: patch-gdb_configure_host,v 1.1
  
  alpha*-*-linux*)      gdb_host=alpha-linux ;;
  alpha*-*-freebsd* | alpha*-*-kfreebsd*-gnu)
+@@ -137,6 +138,7 @@ powerpc*-*-freebsd*)       gdb_host=fbsd ;;
+ powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
+                       gdb_host=nbsd ;;
+ powerpc-*-openbsd*)   gdb_host=obsd ;;
++powerpc64-*-openbsd*) gdb_host=obsd64 ;;
+ 
+ powerpc64*-*-linux*)  gdb_host=ppc64-linux
+                         # Support 'pseudo-native' debugging on the Cell BE
Index: devel/gdb/patches/patch-gdb_configure_tgt
===================================================================
RCS file: /cvs/ports/devel/gdb/patches/patch-gdb_configure_tgt,v
retrieving revision 1.1
diff -u -p -r1.1 patch-gdb_configure_tgt
--- devel/gdb/patches/patch-gdb_configure_tgt   10 Jul 2018 11:03:46 -0000      
1.1
+++ devel/gdb/patches/patch-gdb_configure_tgt   30 Sep 2020 20:18:56 -0000
@@ -16,3 +16,16 @@ Index: gdb/configure.tgt
  alpha*-*-linux*)
        # Target: Little-endian Alpha running Linux
        gdb_target_obs="alpha-tdep.o alpha-mdebug-tdep.o alpha-linux-tdep.o \
+@@ -428,6 +435,12 @@ powerpc-*-openbsd*)
+       # Target: OpenBSD/powerpc
+       gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppcobsd-tdep.o \
+                       solib-svr4.o \
++                      ravenscar-thread.o ppc-ravenscar-thread.o"
++      ;;
++powerpc64-*-openbsd*)
++      # Target: OpenBSD/powerpc64
++      gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppc64-tdep.o \
++                      ppc64obsd-tdep.o obsd-tdep.o solib-svr4.o \
+                       ravenscar-thread.o ppc-ravenscar-thread.o"
+       ;;
+ powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
Index: devel/gdb/patches/patch-gdb_ppc64obsd-nat_c
===================================================================
RCS file: devel/gdb/patches/patch-gdb_ppc64obsd-nat_c
diff -N devel/gdb/patches/patch-gdb_ppc64obsd-nat_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ devel/gdb/patches/patch-gdb_ppc64obsd-nat_c 30 Sep 2020 20:18:56 -0000
@@ -0,0 +1,7 @@
+$OpenBSD$
+
+Index: gdb/ppc64obsd-nat.c
+--- gdb/ppc64obsd-nat.c.orig
++++ gdb/ppc64obsd-nat.c
+@@ -0,0 +1 @@
++/* Empty */
Index: devel/gdb/patches/patch-gdb_ppc64obsd-tdep_c
===================================================================
RCS file: devel/gdb/patches/patch-gdb_ppc64obsd-tdep_c
diff -N devel/gdb/patches/patch-gdb_ppc64obsd-tdep_c
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ devel/gdb/patches/patch-gdb_ppc64obsd-tdep_c        30 Sep 2020 20:18:56 
-0000
@@ -0,0 +1,441 @@
+$OpenBSD$
+
+Index: gdb/ppc64obsd-tdep.c
+--- gdb/ppc64obsd-tdep.c.orig
++++ gdb/ppc64obsd-tdep.c
+@@ -0,0 +1,435 @@
++/* Target-dependent code for OpenBSD/powerpc64.
++
++   Copyright (C) 2004, 2005, 2006 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 2 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, write to the Free Software
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++#include "defs.h"
++#include "arch-utils.h"
++#include "floatformat.h"
++#include "frame.h"
++#include "frame-unwind.h"
++#include "osabi.h"
++#include "regcache.h"
++#include "regset.h"
++#include "symtab.h"
++#include "trad-frame.h"
++
++#include "obsd-tdep.h"
++#include "ppc-tdep.h"
++#include "ppc64obsd-tdep.h"
++#include "solib-svr4.h"
++
++/* Register offsets from <machine/reg.h>.  */
++struct ppc_reg_offsets ppc64obsd_reg_offsets;
++struct ppc_reg_offsets ppc64obsd_fpreg_offsets;
++
++
++/* Register set support functions.  */
++
++static void
++ppc64_supply_reg (struct regcache *regcache, int regnum, 
++                const gdb_byte *regs, size_t offset)
++{
++  if (regnum != -1 && offset != -1)
++    regcache_raw_supply (regcache, regnum, regs + offset);
++}
++
++static void
++ppc64_collect_reg (const struct regcache *regcache, int regnum,
++                 gdb_byte *regs, size_t offset)
++{
++  if (regnum != -1 && offset != -1)
++    regcache_raw_collect (regcache, regnum, regs + offset);
++}
++    
++/* Supply register REGNUM in the general-purpose register set REGSET
++   from the buffer specified by GREGS and LEN to register cache
++   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
++
++void
++ppc64_supply_gregset (const struct regset *regset, struct regcache *regcache,
++                    int regnum, const void *gregs, size_t len)
++{
++  struct gdbarch *gdbarch = get_regcache_arch (regcache);
++  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
++  const struct ppc_reg_offsets *offsets
++    = (const struct ppc_reg_offsets *) regset->regmap;
++  size_t offset;
++  int i;
++
++  for (i = tdep->ppc_gp0_regnum, offset = offsets->r0_offset;
++       i < tdep->ppc_gp0_regnum + ppc_num_gprs;
++       i++, offset += 8)
++    {
++      if (regnum == -1 || regnum == i)
++      ppc64_supply_reg (regcache, i, (const gdb_byte *) gregs, offset);
++    }
++
++  if (regnum == -1 || regnum == gdbarch_pc_regnum (gdbarch))
++    ppc64_supply_reg (regcache, gdbarch_pc_regnum (gdbarch),
++                    (const gdb_byte *) gregs, offsets->pc_offset);
++  if (regnum == -1 || regnum == tdep->ppc_ps_regnum)
++    ppc64_supply_reg (regcache, tdep->ppc_ps_regnum,
++                    (const gdb_byte *) gregs, offsets->ps_offset);
++  if (regnum == -1 || regnum == tdep->ppc_cr_regnum)
++    ppc64_supply_reg (regcache, tdep->ppc_cr_regnum,
++                    (const gdb_byte *) gregs, offsets->cr_offset);
++  if (regnum == -1 || regnum == tdep->ppc_lr_regnum)
++    ppc64_supply_reg (regcache, tdep->ppc_lr_regnum,
++                    (const gdb_byte *) gregs, offsets->lr_offset);
++  if (regnum == -1 || regnum == tdep->ppc_ctr_regnum)
++    ppc64_supply_reg (regcache, tdep->ppc_ctr_regnum,
++                    (const gdb_byte *) gregs, offsets->ctr_offset);
++  if (regnum == -1 || regnum == tdep->ppc_xer_regnum)
++    ppc64_supply_reg (regcache, tdep->ppc_xer_regnum,
++                    (const gdb_byte *) gregs, offsets->cr_offset);
++}
++
++/* Collect register REGNUM in the general-purpose register set
++   REGSET. from register cache REGCACHE into the buffer specified by
++   GREGS and LEN.  If REGNUM is -1, do this for all registers in
++   REGSET.  */
++
++void
++ppc64_collect_gregset (const struct regset *regset,
++                     const struct regcache *regcache,
++                     int regnum, void *gregs, size_t len)
++{
++  struct gdbarch *gdbarch = get_regcache_arch (regcache);
++  struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch);
++  const struct ppc_reg_offsets *offsets
++    = (const struct ppc_reg_offsets *) regset->regmap;
++  size_t offset;
++  int i;
++
++  offset = offsets->r0_offset;
++  for (i = tdep->ppc_gp0_regnum;
++       i < tdep->ppc_gp0_regnum + ppc_num_gprs;
++       i++, offset += 8)
++    {
++      if (regnum == -1 || regnum == i)
++      ppc64_collect_reg (regcache, i, (gdb_byte *) gregs, offset);
++    }
++
++  if (regnum == -1 || regnum == gdbarch_pc_regnum (gdbarch))
++    ppc64_collect_reg (regcache, gdbarch_pc_regnum (gdbarch),
++                     (gdb_byte *) gregs, offsets->pc_offset);
++  if (regnum == -1 || regnum == tdep->ppc_ps_regnum)
++    ppc64_collect_reg (regcache, tdep->ppc_ps_regnum,
++                     (gdb_byte *) gregs, offsets->ps_offset);
++  if (regnum == -1 || regnum == tdep->ppc_cr_regnum)
++    ppc64_collect_reg (regcache, tdep->ppc_cr_regnum,
++                     (gdb_byte *) gregs, offsets->cr_offset);
++  if (regnum == -1 || regnum == tdep->ppc_lr_regnum)
++    ppc64_collect_reg (regcache, tdep->ppc_lr_regnum,
++                     (gdb_byte *) gregs, offsets->lr_offset);
++  if (regnum == -1 || regnum == tdep->ppc_ctr_regnum)
++    ppc64_collect_reg (regcache, tdep->ppc_ctr_regnum,
++                     (gdb_byte *) gregs, offsets->ctr_offset);
++  if (regnum == -1 || regnum == tdep->ppc_xer_regnum)
++    ppc64_collect_reg (regcache, tdep->ppc_xer_regnum,
++                     (gdb_byte *) gregs, offsets->xer_offset);
++}
++
++/* Core file support.  */
++
++/* Supply register REGNUM in the general-purpose register set REGSET
++   from the buffer specified by GREGS and LEN to register cache
++   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
++
++void
++ppc64obsd_supply_gregset (const struct regset *regset,
++                        struct regcache *regcache, int regnum,
++                        const void *gregs, size_t len)
++{
++  ppc64_supply_gregset (regset, regcache, regnum, gregs, len);
++}
++
++/* Collect register REGNUM in the general-purpose register set
++   REGSET. from register cache REGCACHE into the buffer specified by
++   GREGS and LEN.  If REGNUM is -1, do this for all registers in
++   REGSET.  */
++
++void
++ppc64obsd_collect_gregset (const struct regset *regset,
++                         const struct regcache *regcache, int regnum,
++                         void *gregs, size_t len)
++{
++  ppc64_collect_gregset (regset, regcache, regnum, gregs, len);
++}
++
++/* OpenBSD/powerpc register set.  */
++
++struct regset ppc64obsd_gregset =
++{
++  &ppc64obsd_reg_offsets,
++  ppc64obsd_supply_gregset
++};
++
++struct regset ppc64obsd_fpregset =
++{
++  &ppc64obsd_fpreg_offsets,
++  ppc_supply_fpregset
++};
++
++/* Iterate over core file register note sections.  */
++
++static void
++ppc64obsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
++                                      iterate_over_regset_sections_cb *cb,
++                                      void *cb_data,
++                                      const struct regcache *regcache)
++{
++  cb (".reg", 304, &ppc64obsd_gregset, NULL, cb_data);
++  //  cb (".reg2", 1048, &ppc64obsd_fpregset, NULL, cb_data);
++}
++
++
++/* Signal trampolines.  */
++
++/* Since OpenBSD 3.2, the sigtramp routine is mapped at a random page
++   in virtual memory.  The randomness makes it somewhat tricky to
++   detect it, but fortunately we can rely on the fact that the start
++   of the sigtramp routine is page-aligned.  We recognize the
++   trampoline by looking for the code that invokes the sigreturn
++   system call.  The offset where we can find that code varies from
++   release to release.
++
++   By the way, the mapping mentioned above is read-only, so you cannot
++   place a breakpoint in the signal trampoline.  */
++
++/* Default page size.  */
++static const int ppc64obsd_page_size = 4096;
++
++/* Offset for sigreturn(2).  */
++static const int ppc64obsd_sigreturn_offset[] = {
++  0x98,                               /* OpenBSD 3.8 */
++  0x0c,                               /* OpenBSD 3.2 */
++  -1
++};
++
++static int
++ppc64obsd_sigtramp_frame_sniffer (const struct frame_unwind *self,
++                                struct frame_info *this_frame,
++                                void **this_cache)
++{
++  struct gdbarch *gdbarch = get_frame_arch (this_frame);
++  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
++  CORE_ADDR pc = get_frame_pc (this_frame);
++  CORE_ADDR start_pc = (pc & ~(ppc64obsd_page_size - 1));
++  const int *offset;
++  const char *name;
++
++  find_pc_partial_function (pc, &name, NULL, NULL);
++  if (name)
++    return 0;
++
++  for (offset = ppc64obsd_sigreturn_offset; *offset != -1; offset++)
++    {
++      gdb_byte buf[2 * PPC_INSN_SIZE];
++      unsigned long insn;
++
++      if (!safe_frame_unwind_memory (this_frame, start_pc + *offset,
++                                   buf, sizeof buf))
++      continue;
++
++      /* Check for "li r0,SYS_sigreturn".  */
++      insn = extract_unsigned_integer (buf, PPC_INSN_SIZE, byte_order);
++      if (insn != 0x38000067)
++      continue;
++
++      /* Check for "sc".  */
++      insn = extract_unsigned_integer (buf + PPC_INSN_SIZE,
++                                     PPC_INSN_SIZE, byte_order);
++      if (insn != 0x44000002)
++      continue;
++
++      return 1;
++    }
++
++  return 0;
++}
++
++static struct trad_frame_cache *
++ppc64obsd_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);
++  enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
++  struct trad_frame_cache *cache;
++  CORE_ADDR addr, base, func;
++  gdb_byte buf[PPC_INSN_SIZE];
++  unsigned long insn, sigcontext_offset;
++  int i;
++
++  if (*this_cache)
++    return (struct trad_frame_cache *) *this_cache;
++
++  cache = trad_frame_cache_zalloc (this_frame);
++  *this_cache = cache;
++
++  func = get_frame_pc (this_frame);
++  func &= ~(ppc64obsd_page_size - 1);
++  if (!safe_frame_unwind_memory (this_frame, func, buf, sizeof buf))
++    return cache;
++
++  /* Calculate the offset where we can find `struct sigcontext'.  We
++     base our calculation on the amount of stack space reserved by the
++     first instruction of the signal trampoline.  */
++  insn = extract_unsigned_integer (buf, PPC_INSN_SIZE, byte_order);
++  sigcontext_offset = (0x10000 - (insn & 0x0000ffff)) + 8;
++
++  base = get_frame_register_unsigned (this_frame, gdbarch_sp_regnum 
(gdbarch));
++  addr = base + sigcontext_offset + 2 * tdep->wordsize;
++  for (i = 0; i < ppc_num_gprs; i++, addr += tdep->wordsize)
++    {
++      int regnum = i + tdep->ppc_gp0_regnum;
++      trad_frame_set_reg_addr (cache, regnum, addr);
++    }
++  trad_frame_set_reg_addr (cache, tdep->ppc_lr_regnum, addr);
++  addr += tdep->wordsize;
++  trad_frame_set_reg_addr (cache, tdep->ppc_cr_regnum, addr);
++  addr += tdep->wordsize;
++  trad_frame_set_reg_addr (cache, tdep->ppc_xer_regnum, addr);
++  addr += tdep->wordsize;
++  trad_frame_set_reg_addr (cache, tdep->ppc_ctr_regnum, addr);
++  addr += tdep->wordsize;
++  trad_frame_set_reg_addr (cache, gdbarch_pc_regnum (gdbarch), addr);
++  /* SRR0?  */
++  addr += tdep->wordsize;
++
++  /* Construct the frame ID using the function start.  */
++  trad_frame_set_id (cache, frame_id_build (base, func));
++
++  return cache;
++}
++
++static void
++ppc64obsd_sigtramp_frame_this_id (struct frame_info *this_frame,
++                              void **this_cache, struct frame_id *this_id)
++{
++  struct trad_frame_cache *cache =
++    ppc64obsd_sigtramp_frame_cache (this_frame, this_cache);
++
++  trad_frame_get_id (cache, this_id);
++}
++
++static struct value *
++ppc64obsd_sigtramp_frame_prev_register (struct frame_info *this_frame,
++                                      void **this_cache, int regnum)
++{
++  struct trad_frame_cache *cache =
++    ppc64obsd_sigtramp_frame_cache (this_frame, this_cache);
++
++  return trad_frame_get_register (cache, this_frame, regnum);
++}
++
++static const struct frame_unwind ppc64obsd_sigtramp_frame_unwind = {
++  SIGTRAMP_FRAME,
++  default_frame_unwind_stop_reason,
++  ppc64obsd_sigtramp_frame_this_id,
++  ppc64obsd_sigtramp_frame_prev_register,
++  NULL,
++  ppc64obsd_sigtramp_frame_sniffer
++};
++
++
++static void
++ppc64obsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
++{
++  obsd_init_abi (info, gdbarch);
++
++  /* OpenBSD doesn't support the 128-bit `long double' from the psABI.  */
++  set_gdbarch_long_double_bit (gdbarch, 64);
++  set_gdbarch_long_double_format (gdbarch, floatformats_ieee_double);
++
++  /* OpenBSD uses SVR4-style shared libraries.  */
++  set_solib_svr4_fetch_link_map_offsets
++    (gdbarch, svr4_lp64_fetch_link_map_offsets);
++
++  set_gdbarch_iterate_over_regset_sections
++    (gdbarch, ppc64obsd_iterate_over_regset_sections);
++
++  frame_unwind_append_unwinder (gdbarch, &ppc64obsd_sigtramp_frame_unwind);
++}
++
++
++/* OpenBSD uses uses the traditional NetBSD core file format, even for
++   ports that use ELF.  */
++#define GDB_OSABI_NETBSD_CORE GDB_OSABI_OPENBSD_ELF
++
++static enum gdb_osabi
++ppc64obsd_core_osabi_sniffer (bfd *abfd)
++{
++  if (strcmp (bfd_get_target (abfd), "netbsd-core") == 0)
++    return GDB_OSABI_NETBSD_CORE;
++
++  return GDB_OSABI_UNKNOWN;
++}
++
++
++/* Provide a prototype to silence -Wmissing-prototypes.  */
++void _initialize_ppc64obsd_tdep (void);
++
++void
++_initialize_ppc64obsd_tdep (void)
++{
++  /* BFD doesn't set a flavour for NetBSD style a.out core files.  */
++  gdbarch_register_osabi_sniffer (bfd_arch_powerpc, 
bfd_target_unknown_flavour,
++                                  ppc64obsd_core_osabi_sniffer);
++
++#if 0
++  gdbarch_register_osabi (bfd_arch_rs6000, 0, GDB_OSABI_OPENBSD_ELF,
++                        ppc64obsd_init_abi);
++#endif
++  gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc64,
++                        GDB_OSABI_OPENBSD_ELF, ppc64obsd_init_abi);
++
++  /* Avoid initializing the register offsets again if they were
++     already initailized by ppc64obsd-nat.c.  */
++  if (ppc64obsd_reg_offsets.pc_offset == 0)
++    {
++      /* General-purpose registers.  */
++      ppc64obsd_reg_offsets.r0_offset = 0;
++      ppc64obsd_reg_offsets.pc_offset = 288;
++      ppc64obsd_reg_offsets.ps_offset = 296;
++      ppc64obsd_reg_offsets.cr_offset = 264;
++      ppc64obsd_reg_offsets.lr_offset = 256;
++      ppc64obsd_reg_offsets.ctr_offset = 280;
++      ppc64obsd_reg_offsets.xer_offset = 272;
++      ppc64obsd_reg_offsets.mq_offset = -1;
++
++      /* Floating-point registers.  */
++      ppc64obsd_reg_offsets.f0_offset = -1;
++      ppc64obsd_reg_offsets.fpscr_offset = -1;
++
++      /* AltiVec registers.  */
++      ppc64obsd_reg_offsets.vr0_offset = -1;
++      ppc64obsd_reg_offsets.vscr_offset = -1;
++      ppc64obsd_reg_offsets.vrsave_offset = -1;
++    }
++
++  if (ppc64obsd_fpreg_offsets.fpscr_offset == 0)
++    {
++      /* Floating-point registers.  */
++      ppc64obsd_reg_offsets.f0_offset = -1;
++      ppc64obsd_reg_offsets.fpscr_offset = -1;
++    }
++}
Index: devel/gdb/patches/patch-gdb_ppc64obsd-tdep_h
===================================================================
RCS file: devel/gdb/patches/patch-gdb_ppc64obsd-tdep_h
diff -N devel/gdb/patches/patch-gdb_ppc64obsd-tdep_h
--- /dev/null   1 Jan 1970 00:00:00 -0000
+++ devel/gdb/patches/patch-gdb_ppc64obsd-tdep_h        30 Sep 2020 20:18:56 
-0000
@@ -0,0 +1,60 @@
+$OpenBSD$
+
+Index: gdb/ppc64obsd-tdep.h
+--- gdb/ppc64obsd-tdep.h.orig
++++ gdb/ppc64obsd-tdep.h
+@@ -0,0 +1,54 @@
++/* Target-dependent code for OpenBSD/powerpc64.
++
++   Copyright (C) 2004, 2006 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 2 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, write to the Free Software
++   Foundation, Inc., 51 Franklin Street, Fifth Floor,
++   Boston, MA 02110-1301, USA.  */
++
++#ifndef PPC64OBSD_TDEP_H
++#define PPC64OBSD_TDEP_H
++
++struct regset;
++struct regcache;
++
++/* Register offsets for OpenBSD/powerpc64.  */
++extern struct ppc_reg_offsets ppc64obsd_reg_offsets;
++extern struct ppc_reg_offsets ppc64obsd_fpreg_offsets;
++
++/* Register sets for OpenBSD/powerpc64.  */
++extern struct regset ppc64obsd_gregset;
++extern struct regset ppc64obsd_fpregset;
++
++
++/* Supply register REGNUM in the general-purpose register set REGSET
++   from the buffer specified by GREGS and LEN to register cache
++   REGCACHE.  If REGNUM is -1, do this for all registers in REGSET.  */
++
++extern void ppc64obsd_supply_gregset (const struct regset *regset,
++                                    struct regcache *regcache, int regnum,
++                                    const void *gregs, size_t len);
++
++/* Collect register REGNUM in the general-purpose register set
++   REGSET. from register cache REGCACHE into the buffer specified by
++   GREGS and LEN.  If REGNUM is -1, do this for all registers in
++   REGSET.  */
++
++extern void ppc64obsd_collect_gregset (const struct regset *regset,
++                                     const struct regcache *regcache,
++                                     int regnum, void *gregs, size_t len);
++
++#endif /* ppc64obsd-tdep.h */

Reply via email to