aboutsummaryrefslogtreecommitdiff
path: root/devel/gdb
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2017-07-28 21:20:47 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2017-07-28 21:20:47 +0000
commit2476b30bfe9046144806f00fc322020ded92c06d (patch)
tree8137b44f639d4bfc240853c827c85d22225526f8 /devel/gdb
parent706eb26b03db94ce22a5c5139f1fd5f3f0ab723a (diff)
downloadports-2476b30bfe9046144806f00fc322020ded92c06d.tar.gz
ports-2476b30bfe9046144806f00fc322020ded92c06d.zip
Upgrade to GDB 8.0.
- Commit b5430a3ced fixes parsing of 32-bit MIPS process cores. - kgdb has been ported to 8.0 including renaming the new OSABI constant, using gdb_bfd_openr, new return type of ldirname, and solib_add changed. - GDB 8.0 requires C++11, however the port is marked as requiring C++14 as a workaround for bugs in clang 10.3. - patch-armfbsd is updated for the new OSABI constant names (a.out was removed in 8.0) and new filename convention (arm-fbsd-*) - patch-gdb-amd64-bsd-nat.c (renamed from patch-gdbamd64-bsd-nat.c) is simplified to just store the r_flags value before collecting registers from the register cache rather than a full copy of the entire register set. - patch-gdb-corelow.c has been removed. It isn't really correct and if arm cores still cause core dumps the error is in arm-fbsd-tdep.c. - patch-gdb-i386-fbsd-nat.c renamed to account for rename of patched file. - patch-gdb-x86bsd-nat.c has been removed. The file was renamed, but the stock file also compiled fine for me on i386. PR: 221025 (exp-run for 10.3) Submitted by: luca.pizzamiglio@gmail.com (original version) Reviewed by: luca.pizzamiglio@gmail.com (maintainer) Approved by: brooks Differential Revision: https://reviews.freebsd.org/D11465
Notes
Notes: svn path=/head/; revision=446852
Diffstat (limited to 'devel/gdb')
-rw-r--r--devel/gdb/Makefile12
-rw-r--r--devel/gdb/distinfo6
-rw-r--r--devel/gdb/files/commit-387360daf9680
-rw-r--r--devel/gdb/files/commit-b268007c68191
-rw-r--r--devel/gdb/files/commit-b5430a3ced117
-rw-r--r--devel/gdb/files/extrapatch-kgdb230
-rw-r--r--devel/gdb/files/kgdb/amd64fbsd-kern.c2
-rw-r--r--devel/gdb/files/kgdb/fbsd-kld.c46
-rw-r--r--devel/gdb/files/kgdb/fbsd-kthr.c2
-rw-r--r--devel/gdb/files/kgdb/fbsd-kvm.c6
-rw-r--r--devel/gdb/files/kgdb/i386fbsd-kern.c2
-rw-r--r--devel/gdb/files/kgdb/kgdb.h2
-rw-r--r--devel/gdb/files/kgdb/mipsfbsd-kern.c4
-rw-r--r--devel/gdb/files/kgdb/ppcfbsd-kern.c8
-rw-r--r--devel/gdb/files/kgdb/sparc64fbsd-kern.c8
-rw-r--r--devel/gdb/files/patch-armfbsd54
-rw-r--r--devel/gdb/files/patch-fixes13
-rw-r--r--devel/gdb/files/patch-gdb-amd64-bsd-nat.c32
-rw-r--r--devel/gdb/files/patch-gdb-amd64bsd-nat.c37
-rw-r--r--devel/gdb/files/patch-gdb-configure30
-rw-r--r--devel/gdb/files/patch-gdb-corelow.c12
-rw-r--r--devel/gdb/files/patch-gdb-fbsd-nat.c28
-rw-r--r--devel/gdb/files/patch-gdb-gnulib-import-stddef.in.h16
-rw-r--r--devel/gdb/files/patch-gdb-i386-fbsd-nat.c12
-rw-r--r--devel/gdb/files/patch-gdb-i386fbsd-nat.c11
-rw-r--r--devel/gdb/files/patch-gdb-x86bsd-nat.c14
26 files changed, 429 insertions, 1146 deletions
diff --git a/devel/gdb/Makefile b/devel/gdb/Makefile
index 908cb37066b1..30fc905583d1 100644
--- a/devel/gdb/Makefile
+++ b/devel/gdb/Makefile
@@ -2,8 +2,7 @@
# $FreeBSD$
PORTNAME= gdb
-PORTVERSION= 7.12.1
-PORTREVISION= 2
+PORTVERSION= 8.0
CATEGORIES= devel
MASTER_SITES= GNU
@@ -15,7 +14,11 @@ LICENSE= GPLv3
TEST_DEPENDS= runtest:misc/dejagnu
TEST_TARGET= check
-USES= compiler:env cpe iconv gmake libtool tar:xz
+# XXX: This should be compiler:c++11-lib as GDB doesn't really require
+# C++14. However, clang in 10.3 crashes while building this port.
+# Requiring C++14 forces 10.3 to use an external version of clang while
+# still using the base system clang on 11.0 and later.
+USES= compiler:c++14-lang cpe iconv gmake libtool tar:xz
USE_CSTD= gnu89
CPE_VENDOR= gnu
GNU_CONFIGURE= yes
@@ -31,8 +34,7 @@ CFLAGS:= ${CFLAGS:C/ +$//} # blanks at EOL creep in sometimes
CFLAGS+= -DRL_NO_COMPAT -Wno-unused-function -Wno-unused-variable
EXCLUDE= dejagnu expect sim texinfo intl
EXTRACT_AFTER_ARGS= ${EXCLUDE:S/^/--exclude /}
-EXTRA_PATCHES= ${FILESDIR}/commit-387360daf9 \
- ${FILESDIR}/commit-b268007c68
+EXTRA_PATCHES= ${FILESDIR}/commit-b5430a3ced
LIB_DEPENDS+= libexpat.so:textproc/expat2
VER= ${PORTVERSION:S/.//g}
diff --git a/devel/gdb/distinfo b/devel/gdb/distinfo
index 2e2fc98cb053..cc5dab0a449b 100644
--- a/devel/gdb/distinfo
+++ b/devel/gdb/distinfo
@@ -1,3 +1,3 @@
-TIMESTAMP = 1485162707
-SHA256 (gdb-7.12.1.tar.xz) = 4607680b973d3ec92c30ad029f1b7dbde3876869e6b3a117d8a7e90081113186
-SIZE (gdb-7.12.1.tar.xz) = 19225392
+TIMESTAMP = 1498935083
+SHA256 (gdb-8.0.tar.xz) = f6a24ffe4917e67014ef9273eb8b547cb96a13e5ca74895b06d683b391f3f4ee
+SIZE (gdb-8.0.tar.xz) = 19588616
diff --git a/devel/gdb/files/commit-387360daf9 b/devel/gdb/files/commit-387360daf9
deleted file mode 100644
index 692e650e2560..000000000000
--- a/devel/gdb/files/commit-387360daf9
+++ /dev/null
@@ -1,680 +0,0 @@
-commit 9978d70207d8a6bc7ff3c570814053c68e78b913
-Author: John Baldwin <jhb@FreeBSD.org>
-Date: Wed Jan 4 09:41:58 2017 -0800
-
- Add FreeBSD/mips architecture.
-
- This has been tested for the n64 and o32 ABIs. Signal frame unwinders for
- both ABIs are provided. FreeBSD/mips requires custom linkmap offsets since
- it contains an additional l_off member in 'struct link_map' that other
- FreeBSD platforms do not have. Support for collecting and supplying
- general purpose and floating point register sets are provided. Common
- routines for working with native format register sets are exported for
- use by the native target.
-
- gdb/ChangeLog:
-
- * Makefile.in (ALL_TARGET_OBS): Add mips-fbsd-tdep.o.
- (ALLDEPFILES): Add mips-fbsd-tdep.c.
- * NEWS: Mention new FreeBSD/mips target.
- * configure.tgt: Add mips*-*-freebsd*.
- * mips-fbsd-tdep.c: New file.
- * mips-fbsd-tdep.h: New file.
-
- gdb/doc/ChangeLog:
-
- * gdb.texinfo (Contributors): Add SRI International and University
- of Cambridge for FreeBSD/mips.
-
-diff --git gdb/Makefile.in gdb/Makefile.in
-index 7b2df86878..300c2cb702 100644
---- gdb/Makefile.in
-+++ gdb/Makefile.in
-@@ -685,6 +685,7 @@ ALL_TARGET_OBS = \
- m88k-tdep.o \
- mep-tdep.o \
- microblaze-tdep.o microblaze-linux-tdep.o \
-+ mips-fbsd-tdep.o \
- mips-linux-tdep.o mips-sde-tdep.o \
- mipsnbsd-tdep.o mips-tdep.o \
- mn10300-linux-tdep.o mn10300-tdep.o \
-@@ -1724,6 +1725,7 @@ ALLDEPFILES = \
- m88k-tdep.c m88kbsd-nat.c \
- microblaze-tdep.c microblaze-linux-tdep.c \
- mingw-hdep.c common/mingw-strerror.c \
-+ mips-fbsd-tdep.c \
- mips-linux-nat.c mips-linux-tdep.c \
- mips-sde-tdep.c \
- mips-tdep.c \
-diff --git gdb/configure.tgt gdb/configure.tgt
-index 7f1aac3742..9ee9f7a799 100644
---- gdb/configure.tgt
-+++ gdb/configure.tgt
-@@ -358,6 +358,11 @@ mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
- gdb_target_obs="mips-tdep.o mipsnbsd-tdep.o solib-svr4.o nbsd-tdep.o"
- gdb_sim=../sim/mips/libsim.a
- ;;
-+mips*-*-freebsd*)
-+ # Target: MIPS running FreeBSD
-+ gdb_target_obs="mips-tdep.o mips-fbsd-tdep.o solib-svr4.o fbsd-tdep.o"
-+ gdb_sim=../sim/mips/libsim.a
-+ ;;
- mips64*-*-openbsd*)
- # Target: OpenBSD/mips64
- gdb_target_obs="mips-tdep.o mips64obsd-tdep.o obsd-tdep.o solib-svr4.o"
-diff --git gdb/doc/gdb.texinfo gdb/doc/gdb.texinfo
-index 067a45b2de..179da5cdb3 100644
---- gdb/doc/gdb.texinfo
-+++ gdb/doc/gdb.texinfo
-@@ -541,6 +541,11 @@ Steve Tjiang, John Newlin, and Scott Foehner.
- Michael Eager and staff of Xilinx, Inc., contributed support for the
- Xilinx MicroBlaze architecture.
-
-+Initial support for the FreeBSD/mips target and native configuration
-+was developed by SRI International and the University of Cambridge
-+Computer Laboratory under DARPA/AFRL contract FA8750-10-C-0237
-+("CTSRD"), as part of the DARPA CRASH research programme.
-+
- @node Sample Session
- @chapter A Sample @value{GDBN} Session
-
-diff --git gdb/mips-fbsd-tdep.c gdb/mips-fbsd-tdep.c
-new file mode 100644
-index 0000000000..733534ddac
---- /dev/null
-+++ gdb/mips-fbsd-tdep.c
-@@ -0,0 +1,560 @@
-+/* Target-dependent code for FreeBSD/mips.
-+
-+ Copyright (C) 2017 Free Software Foundation, Inc.
-+
-+ This file is part of GDB.
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
-+
-+#include "defs.h"
-+#include "osabi.h"
-+#include "regset.h"
-+#include "trad-frame.h"
-+#include "tramp-frame.h"
-+
-+#include "fbsd-tdep.h"
-+#include "mips-tdep.h"
-+#include "mips-fbsd-tdep.h"
-+
-+#include "solib-svr4.h"
-+
-+/* Shorthand for some register numbers used below. */
-+#define MIPS_PC_REGNUM MIPS_EMBED_PC_REGNUM
-+#define MIPS_FP0_REGNUM MIPS_EMBED_FP0_REGNUM
-+#define MIPS_FSR_REGNUM MIPS_EMBED_FP0_REGNUM + 32
-+
-+/* Core file support. */
-+
-+/* Number of registers in `struct reg' from <machine/reg.h>. The
-+ first 38 follow the standard MIPS layout. The 39th holds
-+ IC_INT_REG on RM7K and RM9K processors. The 40th is a dummy for
-+ padding. */
-+#define MIPS_FBSD_NUM_GREGS 40
-+
-+/* Number of registers in `struct fpreg' from <machine/reg.h>. The
-+ first 32 hold floating point registers. 33 holds the FSR. The
-+ 34th is a dummy for padding. */
-+#define MIPS_FBSD_NUM_FPREGS 34
-+
-+/* Supply a single register. If the source register size matches the
-+ size the regcache expects, this can use regcache_raw_supply(). If
-+ they are different, this copies the source register into a buffer
-+ that can be passed to regcache_raw_supply(). */
-+
-+static void
-+mips_fbsd_supply_reg (struct regcache *regcache, int regnum, const void *addr,
-+ size_t len)
-+{
-+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
-+
-+ if (register_size (gdbarch, regnum) == len)
-+ regcache_raw_supply (regcache, regnum, addr);
-+ else
-+ {
-+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-+ gdb_byte buf[MAX_REGISTER_SIZE];
-+ LONGEST val;
-+
-+ val = extract_signed_integer ((const gdb_byte *) addr, len, byte_order);
-+ store_signed_integer (buf, register_size (gdbarch, regnum), byte_order,
-+ val);
-+ regcache_raw_supply (regcache, regnum, buf);
-+ }
-+}
-+
-+/* Collect a single register. If the destination register size
-+ matches the size the regcache expects, this can use
-+ regcache_raw_supply(). If they are different, this fetches the
-+ register via regcache_raw_supply() into a buffer and then copies it
-+ into the final destination. */
-+
-+static void
-+mips_fbsd_collect_reg (const struct regcache *regcache, int regnum, void *addr,
-+ size_t len)
-+{
-+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
-+
-+ if (register_size (gdbarch, regnum) == len)
-+ regcache_raw_collect (regcache, regnum, addr);
-+ else
-+ {
-+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-+ gdb_byte buf[MAX_REGISTER_SIZE];
-+ LONGEST val;
-+
-+ regcache_raw_collect (regcache, regnum, buf);
-+ val = extract_signed_integer (buf, register_size (gdbarch, regnum),
-+ byte_order);
-+ store_signed_integer ((gdb_byte *) addr, len, byte_order, val);
-+ }
-+}
-+
-+/* Supply the floating-point registers stored in FPREGS to REGCACHE.
-+ Each floating-point register in FPREGS is REGSIZE bytes in
-+ length. */
-+
-+void
-+mips_fbsd_supply_fpregs (struct regcache *regcache, int regnum,
-+ const void *fpregs, size_t regsize)
-+{
-+ const gdb_byte *regs = (const gdb_byte *) fpregs;
-+ int i;
-+
-+ for (i = MIPS_FP0_REGNUM; i <= MIPS_FSR_REGNUM; i++)
-+ if (regnum == i || regnum == -1)
-+ mips_fbsd_supply_reg (regcache, i,
-+ regs + (i - MIPS_FP0_REGNUM) * regsize, regsize);
-+}
-+
-+/* Supply the general-purpose registers stored in GREGS to REGCACHE.
-+ Each general-purpose register in GREGS is REGSIZE bytes in
-+ length. */
-+
-+void
-+mips_fbsd_supply_gregs (struct regcache *regcache, int regnum,
-+ const void *gregs, size_t regsize)
-+{
-+ const gdb_byte *regs = (const gdb_byte *) gregs;
-+ int i;
-+
-+ for (i = 0; i <= MIPS_PC_REGNUM; i++)
-+ if (regnum == i || regnum == -1)
-+ mips_fbsd_supply_reg (regcache, i, regs + i * regsize, regsize);
-+}
-+
-+/* Collect the floating-point registers from REGCACHE and store them
-+ in FPREGS. Each floating-point register in FPREGS is REGSIZE bytes
-+ in length. */
-+
-+void
-+mips_fbsd_collect_fpregs (const struct regcache *regcache, int regnum,
-+ void *fpregs, size_t regsize)
-+{
-+ gdb_byte *regs = (gdb_byte *) fpregs;
-+ int i;
-+
-+ for (i = MIPS_FP0_REGNUM; i <= MIPS_FSR_REGNUM; i++)
-+ if (regnum == i || regnum == -1)
-+ mips_fbsd_collect_reg (regcache, i,
-+ regs + (i - MIPS_FP0_REGNUM) * regsize, regsize);
-+}
-+
-+/* Collect the general-purpose registers from REGCACHE and store them
-+ in GREGS. Each general-purpose register in GREGS is REGSIZE bytes
-+ in length. */
-+
-+void
-+mips_fbsd_collect_gregs (const struct regcache *regcache, int regnum,
-+ void *gregs, size_t regsize)
-+{
-+ gdb_byte *regs = (gdb_byte *) gregs;
-+ int i;
-+
-+ for (i = 0; i <= MIPS_PC_REGNUM; i++)
-+ if (regnum == i || regnum == -1)
-+ mips_fbsd_collect_reg (regcache, i, regs + i * regsize, regsize);
-+}
-+
-+/* Supply register REGNUM from the buffer specified by FPREGS and LEN
-+ in the floating-point register set REGSET to register cache
-+ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
-+
-+static void
-+mips_fbsd_supply_fpregset (const struct regset *regset,
-+ struct regcache *regcache,
-+ int regnum, const void *fpregs, size_t len)
-+{
-+ size_t regsize = mips_abi_regsize (get_regcache_arch (regcache));
-+
-+ gdb_assert (len >= MIPS_FBSD_NUM_FPREGS * regsize);
-+
-+ mips_fbsd_supply_fpregs (regcache, regnum, fpregs, regsize);
-+}
-+
-+/* Collect register REGNUM from the register cache REGCACHE and store
-+ it in the buffer specified by FPREGS and LEN in the floating-point
-+ register set REGSET. If REGNUM is -1, do this for all registers in
-+ REGSET. */
-+
-+static void
-+mips_fbsd_collect_fpregset (const struct regset *regset,
-+ const struct regcache *regcache,
-+ int regnum, void *fpregs, size_t len)
-+{
-+ size_t regsize = mips_abi_regsize (get_regcache_arch (regcache));
-+
-+ gdb_assert (len >= MIPS_FBSD_NUM_FPREGS * regsize);
-+
-+ mips_fbsd_collect_fpregs (regcache, regnum, fpregs, regsize);
-+}
-+
-+/* Supply register REGNUM from the buffer specified by GREGS and LEN
-+ in the general-purpose register set REGSET to register cache
-+ REGCACHE. If REGNUM is -1, do this for all registers in REGSET. */
-+
-+static void
-+mips_fbsd_supply_gregset (const struct regset *regset,
-+ struct regcache *regcache, int regnum,
-+ const void *gregs, size_t len)
-+{
-+ size_t regsize = mips_abi_regsize (get_regcache_arch (regcache));
-+
-+ gdb_assert (len >= MIPS_FBSD_NUM_GREGS * regsize);
-+
-+ mips_fbsd_supply_gregs (regcache, regnum, gregs, regsize);
-+}
-+
-+/* Collect register REGNUM from the register cache REGCACHE and store
-+ it in the buffer specified by GREGS and LEN in the general-purpose
-+ register set REGSET. If REGNUM is -1, do this for all registers in
-+ REGSET. */
-+
-+static void
-+mips_fbsd_collect_gregset (const struct regset *regset,
-+ const struct regcache *regcache,
-+ int regnum, void *gregs, size_t len)
-+{
-+ size_t regsize = mips_abi_regsize (get_regcache_arch (regcache));
-+
-+ gdb_assert (len >= MIPS_FBSD_NUM_GREGS * regsize);
-+
-+ mips_fbsd_collect_gregs (regcache, regnum, gregs, regsize);
-+}
-+
-+/* FreeBSD/mips register sets. */
-+
-+static const struct regset mips_fbsd_gregset =
-+{
-+ NULL,
-+ mips_fbsd_supply_gregset,
-+ mips_fbsd_collect_gregset,
-+};
-+
-+static const struct regset mips_fbsd_fpregset =
-+{
-+ NULL,
-+ mips_fbsd_supply_fpregset,
-+ mips_fbsd_collect_fpregset,
-+};
-+
-+/* Iterate over core file register note sections. */
-+
-+static void
-+mips_fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch,
-+ iterate_over_regset_sections_cb *cb,
-+ void *cb_data,
-+ const struct regcache *regcache)
-+{
-+ size_t regsize = mips_abi_regsize (gdbarch);
-+
-+ cb (".reg", MIPS_FBSD_NUM_GREGS * regsize, &mips_fbsd_gregset,
-+ NULL, cb_data);
-+ cb (".reg2", MIPS_FBSD_NUM_FPREGS * regsize, &mips_fbsd_fpregset,
-+ NULL, cb_data);
-+}
-+
-+/* Signal trampoline support. */
-+
-+#define FBSD_SYS_sigreturn 417
-+
-+#define MIPS_INST_LI_V0_SIGRETURN 0x24020000 + FBSD_SYS_sigreturn
-+#define MIPS_INST_SYSCALL 0x0000000c
-+#define MIPS_INST_BREAK 0x0000000d
-+
-+#define O32_SIGFRAME_UCONTEXT_OFFSET (16)
-+#define O32_SIGSET_T_SIZE (16)
-+
-+#define O32_UCONTEXT_ONSTACK (O32_SIGSET_T_SIZE)
-+#define O32_UCONTEXT_PC (O32_UCONTEXT_ONSTACK + 4)
-+#define O32_UCONTEXT_REGS (O32_UCONTEXT_PC + 4)
-+#define O32_UCONTEXT_SR (O32_UCONTEXT_REGS + 4 * 32)
-+#define O32_UCONTEXT_LO (O32_UCONTEXT_SR + 4)
-+#define O32_UCONTEXT_HI (O32_UCONTEXT_LO + 4)
-+#define O32_UCONTEXT_FPUSED (O32_UCONTEXT_HI + 4)
-+#define O32_UCONTEXT_FPREGS (O32_UCONTEXT_FPUSED + 4)
-+
-+#define O32_UCONTEXT_REG_SIZE 4
-+
-+static void
-+mips_fbsd_sigframe_init (const struct tramp_frame *self,
-+ struct frame_info *this_frame,
-+ struct trad_frame_cache *cache,
-+ CORE_ADDR func)
-+{
-+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
-+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-+ CORE_ADDR sp, ucontext_addr, addr;
-+ int regnum;
-+ gdb_byte buf[4];
-+
-+ /* We find the appropriate instance of `ucontext_t' at a
-+ fixed offset in the signal frame. */
-+ sp = get_frame_register_signed (this_frame,
-+ MIPS_SP_REGNUM + gdbarch_num_regs (gdbarch));
-+ ucontext_addr = sp + O32_SIGFRAME_UCONTEXT_OFFSET;
-+
-+ /* PC. */
-+ regnum = mips_regnum (gdbarch)->pc;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + O32_UCONTEXT_PC);
-+
-+ /* GPRs. */
-+ for (regnum = MIPS_ZERO_REGNUM, addr = ucontext_addr + O32_UCONTEXT_REGS;
-+ regnum <= MIPS_RA_REGNUM; regnum++, addr += O32_UCONTEXT_REG_SIZE)
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ addr);
-+
-+ regnum = MIPS_PS_REGNUM;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + O32_UCONTEXT_SR);
-+
-+ /* HI and LO. */
-+ regnum = mips_regnum (gdbarch)->lo;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + O32_UCONTEXT_LO);
-+ regnum = mips_regnum (gdbarch)->hi;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + O32_UCONTEXT_HI);
-+
-+ if (target_read_memory (ucontext_addr + O32_UCONTEXT_FPUSED, buf, 4) == 0 &&
-+ extract_unsigned_integer (buf, 4, byte_order) != 0)
-+ {
-+ for (regnum = 0, addr = ucontext_addr + O32_UCONTEXT_FPREGS;
-+ regnum < 32; regnum++, addr += O32_UCONTEXT_REG_SIZE)
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_fp0_regnum (gdbarch),
-+ addr);
-+ trad_frame_set_reg_addr (cache, mips_regnum (gdbarch)->fp_control_status,
-+ addr);
-+ }
-+
-+ trad_frame_set_id (cache, frame_id_build (sp, func));
-+}
-+
-+#define MIPS_INST_ADDIU_A0_SP_O32 (0x27a40000 \
-+ + O32_SIGFRAME_UCONTEXT_OFFSET)
-+
-+static const struct tramp_frame mips_fbsd_sigframe =
-+{
-+ SIGTRAMP_FRAME,
-+ MIPS_INSN32_SIZE,
-+ {
-+ { MIPS_INST_ADDIU_A0_SP_O32, -1 }, /* addiu a0, sp, SIGF_UC */
-+ { MIPS_INST_LI_V0_SIGRETURN, -1 }, /* li v0, SYS_sigreturn */
-+ { MIPS_INST_SYSCALL, -1 }, /* syscall */
-+ { MIPS_INST_BREAK, -1 }, /* break */
-+ { TRAMP_SENTINEL_INSN, -1 }
-+ },
-+ mips_fbsd_sigframe_init
-+};
-+
-+#define N64_SIGFRAME_UCONTEXT_OFFSET (32)
-+#define N64_SIGSET_T_SIZE (16)
-+
-+#define N64_UCONTEXT_ONSTACK (N64_SIGSET_T_SIZE)
-+#define N64_UCONTEXT_PC (N64_UCONTEXT_ONSTACK + 8)
-+#define N64_UCONTEXT_REGS (N64_UCONTEXT_PC + 8)
-+#define N64_UCONTEXT_SR (N64_UCONTEXT_REGS + 8 * 32)
-+#define N64_UCONTEXT_LO (N64_UCONTEXT_SR + 8)
-+#define N64_UCONTEXT_HI (N64_UCONTEXT_LO + 8)
-+#define N64_UCONTEXT_FPUSED (N64_UCONTEXT_HI + 8)
-+#define N64_UCONTEXT_FPREGS (N64_UCONTEXT_FPUSED + 8)
-+
-+#define N64_UCONTEXT_REG_SIZE 8
-+
-+static void
-+mips64_fbsd_sigframe_init (const struct tramp_frame *self,
-+ struct frame_info *this_frame,
-+ struct trad_frame_cache *cache,
-+ CORE_ADDR func)
-+{
-+ struct gdbarch *gdbarch = get_frame_arch (this_frame);
-+ enum bfd_endian byte_order = gdbarch_byte_order (gdbarch);
-+ CORE_ADDR sp, ucontext_addr, addr;
-+ int regnum;
-+ gdb_byte buf[4];
-+
-+ /* We find the appropriate instance of `ucontext_t' at a
-+ fixed offset in the signal frame. */
-+ sp = get_frame_register_signed (this_frame,
-+ MIPS_SP_REGNUM + gdbarch_num_regs (gdbarch));
-+ ucontext_addr = sp + N64_SIGFRAME_UCONTEXT_OFFSET;
-+
-+ /* PC. */
-+ regnum = mips_regnum (gdbarch)->pc;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + N64_UCONTEXT_PC);
-+
-+ /* GPRs. */
-+ for (regnum = MIPS_ZERO_REGNUM, addr = ucontext_addr + N64_UCONTEXT_REGS;
-+ regnum <= MIPS_RA_REGNUM; regnum++, addr += N64_UCONTEXT_REG_SIZE)
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ addr);
-+
-+ regnum = MIPS_PS_REGNUM;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + N64_UCONTEXT_SR);
-+
-+ /* HI and LO. */
-+ regnum = mips_regnum (gdbarch)->lo;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + N64_UCONTEXT_LO);
-+ regnum = mips_regnum (gdbarch)->hi;
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_num_regs (gdbarch),
-+ ucontext_addr + N64_UCONTEXT_HI);
-+
-+ if (target_read_memory (ucontext_addr + N64_UCONTEXT_FPUSED, buf, 4) == 0 &&
-+ extract_unsigned_integer (buf, 4, byte_order) != 0)
-+ {
-+ for (regnum = 0, addr = ucontext_addr + N64_UCONTEXT_FPREGS;
-+ regnum < 32; regnum++, addr += N64_UCONTEXT_REG_SIZE)
-+ trad_frame_set_reg_addr (cache,
-+ regnum + gdbarch_fp0_regnum (gdbarch),
-+ addr);
-+ trad_frame_set_reg_addr (cache, mips_regnum (gdbarch)->fp_control_status,
-+ addr);
-+ }
-+
-+ trad_frame_set_id (cache, frame_id_build (sp, func));
-+}
-+
-+#define MIPS_INST_DADDIU_A0_SP_N64 (0x67a40000 \
-+ + N64_SIGFRAME_UCONTEXT_OFFSET)
-+
-+static const struct tramp_frame mips64_fbsd_sigframe =
-+{
-+ SIGTRAMP_FRAME,
-+ MIPS_INSN32_SIZE,
-+ {
-+ { MIPS_INST_DADDIU_A0_SP_N64, -1 }, /* daddiu a0, sp, SIGF_UC */
-+ { MIPS_INST_LI_V0_SIGRETURN, -1 }, /* li v0, SYS_sigreturn */
-+ { MIPS_INST_SYSCALL, -1 }, /* syscall */
-+ { MIPS_INST_BREAK, -1 }, /* break */
-+ { TRAMP_SENTINEL_INSN, -1 }
-+ },
-+ mips64_fbsd_sigframe_init
-+};
-+
-+/* Shared library support. */
-+
-+/* FreeBSD/mips uses a slightly different `struct link_map' than the
-+ other FreeBSD platforms as it includes an additional `l_off'
-+ member. */
-+
-+static struct link_map_offsets *
-+mips_fbsd_ilp32_fetch_link_map_offsets (void)
-+{
-+ static struct link_map_offsets lmo;
-+ static struct link_map_offsets *lmp = NULL;
-+
-+ if (lmp == NULL)
-+ {
-+ lmp = &lmo;
-+
-+ lmo.r_version_offset = 0;
-+ lmo.r_version_size = 4;
-+ lmo.r_map_offset = 4;
-+ lmo.r_brk_offset = 8;
-+ lmo.r_ldsomap_offset = -1;
-+
-+ lmo.link_map_size = 24;
-+ lmo.l_addr_offset = 0;
-+ lmo.l_name_offset = 8;
-+ lmo.l_ld_offset = 12;
-+ lmo.l_next_offset = 16;
-+ lmo.l_prev_offset = 20;
-+ }
-+
-+ return lmp;
-+}
-+
-+static struct link_map_offsets *
-+mips_fbsd_lp64_fetch_link_map_offsets (void)
-+{
-+ static struct link_map_offsets lmo;
-+ static struct link_map_offsets *lmp = NULL;
-+
-+ if (lmp == NULL)
-+ {
-+ lmp = &lmo;
-+
-+ lmo.r_version_offset = 0;
-+ lmo.r_version_size = 4;
-+ lmo.r_map_offset = 8;
-+ lmo.r_brk_offset = 16;
-+ lmo.r_ldsomap_offset = -1;
-+
-+ lmo.link_map_size = 48;
-+ lmo.l_addr_offset = 0;
-+ lmo.l_name_offset = 16;
-+ lmo.l_ld_offset = 24;
-+ lmo.l_next_offset = 32;
-+ lmo.l_prev_offset = 40;
-+ }
-+
-+ return lmp;
-+}
-+
-+static void
-+mips_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch)
-+{
-+ enum mips_abi abi = mips_abi (gdbarch);
-+
-+ /* Generic FreeBSD support. */
-+ fbsd_init_abi (info, gdbarch);
-+
-+ set_gdbarch_software_single_step (gdbarch, mips_software_single_step);
-+
-+ switch (abi)
-+ {
-+ case MIPS_ABI_O32:
-+ tramp_frame_prepend_unwinder (gdbarch, &mips_fbsd_sigframe);
-+ break;
-+ case MIPS_ABI_N32:
-+ break;
-+ case MIPS_ABI_N64:
-+ tramp_frame_prepend_unwinder (gdbarch, &mips64_fbsd_sigframe);
-+ break;
-+ }
-+
-+ set_gdbarch_iterate_over_regset_sections
-+ (gdbarch, mips_fbsd_iterate_over_regset_sections);
-+
-+ /* FreeBSD/mips has SVR4-style shared libraries. */
-+ set_solib_svr4_fetch_link_map_offsets
-+ (gdbarch, (gdbarch_ptr_bit (gdbarch) == 32 ?
-+ mips_fbsd_ilp32_fetch_link_map_offsets :
-+ mips_fbsd_lp64_fetch_link_map_offsets));
-+}
-+
-+
-+/* Provide a prototype to silence -Wmissing-prototypes. */
-+void _initialize_mips_fbsd_tdep (void);
-+
-+void
-+_initialize_mips_fbsd_tdep (void)
-+{
-+ gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_FREEBSD_ELF,
-+ mips_fbsd_init_abi);
-+}
-diff --git gdb/mips-fbsd-tdep.h gdb/mips-fbsd-tdep.h
-new file mode 100644
-index 0000000000..8a197e6325
---- /dev/null
-+++ gdb/mips-fbsd-tdep.h
-@@ -0,0 +1,28 @@
-+/* Common target dependent code for GDB on MIPS systems running FreeBSD.
-+
-+ Copyright (C) 2017 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 MIPS_FBSD_TDEP_H
-+#define MIPS_FBSD_TDEP_H
-+
-+void mips_fbsd_supply_fpregs (struct regcache *, int, const void *, size_t);
-+void mips_fbsd_supply_gregs (struct regcache *, int, const void *, size_t);
-+void mips_fbsd_collect_fpregs (const struct regcache *, int, void *, size_t);
-+void mips_fbsd_collect_gregs (const struct regcache *, int, void *, size_t);
-+
-+#endif /* MIPS_FBSD_TDEP_H */
diff --git a/devel/gdb/files/commit-b268007c68 b/devel/gdb/files/commit-b268007c68
deleted file mode 100644
index 86eb3c8971a8..000000000000
--- a/devel/gdb/files/commit-b268007c68
+++ /dev/null
@@ -1,191 +0,0 @@
-commit acde9e8dc95a053909e137c1fcda94c719eb8cc1
-Author: John Baldwin <jhb@FreeBSD.org>
-Date: Wed Jan 4 09:41:58 2017 -0800
-
- Add native target for FreeBSD/mips.
-
- This supports the o32 and n64 ABIs.
-
- gdb/ChangeLog:
-
- * Makefile.in (ALLDEPFILES): Add mips-fbsd-nat.c.
- * NEWS: Mention new FreeBSD/mips native configuration.
- * config/mips/fbsd.mh: New file.
- * configure.host: Add mips*-*-freebsd*.
- * mips-fbsd-nat.c: New file.
-
-diff --git gdb/Makefile.in gdb/Makefile.in
-index 300c2cb702..433dd1203a 100644
---- gdb/Makefile.in
-+++ gdb/Makefile.in
-@@ -1725,6 +1725,7 @@ ALLDEPFILES = \
- m88k-tdep.c m88kbsd-nat.c \
- microblaze-tdep.c microblaze-linux-tdep.c \
- mingw-hdep.c common/mingw-strerror.c \
-+ mips-fbsd-nat.c \
- mips-fbsd-tdep.c \
- mips-linux-nat.c mips-linux-tdep.c \
- mips-sde-tdep.c \
-diff --git gdb/config/mips/fbsd.mh gdb/config/mips/fbsd.mh
-new file mode 100644
-index 0000000000..f433347a20
---- /dev/null
-+++ gdb/config/mips/fbsd.mh
-@@ -0,0 +1,3 @@
-+# Host: FreeBSD/mips
-+NATDEPFILES= fork-child.o inf-ptrace.o fbsd-nat.o mips-fbsd-nat.o
-+HAVE_NATIVE_GCORE_HOST = 1
-diff --git gdb/configure.host gdb/configure.host
-index ef265ebe29..c45f61dbba 100644
---- gdb/configure.host
-+++ gdb/configure.host
-@@ -129,6 +129,7 @@ m88*-*-openbsd*) gdb_host=obsd ;;
- mips*-*-linux*) gdb_host=linux ;;
- mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
- gdb_host=nbsd ;;
-+mips*-*-freebsd*) gdb_host=fbsd ;;
- mips64*-*-openbsd*) gdb_host=obsd64 ;;
-
- powerpc-*-aix* | rs6000-*-* | powerpc64-*-aix*)
-diff --git gdb/mips-fbsd-nat.c gdb/mips-fbsd-nat.c
-new file mode 100644
-index 0000000000..0472df88f4
---- /dev/null
-+++ gdb/mips-fbsd-nat.c
-@@ -0,0 +1,136 @@
-+/* Native-dependent code for FreeBSD/mips.
-+
-+ Copyright (C) 2017 Free Software Foundation, Inc.
-+
-+ This file is part of GDB.
-+
-+ This program is free software; you can redistribute it and/or modify
-+ it under the terms of the GNU General Public License as published by
-+ the Free Software Foundation; either version 3 of the License, or
-+ (at your option) any later version.
-+
-+ This program is distributed in the hope that it will be useful,
-+ but WITHOUT ANY WARRANTY; without even the implied warranty of
-+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-+ GNU General Public License for more details.
-+
-+ You should have received a copy of the GNU General Public License
-+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
-+
-+#include "defs.h"
-+#include "inferior.h"
-+#include "regcache.h"
-+#include "target.h"
-+
-+#include <sys/types.h>
-+#include <sys/ptrace.h>
-+#include <machine/reg.h>
-+
-+#include "fbsd-nat.h"
-+#include "mips-tdep.h"
-+#include "mips-fbsd-tdep.h"
-+#include "inf-ptrace.h"
-+
-+/* Determine if PT_GETREGS fetches this register. */
-+
-+static bool
-+getregs_supplies (struct gdbarch *gdbarch, int regnum)
-+{
-+ return (regnum >= MIPS_ZERO_REGNUM
-+ && regnum <= gdbarch_pc_regnum (gdbarch));
-+}
-+
-+/* Fetch register REGNUM from the inferior. If REGNUM is -1, do this
-+ for all registers. */
-+
-+static void
-+mips_fbsd_fetch_inferior_registers (struct target_ops *ops,
-+ struct regcache *regcache, int regnum)
-+{
-+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
-+ if (regnum == -1 || getregs_supplies (gdbarch, regnum))
-+ {
-+ struct reg regs;
-+
-+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-+ perror_with_name (_("Couldn't get registers"));
-+
-+ mips_fbsd_supply_gregs (regcache, regnum, &regs, sizeof (register_t));
-+ if (regnum != -1)
-+ return;
-+ }
-+
-+ if (regnum == -1
-+ || regnum >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
-+ {
-+ struct fpreg fpregs;
-+
-+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-+ perror_with_name (_("Couldn't get floating point status"));
-+
-+ mips_fbsd_supply_fpregs (regcache, regnum, &fpregs,
-+ sizeof (f_register_t));
-+ }
-+}
-+
-+/* Store register REGNUM back into the inferior. If REGNUM is -1, do
-+ this for all registers. */
-+
-+static void
-+mips_fbsd_store_inferior_registers (struct target_ops *ops,
-+ struct regcache *regcache, int regnum)
-+{
-+ struct gdbarch *gdbarch = get_regcache_arch (regcache);
-+ if (regnum == -1 || getregs_supplies (gdbarch, regnum))
-+ {
-+ struct reg regs;
-+
-+ if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-+ perror_with_name (_("Couldn't get registers"));
-+
-+ mips_fbsd_collect_gregs (regcache, regnum, (char *) &regs,
-+ sizeof (register_t));
-+
-+ if (ptrace (PT_SETREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) &regs, 0) == -1)
-+ perror_with_name (_("Couldn't write registers"));
-+
-+ if (regnum != -1)
-+ return;
-+ }
-+
-+ if (regnum == -1
-+ || regnum >= gdbarch_fp0_regnum (get_regcache_arch (regcache)))
-+ {
-+ struct fpreg fpregs;
-+
-+ if (ptrace (PT_GETFPREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-+ perror_with_name (_("Couldn't get floating point status"));
-+
-+ mips_fbsd_collect_fpregs (regcache, regnum, (char *) &fpregs,
-+ sizeof (f_register_t));
-+
-+ if (ptrace (PT_SETFPREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) &fpregs, 0) == -1)
-+ perror_with_name (_("Couldn't write floating point status"));
-+ }
-+}
-+
-+
-+/* Provide a prototype to silence -Wmissing-prototypes. */
-+void _initialize_mips_fbsd_nat (void);
-+
-+void
-+_initialize_mips_fbsd_nat (void)
-+{
-+ struct target_ops *t;
-+
-+ t = inf_ptrace_target ();
-+ t->to_fetch_registers = mips_fbsd_fetch_inferior_registers;
-+ t->to_store_registers = mips_fbsd_store_inferior_registers;
-+ fbsd_nat_add_target (t);
-+}
diff --git a/devel/gdb/files/commit-b5430a3ced b/devel/gdb/files/commit-b5430a3ced
new file mode 100644
index 000000000000..aefbb35710c8
--- /dev/null
+++ b/devel/gdb/files/commit-b5430a3ced
@@ -0,0 +1,117 @@
+commit b5430a3ced5fe5ba484bd9b3215b9ae19ced0160
+Author: John Baldwin <jhb@FreeBSD.org>
+Date: Thu Jun 1 09:40:46 2017 -0700
+
+ Use the ELF class to determine the word size for FreeBSD core notes.
+
+ FreeBSD ELF cores contain data structures with that have two different
+ layouts: one for ILP32 platforms and a second for LP64 platforms.
+ Previously, the code used 'bits_per_word' from 'arch_info', but this
+ field is not a reliable indicator of the format for FreeBSD MIPS cores
+ in particular.
+
+ I had originally posted this patch back in November because process
+ cores for FreeBSD MIPS contained an e_flags value of 0 in the header
+ which resulted in a bfd_arch which always had 'bits_per_word' set to
+ 32. This permitted reading o32 cores, but not n64 cores. The feedback
+ I received then was to try to change n64 cores to use a different
+ default bfd_arch that had a 64-bit 'bits_per_word' when e_flags was zero.
+ I submitted a patch to that effect but it was never approved. Instead,
+ I changed FreeBSD's kernel and gcore commands to preserve the e_flags
+ field from an executable when generating process cores. With a proper
+ e_flags field in process cores, n64 cores now use a 64-bit bfd_arch and
+ now work fine. However, the change to include e_flags in the process
+ cores had the unintended side effect of breaking handling of o32
+ process cores. Specifically, FreeBSD MIPS builds o32 with a default
+ MIPS architecture of 'mips3', thus FreeBSD process cores with a non-zero
+ e_flags match the 'mips3' bfd_arch which has 64 'bits_per_word'.
+
+ From this, it seems that 'bits_per_word' for FreeBSD MIPS is not likely
+ to ever be completely correct. However, FreeBSD core dumps do
+ reliably set the ELF class to ELFCLASS32 for cores using ILP32 and
+ ELFCLASS64 for cores using LP64. As such, I think my original patch of
+ using the ELF class instead of 'bits_per_word' is probably the simplest
+ and most reliable approach for detecting the note structure layout.
+
+ bfd/ChangeLog:
+
+ * elf.c (elfcore_grok_freebsd_psinfo): Use ELF header class to
+ determine structure sizes.
+ (elfcore_grok_freebsd_prstatus): Likewise.
+
+diff --git bfd/elf.c bfd/elf.c
+index 863bd61c5f..34d39c547b 100644
+--- bfd/elf.c
++++ bfd/elf.c
+@@ -9814,14 +9814,14 @@ elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
+ {
+ size_t offset;
+
+- switch (abfd->arch_info->bits_per_word)
++ switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
+ {
+- case 32:
++ case ELFCLASS32:
+ if (note->descsz < 108)
+ return FALSE;
+ break;
+
+- case 64:
++ case ELFCLASS64:
+ if (note->descsz < 120)
+ return FALSE;
+ break;
+@@ -9836,7 +9836,7 @@ elfcore_grok_freebsd_psinfo (bfd *abfd, Elf_Internal_Note *note)
+ offset = 4;
+
+ /* Skip over pr_psinfosz. */
+- if (abfd->arch_info->bits_per_word == 32)
++ if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
+ offset += 4;
+ else
+ {
+@@ -9879,13 +9879,13 @@ elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
+ offset = 4;
+
+ /* Skip over pr_statussz. */
+- switch (abfd->arch_info->bits_per_word)
++ switch (elf_elfheader (abfd)->e_ident[EI_CLASS])
+ {
+- case 32:
++ case ELFCLASS32:
+ offset += 4;
+ break;
+
+- case 64:
++ case ELFCLASS64:
+ offset += 4; /* Padding before pr_statussz. */
+ offset += 8;
+ break;
+@@ -9895,13 +9895,16 @@ elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
+ }
+
+ /* Extract size of pr_reg from pr_gregsetsz. */
+- if (abfd->arch_info->bits_per_word == 32)
++ if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
+ size = bfd_h_get_32 (abfd, (bfd_byte *) note->descdata + offset);
+ else
+ size = bfd_h_get_64 (abfd, (bfd_byte *) note->descdata + offset);
+
+ /* Skip over pr_gregsetsz and pr_fpregsetsz. */
+- offset += (abfd->arch_info->bits_per_word / 8) * 2;
++ if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS32)
++ offset += 4 * 2;
++ else
++ offset += 8 * 2;
+
+ /* Skip over pr_osreldate. */
+ offset += 4;
+@@ -9918,7 +9921,7 @@ elfcore_grok_freebsd_prstatus (bfd *abfd, Elf_Internal_Note *note)
+ offset += 4;
+
+ /* Padding before pr_reg. */
+- if (abfd->arch_info->bits_per_word == 64)
++ if (elf_elfheader (abfd)->e_ident[EI_CLASS] == ELFCLASS64)
+ offset += 4;
+
+ /* Make a ".reg/999" section and a ".reg" section. */
diff --git a/devel/gdb/files/extrapatch-kgdb b/devel/gdb/files/extrapatch-kgdb
index 78f68e81e4e4..fa48efcbbaac 100644
--- a/devel/gdb/files/extrapatch-kgdb
+++ b/devel/gdb/files/extrapatch-kgdb
@@ -1,8 +1,8 @@
diff --git gdb/Makefile.in gdb/Makefile.in
-index 5b6ccea764..f501cf29d1 100644
+index 6e96a88a98..98c5fd2664 100644
--- gdb/Makefile.in
+++ gdb/Makefile.in
-@@ -212,7 +212,8 @@ INCGNU = -I$(srcdir)/gnulib/import -I$(GNULIB_BUILDDIR)/import
+@@ -227,7 +227,8 @@ INCGNU = -I$(srcdir)/gnulib/import -I$(GNULIB_BUILDDIR)/import
# Generated headers in the gnulib directory. These must be listed
# so that they are generated before other files are compiled.
@@ -12,35 +12,66 @@ index 5b6ccea764..f501cf29d1 100644
#
# CLI sub directory definitons
-@@ -653,7 +654,8 @@ ALL_64_TARGET_OBS = \
- ia64-linux-tdep.o ia64-vms-tdep.o ia64-tdep.o \
- mips64obsd-tdep.o \
- sparc64fbsd-tdep.o sparc64-linux-tdep.o sparc64nbsd-tdep.o \
-- sparc64obsd-tdep.o sparc64-sol2-tdep.o sparc64-tdep.o
-+ sparc64obsd-tdep.o sparc64-sol2-tdep.o sparc64-tdep.o \
-+ amd64fbsd-kern.o sparc64fbsd-kern.o
-
- # All other target-dependent objects files (used with --enable-targets=all).
- ALL_TARGET_OBS = \
-@@ -676,6 +678,8 @@ ALL_TARGET_OBS = \
- i386-sol2-tdep.o i386-tdep.o i387-tdep.o \
- i386-dicos-tdep.o i386-darwin-tdep.o \
- iq2000-tdep.o \
-+ fbsd-kld.o fbsd-kthr.o fbsd-kvm.o i386fbsd-kern.o ppcfbsd-kern.o \
+@@ -758,6 +759,7 @@ ALL_64_TARGET_OBS = \
+ amd64-darwin-tdep.o \
+ amd64-dicos-tdep.o \
+ amd64-fbsd-tdep.o \
++ amd64fbsd-kern.o \
+ amd64-linux-tdep.o \
+ amd64-nbsd-tdep.o \
+ amd64-obsd-tdep.o \
+@@ -769,6 +771,7 @@ ALL_64_TARGET_OBS = \
+ ia64-vms-tdep.o \
+ mips64-obsd-tdep.o \
+ sparc64-fbsd-tdep.o \
++ sparc64fbsd-kern.o \
+ sparc64-linux-tdep.o \
+ sparc64-nbsd-tdep.o \
+ sparc64-obsd-tdep.o \
+@@ -796,6 +799,9 @@ ALL_TARGET_OBS = \
+ cris-linux-tdep.o \
+ cris-tdep.o \
+ dicos-tdep.o \
++ fbsd-kld.o \
++ fbsd-kthr.o \
++ fbsd-kvm.o \
+ fbsd-tdep.o \
+ frv-linux-tdep.o \
+ frv-tdep.o \
+@@ -812,6 +818,7 @@ ALL_TARGET_OBS = \
+ i386-darwin-tdep.o \
+ i386-dicos-tdep.o \
+ i386-fbsd-tdep.o \
++ i386fbsd-kern.o \
+ i386-gnu-tdep.o \
+ i386-go32-tdep.o \
+ i386-linux-tdep.o \
+@@ -836,6 +843,7 @@ ALL_TARGET_OBS = \
+ mep-tdep.o \
+ microblaze-linux-tdep.o \
+ microblaze-tdep.o \
+ mipsfbsd-kern.o \
- linux-tdep.o \
- lm32-tdep.o \
- m32c-tdep.o \
-@@ -1133,7 +1137,7 @@ generated_files = config.h observer.h observer.inc ada-lex.c jit-reader.h \
- $(COMPILE) $<
- $(POSTCOMPILE)
+ mips-fbsd-tdep.o \
+ mips-linux-tdep.o \
+ mips-nbsd-tdep.o \
+@@ -853,6 +861,7 @@ ALL_TARGET_OBS = \
+ nto-tdep.o \
+ obsd-tdep.o \
+ ppc-fbsd-tdep.o \
++ ppcfbsd-kern.o \
+ ppc-linux-tdep.o \
+ ppc-nbsd-tdep.o \
+ ppc-obsd-tdep.o \
+@@ -1870,7 +1879,7 @@ generated_files = \
+ # Flags needed to compile Python code
+ PYTHON_CFLAGS = @PYTHON_CFLAGS@
-all: gdb$(EXEEXT) $(CONFIG_ALL)
+all: gdb$(EXEEXT) kgdb$(EXEEXT) $(CONFIG_ALL)
@$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do
- installcheck:
-@@ -1412,6 +1416,12 @@ gdb$(EXEEXT): gdb.o $(LIBGDB_OBS) $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
+ # Rule for compiling .c files in the top-level gdb directory.
+@@ -2209,6 +2218,12 @@ gdb$(EXEEXT): gdb.o $(LIBGDB_OBS) $(ADD_DEPS) $(CDEPS) $(TDEPLIBS)
-o gdb$(EXEEXT) gdb.o $(LIBGDB_OBS) \
$(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES)
@@ -53,7 +84,7 @@ index 5b6ccea764..f501cf29d1 100644
# Convenience rule to handle recursion.
$(LIBGNU) $(GNULIB_H): all-lib
all-lib: $(GNULIB_BUILDDIR)/Makefile
-@@ -1456,7 +1466,7 @@ clean mostlyclean: $(CONFIG_CLEAN)
+@@ -2253,7 +2268,7 @@ clean mostlyclean: $(CONFIG_CLEAN)
@$(MAKE) $(FLAGS_TO_PASS) DO=clean "DODIRS=$(CLEANDIRS)" subdir_do
rm -f *.o *.a $(ADD_FILES) *~ init.c-tmp init.l-tmp version.c-tmp
rm -f init.c version.c observer.h observer.inc
@@ -62,17 +93,70 @@ index 5b6ccea764..f501cf29d1 100644
rm -f gdb[0-9]$(EXEEXT)
rm -f test-cp-name-parser$(EXEEXT)
rm -f xml-builtin.c stamp-xml
-@@ -1688,6 +1698,9 @@ ALLDEPFILES = \
- core-regset.c \
- dcache.c dicos-tdep.c darwin-nat.c \
+@@ -2475,6 +2490,7 @@ ALLDEPFILES = \
+ amd64-bsd-nat.c \
+ amd64-darwin-tdep.c \
+ amd64-dicos-tdep.c \
++ amd64fbsd-kern.c \
+ amd64-fbsd-nat.c \
+ amd64-fbsd-tdep.c \
+ amd64-linux-nat.c \
+@@ -2510,6 +2526,9 @@ ALLDEPFILES = \
+ dcache.c \
+ dicos-tdep.c \
exec.c \
-+ fbsd-kld.c fbsd-kthr.c fbsd-kvm.c \
-+ amd64fbsd-kern.c i386fbsd-kern.c mipsfbsd-kern.c ppcfbsd-kern.c \
-+ sparc64fbsd-kern.c \
++ fbsd-kld.c \
++ fbsd-kthr.c \
++ fbsd-kvm.c \
fbsd-nat.c \
fbsd-tdep.c \
fork-child.c \
-@@ -2761,7 +2774,7 @@ py-varobj.o: $(srcdir)/python/py-varobj.c
+@@ -2531,6 +2550,7 @@ ALLDEPFILES = \
+ i386-darwin-nat.c \
+ i386-darwin-tdep.c \
+ i386-dicos-tdep.c \
++ i386fbsd-kern.c \
+ i386-fbsd-nat.c \
+ i386-fbsd-tdep.c \
+ i386-gnu-nat.c \
+@@ -2572,6 +2592,7 @@ ALLDEPFILES = \
+ mingw-hdep.c \
+ mips-fbsd-nat.c \
+ mips-fbsd-tdep.c \
++ mipsfbsd-kern.c \
+ mips-linux-nat.c \
+ mips-linux-tdep.c \
+ mips-nbsd-nat.c \
+@@ -2589,6 +2610,7 @@ ALLDEPFILES = \
+ obsd-nat.c \
+ obsd-tdep.c \
+ posix-hdep.c \
++ ppcfbsd-kern.c \
+ ppc-fbsd-nat.c \
+ ppc-fbsd-tdep.c \
+ ppc-linux-nat.c \
+@@ -2633,6 +2655,7 @@ ALLDEPFILES = \
+ sparc-sol2-nat.c \
+ sparc-sol2-tdep.c \
+ sparc-tdep.c \
++ sparc64fbsd-kern.c \
+ sparc64-fbsd-nat.c \
+ sparc64-fbsd-tdep.c \
+ sparc64-linux-nat.c \
+@@ -2664,6 +2687,12 @@ ALLDEPFILES = \
+ xtensa-linux-tdep.c \
+ xtensa-tdep.c \
+ xtensa-xtregs.c \
++ kgdb/kld.c \
++ kgdb/kthr.c \
++ kgdb/trgt.c \
++ kgdb/trgt_amd64.c \
++ kgdb/trgt_i386.c \
++ kgdb/trgt_sparc64.c \
+ common/mingw-strerror.c \
+ common/posix-strerror.c
+
+@@ -2925,7 +2954,7 @@ endif
# A list of all the objects we might care about in this build, for
# dependency tracking.
@@ -82,10 +166,10 @@ index 5b6ccea764..f501cf29d1 100644
# Ensure that generated files are created early. Use order-only
diff --git gdb/config.in gdb/config.in
-index c82a5b4bac..34140b2d59 100644
+index 3f8a72326b..bb1e8c23bf 100644
--- gdb/config.in
+++ gdb/config.in
-@@ -219,6 +219,9 @@
+@@ -222,6 +222,9 @@
/* Define to 1 if your system has the kinfo_getvmmap function. */
#undef HAVE_KINFO_GETVMMAP
@@ -106,10 +190,10 @@ index f433347a20..5470795612 100644
+
+LOADLIBES= -lkvm
diff --git gdb/configure gdb/configure
-index b5c045cf10..68299ff16c 100755
+index e14886b67d..5682ce42d6 100755
--- gdb/configure
+++ gdb/configure
-@@ -7112,6 +7112,66 @@ $as_echo "#define HAVE_KINFO_GETVMMAP 1" >>confdefs.h
+@@ -7968,6 +7968,66 @@ $as_echo "#define HAVE_KINFO_GETVMMAP 1" >>confdefs.h
fi
@@ -177,10 +261,10 @@ index b5c045cf10..68299ff16c 100755
if test "X$prefix" = "XNONE"; then
acl_final_prefix="$ac_default_prefix"
diff --git gdb/configure.ac gdb/configure.ac
-index f774db7ea6..efccdd3fb1 100644
+index 50f6f592ba..89cdc9cc8e 100644
--- gdb/configure.ac
+++ gdb/configure.ac
-@@ -540,6 +540,11 @@ AC_SEARCH_LIBS(kinfo_getvmmap, util util-freebsd,
+@@ -530,6 +530,11 @@ AC_SEARCH_LIBS(kinfo_getvmmap, util util-freebsd,
[AC_DEFINE(HAVE_KINFO_GETVMMAP, 1,
[Define to 1 if your system has the kinfo_getvmmap function. ])])
@@ -193,15 +277,15 @@ index f774db7ea6..efccdd3fb1 100644
# GDB may fork/exec the iconv program to get the list of supported character
diff --git gdb/configure.tgt gdb/configure.tgt
-index 9ee9f7a799..fb14b19405 100644
+index fdcb7b1d69..d99aa325ab 100644
--- gdb/configure.tgt
+++ gdb/configure.tgt
-@@ -190,7 +190,13 @@ i[34567]86-*-dicos*)
+@@ -198,7 +198,13 @@ i[34567]86-*-dicos*)
i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
# Target: FreeBSD/i386
- gdb_target_obs="i386-tdep.o i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
-- bsd-uthread.o fbsd-tdep.o solib-svr4.o"
-+ bsd-uthread.o fbsd-tdep.o solib-svr4.o \
+ gdb_target_obs="i386-tdep.o i387-tdep.o i386-bsd-tdep.o i386-fbsd-tdep.o \
+- fbsd-tdep.o solib-svr4.o"
++ fbsd-tdep.o solib-svr4.o \
+ fbsd-kld.o fbsd-kthr.o fbsd-kvm.o i386fbsd-kern.o"
+ if test "x$enable_64_bit_bfd" = "xyes"; then
+ # Target: FreeBSD amd64
@@ -211,7 +295,7 @@ index 9ee9f7a799..fb14b19405 100644
;;
i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
# Target: NetBSD/i386
-@@ -360,7 +366,8 @@ mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
+@@ -372,7 +378,8 @@ mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
;;
mips*-*-freebsd*)
# Target: MIPS running FreeBSD
@@ -221,19 +305,19 @@ index 9ee9f7a799..fb14b19405 100644
gdb_sim=../sim/mips/libsim.a
;;
mips64*-*-openbsd*)
-@@ -419,7 +426,8 @@ powerpc*-*-freebsd*)
+@@ -431,7 +438,8 @@ powerpc*-*-freebsd*)
# Target: FreeBSD/powerpc
gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppc64-tdep.o \
- ppcfbsd-tdep.o fbsd-tdep.o solib-svr4.o \
+ ppc-fbsd-tdep.o fbsd-tdep.o solib-svr4.o \
- ravenscar-thread.o ppc-ravenscar-thread.o"
+ ravenscar-thread.o ppc-ravenscar-thread.o \
+ fbsd-kld.o fbsd-kthr.o fbsd-kvm.o ppcfbsd-kern.o"
;;
powerpc-*-netbsd* | powerpc-*-knetbsd*-gnu)
-@@ -543,7 +551,8 @@ sparc*-*-freebsd* | sparc*-*-kfreebsd*-gnu)
+@@ -555,7 +563,8 @@ sparc*-*-freebsd* | sparc*-*-kfreebsd*-gnu)
# Target: FreeBSD/sparc64
- gdb_target_obs="sparc-tdep.o sparc64-tdep.o sparc64fbsd-tdep.o \
+ gdb_target_obs="sparc-tdep.o sparc64-tdep.o sparc64-fbsd-tdep.o \
fbsd-tdep.o solib-svr4.o \
- ravenscar-thread.o sparc-ravenscar-thread.o"
+ ravenscar-thread.o sparc-ravenscar-thread.o \
@@ -241,46 +325,46 @@ index 9ee9f7a799..fb14b19405 100644
;;
sparc-*-netbsd* | sparc-*-knetbsd*-gnu)
# Target: NetBSD/sparc
-@@ -674,7 +683,9 @@ x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
+@@ -686,7 +695,9 @@ x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
# Target: FreeBSD/amd64
- gdb_target_obs="amd64-tdep.o amd64fbsd-tdep.o i386-tdep.o \
- i387-tdep.o i386bsd-tdep.o i386fbsd-tdep.o \
-- bsd-uthread.o fbsd-tdep.o solib-svr4.o"
-+ bsd-uthread.o fbsd-tdep.o solib-svr4.o \
+ gdb_target_obs="amd64-tdep.o amd64-fbsd-tdep.o i386-tdep.o \
+ i387-tdep.o i386-bsd-tdep.o i386-fbsd-tdep.o \
+- fbsd-tdep.o solib-svr4.o"
++ fbsd-tdep.o solib-svr4.o \
+ fbsd-kld.o fbsd-kthr.o fbsd-kvm.o amd64fbsd-kern.o \
+ i386fbsd-kern.o"
;;
x86_64-*-mingw* | x86_64-*-cygwin*)
# Target: MingW/amd64
diff --git gdb/defs.h gdb/defs.h
-index 9b44f44349..f176be1108 100644
+index a0b586f401..44d3d112ed 100644
--- gdb/defs.h
+++ gdb/defs.h
-@@ -598,6 +598,7 @@ enum gdb_osabi
+@@ -590,6 +590,7 @@ enum gdb_osabi
+ GDB_OSABI_SOLARIS,
GDB_OSABI_LINUX,
- GDB_OSABI_FREEBSD_AOUT,
- GDB_OSABI_FREEBSD_ELF,
-+ GDB_OSABI_FREEBSD_ELF_KERNEL,
- GDB_OSABI_NETBSD_AOUT,
- GDB_OSABI_NETBSD_ELF,
- GDB_OSABI_OPENBSD_ELF,
+ GDB_OSABI_FREEBSD,
++ GDB_OSABI_FREEBSD_KERNEL,
+ GDB_OSABI_NETBSD,
+ GDB_OSABI_OPENBSD,
+ GDB_OSABI_WINCE,
diff --git gdb/osabi.c gdb/osabi.c
-index f7d4e74239..130ffef37e 100644
+index 84fa9c0273..5c49e22657 100644
--- gdb/osabi.c
+++ gdb/osabi.c
-@@ -66,6 +66,7 @@ static const struct osabi_names gdb_osabi_names[] =
+@@ -65,6 +65,7 @@ static const struct osabi_names gdb_osabi_names[] =
+ { "Solaris", NULL },
{ "GNU/Linux", "linux(-gnu)?" },
- { "FreeBSD/a.out", NULL },
- { "FreeBSD/ELF", NULL },
+ { "FreeBSD", NULL },
+ { "FreeBSD/kernel", NULL },
- { "NetBSD/a.out", NULL },
- { "NetBSD/ELF", NULL },
- { "OpenBSD/ELF", NULL },
+ { "NetBSD", NULL },
+ { "OpenBSD", NULL },
+ { "WindowsCE", NULL },
diff --git gdb/regcache.c gdb/regcache.c
-index a5c90a6314..05044e5293 100644
+index 37bc2f0046..9da3aaa514 100644
--- gdb/regcache.c
+++ gdb/regcache.c
-@@ -1083,6 +1083,20 @@ regcache_raw_supply (struct regcache *regcache, int regnum, const void *buf)
+@@ -1105,6 +1105,20 @@ regcache_raw_supply (struct regcache *regcache, int regnum, const void *buf)
}
}
@@ -302,10 +386,10 @@ index a5c90a6314..05044e5293 100644
void
diff --git gdb/regcache.h gdb/regcache.h
-index 1bb0ce0ec8..65783b6355 100644
+index 1d60fa7616..9b8a4723a3 100644
--- gdb/regcache.h
+++ gdb/regcache.h
-@@ -135,6 +135,8 @@ extern void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
+@@ -149,6 +149,8 @@ extern void regcache_write_pc (struct regcache *regcache, CORE_ADDR pc);
extern void regcache_raw_supply (struct regcache *regcache,
int regnum, const void *buf);
diff --git a/devel/gdb/files/kgdb/amd64fbsd-kern.c b/devel/gdb/files/kgdb/amd64fbsd-kern.c
index 7cdc30f803e0..8013b127947e 100644
--- a/devel/gdb/files/kgdb/amd64fbsd-kern.c
+++ b/devel/gdb/files/kgdb/amd64fbsd-kern.c
@@ -238,7 +238,7 @@ void
_initialize_amd64_kgdb_tdep(void)
{
gdbarch_register_osabi (bfd_arch_i386, bfd_mach_x86_64,
- GDB_OSABI_FREEBSD_ELF_KERNEL, amd64fbsd_kernel_init_abi);
+ GDB_OSABI_FREEBSD_KERNEL, amd64fbsd_kernel_init_abi);
#ifdef __amd64__
gdb_assert(offsetof(struct pcb, pcb_rbx)
diff --git a/devel/gdb/files/kgdb/fbsd-kld.c b/devel/gdb/files/kgdb/fbsd-kld.c
index b450e05f032f..62ac9d4429fb 100644
--- a/devel/gdb/files/kgdb/fbsd-kld.c
+++ b/devel/gdb/files/kgdb/fbsd-kld.c
@@ -140,26 +140,22 @@ check_kld_path (char *path, size_t path_size)
* in the various paths in the module path.
*/
static int
-find_kld_path (char *filename, char *path, size_t path_size)
+find_kld_path (const char *filename, char *path, size_t path_size)
{
struct kld_info *info;
struct cleanup *cleanup;
char *module_path;
- char *kernel_dir, *module_dir, *cp;
+ char *module_dir, *cp;
int error;
info = get_kld_info();
if (exec_bfd) {
- kernel_dir = ldirname(bfd_get_filename(exec_bfd));
- if (kernel_dir != NULL) {
- cleanup = make_cleanup(xfree, kernel_dir);
- snprintf(path, path_size, "%s/%s", kernel_dir,
+ std::string kernel_dir = ldirname(bfd_get_filename(exec_bfd));
+ if (!kernel_dir.empty()) {
+ snprintf(path, path_size, "%s/%s", kernel_dir.c_str(),
filename);
- if (check_kld_path(path, path_size)) {
- do_cleanups(cleanup);
+ if (check_kld_path(path, path_size))
return (1);
- }
- do_cleanups(cleanup);
}
}
if (info->module_path_addr != 0) {
@@ -271,28 +267,28 @@ load_kld (char *path, CORE_ADDR base_addr, int from_tty)
struct section_addr_info *sap;
struct target_section *sections = NULL, *sections_end = NULL, *s;
struct cleanup *cleanup;
- bfd *bfd;
+ gdb_bfd_ref_ptr bfd;
CORE_ADDR curr_addr;
- int add_flags, i;
+ symfile_add_flags add_flags;
+ int i;
/* Open the kld. */
- bfd = bfd_openr(path, gnutarget);
+ bfd = gdb_bfd_openr(path, gnutarget);
if (bfd == NULL)
error("\"%s\": can't open: %s", path,
bfd_errmsg(bfd_get_error()));
- cleanup = make_cleanup_bfd_unref(bfd);
- if (!bfd_check_format(bfd, bfd_object))
+ if (!bfd_check_format(bfd.get(), bfd_object))
error("\%s\": not an object file", path);
/* Make sure we have a .text section. */
- if (bfd_get_section_by_name (bfd, ".text") == NULL)
+ if (bfd_get_section_by_name (bfd.get(), ".text") == NULL)
error("\"%s\": can't find text section", path);
/* Build a section table from the bfd and relocate the sections. */
- if (build_section_table (bfd, &sections, &sections_end))
+ if (build_section_table (bfd.get(), &sections, &sections_end))
error("\"%s\": can't find file sections", path);
- make_cleanup(xfree, sections);
+ cleanup = make_cleanup(xfree, sections);
curr_addr = base_addr;
for (s = sections; s < sections_end; s++)
adjust_section_address(s, &curr_addr);
@@ -313,7 +309,8 @@ load_kld (char *path, CORE_ADDR base_addr, int from_tty)
add_flags = 0;
if (from_tty)
add_flags |= SYMFILE_VERBOSE;
- symbol_file_add(path, add_flags, sap, OBJF_USERLOADED);
+ symbol_file_add_from_bfd(bfd.get(), path, add_flags, sap,
+ OBJF_USERLOADED, NULL);
do_cleanups(cleanup);
}
@@ -431,12 +428,7 @@ kld_solib_create_inferior_hook (int from_tty)
}
END_CATCH
- solib_add(NULL, 1, &current_target, auto_solib_add);
-}
-
-static void
-kld_special_symbol_handling (void)
-{
+ solib_add(NULL, from_tty, auto_solib_add);
}
static struct so_list *
@@ -547,7 +539,8 @@ kld_in_dynsym_resolve_code (CORE_ADDR pc)
}
static int
-kld_find_and_open_solib (char *solib, unsigned o_flags, char **temp_pathname)
+kld_find_and_open_solib (const char *solib, unsigned o_flags,
+ char **temp_pathname)
{
char path[PATH_MAX];
int fd;
@@ -575,7 +568,6 @@ _initialize_kld_target(void)
kld_so_ops.clear_so = kld_clear_so;
kld_so_ops.clear_solib = kld_clear_solib;
kld_so_ops.solib_create_inferior_hook = kld_solib_create_inferior_hook;
- kld_so_ops.special_symbol_handling = kld_special_symbol_handling;
kld_so_ops.current_sos = kld_current_sos;
kld_so_ops.open_symbol_file_object = kld_open_symbol_file_object;
kld_so_ops.in_dynsym_resolve_code = kld_in_dynsym_resolve_code;
diff --git a/devel/gdb/files/kgdb/fbsd-kthr.c b/devel/gdb/files/kgdb/fbsd-kthr.c
index 8d0053452675..4fb90b078cca 100644
--- a/devel/gdb/files/kgdb/fbsd-kthr.c
+++ b/devel/gdb/files/kgdb/fbsd-kthr.c
@@ -322,7 +322,7 @@ kgdb_thr_next(struct kthr *kt)
return (kt->next);
}
-char *
+const char *
kgdb_thr_extra_thread_info(int tid)
{
char comm[MAXCOMLEN + 1];
diff --git a/devel/gdb/files/kgdb/fbsd-kvm.c b/devel/gdb/files/kgdb/fbsd-kvm.c
index f155ae7f97b4..f5e18cbc79d3 100644
--- a/devel/gdb/files/kgdb/fbsd-kvm.c
+++ b/devel/gdb/files/kgdb/fbsd-kvm.c
@@ -195,7 +195,7 @@ fbsd_kernel_osabi_sniffer(bfd *abfd)
if (s != NULL && bfd_section_size(abfd, s) == sizeof(buf) &&
bfd_get_full_section_contents(abfd, s, &bufp) &&
memcmp(buf, KERNEL_INTERP, sizeof(buf)) == 0)
- return (GDB_OSABI_FREEBSD_ELF_KERNEL);
+ return (GDB_OSABI_FREEBSD_KERNEL);
return (GDB_OSABI_UNKNOWN);
}
@@ -362,7 +362,7 @@ kgdb_trgt_detach(struct target_ops *ops, const char *args, int from_tty)
printf_filtered("No vmcore file now.\n");
}
-static char *
+static const char *
kgdb_trgt_extra_thread_info(struct target_ops *ops, struct thread_info *ti)
{
@@ -402,7 +402,7 @@ kgdb_trgt_update_thread_list(struct target_ops *ops)
#endif
}
-static char *
+static const char *
kgdb_trgt_pid_to_str(struct target_ops *ops, ptid_t ptid)
{
static char buf[33];
diff --git a/devel/gdb/files/kgdb/i386fbsd-kern.c b/devel/gdb/files/kgdb/i386fbsd-kern.c
index dd84aae9625c..b09842e2d683 100644
--- a/devel/gdb/files/kgdb/i386fbsd-kern.c
+++ b/devel/gdb/files/kgdb/i386fbsd-kern.c
@@ -473,7 +473,7 @@ _initialize_i386_kgdb_tdep(void)
bfd_target_elf_flavour,
fbsd_kernel_osabi_sniffer);
gdbarch_register_osabi (bfd_arch_i386, 0,
- GDB_OSABI_FREEBSD_ELF_KERNEL, i386fbsd_kernel_init_abi);
+ GDB_OSABI_FREEBSD_KERNEL, i386fbsd_kernel_init_abi);
i386fbsd_pspace_data = register_program_space_data_with_cleanup (NULL,
i386fbsd_pspace_data_cleanup);
diff --git a/devel/gdb/files/kgdb/kgdb.h b/devel/gdb/files/kgdb/kgdb.h
index 6f37bf28f290..72d2b0051abc 100644
--- a/devel/gdb/files/kgdb/kgdb.h
+++ b/devel/gdb/files/kgdb/kgdb.h
@@ -53,7 +53,7 @@ struct kthr *kgdb_thr_lookup_pid(int);
struct kthr *kgdb_thr_lookup_paddr(uintptr_t);
struct kthr *kgdb_thr_lookup_taddr(uintptr_t);
struct kthr *kgdb_thr_next(struct kthr *);
-char *kgdb_thr_extra_thread_info(int);
+const char *kgdb_thr_extra_thread_info(int);
enum gdb_osabi fbsd_kernel_osabi_sniffer(bfd *abfd);
void fbsd_vmcore_set_supply_pcb (struct gdbarch *gdbarch,
diff --git a/devel/gdb/files/kgdb/mipsfbsd-kern.c b/devel/gdb/files/kgdb/mipsfbsd-kern.c
index dafa93227d8b..506d9fb200b3 100644
--- a/devel/gdb/files/kgdb/mipsfbsd-kern.c
+++ b/devel/gdb/files/kgdb/mipsfbsd-kern.c
@@ -28,7 +28,7 @@
*/
#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
+__FBSDID("$FreeBSD: head/gnu/usr.bin/gdb/kgdb/trgt_mips.c 249878 2013-04-25 04:53:01Z imp $");
#include <sys/types.h>
#ifdef __mips__
@@ -300,6 +300,6 @@ _initialize_mips_kgdb_tdep (void)
gdbarch_register_osabi_sniffer(bfd_arch_mips,
bfd_target_elf_flavour,
fbsd_kernel_osabi_sniffer);
- gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_FREEBSD_ELF_KERNEL,
+ gdbarch_register_osabi (bfd_arch_mips, 0, GDB_OSABI_FREEBSD_KERNEL,
mipsfbsd_kernel_init_abi);
}
diff --git a/devel/gdb/files/kgdb/ppcfbsd-kern.c b/devel/gdb/files/kgdb/ppcfbsd-kern.c
index ddf4e99e334b..b562e87d1e4e 100644
--- a/devel/gdb/files/kgdb/ppcfbsd-kern.c
+++ b/devel/gdb/files/kgdb/ppcfbsd-kern.c
@@ -58,7 +58,7 @@ ppcfbsd_supply_pcb(struct regcache *regcache, CORE_ADDR pcb_addr)
tdep = gdbarch_tdep (target_gdbarch());
- if (target_read_memory(pcb_addr, (gdb_byte *)&pcb, sizeof(pcb)) != 0)
+ if (target_read_memory(pcb_addr, &pcb, sizeof(pcb)) != 0)
memset(&pcb, 0, sizeof(pcb));
/*
@@ -241,14 +241,14 @@ _initialize_ppc_kgdb_tdep(void)
bfd_target_elf_flavour,
fbsd_kernel_osabi_sniffer);
gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc,
- GDB_OSABI_FREEBSD_ELF_KERNEL, ppcfbsd_kernel_init_abi);
+ GDB_OSABI_FREEBSD_KERNEL, ppcfbsd_kernel_init_abi);
gdbarch_register_osabi (bfd_arch_powerpc, bfd_mach_ppc64,
- GDB_OSABI_FREEBSD_ELF_KERNEL, ppcfbsd_kernel_init_abi);
+ GDB_OSABI_FREEBSD_KERNEL, ppcfbsd_kernel_init_abi);
/* Not sure about this one. */
gdbarch_register_osabi_sniffer(bfd_arch_rs6000,
bfd_target_elf_flavour,
fbsd_kernel_osabi_sniffer);
gdbarch_register_osabi (bfd_arch_rs6000, 0,
- GDB_OSABI_FREEBSD_ELF_KERNEL, ppcfbsd_kernel_init_abi);
+ GDB_OSABI_FREEBSD_KERNEL, ppcfbsd_kernel_init_abi);
}
diff --git a/devel/gdb/files/kgdb/sparc64fbsd-kern.c b/devel/gdb/files/kgdb/sparc64fbsd-kern.c
index b744534cbe30..9343d62b4fcc 100644
--- a/devel/gdb/files/kgdb/sparc64fbsd-kern.c
+++ b/devel/gdb/files/kgdb/sparc64fbsd-kern.c
@@ -55,7 +55,7 @@ sparc64fbsd_supply_pcb(struct regcache *regcache, CORE_ADDR pcb_addr)
{
struct pcb pcb;
- if (target_read_memory(pcb_addr, (gdb_byte *)&pcb, sizeof(pcb)) != 0)
+ if (target_read_memory(pcb_addr, &pcb, sizeof(pcb)) != 0)
memset(&pcb, 0, sizeof(pcb));
regcache_raw_supply(regcache, SPARC_SP_REGNUM, (char *)&pcb.pcb_sp);
@@ -252,14 +252,14 @@ kgdb_trgt_trapframe_prev_register(struct frame_info *next_frame,
ofs = (regnum - SPARC_L0_REGNUM) * 8;
*addrp = cache->sp + BIAS + ofs;
*lvalp = lval_memory;
- target_read_memory(*addrp, (gdb_byte *)valuep, regsz);
+ target_read_memory(*addrp, valuep, regsz);
}
return;
}
*addrp = cache->fp + ofs;
*lvalp = lval_memory;
- target_read_memory(*addrp, (gdb_byte *)valuep, regsz);
+ target_read_memory(*addrp, valuep, regsz);
}
static const struct frame_unwind kgdb_trgt_trapframe_unwind = {
@@ -314,6 +314,6 @@ _initialize_sparc64_kgdb_tdep(void)
bfd_target_elf_flavour,
fbsd_kernel_osabi_sniffer);
gdbarch_register_osabi (bfd_arch_sparc, bfd_mach_sparc_v9,
- GDB_OSABI_FREEBSD_ELF_KERNEL, sparc64fbsd_kernel_init_abi);
+ GDB_OSABI_FREEBSD_KERNEL, sparc64fbsd_kernel_init_abi);
}
diff --git a/devel/gdb/files/patch-armfbsd b/devel/gdb/files/patch-armfbsd
index 4223d2da0858..f1ea082b11ed 100644
--- a/devel/gdb/files/patch-armfbsd
+++ b/devel/gdb/files/patch-armfbsd
@@ -1,8 +1,8 @@
-diff --git gdb/armfbsd-nat.c gdb/armfbsd-nat.c
+diff --git gdb/arm-fbsd-nat.c gdb/arm-fbsd-nat.c
new file mode 100644
-index 0000000..b883411
+index 0000000000..b883411ceb
--- /dev/null
-+++ gdb/armfbsd-nat.c
++++ gdb/arm-fbsd-nat.c
@@ -0,0 +1,215 @@
+/* Native-dependent code for BSD Unix running on ARM's, for GDB.
+
@@ -219,11 +219,11 @@ index 0000000..b883411
+ t->to_store_registers = armfbsd_store_inferior_registers;
+ fbsd_nat_add_target (t);
+}
-diff --git gdb/armfbsd-tdep.c gdb/armfbsd-tdep.c
+diff --git gdb/arm-fbsd-tdep.c gdb/arm-fbsd-tdep.c
new file mode 100644
-index 0000000..f58c323
+index 0000000000..c76bc96700
--- /dev/null
-+++ gdb/armfbsd-tdep.c
++++ gdb/arm-fbsd-tdep.c
@@ -0,0 +1,109 @@
+/* Target-dependent code for PowerPC systems running FreeBSD.
+
@@ -331,37 +331,35 @@ index 0000000..f58c323
+_initialize_armfbsd_tdep (void)
+{
+
-+ gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_FREEBSD_ELF,
++ gdbarch_register_osabi (bfd_arch_arm, 0, GDB_OSABI_FREEBSD,
+ arm_freebsd_elf_init_abi);
+}
diff --git gdb/config/arm/fbsd.mh gdb/config/arm/fbsd.mh
new file mode 100644
-index 0000000..0a2d8b1
+index 0000000000..7b2fd44b91
--- /dev/null
+++ gdb/config/arm/fbsd.mh
@@ -0,0 +1,3 @@
+# Host: FreeBSD/arm
-+NATDEPFILES= armfbsd-nat.o fbsd-nat.o fork-child.o inf-ptrace.o
++NATDEPFILES= arm-fbsd-nat.o fbsd-nat.o fork-child.o inf-ptrace.o
+HAVE_NATIVE_GCORE_HOST = 1
diff --git gdb/Makefile.in gdb/Makefile.in
-index dfaa8a3..ddad28d 100644
+index 1d2dbaf3f7..6e96a88a98 100644
--- gdb/Makefile.in
+++ gdb/Makefile.in
-@@ -659,7 +659,7 @@
- ALL_TARGET_OBS = \
- armbsd-tdep.o arm.o arm-linux.o arm-linux-tdep.o \
- arm-get-next-pcs.o arm-symbian-tdep.o \
-- armnbsd-tdep.o armobsd-tdep.o \
-+ armnbsd-tdep.o armobsd-tdep.o armfbsd-tdep.o \
- arm-tdep.o arm-wince-tdep.o \
- avr-tdep.o \
- bfin-linux-tdep.o bfin-tdep.o \
-@@ -1666,7 +1666,7 @@
- arm.c arm-get-next-pcs.c \
- arm-linux.c arm-linux-nat.c arm-linux-tdep.c \
- arm-symbian-tdep.c arm-tdep.c \
-- armnbsd-nat.c armbsd-tdep.c armnbsd-tdep.c armobsd-tdep.c \
-+ armnbsd-nat.c armbsd-tdep.c armnbsd-tdep.c armobsd-tdep.c armfbsd-tdep.c \
- avr-tdep.c \
- bfin-linux-tdep.c bfin-tdep.c \
- bsd-uthread.c bsd-kvm.c \
+@@ -780,6 +780,7 @@ ALL_TARGET_OBS = \
+ arc-tdep.o \
+ arm.o \
+ arm-bsd-tdep.o \
++ arm-fbsd-tdep.o \
+ arm-get-next-pcs.o \
+ arm-linux.o \
+ arm-linux-tdep.o \
+@@ -2488,6 +2489,7 @@ ALLDEPFILES = \
+ arc-tdep.c \
+ arm.c \
+ arm-bsd-tdep.c \
++ arm-fbsd-tdep.c \
+ arm-get-next-pcs.c \
+ arm-linux.c \
+ arm-linux-nat.c \
diff --git a/devel/gdb/files/patch-fixes b/devel/gdb/files/patch-fixes
index 06805c24c2f6..43be92bf12d3 100644
--- a/devel/gdb/files/patch-fixes
+++ b/devel/gdb/files/patch-fixes
@@ -1,11 +1,12 @@
---- gdb/compile/compile-loc2c.c.orig 2016-07-05 12:30:44.811467295 +0200
-+++ gdb/compile/compile-loc2c.c 2016-07-05 12:38:46.432434206 +0200
-@@ -670,7 +670,7 @@
- enum dwarf_location_atom op = (enum dwarf_location_atom) *op_ptr;
+diff --git gdb/compile/compile-loc2c.c gdb/compile/compile-loc2c.c
+index a53214f2e5..67af62bb58 100644
+--- gdb/compile/compile-loc2c.c
++++ gdb/compile/compile-loc2c.c
+@@ -669,6 +669,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file &stream,
uint64_t uoffset, reg;
int64_t offset;
--
+
+ uoffset = 0;
- print_spaces (indent - 2, stream);
+ print_spaces (indent - 2, &stream);
if (info[op_ptr - base].label)
{
diff --git a/devel/gdb/files/patch-gdb-amd64-bsd-nat.c b/devel/gdb/files/patch-gdb-amd64-bsd-nat.c
new file mode 100644
index 000000000000..3741d942a985
--- /dev/null
+++ b/devel/gdb/files/patch-gdb-amd64-bsd-nat.c
@@ -0,0 +1,32 @@
+diff --git gdb/amd64-bsd-nat.c gdb/amd64-bsd-nat.c
+index ca61a3551b..0f875f8296 100644
+--- gdb/amd64-bsd-nat.c
++++ gdb/amd64-bsd-nat.c
+@@ -28,6 +28,7 @@
+ #include <sys/types.h>
+ #include <sys/ptrace.h>
+ #include <machine/reg.h>
++#include <machine/psl.h>
+
+ #include "amd64-tdep.h"
+ #include "amd64-nat.h"
+@@ -95,12 +96,19 @@ amd64bsd_store_inferior_registers (struct target_ops *ops,
+ if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
+ {
+ struct reg regs;
++ register_t old_rflags;
+
+ if (ptrace (PT_GETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+ perror_with_name (_("Couldn't get registers"));
+
++ old_rflags = regs.r_rflags;
+ amd64_collect_native_gregset (regcache, &regs, regnum);
+
++ /* This is a workaround about the PSL_USERCHANGE posix limitation. */
++ if ((regs.r_rflags ^ old_rflags ) & ~PSL_USERCHANGE)
++ {
++ regs.r_rflags ^= (regs.r_rflags ^ old_rflags ) & ~PSL_USERCHANGE;
++ }
+ if (ptrace (PT_SETREGS, pid, (PTRACE_TYPE_ARG3) &regs, 0) == -1)
+ perror_with_name (_("Couldn't write registers"));
+
diff --git a/devel/gdb/files/patch-gdb-amd64bsd-nat.c b/devel/gdb/files/patch-gdb-amd64bsd-nat.c
deleted file mode 100644
index 7787a495e69c..000000000000
--- a/devel/gdb/files/patch-gdb-amd64bsd-nat.c
+++ /dev/null
@@ -1,37 +0,0 @@
---- gdb/amd64bsd-nat.c.orig 2016-02-10 04:19:39.000000000 +0100
-+++ gdb/amd64bsd-nat.c 2016-03-04 11:17:58.581638025 +0100
-@@ -28,6 +28,7 @@
- #include <sys/types.h>
- #include <sys/ptrace.h>
- #include <machine/reg.h>
-+#include <machine/psl.h>
-
- #include "amd64-tdep.h"
- #include "amd64-nat.h"
-@@ -98,14 +99,25 @@
-
- if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum))
- {
-- struct reg regs;
-+ struct reg regs, oldregs;
-
-+ memset( &regs, 0, sizeof(struct reg));
-+ memset( &oldregs, 0, sizeof(struct reg));
- if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &regs, 0) == -1)
- perror_with_name (_("Couldn't get registers"));
-
-+ ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) &oldregs, 0);
- amd64_collect_native_gregset (regcache, &regs, regnum);
-
-+ if( (regs.r_rflags ^ oldregs.r_rflags ) & ~PSL_USERCHANGE)
-+ {
-+ //printf("regs.r_rflags = 0x%8.8lX\n", regs.r_rflags );
-+ //printf("oldregs.r_rflags = 0x%8.8lX\n", oldregs.r_rflags );
-+ regs.r_rflags ^= (regs.r_rflags ^ oldregs.r_rflags ) & ~PSL_USERCHANGE;
-+ //printf(" allowed regs.r_rflags = 0x%8.8X\n", regs.r_rflags );
-+ }
- if (ptrace (PT_SETREGS, get_ptrace_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) &regs, 0) == -1)
- perror_with_name (_("Couldn't write registers"));
diff --git a/devel/gdb/files/patch-gdb-configure b/devel/gdb/files/patch-gdb-configure
index 959ce76e2726..40c87f0c55da 100644
--- a/devel/gdb/files/patch-gdb-configure
+++ b/devel/gdb/files/patch-gdb-configure
@@ -1,24 +1,20 @@
---- gdb/configure.orig 2016-10-07 19:09:21.000000000 +0200
-+++ gdb/configure 2016-10-18 11:11:30.452542000 +0200
-@@ -14256,9 +14256,8 @@
+diff --git gdb/configure gdb/configure
+index 9f05b4bb7e..e14886b67d 100755
+--- gdb/configure
++++ gdb/configure
+@@ -15103,12 +15103,10 @@ if test "${ERROR_ON_WARNING}" = yes ; then
+ WERROR_CFLAGS="-Werror"
+ fi
- # These options work in either C or C++ modes.
+-# The options we'll try to enable.
++# These options work in either C or C++ modes.
build_warnings="-Wall -Wpointer-arith \
--Wno-unused -Wunused-value -Wunused-function \
--Wno-switch -Wno-char-subscripts \
---Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable"
+--Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable \
+--Wno-sign-compare -Wno-narrowing"
+-Wno-unused -Wno-switch -Wno-char-subscripts \
-+-Wempty-body"
-
- # Now add in C and C++ specific options, depending on mode.
- if test "$enable_build_with_cxx" = "yes"; then
-@@ -14266,8 +14265,7 @@
- -Wno-narrowing"
- else
- build_warnings="$build_warnings -Wpointer-sign -Wmissing-prototypes \
---Wdeclaration-after-statement -Wmissing-parameter-type \
---Wold-style-declaration -Wold-style-definition"
-+-Wdeclaration-after-statement -Wold-style-definition"
- fi
++-Wempty-body -Wno-sign-compare -Wno-narrowing"
# Enable -Wno-format by default when using gcc on mingw since many
+ # GCC versions complain about %I64.
diff --git a/devel/gdb/files/patch-gdb-corelow.c b/devel/gdb/files/patch-gdb-corelow.c
deleted file mode 100644
index 18ef23cc8430..000000000000
--- a/devel/gdb/files/patch-gdb-corelow.c
+++ /dev/null
@@ -1,12 +0,0 @@
---- gdb/corelow.c.orig 2017-01-16 10:40:23.118428000 +0100
-+++ gdb/corelow.c 2017-01-17 22:39:10.524216000 +0100
-@@ -541,7 +541,8 @@
- warning (_("Section `%s' in core file too small."), section_name);
- return;
- }
-- if (size != min_size && !(regset->flags & REGSET_VARIABLE_SIZE))
-+ if (size != min_size && regset != NULL &&
-+ !(regset->flags & REGSET_VARIABLE_SIZE))
- {
- warning (_("Unexpected size of section `%s' in core file."),
- section_name);
diff --git a/devel/gdb/files/patch-gdb-fbsd-nat.c b/devel/gdb/files/patch-gdb-fbsd-nat.c
index 4b0915a7a11b..ff17cc33c093 100644
--- a/devel/gdb/files/patch-gdb-fbsd-nat.c
+++ b/devel/gdb/files/patch-gdb-fbsd-nat.c
@@ -1,19 +1,11 @@
---- gdb/fbsd-nat.c.orig 2016-08-01 17:50:20.000000000 +0200
-+++ gdb/fbsd-nat.c 2016-12-14 23:23:39.467449000 +0100
-@@ -680,6 +680,9 @@
- if (!ptid_match (tp->ptid, *filter))
- return 0;
+diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c
+index ef5ad1ec92..dedb1ba59c 100644
+--- gdb/fbsd-nat.c
++++ gdb/fbsd-nat.c
+@@ -682,6 +682,14 @@ fbsd_resume (struct target_ops *ops,
+ struct thread_info *tp;
+ int request;
-+ if (tp->state == THREAD_EXITED) {
-+ return 0;
-+ }
- if (ptrace (PT_RESUME, ptid_get_lwp (tp->ptid), NULL, 0) == -1)
- perror_with_name (("ptrace"));
- return 0;
-@@ -710,6 +713,14 @@
- ptid_get_tid (ptid));
- if (ptid_lwp_p (ptid))
- {
+#ifndef PT_LWP_EVENTS
+ /* When LWP events are not supported, a new thread might already be
+ running that has not yet reported an event when GDB wishes to
@@ -22,6 +14,6 @@
+ is resumed. */
+ fbsd_add_threads (ptid_get_pid (ptid));
+#endif
- /* If ptid is a specific LWP, suspend all other LWPs in the process. */
- iterate_over_threads (resume_one_thread_cb, &ptid);
- }
+ ALL_NON_EXITED_THREADS (tp)
+ {
+ if (ptid_get_pid (tp->ptid) != ptid_get_pid (ptid))
diff --git a/devel/gdb/files/patch-gdb-gnulib-import-stddef.in.h b/devel/gdb/files/patch-gdb-gnulib-import-stddef.in.h
index 8b9ad7d9d7ee..656f018011bf 100644
--- a/devel/gdb/files/patch-gdb-gnulib-import-stddef.in.h
+++ b/devel/gdb/files/patch-gdb-gnulib-import-stddef.in.h
@@ -1,10 +1,12 @@
---- gdb/gnulib/import/stddef.in.h.orig 2016-10-07 23:33:10.529558000 -0700
-+++ gdb/gnulib/import/stddef.in.h 2016-10-07 23:33:23.824676000 -0700
-@@ -82,7 +82,7 @@
- #endif
-
- /* Some platforms lack max_align_t. */
--#if !@HAVE_MAX_ALIGN_T@
+diff --git gdb/gnulib/import/stddef.in.h gdb/gnulib/import/stddef.in.h
+index f4c4a1070d..023ea2064d 100644
+--- gdb/gnulib/import/stddef.in.h
++++ gdb/gnulib/import/stddef.in.h
+@@ -84,7 +84,7 @@
+ /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is
+ a hack in case the configure-time test was done with g++ even though
+ we are currently compiling with gcc. */
+-#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T)
+#if 0
/* On the x86, the maximum storage alignment of double, long, etc. is 4,
but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
diff --git a/devel/gdb/files/patch-gdb-i386-fbsd-nat.c b/devel/gdb/files/patch-gdb-i386-fbsd-nat.c
new file mode 100644
index 000000000000..316881ef722b
--- /dev/null
+++ b/devel/gdb/files/patch-gdb-i386-fbsd-nat.c
@@ -0,0 +1,12 @@
+diff --git gdb/i386-fbsd-nat.c gdb/i386-fbsd-nat.c
+index dca6c0162b..6629950feb 100644
+--- gdb/i386-fbsd-nat.c
++++ gdb/i386-fbsd-nat.c
+@@ -163,7 +163,6 @@ _initialize_i386fbsd_nat (void)
+ t->to_read_description = i386fbsd_read_description;
+ #endif
+
+- t->to_resume = i386fbsd_resume;
+ fbsd_nat_add_target (t);
+
+ /* Support debugging kernel virtual memory images. */
diff --git a/devel/gdb/files/patch-gdb-i386fbsd-nat.c b/devel/gdb/files/patch-gdb-i386fbsd-nat.c
deleted file mode 100644
index 13ee2c191e3c..000000000000
--- a/devel/gdb/files/patch-gdb-i386fbsd-nat.c
+++ /dev/null
@@ -1,11 +0,0 @@
-diff --git gdb/i386fbsd-nat.c gdb/i386fbsd-nat.c
-index 6c43f2c..a205a26 100644
---- gdb/i386fbsd-nat.c
-+++ gdb/i386fbsd-nat.c
-@@ -175,7 +175,6 @@ _initialize_i386fbsd_nat (void)
- t->to_read_description = i386fbsd_read_description;
- #endif
-
-- t->to_resume = i386fbsd_resume;
- fbsd_nat_add_target (t);
- /* Support debugging kernel virtual memory images. */
diff --git a/devel/gdb/files/patch-gdb-x86bsd-nat.c b/devel/gdb/files/patch-gdb-x86bsd-nat.c
deleted file mode 100644
index 07cbea6df878..000000000000
--- a/devel/gdb/files/patch-gdb-x86bsd-nat.c
+++ /dev/null
@@ -1,14 +0,0 @@
---- gdb/x86bsd-nat.c.orig 2016-10-18 13:27:55.820837000 +0200
-+++ gdb/x86bsd-nat.c 2016-10-18 13:29:02.518927000 +0200
-@@ -82,7 +82,11 @@
- /* For some mysterious reason, some of the reserved bits in the
- debug control register get set. Mask these off, otherwise the
- ptrace call below will fail. */
-+#ifdef __i386__
-+ DBREG_DRX ((&dbregs), 7) &= ~(0x0000fc00);
-+#else
- DBREG_DRX ((&dbregs), 7) &= ~(0xffffffff0000fc00);
-+#endif
-
- DBREG_DRX ((&dbregs), regnum) = value;
-