pkgsrc-WIP-changes archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
gdb-netbsd: Remove gdb-netbsd
Module Name: pkgsrc-wip
Committed By: Kamil Rytarowski <n54%gmx.com@localhost>
Pushed By: kamil
Date: Thu Sep 10 15:46:33 2020 +0200
Changeset: 572f77a699509fa271488e25c14fd16f476708d2
Modified Files:
Makefile
Removed Files:
gdb-netbsd/DESCR
gdb-netbsd/Makefile
gdb-netbsd/PLIST.Linux
gdb-netbsd/PLIST.common
gdb-netbsd/distinfo
gdb-netbsd/options.mk
gdb-netbsd/patches/patch-gdb_ChangeLog
gdb-netbsd/patches/patch-gdb_configure.nat
gdb-netbsd/patches/patch-gdb_nat_fork-inferior.c
gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.c
gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.h
gdb-netbsd/patches/patch-gdb_nbsd-nat.c
gdb-netbsd/patches/patch-gdbserver_ChangeLog
gdb-netbsd/patches/patch-gdbserver_Makefile.in
gdb-netbsd/patches/patch-gdbserver_configure.srv
gdb-netbsd/patches/patch-gdbserver_netbsd-amd64-low.cc
gdb-netbsd/patches/patch-gdbserver_netbsd-low.cc
gdb-netbsd/patches/patch-gdbserver_netbsd-low.h
gdb-netbsd/patches/patch-gdbsupport_ChangeLog
gdb-netbsd/patches/patch-gdbsupport_eintr.h
Log Message:
gdb-netbsd: Remove gdb-netbsd
All local patches merged upstream.
To see a diff of this commit:
https://wip.pkgsrc.org/cgi-bin/gitweb.cgi?p=pkgsrc-wip.git;a=commitdiff;h=572f77a699509fa271488e25c14fd16f476708d2
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
diffstat:
Makefile | 1 -
gdb-netbsd/DESCR | 17 -
gdb-netbsd/Makefile | 100 --
gdb-netbsd/PLIST.Linux | 4 -
gdb-netbsd/PLIST.common | 52 -
gdb-netbsd/distinfo | 20 -
gdb-netbsd/options.mk | 13 -
gdb-netbsd/patches/patch-gdb_ChangeLog | 61 -
gdb-netbsd/patches/patch-gdb_configure.nat | 13 -
gdb-netbsd/patches/patch-gdb_nat_fork-inferior.c | 16 -
gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.c | 218 ----
gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.h | 77 --
gdb-netbsd/patches/patch-gdb_nbsd-nat.c | 236 ----
gdb-netbsd/patches/patch-gdbserver_ChangeLog | 17 -
gdb-netbsd/patches/patch-gdbserver_Makefile.in | 14 -
gdb-netbsd/patches/patch-gdbserver_configure.srv | 17 -
.../patches/patch-gdbserver_netbsd-amd64-low.cc | 192 ---
gdb-netbsd/patches/patch-gdbserver_netbsd-low.cc | 1332 --------------------
gdb-netbsd/patches/patch-gdbserver_netbsd-low.h | 159 ---
gdb-netbsd/patches/patch-gdbsupport_ChangeLog | 12 -
gdb-netbsd/patches/patch-gdbsupport_eintr.h | 72 --
21 files changed, 2643 deletions(-)
diffs:
diff --git a/Makefile b/Makefile
index 74fcb450ef..33ac26b849 100644
--- a/Makefile
+++ b/Makefile
@@ -1071,7 +1071,6 @@ SUBDIR+= gdal-docs
SUBDIR+= gdal-grass
SUBDIR+= gdb
SUBDIR+= gdb-git
-SUBDIR+= gdb-netbsd
SUBDIR+= gdb5
SUBDIR+= gdb6
SUBDIR+= gde
diff --git a/gdb-netbsd/DESCR b/gdb-netbsd/DESCR
deleted file mode 100644
index c7c2207693..0000000000
--- a/gdb-netbsd/DESCR
+++ /dev/null
@@ -1,17 +0,0 @@
- The purpose of a debugger such as GDB is to allow you to see what
-is going on "inside" another program while it executes--or what
-another program was doing at the moment it crashed.
-
- GDB can do four main kinds of things (plus other things in support
-of these) to help you catch bugs in the act:
-
- * Start your program, specifying anything that might affect its
- behavior.
-
- * Make your program stop on specified conditions.
-
- * Examine what has happened, when your program has stopped.
-
- * Change things in your program, so you can experiment with
- correcting the effects of one bug and go on to learn about
- another.
diff --git a/gdb-netbsd/Makefile b/gdb-netbsd/Makefile
deleted file mode 100644
index ba14b8f077..0000000000
--- a/gdb-netbsd/Makefile
+++ /dev/null
@@ -1,100 +0,0 @@
-# $NetBSD: Makefile,v 1.62 2019/04/25 07:32:45 maya Exp $
-
-DISTNAME= gdb-8.2.1
-CATEGORIES= devel
-
-MASTER_SITES= ${MASTER_SITE_GITHUB:=bminor/}
-GITHUB_PROJECT= binutils-gdb
-GITHUB_TAG= c5cd900e4f197870812c2d3e2c194871c171ef42
-
-HOMEPAGE= https://www.gnu.org/software/gdb/gdb.html
-COMMENT= Symbolic debugger for multiple language frontends
-LICENSE= gnu-gpl-v3
-
-USE_LANGUAGES= c c++11
-
-BROKEN_GETTEXT_DETECTION= yes
-GNU_CONFIGURE= YES
-USE_PKGLOCALEDIR= YES
-USE_LIBTOOL= YES
-USE_TOOLS+= gmake msgfmt makeinfo perl:build
-REPLACE_LOCALEDIR_PATTERNS+= Make-in
-INSTALL_TARGET= install install-info
-TEST_TARGET= check
-INFO_FILES= yes
-CONFIGURE_ENV+= CONFIG_LDFLAGS=${LDFLAGS:M*:Q}
-
-# In gdb/configure, depcomp is parsed with sed.
-SUBST_CLASSES+= fix-depcomp
-SUBST_STAGE.fix-depcomp+= pre-configure
-SUBST_MESSAGE.fix-depcomp+= Read depcomp directly
-SUBST_FILES.fix-depcomp+= gdb/configure
-SUBST_SED.fix-depcomp+= -e 's,< ./depcomp,${_OVERRIDE_PATH.depcomp},'
-
-CONFIGURE_ARGS+= --disable-binutils
-CONFIGURE_ARGS+= --disable-gprof
-CONFIGURE_ARGS+= --disable-gold
-CONFIGURE_ARGS+= --disable-gas
-CONFIGURE_ARGS+= --disable-ld
-
-CONFIGURE_ARGS+= --enable-targets=all
-
-AUTO_MKDIRS= yes
-
-.include "options.mk"
-
-.include "../../mk/bsd.prefs.mk"
-
-PLIST_VARS+= gcore
-.if (${OPSYS} == "SunOS" || ${OPSYS} == "NetBSD" \
- || ${OPSYS} == "Linux" || ${OPSYS} == "FreeBSD")
-PLIST.gcore= yes
-.endif
-
-.if ${OPSYS} == "SunOS"
-# Work around a bug in gdb's configure
-CONFIGURE_ENV+= ac_cv_header_curses_h=yes
-.elif ${OPSYS} == "NetBSD"
-.include "../../mk/curses.buildlink3.mk"
-CONFIGURE_ARGS+= -with-curses
-CONFIGURE_ENV+= gdb_cv_var_elf=yes
-MAKE_ENV+= gdb_cv_var_elf=yes
-CONFIGURE_ENV+= gdb_cv_struct_lwp=yes
-MAKE_ENV+= gdb_cv_struct_lwp=yes
-
-CONFIGURE_ARGS+= --with-separate-debug-dir=/usr/libdata/debug
-.elif ${OPSYS} == "DragonFly"
-TARGET_STR= ${MACHINE_ARCH}--dragonfly
-BUILD_DEFS+= ${TARGET_STR}
-## Remove "-pc" string, without this, getting following message:
-## *** Gdb does not support native target i386-pc-dragonfly"
-CONFIGURE_ARGS+= --target=${TARGET_STR}
-TEST_ENV= DEJAGNU=${WRKDIR}/../files/dragonfly-default.exp
-.endif
-
-post-install:
- ${RM} -f ${DESTDIR}/${PREFIX}/lib/charset.alias
-.if ${OPSYS} == "DragonFly"
-# Following are installed by binutils
-#. for f in ansidecl.h bfdlink.h dis-asm.h symcat.h
-# (cd ${WRKSRC}/include; ${INSTALL_DATA} ${f} ${DESTDIR}${PREFIX}/include)
-#. endfor
- (cd ${DESTDIR}${PREFIX}/bin; ${LN} ${TARGET_STR}-gdb gdb)
- (cd ${DESTDIR}${PREFIX}/${PKGMANDIR}/man1; ${LN} ${TARGET_STR}-gdb.1 gdb.1)
-.endif
-#
-# PATH of libiberty.a differs between clang and gcc: (and conflicts to other toolchain)
-# Rename to avoid conflict to native and other toolchain
-# and clang differs its path so, (the same as avr-binutils).
-
- (cd ${DESTDIR}${PREFIX}; \
- for d in ${MACHINE_ARCH}/libiberty.a libiberty.a; \
- do if [ -f lib/$$d ]; then \
- ${MV} lib/$$d lib/gdb/libiberty.a; \
- break; \
- fi; \
- done; )
-
-.include "../../mk/termcap.buildlink3.mk"
-.include "../../devel/gettext-lib/buildlink3.mk"
-.include "../../mk/bsd.pkg.mk"
diff --git a/gdb-netbsd/PLIST.Linux b/gdb-netbsd/PLIST.Linux
deleted file mode 100644
index e4fe491ac0..0000000000
--- a/gdb-netbsd/PLIST.Linux
+++ /dev/null
@@ -1,4 +0,0 @@
-@comment $NetBSD: PLIST.Linux,v 1.5 2018/01/31 20:33:11 maya Exp $
-bin/gdbserver
-lib/libinproctrace.so
-man/man1/gcore.1
diff --git a/gdb-netbsd/PLIST.common b/gdb-netbsd/PLIST.common
deleted file mode 100644
index 9e7295ea95..0000000000
--- a/gdb-netbsd/PLIST.common
+++ /dev/null
@@ -1,52 +0,0 @@
-@comment $NetBSD: PLIST.common,v 1.13 2018/01/31 20:33:11 maya Exp $
-bin/gdb
-bin/gdb-add-index
-include/gdb/jit-reader.h
-info/annotate.info
-info/gdb.info
-info/stabs.info
-man/man1/gdb.1
-man/man1/gdb-add-index.1
-man/man1/gdbserver.1
-man/man5/gdbinit.5
-share/gdb/python/gdb/FrameDecorator.py
-share/gdb/python/gdb/FrameIterator.py
-share/gdb/python/gdb/__init__.py
-share/gdb/python/gdb/command/__init__.py
-share/gdb/python/gdb/command/explore.py
-share/gdb/python/gdb/command/frame_filters.py
-share/gdb/python/gdb/command/pretty_printers.py
-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/frames.py
-share/gdb/python/gdb/function/__init__.py
-share/gdb/python/gdb/function/as_string.py
-share/gdb/python/gdb/function/caller_is.py
-share/gdb/python/gdb/function/strfns.py
-share/gdb/python/gdb/printer/__init__.py
-share/gdb/python/gdb/printer/bound_registers.py
-share/gdb/python/gdb/printing.py
-share/gdb/python/gdb/prompt.py
-share/gdb/python/gdb/types.py
-share/gdb/python/gdb/unwinder.py
-share/gdb/python/gdb/xmethod.py
-share/gdb/syscalls/aarch64-linux.xml
-share/gdb/syscalls/amd64-linux.xml
-share/gdb/syscalls/arm-linux.xml
-share/gdb/syscalls/freebsd.xml
-share/gdb/syscalls/gdb-syscalls.dtd
-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/ppc-linux.xml
-share/gdb/syscalls/ppc64-linux.xml
-share/gdb/syscalls/s390-linux.xml
-share/gdb/syscalls/s390x-linux.xml
-share/gdb/syscalls/sparc-linux.xml
-share/gdb/syscalls/sparc64-linux.xml
-share/gdb/system-gdbinit/elinos.py
-share/gdb/system-gdbinit/wrs-linux.py
-${PLIST.gcore}bin/gcore
diff --git a/gdb-netbsd/distinfo b/gdb-netbsd/distinfo
deleted file mode 100644
index b87083fc5a..0000000000
--- a/gdb-netbsd/distinfo
+++ /dev/null
@@ -1,20 +0,0 @@
-$NetBSD$
-
-SHA1 (gdb-8.2.1-c5cd900e4f197870812c2d3e2c194871c171ef42.tar.gz) = a22b30c4bd636cff1a8f5116091146c81758e15c
-RMD160 (gdb-8.2.1-c5cd900e4f197870812c2d3e2c194871c171ef42.tar.gz) = c903097d45bd580b588f9aaf73ad94e0a134f8ed
-SHA512 (gdb-8.2.1-c5cd900e4f197870812c2d3e2c194871c171ef42.tar.gz) = be929f01e55df3e98fbdbbb2f93324c0a46c28cd651d1632d05cc41bdb8d1a2a778de7c26f4303b710cb80bff8c0596aa60b4b1167c390ec225dcf73955aceea
-Size (gdb-8.2.1-c5cd900e4f197870812c2d3e2c194871c171ef42.tar.gz) = 60943579 bytes
-SHA1 (patch-gdb_ChangeLog) = 8eec8e606020f5134aac488b95647496bf98aaf3
-SHA1 (patch-gdb_configure.nat) = ffaac7f26fba75a2eacd8b2b20a25c50b8d024ed
-SHA1 (patch-gdb_nat_fork-inferior.c) = ac89754b5dd1a69b0058bedaf512272a8d8d30fe
-SHA1 (patch-gdb_nat_netbsd-nat.c) = 7e3e38976d1c7bc6a1f19e4a80df9cd58c526459
-SHA1 (patch-gdb_nat_netbsd-nat.h) = df8d545ffb2a35ca6c467b15a5893612a596d49f
-SHA1 (patch-gdb_nbsd-nat.c) = 990e2a7028526f22719a7da91d3388c62dca074d
-SHA1 (patch-gdbserver_ChangeLog) = 6328d14345bf070aea1ea1028344ad6e8e0ba68a
-SHA1 (patch-gdbserver_Makefile.in) = 4fe153030dd40b672eae2184c68070be181a9161
-SHA1 (patch-gdbserver_configure.srv) = 003db2c5e3caaf41113d1a353dccac488a1b9948
-SHA1 (patch-gdbserver_netbsd-amd64-low.cc) = 02af27124b13e9eb59eb1037d3eb650d7b6c583f
-SHA1 (patch-gdbserver_netbsd-low.cc) = 6ee33d00356e4710058a4720889666023b377f33
-SHA1 (patch-gdbserver_netbsd-low.h) = debfbeffe74c441d93dbe2335caf89858a0f1c1b
-SHA1 (patch-gdbsupport_ChangeLog) = f32a8af60f2066764deffd6edebb5473416c6a27
-SHA1 (patch-gdbsupport_eintr.h) = dc8f7e8c97c473fea1997facecab37814b2b0f88
diff --git a/gdb-netbsd/options.mk b/gdb-netbsd/options.mk
deleted file mode 100644
index 3a52d30fcb..0000000000
--- a/gdb-netbsd/options.mk
+++ /dev/null
@@ -1,13 +0,0 @@
-# $NetBSD: options.mk,v 1.6 2019/04/26 13:13:49 maya Exp $
-
-PKG_OPTIONS_VAR= PKG_OPTIONS.gdb
-PKG_SUPPORTED_OPTIONS= python
-PKG_SUGGESTED_OPTIONS= python
-
-.include "../../mk/bsd.options.mk"
-
-.if !empty(PKG_OPTIONS:Mpython)
-CONFIGURE_ARGS+= --with-python=${PYTHONBIN}
-PYTHON_VERSIONS_ACCEPTED= 27
-.include "../../lang/python/application.mk"
-.endif
diff --git a/gdb-netbsd/patches/patch-gdb_ChangeLog b/gdb-netbsd/patches/patch-gdb_ChangeLog
deleted file mode 100644
index 2451f1f196..0000000000
--- a/gdb-netbsd/patches/patch-gdb_ChangeLog
+++ /dev/null
@@ -1,61 +0,0 @@
-$NetBSD$
-
---- gdb/ChangeLog.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdb/ChangeLog
-@@ -1,3 +1,56 @@
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * nbsd-nat.c: Include "nat/netbsd-nat.h".
-+ * (nbsd_nat_target::pid_to_exec_file)
-+ (nbsd_nat_target::thread_alive, nbsd_nat_target::thread_name)
-+ (nbsd_nat_target::post_startup_inferior)
-+ (nbsd_nat_target::post_attach, nbsd_nat_target::xfer_partial)
-+ (nbsd_add_threads): Switch local code to common gdb/nat functions.
-+ * (nbsd_pid_to_cmdline): Call sysctl from the global namespace.
-+ * (nbsd_thread_lister): Remove.
-+
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * fork-inferior.c (startup_inferior): Avoid double free.
-+
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * netbsd-nat.h (netbsd_nat::qxfer_siginfo): Add.
-+ * netbsd-nat.c (netbsd_nat::qxfer_siginfo): Likewise.
-+
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * netbsd-nat.h (netbsd_nat::enable_proc_events): Add.
-+ * netbsd-nat.c: Include <sys/ptrace.h>.
-+ * (netbsd_nat::enable_proc_events): Add.
-+
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * netbsd-nat.h: Include "gdbsupport/function-view.h".
-+ * (netbsd_nat::thread_alive, netbsd_nat::thread_name)
-+ (netbsd_nat::for_each_thread): Add.
-+ * netbsd-nat.c: Include "gdbsupport/common-defs.h" and
-+ "gdbsupport/common-debug.h".
-+ * (netbsd_nat::netbsd_thread_lister)
-+ (netbsd_nat::thread_alive, netbsd_nat::thread_name)
-+ (netbsd_nat::for_each_thread): Add.
-+
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * netbsd-nat.h: Include <unistd.h>.
-+ * (netbsd_nat::pid_to_exec_file): Add.
-+ * netbsd-nat.c: Include <sys/types.h> and <sys/sysctl.h>.
-+ * (netbsd_nat::pid_to_exec_file) Add.
-+
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * configure.nat (NATDEPFILES): Add nat/netbsd-nat.o when needed.
-+
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * netbsd-nat.h: New file.
-+ * netbsd-nat.c: Likewise.
-+
- 2020-09-03 Alok Kumar Sharma <AlokKumar.Sharma%amd.com@localhost>
-
- * gdb/i386-tdep.c (i386_floatformat_for_type): Added conditions
diff --git a/gdb-netbsd/patches/patch-gdb_configure.nat b/gdb-netbsd/patches/patch-gdb_configure.nat
deleted file mode 100644
index a870cca0f9..0000000000
--- a/gdb-netbsd/patches/patch-gdb_configure.nat
+++ /dev/null
@@ -1,13 +0,0 @@
-$NetBSD$
-
---- gdb/configure.nat.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdb/configure.nat
-@@ -68,7 +68,7 @@ case ${gdb_host} in
- LOADLIBES='-lkvm'
- ;;
- nbsd*)
-- NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o'
-+ NATDEPFILES='fork-child.o nat/fork-inferior.o nat/netbsd-nat.o inf-ptrace.o'
- HAVE_NATIVE_GCORE_HOST=1
- ;;
- obsd*)
diff --git a/gdb-netbsd/patches/patch-gdb_nat_fork-inferior.c b/gdb-netbsd/patches/patch-gdb_nat_fork-inferior.c
deleted file mode 100644
index 7dc991a8c1..0000000000
--- a/gdb-netbsd/patches/patch-gdb_nat_fork-inferior.c
+++ /dev/null
@@ -1,16 +0,0 @@
-$NetBSD$
-
---- gdb/nat/fork-inferior.c.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdb/nat/fork-inferior.c
-@@ -526,7 +526,10 @@ startup_inferior (process_stratum_target
-
- case TARGET_WAITKIND_EXECD:
- /* Handle EXEC signals as if they were SIGTRAP signals. */
-- xfree (ws.value.execd_pathname);
-+ /* Free the exec'ed pathname, but only if this isn't the
-+ waitstatus we are returning to the caller. */
-+ if (pending_execs != 1)
-+ xfree (ws.value.execd_pathname);
- resume_signal = GDB_SIGNAL_TRAP;
- switch_to_thread (proc_target, event_ptid);
- break;
diff --git a/gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.c b/gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.c
deleted file mode 100644
index 27bde0fe26..0000000000
--- a/gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.c
+++ /dev/null
@@ -1,218 +0,0 @@
-$NetBSD$
-
---- gdb/nat/netbsd-nat.c.orig 2020-09-08 13:10:45.226850952 +0000
-+++ gdb/nat/netbsd-nat.c
-@@ -0,0 +1,213 @@
-+/* Internal interfaces for the NetBSD code.
-+
-+ Copyright (C) 2006-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 "gdbsupport/common-defs.h"
-+#include "nat/netbsd-nat.h"
-+#include "gdbsupport/common-debug.h"
-+
-+#include <sys/types.h>
-+#include <sys/ptrace.h>
-+#include <sys/sysctl.h>
-+
-+#include <cstring>
-+
-+#include "gdbsupport/function-view.h"
-+
-+namespace netbsd_nat
-+{
-+
-+/* See netbsd-nat.h. */
-+
-+const char *
-+pid_to_exec_file (pid_t pid)
-+{
-+ static char buf[PATH_MAX];
-+ int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_PATHNAME};
-+ size_t buflen = sizeof (buf);
-+ if (::sysctl (mib, ARRAY_SIZE (mib), buf, &buflen, NULL, 0) != 0)
-+ return NULL;
-+ return buf;
-+}
-+
-+/* Generic thread (LWP) lister within a specified PID. The CALLBACK
-+ parameters is a C++ function that is called for each detected thread.
-+ When the CALLBACK function returns true, the iteration is interrupted.
-+
-+ This function assumes internally that the queried process is stopped
-+ and the number of threads does not change between two sysctl () calls. */
-+
-+static bool
-+netbsd_thread_lister (const pid_t pid,
-+ gdb::function_view<bool (const struct kinfo_lwp *)>
-+ callback)
-+{
-+ int mib[5] = {CTL_KERN, KERN_LWP, pid, sizeof (struct kinfo_lwp), 0};
-+ size_t size;
-+
-+ if (sysctl (mib, ARRAY_SIZE (mib), NULL, &size, NULL, 0) == -1 || size == 0)
-+ perror_with_name (("sysctl"));
-+
-+ mib[4] = size / sizeof (size_t);
-+
-+ gdb::unique_xmalloc_ptr<struct kinfo_lwp[]> kl
-+ ((struct kinfo_lwp *) xcalloc (size, 1));
-+
-+ if (sysctl (mib, ARRAY_SIZE (mib), kl.get (), &size, NULL, 0) == -1
-+ || size == 0)
-+ perror_with_name (("sysctl"));
-+
-+ for (size_t i = 0; i < size / sizeof (struct kinfo_lwp); i++)
-+ {
-+ struct kinfo_lwp *l = &kl[i];
-+
-+ /* Return true if the specified thread is alive. */
-+ auto lwp_alive
-+ = [] (struct kinfo_lwp *lwp)
-+ {
-+ switch (lwp->l_stat)
-+ {
-+ case LSSLEEP:
-+ case LSRUN:
-+ case LSONPROC:
-+ case LSSTOP:
-+ case LSSUSPENDED:
-+ return true;
-+ default:
-+ return false;
-+ }
-+ };
-+
-+ /* Ignore embryonic or demised threads. */
-+ if (!lwp_alive (l))
-+ continue;
-+
-+ if (callback (l))
-+ return true;
-+ }
-+
-+ return false;
-+}
-+
-+/* See netbsd-nat.h. */
-+
-+bool
-+thread_alive (ptid_t ptid)
-+{
-+ pid_t pid = ptid.pid ();
-+ lwpid_t lwp = ptid.lwp ();
-+
-+ auto fn
-+ = [=] (const struct kinfo_lwp *kl)
-+ {
-+ return kl->l_lid == lwp;
-+ };
-+
-+ return netbsd_thread_lister (pid, fn);
-+}
-+
-+/* See netbsd-nat.h. */
-+
-+const char *
-+thread_name (ptid_t ptid)
-+{
-+ pid_t pid = ptid.pid ();
-+ lwpid_t lwp = ptid.lwp ();
-+
-+ static char buf[KI_LNAMELEN] = {};
-+
-+ auto fn
-+ = [=] (const struct kinfo_lwp *kl)
-+ {
-+ if (kl->l_lid == lwp)
-+ {
-+ xsnprintf (buf, sizeof buf, "%s", kl->l_name);
-+ return true;
-+ }
-+ return false;
-+ };
-+
-+ if (netbsd_thread_lister (pid, fn))
-+ return buf;
-+ else
-+ return NULL;
-+}
-+
-+/* See netbsd-nat.h. */
-+
-+void
-+for_each_thread (pid_t pid, gdb::function_view<void (ptid_t)> callback)
-+{
-+ auto fn
-+ = [=, &callback] (const struct kinfo_lwp *kl)
-+ {
-+ ptid_t ptid = ptid_t (pid, kl->l_lid, 0);
-+ callback (ptid);
-+ return false;
-+ };
-+
-+ netbsd_thread_lister (pid, fn);
-+}
-+
-+/* See netbsd-nat.h. */
-+
-+void
-+enable_proc_events (pid_t pid)
-+{
-+ int events;
-+
-+ if (ptrace (PT_GET_EVENT_MASK, pid, &events, sizeof (events)) == -1)
-+ perror_with_name (("ptrace"));
-+
-+ events |= PTRACE_LWP_CREATE;
-+ events |= PTRACE_LWP_EXIT;
-+
-+ if (ptrace (PT_SET_EVENT_MASK, pid, &events, sizeof (events)) == -1)
-+ perror_with_name (("ptrace"));
-+}
-+
-+/* See netbsd-nat.h. */
-+
-+int
-+qxfer_siginfo (pid_t pid, const char *annex, unsigned char *readbuf,
-+ unsigned const char *writebuf, CORE_ADDR offset, int len)
-+{
-+ ptrace_siginfo_t psi;
-+
-+ if (offset > sizeof (siginfo_t))
-+ return -1;
-+
-+ if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1)
-+ return -1;
-+
-+ if (offset + len > sizeof (siginfo_t))
-+ len = sizeof (siginfo_t) - offset;
-+
-+ if (readbuf != NULL)
-+ memcpy (readbuf, ((gdb_byte *) &psi.psi_siginfo) + offset, len);
-+ else
-+ {
-+ memcpy (((gdb_byte *) &psi.psi_siginfo) + offset, writebuf, len);
-+
-+ if (ptrace (PT_SET_SIGINFO, pid, &psi, sizeof (psi)) == -1)
-+ return -1;
-+ }
-+ return len;
-+}
-+
-+}
diff --git a/gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.h b/gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.h
deleted file mode 100644
index c1218ab119..0000000000
--- a/gdb-netbsd/patches/patch-gdb_nat_netbsd-nat.h
+++ /dev/null
@@ -1,77 +0,0 @@
-$NetBSD$
-
---- gdb/nat/netbsd-nat.h.orig 2020-09-08 13:10:45.226975075 +0000
-+++ gdb/nat/netbsd-nat.h
-@@ -0,0 +1,72 @@
-+/* Internal interfaces for the NetBSD code.
-+
-+ Copyright (C) 2006-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/>. */
-+
-+#ifndef NAT_NETBSD_NAT_H
-+#define NAT_NETBSD_NAT_H
-+
-+#include "gdbsupport/function-view.h"
-+
-+#include <unistd.h>
-+
-+namespace netbsd_nat
-+{
-+
-+/* Return the executable file name of a process specified by PID. Returns the
-+ string in a static buffer. */
-+
-+extern const char *pid_to_exec_file (pid_t pid);
-+
-+/* Return true if PTID is still active in the inferior. */
-+
-+extern bool thread_alive (ptid_t ptid);
-+
-+/* Return the name assigned to a thread by an application. Returns
-+ the string in a static buffer.
-+
-+ This function assumes internally that the queried process is stopped. */
-+
-+extern const char *thread_name (ptid_t ptid);
-+
-+/* A generic thread lister within a specific PID. The CALLBACK parameter
-+ is a C++ function that is called for each detected thread.
-+
-+ This function assumes internally that the queried process is stopped. */
-+
-+extern void for_each_thread (pid_t pid,
-+ gdb::function_view<void (ptid_t)> callback);
-+
-+/* Enable additional event reporting in a new process specified by PID.
-+
-+ This function assumes internally that the queried process is stopped and
-+ traced. */
-+
-+extern void enable_proc_events (pid_t pid);
-+
-+/* Implement reading and writing of inferior's siginfo_t specified by PID.
-+ Returns -1 on failure and the number of bytes on a successful transfer.
-+
-+ This function assumes internally that the queried process is stopped and
-+ traced. */
-+
-+extern int qxfer_siginfo (pid_t pid, const char *annex, unsigned char *readbuf,
-+ unsigned const char *writebuf, CORE_ADDR offset,
-+ int len);
-+}
-+
-+#endif
diff --git a/gdb-netbsd/patches/patch-gdb_nbsd-nat.c b/gdb-netbsd/patches/patch-gdb_nbsd-nat.c
deleted file mode 100644
index 1ac4141a61..0000000000
--- a/gdb-netbsd/patches/patch-gdb_nbsd-nat.c
+++ /dev/null
@@ -1,236 +0,0 @@
-$NetBSD$
-
---- gdb/nbsd-nat.c.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdb/nbsd-nat.c
-@@ -20,6 +20,7 @@
- #include "defs.h"
-
- #include "nbsd-nat.h"
-+#include "nat/netbsd-nat.h"
- #include "gdbthread.h"
- #include "nbsd-tdep.h"
- #include "inferior.h"
-@@ -36,13 +37,7 @@
- char *
- nbsd_nat_target::pid_to_exec_file (int pid)
- {
-- static char buf[PATH_MAX];
-- size_t buflen;
-- int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_PATHNAME};
-- buflen = sizeof (buf);
-- if (sysctl (mib, ARRAY_SIZE (mib), buf, &buflen, NULL, 0))
-- return NULL;
-- return buf;
-+ return const_cast<char *> (netbsd_nat::pid_to_exec_file (pid));
- }
-
- /* Return the current directory for the process identified by PID. */
-@@ -80,12 +75,12 @@ nbsd_pid_to_cmdline (int pid)
- int mib[4] = {CTL_KERN, KERN_PROC_ARGS, pid, KERN_PROC_ARGV};
-
- size_t size = 0;
-- if (sysctl (mib, ARRAY_SIZE (mib), NULL, &size, NULL, 0) == -1 || size == 0)
-+ if (::sysctl (mib, ARRAY_SIZE (mib), NULL, &size, NULL, 0) == -1 || size == 0)
- return nullptr;
-
- gdb::unique_xmalloc_ptr<char[]> args (XNEWVAR (char, size));
-
-- if (sysctl (mib, ARRAY_SIZE (mib), args.get (), &size, NULL, 0) == -1
-+ if (::sysctl (mib, ARRAY_SIZE (mib), args.get (), &size, NULL, 0) == -1
- || size == 0)
- return nullptr;
-
-@@ -99,76 +94,12 @@ nbsd_pid_to_cmdline (int pid)
- return args;
- }
-
--/* Generic thread (LWP) lister within a specified process. The callback
-- parameters is a C++ function that is called for each detected thread. */
--
--static bool
--nbsd_thread_lister (const pid_t pid,
-- gdb::function_view<bool (const struct kinfo_lwp *)>
-- callback)
--{
-- int mib[5] = {CTL_KERN, KERN_LWP, pid, sizeof (struct kinfo_lwp), 0};
-- size_t size;
--
-- if (sysctl (mib, ARRAY_SIZE (mib), NULL, &size, NULL, 0) == -1 || size == 0)
-- perror_with_name (("sysctl"));
--
-- mib[4] = size / sizeof (size_t);
--
-- gdb::unique_xmalloc_ptr<struct kinfo_lwp[]> kl
-- ((struct kinfo_lwp *) xcalloc (size, 1));
--
-- if (sysctl (mib, ARRAY_SIZE (mib), kl.get (), &size, NULL, 0) == -1
-- || size == 0)
-- perror_with_name (("sysctl"));
--
-- for (size_t i = 0; i < size / sizeof (struct kinfo_lwp); i++)
-- {
-- struct kinfo_lwp *l = &kl[i];
--
-- /* Return true if the specified thread is alive. */
-- auto lwp_alive
-- = [] (struct kinfo_lwp *lwp)
-- {
-- switch (lwp->l_stat)
-- {
-- case LSSLEEP:
-- case LSRUN:
-- case LSONPROC:
-- case LSSTOP:
-- case LSSUSPENDED:
-- return true;
-- default:
-- return false;
-- }
-- };
--
-- /* Ignore embryonic or demised threads. */
-- if (!lwp_alive (l))
-- continue;
--
-- if (callback (l))
-- return true;
-- }
--
-- return false;
--}
--
- /* Return true if PTID is still active in the inferior. */
-
- bool
- nbsd_nat_target::thread_alive (ptid_t ptid)
- {
-- pid_t pid = ptid.pid ();
-- int lwp = ptid.lwp ();
--
-- auto fn
-- = [&lwp] (const struct kinfo_lwp *kl)
-- {
-- return kl->l_lid == lwp;
-- };
--
-- return nbsd_thread_lister (pid, fn);
-+ return netbsd_nat::thread_alive (ptid);
- }
-
- /* Return the name assigned to a thread by an application. Returns
-@@ -178,26 +109,7 @@ const char *
- nbsd_nat_target::thread_name (struct thread_info *thr)
- {
- ptid_t ptid = thr->ptid;
-- pid_t pid = ptid.pid ();
-- int lwp = ptid.lwp ();
--
-- static char buf[KI_LNAMELEN] = {};
--
-- auto fn
-- = [&lwp] (const struct kinfo_lwp *kl)
-- {
-- if (kl->l_lid == lwp)
-- {
-- xsnprintf (buf, sizeof buf, "%s", kl->l_name);
-- return true;
-- }
-- return false;
-- };
--
-- if (nbsd_thread_lister (pid, fn))
-- return buf;
-- else
-- return NULL;
-+ return netbsd_nat::thread_name (ptid);
- }
-
- /* Implement the "post_attach" target_ops method. */
-@@ -206,9 +118,8 @@ static void
- nbsd_add_threads (nbsd_nat_target *target, pid_t pid)
- {
- auto fn
-- = [&target, &pid] (const struct kinfo_lwp *kl)
-+ = [&target] (ptid_t ptid)
- {
-- ptid_t ptid = ptid_t (pid, kl->l_lid, 0);
- if (!in_thread_list (target, ptid))
- {
- if (inferior_ptid.lwp () == 0)
-@@ -216,27 +127,9 @@ nbsd_add_threads (nbsd_nat_target *targe
- else
- add_thread (target, ptid);
- }
-- return false;
- };
-
-- nbsd_thread_lister (pid, fn);
--}
--
--/* Enable additional event reporting on new processes. */
--
--static void
--nbsd_enable_proc_events (pid_t pid)
--{
-- int events;
--
-- if (ptrace (PT_GET_EVENT_MASK, pid, &events, sizeof (events)) == -1)
-- perror_with_name (("ptrace"));
--
-- events |= PTRACE_LWP_CREATE;
-- events |= PTRACE_LWP_EXIT;
--
-- if (ptrace (PT_SET_EVENT_MASK, pid, &events, sizeof (events)) == -1)
-- perror_with_name (("ptrace"));
-+ netbsd_nat::for_each_thread (pid, fn);
- }
-
- /* Implement the "post_startup_inferior" target_ops method. */
-@@ -244,7 +137,7 @@ nbsd_enable_proc_events (pid_t pid)
- void
- nbsd_nat_target::post_startup_inferior (ptid_t ptid)
- {
-- nbsd_enable_proc_events (ptid.pid ());
-+ netbsd_nat::enable_proc_events (ptid.pid ());
- }
-
- /* Implement the "post_attach" target_ops method. */
-@@ -252,7 +145,7 @@ nbsd_nat_target::post_startup_inferior (
- void
- nbsd_nat_target::post_attach (int pid)
- {
-- nbsd_enable_proc_events (pid);
-+ netbsd_nat::enable_proc_events (pid);
- nbsd_add_threads (this, pid);
- }
-
-@@ -861,26 +754,12 @@ nbsd_nat_target::xfer_partial (enum targ
- {
- case TARGET_OBJECT_SIGNAL_INFO:
- {
-- ptrace_siginfo_t psi;
--
-- if (offset > sizeof (siginfo_t))
-- return TARGET_XFER_E_IO;
-+ len = netbsd_nat::qxfer_siginfo(pid, annex, readbuf, writebuf, offset,
-+ len);
-
-- if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1)
-+ if (len == -1)
- return TARGET_XFER_E_IO;
-
-- if (offset + len > sizeof (siginfo_t))
-- len = sizeof (siginfo_t) - offset;
--
-- if (readbuf != NULL)
-- memcpy (readbuf, ((gdb_byte *) &psi.psi_siginfo) + offset, len);
-- else
-- {
-- memcpy (((gdb_byte *) &psi.psi_siginfo) + offset, writebuf, len);
--
-- if (ptrace (PT_SET_SIGINFO, pid, &psi, sizeof (psi)) == -1)
-- return TARGET_XFER_E_IO;
-- }
- *xfered_len = len;
- return TARGET_XFER_OK;
- }
diff --git a/gdb-netbsd/patches/patch-gdbserver_ChangeLog b/gdb-netbsd/patches/patch-gdbserver_ChangeLog
deleted file mode 100644
index c497e7de73..0000000000
--- a/gdb-netbsd/patches/patch-gdbserver_ChangeLog
+++ /dev/null
@@ -1,17 +0,0 @@
-$NetBSD$
-
---- gdbserver/ChangeLog.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdbserver/ChangeLog
-@@ -1,3 +1,12 @@
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * netbsd-low.cc: Add.
-+ * netbsd-low.h: Likewise.
-+ * netbsd-amd64-low.cc: Likewise.
-+ * Makefile.in (SFILES): Register "netbsd-low.cc", "netbsd-low.h",
-+ "netbsd-amd64-low.cc".
-+ * configure.srv: Add x86_64-*-netbsd*.
-+
- 2020-08-13 Simon Marchi <simon.marchi%polymtl.ca@localhost>
-
- * server.cc (captured_main): Accept multiple `--selftest=`
diff --git a/gdb-netbsd/patches/patch-gdbserver_Makefile.in b/gdb-netbsd/patches/patch-gdbserver_Makefile.in
deleted file mode 100644
index eb78a8b26d..0000000000
--- a/gdb-netbsd/patches/patch-gdbserver_Makefile.in
+++ /dev/null
@@ -1,14 +0,0 @@
-$NetBSD$
-
---- gdbserver/Makefile.in.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdbserver/Makefile.in
-@@ -193,6 +193,9 @@ SFILES = \
- $(srcdir)/linux-x86-low.cc \
- $(srcdir)/linux-xtensa-low.cc \
- $(srcdir)/mem-break.cc \
-+ $(srcdir)/netbsd-amd64-low.cc \
-+ $(srcdir)/netbsd-low.cc \
-+ $(srcdir)/netbsd-low.h \
- $(srcdir)/proc-service.cc \
- $(srcdir)/proc-service.list \
- $(srcdir)/regcache.cc \
diff --git a/gdb-netbsd/patches/patch-gdbserver_configure.srv b/gdb-netbsd/patches/patch-gdbserver_configure.srv
deleted file mode 100644
index e3340ea560..0000000000
--- a/gdb-netbsd/patches/patch-gdbserver_configure.srv
+++ /dev/null
@@ -1,17 +0,0 @@
-$NetBSD$
-
---- gdbserver/configure.srv.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdbserver/configure.srv
-@@ -349,6 +349,12 @@ case "${gdbserver_host}" in
- srv_tgtobj="${srv_tgtobj} nat/windows-nat.o"
- srv_tgtobj="${srv_tgtobj} arch/amd64.o arch/i386.o"
- ;;
-+ x86_64-*-netbsd*) srv_regobj=""
-+ srv_tgtobj="netbsd-low.o netbsd-amd64-low.o fork-child.o"
-+ srv_tgtobj="${srv_tgtobj} nat/fork-inferior.o"
-+ srv_tgtobj="${srv_tgtobj} nat/netbsd-nat.o"
-+ srv_tgtobj="${srv_tgtobj} arch/amd64.o"
-+ ;;
-
- xtensa*-*-linux*) srv_regobj=reg-xtensa.o
- srv_tgtobj="$srv_linux_obj linux-xtensa-low.o"
diff --git a/gdb-netbsd/patches/patch-gdbserver_netbsd-amd64-low.cc b/gdb-netbsd/patches/patch-gdbserver_netbsd-amd64-low.cc
deleted file mode 100644
index 92a2fa6517..0000000000
--- a/gdb-netbsd/patches/patch-gdbserver_netbsd-amd64-low.cc
+++ /dev/null
@@ -1,192 +0,0 @@
-$NetBSD$
-
---- gdbserver/netbsd-amd64-low.cc.orig 2020-09-08 13:10:47.483752505 +0000
-+++ gdbserver/netbsd-amd64-low.cc
-@@ -0,0 +1,187 @@
-+/* Copyright (C) 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 <sys/types.h>
-+#include <sys/ptrace.h>
-+#include <limits.h>
-+
-+#include "server.h"
-+#include "netbsd-low.h"
-+#include "gdbsupport/x86-xstate.h"
-+#include "arch/amd64.h"
-+#include "x86-tdesc.h"
-+#include "tdesc.h"
-+
-+/* The index of various registers inside the regcache. */
-+
-+enum netbsd_x86_64_gdb_regnum
-+{
-+ AMD64_RAX_REGNUM, /* %rax */
-+ AMD64_RBX_REGNUM, /* %rbx */
-+ AMD64_RCX_REGNUM, /* %rcx */
-+ AMD64_RDX_REGNUM, /* %rdx */
-+ AMD64_RSI_REGNUM, /* %rsi */
-+ AMD64_RDI_REGNUM, /* %rdi */
-+ AMD64_RBP_REGNUM, /* %rbp */
-+ AMD64_RSP_REGNUM, /* %rsp */
-+ AMD64_R8_REGNUM, /* %r8 */
-+ AMD64_R9_REGNUM, /* %r9 */
-+ AMD64_R10_REGNUM, /* %r10 */
-+ AMD64_R11_REGNUM, /* %r11 */
-+ AMD64_R12_REGNUM, /* %r12 */
-+ AMD64_R13_REGNUM, /* %r13 */
-+ AMD64_R14_REGNUM, /* %r14 */
-+ AMD64_R15_REGNUM, /* %r15 */
-+ AMD64_RIP_REGNUM, /* %rip */
-+ AMD64_EFLAGS_REGNUM, /* %eflags */
-+ AMD64_CS_REGNUM, /* %cs */
-+ AMD64_SS_REGNUM, /* %ss */
-+ AMD64_DS_REGNUM, /* %ds */
-+ AMD64_ES_REGNUM, /* %es */
-+ AMD64_FS_REGNUM, /* %fs */
-+ AMD64_GS_REGNUM, /* %gs */
-+ AMD64_ST0_REGNUM = 24, /* %st0 */
-+ AMD64_ST1_REGNUM, /* %st1 */
-+ AMD64_FCTRL_REGNUM = AMD64_ST0_REGNUM + 8,
-+ AMD64_FSTAT_REGNUM = AMD64_ST0_REGNUM + 9,
-+ AMD64_FTAG_REGNUM = AMD64_ST0_REGNUM + 10,
-+ AMD64_XMM0_REGNUM = 40, /* %xmm0 */
-+ AMD64_XMM1_REGNUM, /* %xmm1 */
-+ AMD64_MXCSR_REGNUM = AMD64_XMM0_REGNUM + 16,
-+ AMD64_YMM0H_REGNUM, /* %ymm0h */
-+ AMD64_YMM15H_REGNUM = AMD64_YMM0H_REGNUM + 15,
-+ AMD64_BND0R_REGNUM = AMD64_YMM15H_REGNUM + 1,
-+ AMD64_BND3R_REGNUM = AMD64_BND0R_REGNUM + 3,
-+ AMD64_BNDCFGU_REGNUM,
-+ AMD64_BNDSTATUS_REGNUM,
-+ AMD64_XMM16_REGNUM,
-+ AMD64_XMM31_REGNUM = AMD64_XMM16_REGNUM + 15,
-+ AMD64_YMM16H_REGNUM,
-+ AMD64_YMM31H_REGNUM = AMD64_YMM16H_REGNUM + 15,
-+ AMD64_K0_REGNUM,
-+ AMD64_K7_REGNUM = AMD64_K0_REGNUM + 7,
-+ AMD64_ZMM0H_REGNUM,
-+ AMD64_ZMM31H_REGNUM = AMD64_ZMM0H_REGNUM + 31,
-+ AMD64_PKRU_REGNUM,
-+ AMD64_FSBASE_REGNUM,
-+ AMD64_GSBASE_REGNUM
-+};
-+
-+/* The fill_function for the general-purpose register set. */
-+
-+static void
-+netbsd_x86_64_fill_gregset (struct regcache *regcache, char *buf)
-+{
-+ struct reg *r = (struct reg *) buf;
-+
-+#define netbsd_x86_64_collect_gp(regnum, fld) do { \
-+ collect_register (regcache, regnum, &r->regs[_REG_##fld]); \
-+ } while (0)
-+
-+ netbsd_x86_64_collect_gp (AMD64_RAX_REGNUM, RAX);
-+ netbsd_x86_64_collect_gp (AMD64_RBX_REGNUM, RBX);
-+ netbsd_x86_64_collect_gp (AMD64_RCX_REGNUM, RCX);
-+ netbsd_x86_64_collect_gp (AMD64_RDX_REGNUM, RDX);
-+ netbsd_x86_64_collect_gp (AMD64_RSI_REGNUM, RSI);
-+ netbsd_x86_64_collect_gp (AMD64_RDI_REGNUM, RDI);
-+ netbsd_x86_64_collect_gp (AMD64_RBP_REGNUM, RBP);
-+ netbsd_x86_64_collect_gp (AMD64_RSP_REGNUM, RSP);
-+ netbsd_x86_64_collect_gp (AMD64_R8_REGNUM, R8);
-+ netbsd_x86_64_collect_gp (AMD64_R9_REGNUM, R9);
-+ netbsd_x86_64_collect_gp (AMD64_R10_REGNUM, R10);
-+ netbsd_x86_64_collect_gp (AMD64_R11_REGNUM, R11);
-+ netbsd_x86_64_collect_gp (AMD64_R12_REGNUM, R12);
-+ netbsd_x86_64_collect_gp (AMD64_R13_REGNUM, R13);
-+ netbsd_x86_64_collect_gp (AMD64_R14_REGNUM, R14);
-+ netbsd_x86_64_collect_gp (AMD64_R15_REGNUM, R15);
-+ netbsd_x86_64_collect_gp (AMD64_RIP_REGNUM, RIP);
-+ netbsd_x86_64_collect_gp (AMD64_EFLAGS_REGNUM, RFLAGS);
-+ netbsd_x86_64_collect_gp (AMD64_CS_REGNUM, CS);
-+ netbsd_x86_64_collect_gp (AMD64_SS_REGNUM, SS);
-+ netbsd_x86_64_collect_gp (AMD64_DS_REGNUM, DS);
-+ netbsd_x86_64_collect_gp (AMD64_ES_REGNUM, ES);
-+ netbsd_x86_64_collect_gp (AMD64_FS_REGNUM, FS);
-+ netbsd_x86_64_collect_gp (AMD64_GS_REGNUM, GS);
-+}
-+
-+/* The store_function for the general-purpose register set. */
-+
-+static void
-+netbsd_x86_64_store_gregset (struct regcache *regcache, const char *buf)
-+{
-+ struct reg *r = (struct reg *) buf;
-+
-+#define netbsd_x86_64_supply_gp(regnum, fld) do { \
-+ supply_register (regcache, regnum, &r->regs[_REG_##fld]); \
-+ } while(0)
-+
-+ netbsd_x86_64_supply_gp (AMD64_RAX_REGNUM, RAX);
-+ netbsd_x86_64_supply_gp (AMD64_RBX_REGNUM, RBX);
-+ netbsd_x86_64_supply_gp (AMD64_RCX_REGNUM, RCX);
-+ netbsd_x86_64_supply_gp (AMD64_RDX_REGNUM, RDX);
-+ netbsd_x86_64_supply_gp (AMD64_RSI_REGNUM, RSI);
-+ netbsd_x86_64_supply_gp (AMD64_RDI_REGNUM, RDI);
-+ netbsd_x86_64_supply_gp (AMD64_RBP_REGNUM, RBP);
-+ netbsd_x86_64_supply_gp (AMD64_RSP_REGNUM, RSP);
-+ netbsd_x86_64_supply_gp (AMD64_R8_REGNUM, R8);
-+ netbsd_x86_64_supply_gp (AMD64_R9_REGNUM, R9);
-+ netbsd_x86_64_supply_gp (AMD64_R10_REGNUM, R10);
-+ netbsd_x86_64_supply_gp (AMD64_R11_REGNUM, R11);
-+ netbsd_x86_64_supply_gp (AMD64_R12_REGNUM, R12);
-+ netbsd_x86_64_supply_gp (AMD64_R13_REGNUM, R13);
-+ netbsd_x86_64_supply_gp (AMD64_R14_REGNUM, R14);
-+ netbsd_x86_64_supply_gp (AMD64_R15_REGNUM, R15);
-+ netbsd_x86_64_supply_gp (AMD64_RIP_REGNUM, RIP);
-+ netbsd_x86_64_supply_gp (AMD64_EFLAGS_REGNUM, RFLAGS);
-+ netbsd_x86_64_supply_gp (AMD64_CS_REGNUM, CS);
-+ netbsd_x86_64_supply_gp (AMD64_SS_REGNUM, SS);
-+ netbsd_x86_64_supply_gp (AMD64_DS_REGNUM, DS);
-+ netbsd_x86_64_supply_gp (AMD64_ES_REGNUM, ES);
-+ netbsd_x86_64_supply_gp (AMD64_FS_REGNUM, FS);
-+ netbsd_x86_64_supply_gp (AMD64_GS_REGNUM, GS);
-+}
-+
-+/* Implements the netbsd_target_ops.arch_setup routine. */
-+
-+static void
-+netbsd_x86_64_arch_setup (void)
-+{
-+ struct target_desc *tdesc
-+ = amd64_create_target_description (X86_XSTATE_SSE_MASK, false, false, false);
-+
-+ init_target_desc (tdesc, amd64_expedite_regs);
-+
-+ netbsd_tdesc = tdesc;
-+}
-+
-+/* Description of all the x86-netbsd register sets. */
-+
-+struct netbsd_regset_info netbsd_target_regsets[] =
-+{
-+ /* General Purpose Registers. */
-+ {PT_GETREGS, PT_SETREGS, sizeof (struct reg),
-+ netbsd_x86_64_fill_gregset, netbsd_x86_64_store_gregset},
-+ /* End of list marker. */
-+ {0, 0, -1, NULL, NULL }
-+};
-+
-+/* The netbsd_target_ops vector for x86-netbsd. */
-+
-+struct netbsd_target_ops the_low_target =
-+{
-+ netbsd_x86_64_arch_setup,
-+};
diff --git a/gdb-netbsd/patches/patch-gdbserver_netbsd-low.cc b/gdb-netbsd/patches/patch-gdbserver_netbsd-low.cc
deleted file mode 100644
index 83faed208f..0000000000
--- a/gdb-netbsd/patches/patch-gdbserver_netbsd-low.cc
+++ /dev/null
@@ -1,1332 +0,0 @@
-$NetBSD$
-
---- gdbserver/netbsd-low.cc.orig 2020-09-08 13:10:47.484204564 +0000
-+++ gdbserver/netbsd-low.cc
-@@ -0,0 +1,1327 @@
-+/* Copyright (C) 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 "server.h"
-+#include "target.h"
-+#include "netbsd-low.h"
-+#include "nat/netbsd-nat.h"
-+
-+#include <sys/param.h>
-+#include <sys/types.h>
-+
-+#include <sys/ptrace.h>
-+#include <sys/sysctl.h>
-+
-+#include <limits.h>
-+#include <unistd.h>
-+#include <signal.h>
-+
-+#include <elf.h>
-+
-+#include <type_traits>
-+
-+#include "gdbsupport/eintr.h"
-+#include "gdbsupport/gdb_wait.h"
-+#include "gdbsupport/filestuff.h"
-+#include "gdbsupport/common-inferior.h"
-+#include "nat/fork-inferior.h"
-+#include "hostio.h"
-+
-+int using_threads = 1;
-+
-+const struct target_desc *netbsd_tdesc;
-+
-+/* Call add_process with the given parameters, and initialize
-+ the process' private data. */
-+
-+static void
-+netbsd_add_process (int pid, int attached)
-+{
-+ struct process_info *proc = add_process (pid, attached);
-+ proc->tdesc = netbsd_tdesc;
-+ proc->priv = nullptr;
-+}
-+
-+/* Callback used by fork_inferior to start tracing the inferior. */
-+
-+static void
-+netbsd_ptrace_fun ()
-+{
-+ /* Switch child to its own process group so that signals won't
-+ directly affect GDBserver. */
-+ if (setpgid (0, 0) < 0)
-+ trace_start_error_with_name (("setpgid"));
-+
-+ if (ptrace (PT_TRACE_ME, 0, nullptr, 0) < 0)
-+ trace_start_error_with_name (("ptrace"));
-+
-+ /* If GDBserver is connected to gdb via stdio, redirect the inferior's
-+ stdout to stderr so that inferior i/o doesn't corrupt the connection.
-+ Also, redirect stdin to /dev/null. */
-+ if (remote_connection_is_stdio ())
-+ {
-+ if (close (0) < 0)
-+ trace_start_error_with_name (("close"));
-+ if (open ("/dev/null", O_RDONLY) < 0)
-+ trace_start_error_with_name (("open"));
-+ if (dup2 (2, 1) < 0)
-+ trace_start_error_with_name (("dup2"));
-+ if (write (2, "stdin/stdout redirected\n",
-+ sizeof ("stdin/stdout redirected\n") - 1) < 0)
-+ {
-+ /* Errors ignored. */
-+ }
-+ }
-+}
-+
-+/* Implement the create_inferior method of the target_ops vector. */
-+
-+int
-+netbsd_process_target::create_inferior (const char *program,
-+ const std::vector<char *> &program_args)
-+{
-+ std::string str_program_args = construct_inferior_arguments (program_args);
-+
-+ pid_t pid = fork_inferior (program, str_program_args.c_str (),
-+ get_environ ()->envp (), netbsd_ptrace_fun,
-+ nullptr, nullptr, nullptr, nullptr);
-+
-+ netbsd_add_process (pid, 0);
-+
-+ post_fork_inferior (pid, program);
-+
-+ return pid;
-+}
-+
-+/* Implement the post_create_inferior target_ops method. */
-+
-+void
-+netbsd_process_target::post_create_inferior ()
-+{
-+ pid_t pid = current_process ()->pid;
-+ netbsd_nat::enable_proc_events (pid);
-+}
-+
-+/* Implement the attach target_ops method. */
-+
-+int
-+netbsd_process_target::attach (unsigned long pid)
-+{
-+ /* Unimplemented. */
-+ return -1;
-+}
-+
-+/* Returns true if GDB is interested in any child syscalls. */
-+
-+static bool
-+gdb_catching_syscalls_p (pid_t pid)
-+{
-+ struct process_info *proc = find_process_pid (pid);
-+ return !proc->syscalls_to_catch.empty ();
-+}
-+
-+/* Implement the resume target_ops method. */
-+
-+void
-+netbsd_process_target::resume (struct thread_resume *resume_info, size_t n)
-+{
-+ ptid_t resume_ptid = resume_info[0].thread;
-+ const int signal = resume_info[0].sig;
-+ const bool step = resume_info[0].kind == resume_step;
-+
-+ if (resume_ptid == minus_one_ptid)
-+ resume_ptid = ptid_of (current_thread);
-+
-+ const pid_t pid = resume_ptid.pid ();
-+ const lwpid_t lwp = resume_ptid.lwp ();
-+ regcache_invalidate_pid (pid);
-+
-+ auto fn
-+ = [&] (ptid_t ptid)
-+ {
-+ if (step)
-+ {
-+ if (ptid.lwp () == lwp || n != 1)
-+ {
-+ if (ptrace (PT_SETSTEP, pid, NULL, ptid.lwp ()) == -1)
-+ perror_with_name (("ptrace"));
-+ if (ptrace (PT_RESUME, pid, NULL, ptid.lwp ()) == -1)
-+ perror_with_name (("ptrace"));
-+ }
-+ else
-+ {
-+ if (ptrace (PT_CLEARSTEP, pid, NULL, ptid.lwp ()) == -1)
-+ perror_with_name (("ptrace"));
-+ if (ptrace (PT_SUSPEND, pid, NULL, ptid.lwp ()) == -1)
-+ perror_with_name (("ptrace"));
-+ }
-+ }
-+ else
-+ {
-+ if (ptrace (PT_CLEARSTEP, pid, NULL, ptid.lwp ()) == -1)
-+ perror_with_name (("ptrace"));
-+ if (ptrace (PT_RESUME, pid, NULL, ptid.lwp ()) == -1)
-+ perror_with_name (("ptrace"));
-+ }
-+ };
-+
-+ netbsd_nat::for_each_thread (pid, fn);
-+
-+ int request = gdb_catching_syscalls_p (pid) ? PT_CONTINUE : PT_SYSCALL;
-+
-+ errno = 0;
-+ ptrace (request, pid, (void *)1, signal);
-+ if (errno)
-+ perror_with_name (("ptrace"));
-+}
-+
-+/* Returns true if GDB is interested in the reported SYSNO syscall. */
-+
-+static bool
-+netbsd_catch_this_syscall (int sysno)
-+{
-+ struct process_info *proc = current_process ();
-+
-+ if (proc->syscalls_to_catch.empty ())
-+ return false;
-+
-+ if (proc->syscalls_to_catch[0] == ANY_SYSCALL)
-+ return true;
-+
-+ for (int iter : proc->syscalls_to_catch)
-+ if (iter == sysno)
-+ return true;
-+
-+ return false;
-+}
-+
-+/* Helper function for child_wait and the derivatives of child_wait.
-+ HOSTSTATUS is the waitstatus from wait() or the equivalent; store our
-+ translation of that in OURSTATUS. */
-+
-+static void
-+netbsd_store_waitstatus (struct target_waitstatus *ourstatus, int hoststatus)
-+{
-+ if (WIFEXITED (hoststatus))
-+ {
-+ ourstatus->kind = TARGET_WAITKIND_EXITED;
-+ ourstatus->value.integer = WEXITSTATUS (hoststatus);
-+ }
-+ else if (!WIFSTOPPED (hoststatus))
-+ {
-+ ourstatus->kind = TARGET_WAITKIND_SIGNALLED;
-+ ourstatus->value.sig = gdb_signal_from_host (WTERMSIG (hoststatus));
-+ }
-+ else
-+ {
-+ ourstatus->kind = TARGET_WAITKIND_STOPPED;
-+ ourstatus->value.sig = gdb_signal_from_host (WSTOPSIG (hoststatus));
-+ }
-+}
-+
-+/* Implement a safe wrapper around waitpid(). */
-+
-+static pid_t
-+netbsd_waitpid (ptid_t ptid, struct target_waitstatus *ourstatus, int options)
-+{
-+ int status;
-+
-+ pid_t pid
-+ = gdb::handle_eintr<int> (-1, ::waitpid, ptid.pid (), &status, options);
-+
-+ if (pid == -1)
-+ perror_with_name (_("Child process unexpectedly missing"));
-+
-+ netbsd_store_waitstatus (ourstatus, status);
-+ return pid;
-+}
-+
-+
-+/* Implement the wait target_ops method.
-+
-+ Wait for the child specified by PTID to do something. Return the
-+ process ID of the child, or MINUS_ONE_PTID in case of error; store
-+ the status in *OURSTATUS. */
-+
-+static ptid_t
-+netbsd_wait (ptid_t ptid, struct target_waitstatus *ourstatus,
-+ int target_options)
-+{
-+ pid_t pid = netbsd_waitpid (ptid, ourstatus, target_options);
-+ ptid_t wptid = ptid_t (pid);
-+
-+ if (pid == 0)
-+ {
-+ gdb_assert (target_options & TARGET_WNOHANG);
-+ ourstatus->kind = TARGET_WAITKIND_IGNORE;
-+ return null_ptid;
-+ }
-+
-+ gdb_assert (pid != -1);
-+
-+ /* If the child stopped, keep investigating its status. */
-+ if (ourstatus->kind != TARGET_WAITKIND_STOPPED)
-+ return wptid;
-+
-+ /* Extract the event and thread that received a signal. */
-+ ptrace_siginfo_t psi;
-+ if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1)
-+ perror_with_name (("ptrace"));
-+
-+ /* Pick child's siginfo_t. */
-+ siginfo_t *si = &psi.psi_siginfo;
-+
-+ lwpid_t lwp = psi.psi_lwpid;
-+
-+ int signo = si->si_signo;
-+ const int code = si->si_code;
-+
-+ /* Construct PTID with a specified thread that received the event.
-+ If a signal was targeted to the whole process, lwp is 0. */
-+ wptid = ptid_t (pid, lwp, 0);
-+
-+ /* Bail out on non-debugger oriented signals. */
-+ if (signo != SIGTRAP)
-+ return wptid;
-+
-+ /* Stop examining non-debugger oriented SIGTRAP codes. */
-+ if (code <= SI_USER || code == SI_NOINFO)
-+ return wptid;
-+
-+ /* Process state for threading events. */
-+ ptrace_state_t pst = {};
-+ if (code == TRAP_LWP)
-+ if (ptrace (PT_GET_PROCESS_STATE, pid, &pst, sizeof (pst)) == -1)
-+ perror_with_name (("ptrace"));
-+
-+ if (code == TRAP_LWP && pst.pe_report_event == PTRACE_LWP_EXIT)
-+ {
-+ /* If GDB attaches to a multi-threaded process, exiting
-+ threads might be skipped during post_attach that
-+ have not yet reported their PTRACE_LWP_EXIT event.
-+ Ignore exited events for an unknown LWP. */
-+ thread_info *thr = find_thread_ptid (wptid);
-+ if (thr == nullptr)
-+ ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
-+ else
-+ {
-+ ourstatus->kind = TARGET_WAITKIND_THREAD_EXITED;
-+ /* NetBSD does not store an LWP exit status. */
-+ ourstatus->value.integer = 0;
-+
-+ remove_thread (thr);
-+ }
-+ return wptid;
-+ }
-+
-+ if (find_thread_ptid (ptid_t (pid)))
-+ current_thread = find_thread_ptid (wptid);
-+
-+ if (code == TRAP_LWP && pst.pe_report_event == PTRACE_LWP_CREATE)
-+ {
-+ /* If GDB attaches to a multi-threaded process, newborn
-+ threads might be added by nbsd_add_threads that have
-+ not yet reported their PTRACE_LWP_CREATE event. Ignore
-+ born events for an already-known LWP. */
-+ if (find_thread_ptid (wptid))
-+ ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
-+ else
-+ {
-+ add_thread (wptid, NULL);
-+ ourstatus->kind = TARGET_WAITKIND_THREAD_CREATED;
-+ }
-+ return wptid;
-+ }
-+
-+ if (code == TRAP_EXEC)
-+ {
-+ ourstatus->kind = TARGET_WAITKIND_EXECD;
-+ ourstatus->value.execd_pathname
-+ = xstrdup (netbsd_nat::pid_to_exec_file (pid));
-+ return wptid;
-+ }
-+
-+ if (code == TRAP_TRACE)
-+ return wptid;
-+
-+ if (code == TRAP_SCE || code == TRAP_SCX)
-+ {
-+ int sysnum = si->si_sysnum;
-+
-+ if (!netbsd_catch_this_syscall(sysnum))
-+ {
-+ /* If the core isn't interested in this event, ignore it. */
-+ ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
-+ return wptid;
-+ }
-+
-+ ourstatus->kind
-+ = ((code == TRAP_SCE) ? TARGET_WAITKIND_SYSCALL_ENTRY :
-+ TARGET_WAITKIND_SYSCALL_RETURN);
-+ ourstatus->value.syscall_number = sysnum;
-+ return wptid;
-+ }
-+
-+ if (code == TRAP_BRKPT)
-+ {
-+#ifdef PTRACE_BREAKPOINT_ADJ
-+ CORE_ADDR pc;
-+ struct reg r;
-+ ptrace (PT_GETREGS, pid, &r, psi.psi_lwpid);
-+ pc = PTRACE_REG_PC (&r);
-+ PTRACE_REG_SET_PC (&r, pc - PTRACE_BREAKPOINT_ADJ);
-+ ptrace (PT_SETREGS, pid, &r, psi.psi_lwpid);
-+#endif
-+ return wptid;
-+ }
-+
-+ /* Unclassified SIGTRAP event. */
-+ ourstatus->kind = TARGET_WAITKIND_SPURIOUS;
-+ return wptid;
-+}
-+
-+/* Implement the wait target_ops method. */
-+
-+ptid_t
-+netbsd_process_target::wait (ptid_t ptid, struct target_waitstatus *ourstatus,
-+ int target_options)
-+{
-+ while (true)
-+ {
-+ ptid_t wptid = netbsd_wait (ptid, ourstatus, target_options);
-+
-+ /* Register thread in the gdbcore if a thread was not reported earlier.
-+ This is required after ::create_inferior, when the gdbcore does not
-+ know about the first internal thread.
-+ This may also happen on attach, when an event is registered on a thread
-+ that was not fully initialized during the attach stage. */
-+ if (wptid.lwp () != 0 && !find_thread_ptid (wptid)
-+ && ourstatus->kind != TARGET_WAITKIND_THREAD_EXITED)
-+ add_thread (wptid, nullptr);
-+
-+ switch (ourstatus->kind)
-+ {
-+ case TARGET_WAITKIND_EXITED:
-+ case TARGET_WAITKIND_STOPPED:
-+ case TARGET_WAITKIND_SIGNALLED:
-+ case TARGET_WAITKIND_FORKED:
-+ case TARGET_WAITKIND_VFORKED:
-+ case TARGET_WAITKIND_EXECD:
-+ case TARGET_WAITKIND_VFORK_DONE:
-+ case TARGET_WAITKIND_SYSCALL_ENTRY:
-+ case TARGET_WAITKIND_SYSCALL_RETURN:
-+ /* Pass the result to the generic code. */
-+ return wptid;
-+ case TARGET_WAITKIND_THREAD_CREATED:
-+ case TARGET_WAITKIND_THREAD_EXITED:
-+ /* The core needlessly stops on these events. */
-+ /* FALLTHROUGH */
-+ case TARGET_WAITKIND_SPURIOUS:
-+ /* Spurious events are unhandled by the gdbserver core. */
-+ if (ptrace (PT_CONTINUE, current_process ()->pid, (void *) 1, 0)
-+ == -1)
-+ perror_with_name (("ptrace"));
-+ break;
-+ default:
-+ error (("Unknown stopped status"));
-+ }
-+ }
-+}
-+
-+/* Implement the kill target_ops method. */
-+
-+int
-+netbsd_process_target::kill (process_info *process)
-+{
-+ pid_t pid = process->pid;
-+ if (ptrace (PT_KILL, pid, nullptr, 0) == -1)
-+ return -1;
-+
-+ int status;
-+ if (gdb::handle_eintr<int> (-1, ::waitpid, pid, &status, 0) == -1)
-+ return -1;
-+ mourn (process);
-+ return 0;
-+}
-+
-+/* Implement the detach target_ops method. */
-+
-+int
-+netbsd_process_target::detach (process_info *process)
-+{
-+ pid_t pid = process->pid;
-+
-+ ptrace (PT_DETACH, pid, (void *) 1, 0);
-+ mourn (process);
-+ return 0;
-+}
-+
-+/* Implement the mourn target_ops method. */
-+
-+void
-+netbsd_process_target::mourn (struct process_info *proc)
-+{
-+ for_each_thread (proc->pid, remove_thread);
-+
-+ remove_process (proc);
-+}
-+
-+/* Implement the join target_ops method. */
-+
-+void
-+netbsd_process_target::join (int pid)
-+{
-+ /* The PT_DETACH is sufficient to detach from the process.
-+ So no need to do anything extra. */
-+}
-+
-+/* Implement the thread_alive target_ops method. */
-+
-+bool
-+netbsd_process_target::thread_alive (ptid_t ptid)
-+{
-+ return netbsd_nat::thread_alive (ptid);
-+}
-+
-+/* Implement the fetch_registers target_ops method. */
-+
-+void
-+netbsd_process_target::fetch_registers (struct regcache *regcache, int regno)
-+{
-+ struct netbsd_regset_info *regset = netbsd_target_regsets;
-+ ptid_t inferior_ptid = ptid_of (current_thread);
-+
-+ while (regset->size >= 0)
-+ {
-+ std::vector<char> buf;
-+ buf.resize (regset->size);
-+ int res = ptrace (regset->get_request, inferior_ptid.pid (), buf.data (),
-+ inferior_ptid.lwp ());
-+ if (res == -1)
-+ perror_with_name (("ptrace"));
-+ regset->store_function (regcache, buf.data ());
-+ regset++;
-+ }
-+}
-+
-+/* Implement the store_registers target_ops method. */
-+
-+void
-+netbsd_process_target::store_registers (struct regcache *regcache, int regno)
-+{
-+ struct netbsd_regset_info *regset = netbsd_target_regsets;
-+ ptid_t inferior_ptid = ptid_of (current_thread);
-+
-+ while (regset->size >= 0)
-+ {
-+ std::vector<char> buf;
-+ buf.resize (regset->size);
-+ int res = ptrace (regset->get_request, inferior_ptid.pid (), buf.data (),
-+ inferior_ptid.lwp ());
-+ if (res == -1)
-+ perror_with_name (("ptrace"));
-+
-+ /* Then overlay our cached registers on that. */
-+ regset->fill_function (regcache, buf.data ());
-+ /* Only now do we write the register set. */
-+ res = ptrace (regset->set_request, inferior_ptid.pid (), buf. data (),
-+ inferior_ptid.lwp ());
-+ if (res == -1)
-+ perror_with_name (("ptrace"));
-+ regset++;
-+ }
-+}
-+
-+/* Implement the read_memory target_ops method. */
-+
-+int
-+netbsd_process_target::read_memory (CORE_ADDR memaddr, unsigned char *myaddr,
-+ int size)
-+{
-+ struct ptrace_io_desc io;
-+ io.piod_op = PIOD_READ_D;
-+ io.piod_len = size;
-+
-+ pid_t pid = current_process ()->pid;
-+
-+ int bytes_read = 0;
-+
-+ if (size == 0)
-+ {
-+ /* Zero length write always succeeds. */
-+ return 0;
-+ }
-+ do
-+ {
-+ io.piod_offs = (void *)(memaddr + bytes_read);
-+ io.piod_addr = myaddr + bytes_read;
-+
-+ int rv = ptrace (PT_IO, pid, &io, 0);
-+ if (rv == -1)
-+ return errno;
-+ if (io.piod_len == 0)
-+ return 0;
-+
-+ bytes_read += io.piod_len;
-+ io.piod_len = size - bytes_read;
-+ }
-+ while (bytes_read < size);
-+
-+ return 0;
-+}
-+
-+/* Implement the write_memory target_ops method. */
-+
-+int
-+netbsd_process_target::write_memory (CORE_ADDR memaddr,
-+ const unsigned char *myaddr, int size)
-+{
-+ struct ptrace_io_desc io;
-+ io.piod_op = PIOD_WRITE_D;
-+ io.piod_len = size;
-+
-+ pid_t pid = current_process ()->pid;
-+
-+ int bytes_written = 0;
-+
-+ if (size == 0)
-+ {
-+ /* Zero length write always succeeds. */
-+ return 0;
-+ }
-+
-+ do
-+ {
-+ io.piod_addr = (void *)(myaddr + bytes_written);
-+ io.piod_offs = (void *)(memaddr + bytes_written);
-+
-+ int rv = ptrace (PT_IO, pid, &io, 0);
-+ if (rv == -1)
-+ return errno;
-+ if (io.piod_len == 0)
-+ return 0;
-+
-+ bytes_written += io.piod_len;
-+ io.piod_len = size - bytes_written;
-+ }
-+ while (bytes_written < size);
-+
-+ return 0;
-+}
-+
-+/* Implement the request_interrupt target_ops method. */
-+
-+void
-+netbsd_process_target::request_interrupt ()
-+{
-+ ptid_t inferior_ptid = ptid_of (get_first_thread ());
-+
-+ ::kill (inferior_ptid.pid(), SIGINT);
-+}
-+
-+/* Read the AUX Vector for the specified PID, wrapping the ptrace(2) call
-+ with the PIOD_READ_AUXV operation and using the PT_IO standard input
-+ and output arguments. */
-+
-+static size_t
-+netbsd_read_auxv(pid_t pid, void *offs, void *addr, size_t len)
-+{
-+ struct ptrace_io_desc pio;
-+
-+ pio.piod_op = PIOD_READ_AUXV;
-+ pio.piod_offs = offs;
-+ pio.piod_addr = addr;
-+ pio.piod_len = len;
-+
-+ if (ptrace (PT_IO, pid, &pio, 0) == -1)
-+ perror_with_name (("ptrace"));
-+
-+ return pio.piod_len;
-+}
-+
-+/* Copy LEN bytes from inferior's auxiliary vector starting at OFFSET
-+ to debugger memory starting at MYADDR. */
-+
-+int
-+netbsd_process_target::read_auxv (CORE_ADDR offset,
-+ unsigned char *myaddr, unsigned int len)
-+{
-+ pid_t pid = pid_of (current_thread);
-+
-+ return netbsd_read_auxv (pid, (void *) (intptr_t) offset, myaddr, len);
-+}
-+
-+bool
-+netbsd_process_target::supports_z_point_type (char z_type)
-+{
-+ switch (z_type)
-+ {
-+ case Z_PACKET_SW_BP:
-+ return true;
-+ case Z_PACKET_HW_BP:
-+ case Z_PACKET_WRITE_WP:
-+ case Z_PACKET_READ_WP:
-+ case Z_PACKET_ACCESS_WP:
-+ default:
-+ return false; /* Not supported. */
-+ }
-+}
-+
-+/* Insert {break/watch}point at address ADDR. SIZE is not used. */
-+
-+int
-+netbsd_process_target::insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-+ int size, struct raw_breakpoint *bp)
-+{
-+ switch (type)
-+ {
-+ case raw_bkpt_type_sw:
-+ return insert_memory_breakpoint (bp);
-+ case raw_bkpt_type_hw:
-+ case raw_bkpt_type_write_wp:
-+ case raw_bkpt_type_read_wp:
-+ case raw_bkpt_type_access_wp:
-+ default:
-+ return 1; /* Not supported. */
-+ }
-+}
-+
-+/* Remove {break/watch}point at address ADDR. SIZE is not used. */
-+
-+int
-+netbsd_process_target::remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-+ int size, struct raw_breakpoint *bp)
-+{
-+ switch (type)
-+ {
-+ case raw_bkpt_type_sw:
-+ return remove_memory_breakpoint (bp);
-+ case raw_bkpt_type_hw:
-+ case raw_bkpt_type_write_wp:
-+ case raw_bkpt_type_read_wp:
-+ case raw_bkpt_type_access_wp:
-+ default:
-+ return 1; /* Not supported. */
-+ }
-+}
-+
-+/* Implement the stopped_by_sw_breakpoint target_ops method. */
-+
-+bool
-+netbsd_process_target::stopped_by_sw_breakpoint ()
-+{
-+ ptrace_siginfo_t psi;
-+ pid_t pid = current_process ()->pid;
-+
-+ if (ptrace (PT_GET_SIGINFO, pid, &psi, sizeof (psi)) == -1)
-+ perror_with_name (("ptrace"));
-+
-+ return psi.psi_siginfo.si_signo == SIGTRAP &&
-+ psi.psi_siginfo.si_code == TRAP_BRKPT;
-+}
-+
-+/* Implement the supports_stopped_by_sw_breakpoint target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_stopped_by_sw_breakpoint ()
-+{
-+ return true;
-+}
-+
-+/* Implement the supports_qxfer_siginfo target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_qxfer_siginfo ()
-+{
-+ return true;
-+}
-+
-+/* Implement the qxfer_siginfo target_ops method. */
-+
-+int
-+netbsd_process_target::qxfer_siginfo (const char *annex, unsigned char *readbuf,
-+ unsigned const char *writebuf,
-+ CORE_ADDR offset, int len)
-+{
-+ if (current_thread == nullptr)
-+ return -1;
-+
-+ pid_t pid = current_process ()->pid;
-+
-+ return netbsd_nat::qxfer_siginfo(pid, annex, readbuf, writebuf, offset, len);
-+}
-+
-+/* Implement the supports_non_stop target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_non_stop ()
-+{
-+ return false;
-+}
-+
-+/* Implement the supports_multi_process target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_multi_process ()
-+{
-+ return true;
-+}
-+
-+/* Check if fork events are supported. */
-+
-+bool
-+netbsd_process_target::supports_fork_events ()
-+{
-+ return false;
-+}
-+
-+/* Check if vfork events are supported. */
-+
-+bool
-+netbsd_process_target::supports_vfork_events ()
-+{
-+ return false;
-+}
-+
-+/* Check if exec events are supported. */
-+
-+bool
-+netbsd_process_target::supports_exec_events ()
-+{
-+ return true;
-+}
-+
-+/* Implement the supports_disable_randomization target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_disable_randomization ()
-+{
-+ return false;
-+}
-+
-+/* Extract &phdr and num_phdr in the inferior. Return 0 on success. */
-+
-+template <typename T>
-+int get_phdr_phnum_from_proc_auxv (const pid_t pid,
-+ CORE_ADDR *phdr_memaddr, int *num_phdr)
-+{
-+ typedef typename std::conditional<sizeof(T) == sizeof(int64_t),
-+ Aux64Info, Aux32Info>::type auxv_type;
-+ const size_t auxv_size = sizeof (auxv_type);
-+ const size_t auxv_buf_size = 128 * sizeof (auxv_type);
-+
-+ std::vector<char> auxv_buf;
-+ auxv_buf.resize (auxv_buf_size);
-+
-+ netbsd_read_auxv (pid, nullptr, auxv_buf.data (), auxv_buf_size);
-+
-+ *phdr_memaddr = 0;
-+ *num_phdr = 0;
-+
-+ for (char *buf = auxv_buf.data ();
-+ buf < (auxv_buf.data () + auxv_buf_size);
-+ buf += auxv_size)
-+ {
-+ auxv_type *const aux = (auxv_type *) buf;
-+
-+ switch (aux->a_type)
-+ {
-+ case AT_PHDR:
-+ *phdr_memaddr = aux->a_v;
-+ break;
-+ case AT_PHNUM:
-+ *num_phdr = aux->a_v;
-+ break;
-+ }
-+
-+ if (*phdr_memaddr != 0 && *num_phdr != 0)
-+ break;
-+ }
-+
-+ if (*phdr_memaddr == 0 || *num_phdr == 0)
-+ {
-+ warning ("Unexpected missing AT_PHDR and/or AT_PHNUM: "
-+ "phdr_memaddr = %s, phdr_num = %d",
-+ core_addr_to_string (*phdr_memaddr), *num_phdr);
-+ return 2;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Return &_DYNAMIC (via PT_DYNAMIC) in the inferior, or 0 if not present. */
-+
-+template <typename T>
-+static CORE_ADDR
-+get_dynamic (netbsd_process_target *target, const pid_t pid)
-+{
-+ typedef typename std::conditional<sizeof(T) == sizeof(int64_t),
-+ Elf64_Phdr, Elf32_Phdr>::type phdr_type;
-+ const int phdr_size = sizeof (phdr_type);
-+
-+ CORE_ADDR phdr_memaddr;
-+ int num_phdr;
-+ if (get_phdr_phnum_from_proc_auxv<T> (pid, &phdr_memaddr, &num_phdr))
-+ return 0;
-+
-+ std::vector<unsigned char> phdr_buf;
-+ phdr_buf.resize (num_phdr * phdr_size);
-+
-+ if (target->read_memory (phdr_memaddr, phdr_buf.data (), phdr_buf.size ()))
-+ return 0;
-+
-+ /* Compute relocation: it is expected to be 0 for "regular" executables,
-+ non-zero for PIE ones. */
-+ CORE_ADDR relocation = -1;
-+ for (int i = 0; relocation == -1 && i < num_phdr; i++)
-+ {
-+ phdr_type *const p = (phdr_type *) (phdr_buf.data() + i * phdr_size);
-+
-+ if (p->p_type == PT_PHDR)
-+ relocation = phdr_memaddr - p->p_vaddr;
-+ }
-+
-+ if (relocation == -1)
-+ {
-+ /* PT_PHDR is optional, but necessary for PIE in general. Fortunately
-+ any real world executables, including PIE executables, have always
-+ PT_PHDR present. PT_PHDR is not present in some shared libraries or
-+ in fpc (Free Pascal 2.4) binaries but neither of those have a need for
-+ or present DT_DEBUG anyway (fpc binaries are statically linked).
-+
-+ Therefore if there exists DT_DEBUG there is always also PT_PHDR.
-+
-+ GDB could find RELOCATION also from AT_ENTRY - e_entry. */
-+
-+ return 0;
-+ }
-+
-+ for (int i = 0; i < num_phdr; i++)
-+ {
-+ phdr_type *const p = (phdr_type *) (phdr_buf.data () + i * phdr_size);
-+
-+ if (p->p_type == PT_DYNAMIC)
-+ return p->p_vaddr + relocation;
-+ }
-+
-+ return 0;
-+}
-+
-+/* Return &_r_debug in the inferior, or -1 if not present. Return value
-+ can be 0 if the inferior does not yet have the library list initialized.
-+ We look for DT_MIPS_RLD_MAP first. MIPS executables use this instead of
-+ DT_DEBUG, although they sometimes contain an unused DT_DEBUG entry too. */
-+
-+template <typename T>
-+static CORE_ADDR
-+get_r_debug (netbsd_process_target *target, const int pid)
-+{
-+ typedef typename std::conditional<sizeof(T) == sizeof(int64_t),
-+ Elf64_Dyn, Elf32_Dyn>::type dyn_type;
-+ const int dyn_size = sizeof (dyn_type);
-+ unsigned char buf[sizeof (dyn_type)]; /* The larger of the two. */
-+ CORE_ADDR map = -1;
-+
-+ CORE_ADDR dynamic_memaddr = get_dynamic<T> (target, pid);
-+ if (dynamic_memaddr == 0)
-+ return map;
-+
-+ while (target->read_memory (dynamic_memaddr, buf, dyn_size) == 0)
-+ {
-+ dyn_type *const dyn = (dyn_type *) buf;
-+#if defined DT_MIPS_RLD_MAP
-+ union
-+ {
-+ T map;
-+ unsigned char buf[sizeof (T)];
-+ }
-+ rld_map;
-+
-+ if (dyn->d_tag == DT_MIPS_RLD_MAP)
-+ {
-+ if (read_memory (dyn->d_un.d_val,
-+ rld_map.buf, sizeof (rld_map.buf)) == 0)
-+ return rld_map.map;
-+ else
-+ break;
-+ }
-+#endif /* DT_MIPS_RLD_MAP */
-+
-+ if (dyn->d_tag == DT_DEBUG && map == -1)
-+ map = dyn->d_un.d_val;
-+
-+ if (dyn->d_tag == DT_NULL)
-+ break;
-+
-+ dynamic_memaddr += dyn_size;
-+ }
-+
-+ return map;
-+}
-+
-+/* Read one pointer from MEMADDR in the inferior. */
-+
-+static int
-+read_one_ptr (netbsd_process_target *target, CORE_ADDR memaddr, CORE_ADDR *ptr,
-+ int ptr_size)
-+{
-+ /* Go through a union so this works on either big or little endian
-+ hosts, when the inferior's pointer size is smaller than the size
-+ of CORE_ADDR. It is assumed the inferior's endianness is the
-+ same of the superior's. */
-+
-+ union
-+ {
-+ CORE_ADDR core_addr;
-+ unsigned int ui;
-+ unsigned char uc;
-+ } addr;
-+
-+ int ret = target->read_memory (memaddr, &addr.uc, ptr_size);
-+ if (ret == 0)
-+ {
-+ if (ptr_size == sizeof (CORE_ADDR))
-+ *ptr = addr.core_addr;
-+ else if (ptr_size == sizeof (unsigned int))
-+ *ptr = addr.ui;
-+ else
-+ gdb_assert_not_reached ("unhandled pointer size");
-+ }
-+ return ret;
-+}
-+
-+/* Construct qXfer:libraries-svr4:read reply. */
-+
-+template <typename T>
-+int
-+netbsd_qxfer_libraries_svr4 (netbsd_process_target *target,
-+ const pid_t pid, const char *annex,
-+ unsigned char *readbuf,
-+ unsigned const char *writebuf,
-+ CORE_ADDR offset, int len)
-+{
-+ struct link_map_offsets
-+ {
-+ /* Offset and size of r_debug.r_version. */
-+ int r_version_offset;
-+
-+ /* Offset and size of r_debug.r_map. */
-+ int r_map_offset;
-+
-+ /* Offset to l_addr field in struct link_map. */
-+ int l_addr_offset;
-+
-+ /* Offset to l_name field in struct link_map. */
-+ int l_name_offset;
-+
-+ /* Offset to l_ld field in struct link_map. */
-+ int l_ld_offset;
-+
-+ /* Offset to l_next field in struct link_map. */
-+ int l_next_offset;
-+
-+ /* Offset to l_prev field in struct link_map. */
-+ int l_prev_offset;
-+ };
-+
-+ static const struct link_map_offsets lmo_32bit_offsets =
-+ {
-+ 0, /* r_version offset. */
-+ 4, /* r_debug.r_map offset. */
-+ 0, /* l_addr offset in link_map. */
-+ 4, /* l_name offset in link_map. */
-+ 8, /* l_ld offset in link_map. */
-+ 12, /* l_next offset in link_map. */
-+ 16 /* l_prev offset in link_map. */
-+ };
-+
-+ static const struct link_map_offsets lmo_64bit_offsets =
-+ {
-+ 0, /* r_version offset. */
-+ 8, /* r_debug.r_map offset. */
-+ 0, /* l_addr offset in link_map. */
-+ 8, /* l_name offset in link_map. */
-+ 16, /* l_ld offset in link_map. */
-+ 24, /* l_next offset in link_map. */
-+ 32 /* l_prev offset in link_map. */
-+ };
-+
-+ CORE_ADDR lm_addr = 0, lm_prev = 0;
-+ CORE_ADDR l_name, l_addr, l_ld, l_next, l_prev;
-+ int header_done = 0;
-+
-+ const struct link_map_offsets *lmo
-+ = ((sizeof (T) == sizeof (int64_t))
-+ ? &lmo_64bit_offsets : &lmo_32bit_offsets);
-+ int ptr_size = sizeof (T);
-+
-+ while (annex[0] != '\0')
-+ {
-+ const char *sep = strchr (annex, '=');
-+ if (sep == nullptr)
-+ break;
-+
-+ int name_len = sep - annex;
-+ CORE_ADDR *addrp;
-+ if (name_len == 5 && startswith (annex, "start"))
-+ addrp = &lm_addr;
-+ else if (name_len == 4 && startswith (annex, "prev"))
-+ addrp = &lm_prev;
-+ else
-+ {
-+ annex = strchr (sep, ';');
-+ if (annex == nullptr)
-+ break;
-+ annex++;
-+ continue;
-+ }
-+
-+ annex = decode_address_to_semicolon (addrp, sep + 1);
-+ }
-+
-+ if (lm_addr == 0)
-+ {
-+ CORE_ADDR r_debug = get_r_debug<T> (target, pid);
-+
-+ /* We failed to find DT_DEBUG. Such situation will not change
-+ for this inferior - do not retry it. Report it to GDB as
-+ E01, see for the reasons at the GDB solib-svr4.c side. */
-+ if (r_debug == (CORE_ADDR) -1)
-+ return -1;
-+
-+ if (r_debug != 0)
-+ {
-+ CORE_ADDR map_offset = r_debug + lmo->r_map_offset;
-+ if (read_one_ptr (target, map_offset, &lm_addr, ptr_size) != 0)
-+ warning ("unable to read r_map from %s",
-+ core_addr_to_string (map_offset));
-+ }
-+ }
-+
-+ std::string document = "<library-list-svr4 version=\"1.0\"";
-+
-+ while (lm_addr
-+ && read_one_ptr (target, lm_addr + lmo->l_name_offset,
-+ &l_name, ptr_size) == 0
-+ && read_one_ptr (target, lm_addr + lmo->l_addr_offset,
-+ &l_addr, ptr_size) == 0
-+ && read_one_ptr (target, lm_addr + lmo->l_ld_offset,
-+ &l_ld, ptr_size) == 0
-+ && read_one_ptr (target, lm_addr + lmo->l_prev_offset,
-+ &l_prev, ptr_size) == 0
-+ && read_one_ptr (target, lm_addr + lmo->l_next_offset,
-+ &l_next, ptr_size) == 0)
-+ {
-+ if (lm_prev != l_prev)
-+ {
-+ warning ("Corrupted shared library list: 0x%lx != 0x%lx",
-+ (long) lm_prev, (long) l_prev);
-+ break;
-+ }
-+
-+ /* Ignore the first entry even if it has valid name as the first entry
-+ corresponds to the main executable. The first entry should not be
-+ skipped if the dynamic loader was loaded late by a static executable
-+ (see solib-svr4.c parameter ignore_first). But in such case the main
-+ executable does not have PT_DYNAMIC present and this function already
-+ exited above due to failed get_r_debug. */
-+ if (lm_prev == 0)
-+ string_appendf (document, " main-lm=\"0x%lx\"",
-+ (unsigned long) lm_addr);
-+ else
-+ {
-+ unsigned char libname[PATH_MAX];
-+
-+ /* Not checking for error because reading may stop before
-+ we've got PATH_MAX worth of characters. */
-+ libname[0] = '\0';
-+ target->read_memory (l_name, libname, sizeof (libname) - 1);
-+ libname[sizeof (libname) - 1] = '\0';
-+ if (libname[0] != '\0')
-+ {
-+ if (!header_done)
-+ {
-+ /* Terminate `<library-list-svr4'. */
-+ document += '>';
-+ header_done = 1;
-+ }
-+
-+ string_appendf (document, "<library name=\"");
-+ xml_escape_text_append (&document, (char *) libname);
-+ string_appendf (document, "\" lm=\"0x%lx\" "
-+ "l_addr=\"0x%lx\" l_ld=\"0x%lx\"/>",
-+ (unsigned long) lm_addr, (unsigned long) l_addr,
-+ (unsigned long) l_ld);
-+ }
-+ }
-+
-+ lm_prev = lm_addr;
-+ lm_addr = l_next;
-+ }
-+
-+ if (!header_done)
-+ {
-+ /* Empty list; terminate `<library-list-svr4'. */
-+ document += "/>";
-+ }
-+ else
-+ document += "</library-list-svr4>";
-+
-+ int document_len = document.length ();
-+ if (offset < document_len)
-+ document_len -= offset;
-+ else
-+ document_len = 0;
-+ if (len > document_len)
-+ len = document_len;
-+
-+ memcpy (readbuf, document.data () + offset, len);
-+
-+ return len;
-+}
-+
-+/* Return true if FILE is a 64-bit ELF file,
-+ false if the file is not a 64-bit ELF file,
-+ and error if the file is not accessible or doesn't exist. */
-+
-+static bool
-+elf_64_file_p (const char *file)
-+{
-+ int fd = gdb::handle_eintr<int> (-1, ::open, file, O_RDONLY);
-+ if (fd < 0)
-+ perror_with_name (("open"));
-+
-+ Elf64_Ehdr header;
-+ ssize_t ret = gdb::handle_eintr<ssize_t> (-1, ::read, fd, &header, sizeof (header));
-+ if (ret == -1)
-+ perror_with_name (("read"));
-+ gdb::handle_eintr<int> (-1, ::close, fd);
-+ if (ret != sizeof (header))
-+ error ("Cannot read ELF file header: %s", file);
-+
-+ if (header.e_ident[EI_MAG0] != ELFMAG0
-+ || header.e_ident[EI_MAG1] != ELFMAG1
-+ || header.e_ident[EI_MAG2] != ELFMAG2
-+ || header.e_ident[EI_MAG3] != ELFMAG3)
-+ error ("Unrecognized ELF file header: %s", file);
-+
-+ return header.e_ident[EI_CLASS] == ELFCLASS64;
-+}
-+
-+/* Construct qXfer:libraries-svr4:read reply. */
-+
-+int
-+netbsd_process_target::qxfer_libraries_svr4 (const char *annex,
-+ unsigned char *readbuf,
-+ unsigned const char *writebuf,
-+ CORE_ADDR offset, int len)
-+{
-+ if (writebuf != nullptr)
-+ return -2;
-+ if (readbuf == nullptr)
-+ return -1;
-+
-+ struct process_info *proc = current_process ();
-+ pid_t pid = proc->pid;
-+ bool is_elf64 = elf_64_file_p (netbsd_nat::pid_to_exec_file (pid));
-+
-+ if (is_elf64)
-+ return netbsd_qxfer_libraries_svr4<int64_t> (this, pid, annex, readbuf,
-+ writebuf, offset, len);
-+ else
-+ return netbsd_qxfer_libraries_svr4<int32_t> (this, pid, annex, readbuf,
-+ writebuf, offset, len);
-+}
-+
-+/* Implement the supports_qxfer_libraries_svr4 target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_qxfer_libraries_svr4 ()
-+{
-+ return true;
-+}
-+
-+/* Return the name of a file that can be opened to get the symbols for
-+ the child process identified by PID. */
-+
-+char *
-+netbsd_process_target::pid_to_exec_file (pid_t pid)
-+{
-+ return const_cast<char *> (netbsd_nat::pid_to_exec_file (pid));
-+}
-+
-+/* Implementation of the target_ops method "supports_pid_to_exec_file". */
-+
-+bool
-+netbsd_process_target::supports_pid_to_exec_file ()
-+{
-+ return true;
-+}
-+
-+/* Implementation of the target_ops method "supports_hardware_single_step". */
-+bool
-+netbsd_process_target::supports_hardware_single_step ()
-+{
-+ return true;
-+}
-+
-+/* Implementation of the target_ops method "sw_breakpoint_from_kind". */
-+
-+const gdb_byte *
-+netbsd_process_target::sw_breakpoint_from_kind (int kind, int *size)
-+{
-+ static gdb_byte brkpt[PTRACE_BREAKPOINT_SIZE] = {*PTRACE_BREAKPOINT};
-+
-+ *size = PTRACE_BREAKPOINT_SIZE;
-+
-+ return brkpt;
-+}
-+
-+/* Implement the thread_name target_ops method. */
-+
-+const char *
-+netbsd_process_target::thread_name (ptid_t ptid)
-+{
-+ return netbsd_nat::thread_name (ptid);
-+}
-+
-+/* Implement the supports_catch_syscall target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_catch_syscall ()
-+{
-+ return true;
-+}
-+
-+/* Implement the supports_read_auxv target_ops method. */
-+
-+bool
-+netbsd_process_target::supports_read_auxv ()
-+{
-+ return true;
-+}
-+
-+/* The NetBSD target ops object. */
-+
-+static netbsd_process_target the_netbsd_target;
-+
-+void
-+initialize_low ()
-+{
-+ set_target_ops (&the_netbsd_target);
-+ the_low_target.arch_setup ();
-+}
diff --git a/gdb-netbsd/patches/patch-gdbserver_netbsd-low.h b/gdb-netbsd/patches/patch-gdbserver_netbsd-low.h
deleted file mode 100644
index 71f0659260..0000000000
--- a/gdb-netbsd/patches/patch-gdbserver_netbsd-low.h
+++ /dev/null
@@ -1,159 +0,0 @@
-$NetBSD$
-
---- gdbserver/netbsd-low.h.orig 2020-09-08 13:10:47.484369884 +0000
-+++ gdbserver/netbsd-low.h
-@@ -0,0 +1,154 @@
-+/* Copyright (C) 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/>. */
-+
-+#ifndef GDBSERVER_NETBSD_LOW_H
-+#define GDBSERVER_NETBSD_LOW_H
-+
-+struct regcache;
-+struct target_desc;
-+
-+/* Some information relative to a given register set. */
-+
-+struct netbsd_regset_info
-+{
-+ /* The ptrace request needed to get/set registers of this set. */
-+ int get_request, set_request;
-+ /* The size of the register set. */
-+ int size;
-+ /* Fill the buffer BUF from the contents of the given REGCACHE. */
-+ void (*fill_function) (struct regcache *regcache, char *buf);
-+ /* Store the register value in BUF in the given REGCACHE. */
-+ void (*store_function) (struct regcache *regcache, const char *buf);
-+};
-+
-+/* A list of regsets for the target being debugged, terminated by an entry
-+ where the size is negative.
-+
-+ This list should be created by the target-specific code. */
-+
-+extern struct netbsd_regset_info netbsd_target_regsets[];
-+
-+/* The target-specific operations for NetBSD support. */
-+
-+struct netbsd_target_ops
-+{
-+ /* Architecture-specific setup. */
-+ void (*arch_setup) ();
-+};
-+
-+/* Target ops definitions for a NetBSD target. */
-+
-+class netbsd_process_target : public process_stratum_target
-+{
-+public:
-+
-+ int create_inferior (const char *program,
-+ const std::vector<char *> &program_args) override;
-+
-+ void post_create_inferior () override;
-+
-+ int attach (unsigned long pid) override;
-+
-+ int kill (process_info *proc) override;
-+
-+ int detach (process_info *proc) override;
-+
-+ void mourn (process_info *proc) override;
-+
-+ void join (int pid) override;
-+
-+ bool thread_alive (ptid_t pid) override;
-+
-+ void resume (thread_resume *resume_info, size_t n) override;
-+
-+ ptid_t wait (ptid_t ptid, target_waitstatus *status,
-+ int options) override;
-+
-+ void fetch_registers (regcache *regcache, int regno) override;
-+
-+ void store_registers (regcache *regcache, int regno) override;
-+
-+ int read_memory (CORE_ADDR memaddr, unsigned char *myaddr,
-+ int len) override;
-+
-+ int write_memory (CORE_ADDR memaddr, const unsigned char *myaddr,
-+ int len) override;
-+
-+ void request_interrupt () override;
-+
-+ bool supports_read_auxv () override;
-+
-+ int read_auxv (CORE_ADDR offset, unsigned char *myaddr,
-+ unsigned int len) override;
-+
-+ bool supports_hardware_single_step () override;
-+
-+ const gdb_byte *sw_breakpoint_from_kind (int kind, int *size) override;
-+
-+ bool supports_z_point_type (char z_type) override;
-+
-+ int insert_point (enum raw_bkpt_type type, CORE_ADDR addr,
-+ int size, struct raw_breakpoint *bp) override;
-+
-+ int remove_point (enum raw_bkpt_type type, CORE_ADDR addr,
-+ int size, struct raw_breakpoint *bp) override;
-+
-+ bool stopped_by_sw_breakpoint () override;
-+
-+ bool supports_qxfer_siginfo () override;
-+
-+ int qxfer_siginfo (const char *annex, unsigned char *readbuf,
-+ unsigned const char *writebuf, CORE_ADDR offset,
-+ int len) override;
-+
-+ bool supports_stopped_by_sw_breakpoint () override;
-+
-+ bool supports_non_stop () override;
-+
-+ bool supports_multi_process () override;
-+
-+ bool supports_fork_events () override;
-+
-+ bool supports_vfork_events () override;
-+
-+ bool supports_exec_events () override;
-+
-+ bool supports_disable_randomization () override;
-+
-+ bool supports_qxfer_libraries_svr4 () override;
-+
-+ int qxfer_libraries_svr4 (const char*, unsigned char*, const unsigned char*,
-+ CORE_ADDR, int) override;
-+
-+ bool supports_pid_to_exec_file () override;
-+
-+ char *pid_to_exec_file (int pid) override;
-+
-+ const char *thread_name (ptid_t thread) override;
-+
-+ bool supports_catch_syscall () override;
-+};
-+
-+/* The inferior's target description. This is a global because the
-+ NetBSD ports support neither bi-arch nor multi-process. */
-+
-+extern struct netbsd_target_ops the_low_target;
-+
-+/* XXX: multilib */
-+extern const struct target_desc *netbsd_tdesc;
-+
-+#endif /* GDBSERVER_NETBSD_LOW_H */
diff --git a/gdb-netbsd/patches/patch-gdbsupport_ChangeLog b/gdb-netbsd/patches/patch-gdbsupport_ChangeLog
deleted file mode 100644
index 1a45e9cb27..0000000000
--- a/gdb-netbsd/patches/patch-gdbsupport_ChangeLog
+++ /dev/null
@@ -1,12 +0,0 @@
-$NetBSD$
-
---- gdbsupport/ChangeLog.orig 2020-09-03 16:35:18.000000000 +0000
-+++ gdbsupport/ChangeLog
-@@ -1,3 +1,7 @@
-+2020-09-04 Kamil Rytarowski <n54%gmx.com@localhost>
-+
-+ * eintr.h: New file.
-+
- 2020-08-13 Simon Marchi <simon.marchi%polymtl.ca@localhost>
-
- * selftest.h (run_tests): Change parameter to array_view.
diff --git a/gdb-netbsd/patches/patch-gdbsupport_eintr.h b/gdb-netbsd/patches/patch-gdbsupport_eintr.h
deleted file mode 100644
index 1be725a990..0000000000
--- a/gdb-netbsd/patches/patch-gdbsupport_eintr.h
+++ /dev/null
@@ -1,72 +0,0 @@
-$NetBSD$
-
---- gdbsupport/eintr.h.orig 2020-09-08 13:10:47.484579232 +0000
-+++ gdbsupport/eintr.h
-@@ -0,0 +1,67 @@
-+/* Utility for handling interrupted syscalls by signals.
-+
-+ Copyright (C) 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/>. */
-+
-+#ifndef GDBSUPPORT_EINTR_H
-+#define GDBSUPPORT_EINTR_H
-+
-+#include <cerrno>
-+
-+namespace gdb
-+{
-+/* Repeat a system call interrupted with a signal.
-+
-+ A utility for handling interrupted syscalls, which return with error
-+ and set the errno to EINTR. The interrupted syscalls can be repeated,
-+ until successful completion. This utility avoids wrapping code with
-+ manual checks for such errors which are highly repetitive.
-+
-+ For example, with:
-+
-+ ssize_t ret;
-+ do
-+ {
-+ errno = 0;
-+ ret = ::write (pipe[1], "+", 1);
-+ }
-+ while (ret == -1 && errno == EINTR);
-+
-+ You could wrap it by writing the wrapped form:
-+
-+ ssize_t ret = gdb::handle_eintr<ssize_t> (-1, ::write, pipe[1], "+", 1);
-+
-+ The RET typename specifies the return type of the wrapped system call, which
-+ is typically int or ssize_t. The R argument specifies the failure value
-+ indicating the interrupted syscall when calling the F function with
-+ the A... arguments. */
-+
-+template <typename Ret, typename Fun, typename... Args>
-+inline Ret handle_eintr (const Ret &R, const Fun &F, const Args &... A)
-+{
-+ Ret ret;
-+ do
-+ {
-+ errno = 0;
-+ ret = F (A...);
-+ }
-+ while (ret == R && errno == EINTR);
-+ return ret;
-+}
-+}
-+
-+#endif /* GDBSUPPORT_EINTR_H */
Home |
Main Index |
Thread Index |
Old Index