Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F111912565
D11465.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
69 KB
Referenced Files
None
Subscribers
None
D11465.diff
View Options
Index: head/devel/gdb/Makefile
===================================================================
--- head/devel/gdb/Makefile
+++ head/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 @@
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+= -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}
Index: head/devel/gdb/distinfo
===================================================================
--- head/devel/gdb/distinfo
+++ head/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
Index: head/devel/gdb/files/commit-387360daf9
===================================================================
--- head/devel/gdb/files/commit-387360daf9
+++ head/devel/gdb/files/commit-387360daf9
@@ -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 */
Index: head/devel/gdb/files/commit-b268007c68
===================================================================
--- head/devel/gdb/files/commit-b268007c68
+++ head/devel/gdb/files/commit-b268007c68
@@ -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) ®s, 0) == -1)
-+ perror_with_name (_("Couldn't get registers"));
-+
-+ mips_fbsd_supply_gregs (regcache, regnum, ®s, 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) ®s, 0) == -1)
-+ perror_with_name (_("Couldn't get registers"));
-+
-+ mips_fbsd_collect_gregs (regcache, regnum, (char *) ®s,
-+ sizeof (register_t));
-+
-+ if (ptrace (PT_SETREGS, get_ptrace_pid (inferior_ptid),
-+ (PTRACE_TYPE_ARG3) ®s, 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);
-+}
Index: head/devel/gdb/files/commit-b5430a3ced
===================================================================
--- head/devel/gdb/files/commit-b5430a3ced
+++ head/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. */
Index: head/devel/gdb/files/extrapatch-kgdb
===================================================================
--- head/devel/gdb/files/extrapatch-kgdb
+++ head/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 @@
#
# 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 @@
# 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,18 +93,71 @@
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.
-all_object_files = gdb.o $(LIBGDB_OBS) gdbtk-main.o \
@@ -82,10 +166,10 @@
# 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 @@
+
+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 @@
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 @@
# 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 @@
;;
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 @@
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 @@
;;
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 @@
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);
Index: head/devel/gdb/files/kgdb/amd64fbsd-kern.c
===================================================================
--- head/devel/gdb/files/kgdb/amd64fbsd-kern.c
+++ head/devel/gdb/files/kgdb/amd64fbsd-kern.c
@@ -238,7 +238,7 @@
_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)
Index: head/devel/gdb/files/kgdb/fbsd-kld.c
===================================================================
--- head/devel/gdb/files/kgdb/fbsd-kld.c
+++ head/devel/gdb/files/kgdb/fbsd-kld.c
@@ -140,26 +140,22 @@
* 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 @@
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, §ions, §ions_end))
+ if (build_section_table (bfd.get(), §ions, §ions_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 @@
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,14 +428,9 @@
}
END_CATCH
- solib_add(NULL, 1, ¤t_target, auto_solib_add);
+ solib_add(NULL, from_tty, auto_solib_add);
}
-static void
-kld_special_symbol_handling (void)
-{
-}
-
static struct so_list *
kld_current_sos (void)
{
@@ -547,7 +539,8 @@
}
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 @@
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;
Index: head/devel/gdb/files/kgdb/fbsd-kthr.c
===================================================================
--- head/devel/gdb/files/kgdb/fbsd-kthr.c
+++ head/devel/gdb/files/kgdb/fbsd-kthr.c
@@ -322,7 +322,7 @@
return (kt->next);
}
-char *
+const char *
kgdb_thr_extra_thread_info(int tid)
{
char comm[MAXCOMLEN + 1];
Index: head/devel/gdb/files/kgdb/fbsd-kvm.c
===================================================================
--- head/devel/gdb/files/kgdb/fbsd-kvm.c
+++ head/devel/gdb/files/kgdb/fbsd-kvm.c
@@ -195,7 +195,7 @@
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 @@
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 @@
#endif
}
-static char *
+static const char *
kgdb_trgt_pid_to_str(struct target_ops *ops, ptid_t ptid)
{
static char buf[33];
Index: head/devel/gdb/files/kgdb/i386fbsd-kern.c
===================================================================
--- head/devel/gdb/files/kgdb/i386fbsd-kern.c
+++ head/devel/gdb/files/kgdb/i386fbsd-kern.c
@@ -473,7 +473,7 @@
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);
Index: head/devel/gdb/files/kgdb/kgdb.h
===================================================================
--- head/devel/gdb/files/kgdb/kgdb.h
+++ head/devel/gdb/files/kgdb/kgdb.h
@@ -53,7 +53,7 @@
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,
Index: head/devel/gdb/files/kgdb/mipsfbsd-kern.c
===================================================================
--- head/devel/gdb/files/kgdb/mipsfbsd-kern.c
+++ head/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 @@
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);
}
Index: head/devel/gdb/files/kgdb/ppcfbsd-kern.c
===================================================================
--- head/devel/gdb/files/kgdb/ppcfbsd-kern.c
+++ head/devel/gdb/files/kgdb/ppcfbsd-kern.c
@@ -58,7 +58,7 @@
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 @@
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);
}
Index: head/devel/gdb/files/kgdb/sparc64fbsd-kern.c
===================================================================
--- head/devel/gdb/files/kgdb/sparc64fbsd-kern.c
+++ head/devel/gdb/files/kgdb/sparc64fbsd-kern.c
@@ -55,7 +55,7 @@
{
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 @@
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 @@
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);
}
Index: head/devel/gdb/files/patch-armfbsd
===================================================================
--- head/devel/gdb/files/patch-armfbsd
+++ head/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 @@
+ 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 @@
+_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 \
Index: head/devel/gdb/files/patch-fixes
===================================================================
--- head/devel/gdb/files/patch-fixes
+++ head/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)
{
Index: head/devel/gdb/files/patch-gdb-amd64-bsd-nat.c
===================================================================
--- head/devel/gdb/files/patch-gdb-amd64-bsd-nat.c
+++ head/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) ®s, 0) == -1)
+ perror_with_name (_("Couldn't get registers"));
+
++ old_rflags = regs.r_rflags;
+ amd64_collect_native_gregset (regcache, ®s, 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) ®s, 0) == -1)
+ perror_with_name (_("Couldn't write registers"));
+
Index: head/devel/gdb/files/patch-gdb-amd64bsd-nat.c
===================================================================
--- head/devel/gdb/files/patch-gdb-amd64bsd-nat.c
+++ head/devel/gdb/files/patch-gdb-amd64bsd-nat.c
@@ -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( ®s, 0, sizeof(struct reg));
-+ memset( &oldregs, 0, sizeof(struct reg));
- if (ptrace (PT_GETREGS, get_ptrace_pid (inferior_ptid),
- (PTRACE_TYPE_ARG3) ®s, 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, ®s, 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) ®s, 0) == -1)
- perror_with_name (_("Couldn't write registers"));
Index: head/devel/gdb/files/patch-gdb-configure
===================================================================
--- head/devel/gdb/files/patch-gdb-configure
+++ head/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"
++-Wempty-body -Wno-sign-compare -Wno-narrowing"
- # 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
-
# Enable -Wno-format by default when using gcc on mingw since many
+ # GCC versions complain about %I64.
Index: head/devel/gdb/files/patch-gdb-corelow.c
===================================================================
--- head/devel/gdb/files/patch-gdb-corelow.c
+++ head/devel/gdb/files/patch-gdb-corelow.c
@@ -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);
Index: head/devel/gdb/files/patch-gdb-fbsd-nat.c
===================================================================
--- head/devel/gdb/files/patch-gdb-fbsd-nat.c
+++ head/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))
Index: head/devel/gdb/files/patch-gdb-gnulib-import-stddef.in.h
===================================================================
--- head/devel/gdb/files/patch-gdb-gnulib-import-stddef.in.h
+++ head/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,
Index: head/devel/gdb/files/patch-gdb-i386-fbsd-nat.c
===================================================================
--- head/devel/gdb/files/patch-gdb-i386-fbsd-nat.c
+++ head/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. */
Index: head/devel/gdb/files/patch-gdb-i386fbsd-nat.c
===================================================================
--- head/devel/gdb/files/patch-gdb-i386fbsd-nat.c
+++ head/devel/gdb/files/patch-gdb-i386fbsd-nat.c
@@ -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. */
Index: head/devel/gdb/files/patch-gdb-x86bsd-nat.c
===================================================================
--- head/devel/gdb/files/patch-gdb-x86bsd-nat.c
+++ head/devel/gdb/files/patch-gdb-x86bsd-nat.c
@@ -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;
-
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Tue, Mar 11, 4:28 AM (19 h, 41 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
17094497
Default Alt Text
D11465.diff (69 KB)
Attached To
Mode
D11465: Upgrade GDB to 8.0.
Attached
Detach File
Event Timeline
Log In to Comment