Index: gdb/Makefile =================================================================== --- gdb/Makefile +++ 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,7 @@ TEST_DEPENDS= runtest:misc/dejagnu TEST_TARGET= check -USES= compiler:env cpe iconv gmake libtool tar:xz +USES= compiler:c++11-lib cpe iconv gmake libtool tar:xz USE_CSTD= gnu89 CPE_VENDOR= gnu GNU_CONFIGURE= yes @@ -31,8 +30,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} @@ -64,7 +62,7 @@ PORT_READLINE_USES= readline:port PYTHON_CONFIGURE_ON= --with-python=${PYTHON_CMD} PYTHON_CONFIGURE_OFF= --without-python -PYTHON_USES= python:2 +PYTHON_USES= python TUI_CONFIGURE_ENABLE= tui .include Index: gdb/distinfo =================================================================== --- gdb/distinfo +++ 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: gdb/files/commit-387360daf9 =================================================================== --- gdb/files/commit-387360daf9 +++ gdb/files/commit-387360daf9 @@ -1,680 +0,0 @@ -commit 9978d70207d8a6bc7ff3c570814053c68e78b913 -Author: John Baldwin -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 . */ -+ -+#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 . 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 . 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 . */ -+ -+#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: gdb/files/commit-b268007c68 =================================================================== --- gdb/files/commit-b268007c68 +++ gdb/files/commit-b268007c68 @@ -1,191 +0,0 @@ -commit acde9e8dc95a053909e137c1fcda94c719eb8cc1 -Author: John Baldwin -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 . */ -+ -+#include "defs.h" -+#include "inferior.h" -+#include "regcache.h" -+#include "target.h" -+ -+#include -+#include -+#include -+ -+#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: gdb/files/commit-b5430a3ced =================================================================== --- /dev/null +++ gdb/files/commit-b5430a3ced @@ -0,0 +1,117 @@ +commit b5430a3ced5fe5ba484bd9b3215b9ae19ced0160 +Author: John Baldwin +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: gdb/files/extrapatch-kgdb =================================================================== --- gdb/files/extrapatch-kgdb +++ 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,17 +93,70 @@ 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 @@ # 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: gdb/files/kgdb/amd64fbsd-kern.c =================================================================== --- gdb/files/kgdb/amd64fbsd-kern.c +++ 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: gdb/files/kgdb/fbsd-kld.c =================================================================== --- gdb/files/kgdb/fbsd-kld.c +++ 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,12 +428,7 @@ } END_CATCH - solib_add(NULL, 1, ¤t_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 @@ } 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: gdb/files/kgdb/fbsd-kthr.c =================================================================== --- gdb/files/kgdb/fbsd-kthr.c +++ 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: gdb/files/kgdb/fbsd-kvm.c =================================================================== --- gdb/files/kgdb/fbsd-kvm.c +++ 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: gdb/files/kgdb/i386fbsd-kern.c =================================================================== --- gdb/files/kgdb/i386fbsd-kern.c +++ 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: gdb/files/kgdb/kgdb.h =================================================================== --- gdb/files/kgdb/kgdb.h +++ 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: gdb/files/kgdb/mipsfbsd-kern.c =================================================================== --- gdb/files/kgdb/mipsfbsd-kern.c +++ gdb/files/kgdb/mipsfbsd-kern.c @@ -28,7 +28,7 @@ */ #include -__FBSDID("$FreeBSD$"); +__FBSDID("$FreeBSD: head/gnu/usr.bin/gdb/kgdb/trgt_mips.c 249878 2013-04-25 04:53:01Z imp $"); #include #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: gdb/files/kgdb/ppcfbsd-kern.c =================================================================== --- gdb/files/kgdb/ppcfbsd-kern.c +++ 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: gdb/files/kgdb/sparc64fbsd-kern.c =================================================================== --- gdb/files/kgdb/sparc64fbsd-kern.c +++ 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: gdb/files/patch-armfbsd =================================================================== --- gdb/files/patch-armfbsd +++ 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: gdb/files/patch-fixes =================================================================== --- gdb/files/patch-fixes +++ 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: gdb/files/patch-gdb-amd64-bsd-nat.c =================================================================== --- /dev/null +++ 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 + #include + #include ++#include + + #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: devel/gdb/files/patch-gdb-amd64bsd-nat.c =================================================================== --- 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 - #include - #include -+#include - - #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: gdb/files/patch-gdb-configure =================================================================== --- gdb/files/patch-gdb-configure +++ 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. Index: devel/gdb/files/patch-gdb-corelow.c =================================================================== --- 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); Index: gdb/files/patch-gdb-fbsd-nat.c =================================================================== --- gdb/files/patch-gdb-fbsd-nat.c +++ 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: gdb/files/patch-gdb-gnulib-import-stddef.in.h =================================================================== --- gdb/files/patch-gdb-gnulib-import-stddef.in.h +++ 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: gdb/files/patch-gdb-i386-fbsd-nat.c =================================================================== --- /dev/null +++ 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: devel/gdb/files/patch-gdb-i386fbsd-nat.c =================================================================== --- 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. */ Index: devel/gdb/files/patch-gdb-x86bsd-nat.c =================================================================== --- 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; -