Index: head/devel/gdb/Makefile =================================================================== --- head/devel/gdb/Makefile +++ head/devel/gdb/Makefile @@ -2,8 +2,8 @@ # $FreeBSD$ PORTNAME= gdb -PORTVERSION= 8.2.1 -PORTREVISION= 3 +PORTVERSION= 8.3 +PORTREVISION= 0 CATEGORIES= devel MASTER_SITES= GNU @@ -14,12 +14,12 @@ LICENSE_FILE= ${WRKSRC}/COPYING3 # untested on sparc64, might work -ONLY_FOR_ARCHS= aarch64 amd64 armv6 armv7 i386 mips powerpc powerpc64 +NOT_FOR_ARCHS= sparc64 LIB_DEPENDS= libmpfr.so:math/mpfr TEST_DEPENDS= runtest:misc/dejagnu -USES= compiler:c++11-lang cpe gmake libtool tar:xz +USES= compiler:c++11-lang cpe gmake libtool pkgconfig tar:xz USE_PYTHON= flavors py3kplist TEST_TARGET= check @@ -39,17 +39,24 @@ CFLAGS+= -Wno-unknown-warning-option EXCLUDE= dejagnu expect sim texinfo intl EXTRACT_AFTER_ARGS= ${EXCLUDE:S/^/--exclude /} -EXTRA_PATCHES= ${FILESDIR}/commit-8aa0243d54 \ - ${FILESDIR}/commit-93579f6f90 \ - ${FILESDIR}/commit-2861ee4fde +EXTRA_PATCHES= ${FILESDIR}/commit-1163a4b7a3 \ + ${FILESDIR}/commit-dd6876c91c \ + ${FILESDIR}/commit-6e056c8178 \ + ${FILESDIR}/commit-36c53a0262 \ + ${FILESDIR}/commit-ef0bd2046f \ + ${FILESDIR}/commit-945f3901b5 \ + ${FILESDIR}/commit-f5424cfa7e \ + ${FILESDIR}/commit-ce25aa57a3 \ + ${FILESDIR}/commit-8399425f5f LIB_DEPENDS+= libexpat.so:textproc/expat2 VER= ${PORTVERSION:S/.//g} PLIST_SUB= VER=${VER} -OPTIONS_DEFINE= DEBUG GDB_LINK GUILE KGDB NLS PYTHON TUI +OPTIONS_DEFINE= DEBUG GDB_LINK GUILE KGDB NLS PYTHON SOURCE_HIGHLIGHT TUI -OPTIONS_DEFAULT= GDB_LINK KGDB NLS PYTHON TUI PORT_READLINE PORT_ICONV SYSTEM_ZLIB +OPTIONS_DEFAULT= GDB_LINK KGDB NLS PYTHON SOURCE_HIGHLIGHT TUI +OPTIONS_DEFAULT+= PORT_READLINE PORT_ICONV SYSTEM_ZLIB OPTIONS_SINGLE= READLINE ICONV ZLIB OPTIONS_SINGLE_READLINE= BUNDLED_READLINE PORT_READLINE @@ -62,6 +69,7 @@ BUNDLED_ZLIB_DESC= from gdb distfile PORT_READLINE_DESC= from devel/readline port PORT_ICONV_DESC= use libiconv, with wider charset support +SOURCE_HIGHLIGHT_DESC= Source Code Styling SYSTEM_ICONV_DESC= use libc iconv, with no wchar support SYSTEM_ZLIB_DESC= use system zlib TUI_DESC= Text User Interface enabled @@ -79,6 +87,9 @@ PYTHON_CONFIGURE_ON= --with-python=${PYTHON_CMD} PYTHON_CONFIGURE_OFF= --without-python PYTHON_USES= python +SOURCE_HIGHLIGHT_WITH= source-highlight +SOURCE_HIGHLIGHT_LIB_DEPENDS= \ + libsource-highlight.so:textproc/source-highlight SYSTEM_ICONV_USES= iconv SYSTEM_ZLIB_WITH= system-zlib TUI_CONFIGURE_ENABLE= tui @@ -96,7 +107,7 @@ GH_ACCOUNT= bsdjhb:libcxx GH_PROJECT= libcxx-gdbpy:libcxx -GH_TAGNAME= 99aae0c:libcxx +GH_TAGNAME= 229610a:libcxx # Workaround USE_GITHUB preventing the default DISTFILES DISTFILES= ${DISTNAME}${EXTRACT_SUFX} Index: head/devel/gdb/distinfo =================================================================== --- head/devel/gdb/distinfo +++ head/devel/gdb/distinfo @@ -1,5 +1,5 @@ -TIMESTAMP = 1550011043 -SHA256 (gdb-8.2.1.tar.xz) = 0a6a432907a03c5c8eaad3c3cffd50c00a40c3a5e3c4039440624bae703f2202 -SIZE (gdb-8.2.1.tar.xz) = 20170388 -SHA256 (bsdjhb-libcxx-gdbpy-99aae0c_GH0.tar.gz) = 101425f8041489e31370ddd5938b41541b88a2e1051da70fe12d37c9186aa7eb -SIZE (bsdjhb-libcxx-gdbpy-99aae0c_GH0.tar.gz) = 4607 +TIMESTAMP = 1559324758 +SHA256 (gdb-8.3.tar.xz) = 802f7ee309dcc547d65a68d61ebd6526762d26c3051f52caebe2189ac1ffd72e +SIZE (gdb-8.3.tar.xz) = 20490300 +SHA256 (bsdjhb-libcxx-gdbpy-229610a_GH0.tar.gz) = d4235f98b71c4d5e3f01744de279e64808229dd46c0f00cac6a12fdeb3a998a1 +SIZE (bsdjhb-libcxx-gdbpy-229610a_GH0.tar.gz) = 5299 Index: head/devel/gdb/files/commit-1163a4b7a3 =================================================================== --- head/devel/gdb/files/commit-1163a4b7a3 +++ head/devel/gdb/files/commit-1163a4b7a3 @@ -0,0 +1,419 @@ +commit 1163a4b7a38a79ebd153dc5ee76ce93877d21dbd +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Support the fs_base and gs_base registers on i386. + + As on amd64, these registers hold the base address of the fs and gs + segments, respectively. For i386 these two registers are 32 bits. + + gdb/ChangeLog: + + * amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description): + Update calls to i386_target_description to add 'segments' + parameter. + * amd64-tdep.c (amd64_init_abi): Set tdep->fsbase_regnum. Don't + add segment base registers. + * arch/i386.c (i386_create_target_description): Add 'segments' + parameter to enable segment base registers. + * arch/i386.h (i386_create_target_description): Likewise. + * features/i386/32bit-segments.xml: New file. + * features/i386/32bit-segments.c: Generate. + * i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Update + call to i386_target_description to add 'segments' parameter. + * i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise. + * i386-go32-tdep.c (i386_go32_init_abi): Likewise. + * i386-linux-tdep.c (i386_linux_read_description): Likewise. + * i386-tdep.c (i386_validate_tdesc_p): Add segment base registers + if feature is present. + (i386_gdbarch_init): Pass I386_NUM_REGS to set_gdbarch_num_regs. + Add 'segments' parameter to call to i386_target_description. + (i386_target_description): Add 'segments' parameter to enable + segment base registers. + (_initialize_i386_tdep) [GDB_SELF_TEST]: Add 'segments' parameter + to call to i386_target_description. + * i386-tdep.h (struct gdbarch_tdep): Add 'fsbase_regnum'. + (enum i386_regnum): Add I386_FSBASE_REGNUM and I386_GSBASE_REGNUM. + Define I386_NUM_REGS. + (i386_target_description): Add 'segments' parameter to enable + segment base registers. + + gdb/gdbserver/ChangeLog: + + * linux-x86-tdesc.c (i386_linux_read_description): Update call to + i386_create_target_description for 'segments' parameter. + * lynx-i386-low.c (lynx_i386_arch_setup): Likewise. + * nto-x86-low.c (nto_x86_arch_setup): Likewise. + * win32-i386-low.c (i386_arch_setup): Likewise. + +diff --git gdb/amd64-fbsd-nat.c gdb/amd64-fbsd-nat.c +index 74ef240766..9fff763dd3 100644 +--- gdb/amd64-fbsd-nat.c ++++ gdb/amd64-fbsd-nat.c +@@ -190,13 +190,13 @@ amd64_fbsd_nat_target::read_description () + if (is64) + return amd64_target_description (xcr0, true); + else +- return i386_target_description (xcr0); ++ return i386_target_description (xcr0, false); + } + #endif + if (is64) + return amd64_target_description (X86_XSTATE_SSE_MASK, true); + else +- return i386_target_description (X86_XSTATE_SSE_MASK); ++ return i386_target_description (X86_XSTATE_SSE_MASK, false); + } + + #if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO) +diff --git gdb/amd64-tdep.c gdb/amd64-tdep.c +index 3f61997d66..d5892954d7 100644 +--- gdb/amd64-tdep.c ++++ gdb/amd64-tdep.c +@@ -3107,15 +3107,7 @@ amd64_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch, + + if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.segments") != NULL) + { +- const struct tdesc_feature *feature = +- tdesc_find_feature (tdesc, "org.gnu.gdb.i386.segments"); +- struct tdesc_arch_data *tdesc_data_segments = +- (struct tdesc_arch_data *) info.tdep_info; +- +- tdesc_numbered_register (feature, tdesc_data_segments, +- AMD64_FSBASE_REGNUM, "fs_base"); +- tdesc_numbered_register (feature, tdesc_data_segments, +- AMD64_GSBASE_REGNUM, "gs_base"); ++ tdep->fsbase_regnum = AMD64_FSBASE_REGNUM; + } + + if (tdesc_find_feature (tdesc, "org.gnu.gdb.i386.pkeys") != NULL) +diff --git gdb/arch/i386.c gdb/arch/i386.c +index 7d2901333b..ab24cf71cb 100644 +--- gdb/arch/i386.c ++++ gdb/arch/i386.c +@@ -28,11 +28,12 @@ + #include "../features/i386/32bit-avx512.c" + #include "../features/i386/32bit-mpx.c" + #include "../features/i386/32bit-pkeys.c" ++#include "../features/i386/32bit-segments.c" + + /* Create i386 target descriptions according to XCR0. */ + + target_desc * +-i386_create_target_description (uint64_t xcr0, bool is_linux) ++i386_create_target_description (uint64_t xcr0, bool is_linux, bool segments) + { + target_desc *tdesc = allocate_target_description (); + +@@ -53,6 +54,9 @@ i386_create_target_description (uint64_t xcr0, bool is_linux) + if (is_linux) + regnum = create_feature_i386_32bit_linux (tdesc, regnum); + ++ if (segments) ++ regnum = create_feature_i386_32bit_segments (tdesc, regnum); ++ + if (xcr0 & X86_XSTATE_AVX) + regnum = create_feature_i386_32bit_avx (tdesc, regnum); + +diff --git gdb/arch/i386.h gdb/arch/i386.h +index fa85438080..9a831cea30 100644 +--- gdb/arch/i386.h ++++ gdb/arch/i386.h +@@ -21,6 +21,7 @@ + #include "common/tdesc.h" + #include + +-target_desc *i386_create_target_description (uint64_t xcr0, bool is_linux); ++target_desc *i386_create_target_description (uint64_t xcr0, bool is_linux, ++ bool segments); + + #endif /* ARCH_I386_H */ +diff --git gdb/features/i386/32bit-segments.c gdb/features/i386/32bit-segments.c +new file mode 100644 +index 0000000000..c22c3dfbc3 +--- /dev/null ++++ gdb/features/i386/32bit-segments.c +@@ -0,0 +1,15 @@ ++/* THIS FILE IS GENERATED. -*- buffer-read-only: t -*- vi:set ro: ++ Original: 32bit-segments.xml */ ++ ++#include "common/tdesc.h" ++ ++static int ++create_feature_i386_32bit_segments (struct target_desc *result, long regnum) ++{ ++ struct tdesc_feature *feature; ++ ++ feature = tdesc_create_feature (result, "org.gnu.gdb.i386.segments"); ++ tdesc_create_reg (feature, "fs_base", regnum++, 1, NULL, 32, "int"); ++ tdesc_create_reg (feature, "gs_base", regnum++, 1, NULL, 32, "int"); ++ return regnum; ++} +diff --git gdb/features/i386/32bit-segments.xml gdb/features/i386/32bit-segments.xml +new file mode 100644 +index 0000000000..098948e5ec +--- /dev/null ++++ gdb/features/i386/32bit-segments.xml +@@ -0,0 +1,12 @@ ++ ++ ++ ++ ++ ++ ++ ++ +diff --git gdb/gdbserver/linux-x86-tdesc.c gdb/gdbserver/linux-x86-tdesc.c +index 04bccc84ed..8f24a3d72d 100644 +--- gdb/gdbserver/linux-x86-tdesc.c ++++ gdb/gdbserver/linux-x86-tdesc.c +@@ -87,7 +87,7 @@ i386_linux_read_description (uint64_t xcr0) + + if (*tdesc == NULL) + { +- *tdesc = i386_create_target_description (xcr0, true); ++ *tdesc = i386_create_target_description (xcr0, true, false); + + init_target_desc (*tdesc, i386_expedite_regs); + } +diff --git gdb/gdbserver/lynx-i386-low.c gdb/gdbserver/lynx-i386-low.c +index bc1027dc52..e47f6b92f6 100644 +--- gdb/gdbserver/lynx-i386-low.c ++++ gdb/gdbserver/lynx-i386-low.c +@@ -331,7 +331,7 @@ static void + lynx_i386_arch_setup (void) + { + struct target_desc *tdesc +- = i386_create_target_description (X86_XSTATE_SSE_MASK, false); ++ = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); + + init_target_desc (tdesc, i386_expedite_regs); + +diff --git gdb/gdbserver/nto-x86-low.c gdb/gdbserver/nto-x86-low.c +index 1b00f7f6cc..cfbe7ba6d8 100644 +--- gdb/gdbserver/nto-x86-low.c ++++ gdb/gdbserver/nto-x86-low.c +@@ -89,7 +89,7 @@ nto_x86_arch_setup (void) + { + the_low_target.num_regs = 16; + struct target_desc *tdesc +- = i386_create_target_description (X86_XSTATE_SSE_MASK, false); ++ = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); + + init_target_desc (tdesc, i386_expedite_regs); + +diff --git gdb/gdbserver/win32-i386-low.c gdb/gdbserver/win32-i386-low.c +index 3be75d2bf2..7b187d3bea 100644 +--- gdb/gdbserver/win32-i386-low.c ++++ gdb/gdbserver/win32-i386-low.c +@@ -439,7 +439,7 @@ i386_arch_setup (void) + false, false); + const char **expedite_regs = amd64_expedite_regs; + #else +- tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false); ++ tdesc = i386_create_target_description (X86_XSTATE_SSE_MASK, false, false); + const char **expedite_regs = i386_expedite_regs; + #endif + +diff --git gdb/i386-fbsd-nat.c gdb/i386-fbsd-nat.c +index 2309b76506..7106e90801 100644 +--- gdb/i386-fbsd-nat.c ++++ gdb/i386-fbsd-nat.c +@@ -160,7 +160,7 @@ i386_fbsd_nat_target::read_description () + if (x86bsd_xsave_len == 0) + xcr0 = X86_XSTATE_SSE_MASK; + +- return i386_target_description (xcr0); ++ return i386_target_description (xcr0, false); + } + #endif + +diff --git gdb/i386-fbsd-tdep.c gdb/i386-fbsd-tdep.c +index 236edd692a..2f28bad728 100644 +--- gdb/i386-fbsd-tdep.c ++++ gdb/i386-fbsd-tdep.c +@@ -267,7 +267,7 @@ i386fbsd_core_read_description (struct gdbarch *gdbarch, + struct target_ops *target, + bfd *abfd) + { +- return i386_target_description (i386fbsd_core_read_xcr0 (abfd)); ++ return i386_target_description (i386fbsd_core_read_xcr0 (abfd), false); + } + + /* Similar to i386_supply_fpregset, but use XSAVE extended state. */ +diff --git gdb/i386-go32-tdep.c gdb/i386-go32-tdep.c +index 06833c346c..30db72d880 100644 +--- gdb/i386-go32-tdep.c ++++ gdb/i386-go32-tdep.c +@@ -35,7 +35,7 @@ i386_go32_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + + /* DJGPP does not support the SSE registers. */ + if (!tdesc_has_registers (info.target_desc)) +- tdep->tdesc = i386_target_description (X86_XSTATE_X87_MASK); ++ tdep->tdesc = i386_target_description (X86_XSTATE_X87_MASK, false); + + /* Native compiler is GCC, which uses the SVR4 register numbering + even in COFF and STABS. See the comment in i386_gdbarch_init, +diff --git gdb/i386-linux-tdep.c gdb/i386-linux-tdep.c +index da81715061..fa6b86f1c8 100644 +--- gdb/i386-linux-tdep.c ++++ gdb/i386-linux-tdep.c +@@ -694,7 +694,7 @@ i386_linux_read_description (uint64_t xcr0) + [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0]; + + if (*tdesc == NULL) +- *tdesc = i386_create_target_description (xcr0, true); ++ *tdesc = i386_create_target_description (xcr0, true, false); + + return *tdesc; + } +diff --git gdb/i386-tdep.c gdb/i386-tdep.c +index bc9ba752ed..4e63832b0e 100644 +--- gdb/i386-tdep.c ++++ gdb/i386-tdep.c +@@ -8175,7 +8175,7 @@ i386_validate_tdesc_p (struct gdbarch_tdep *tdep, + const struct tdesc_feature *feature_core; + + const struct tdesc_feature *feature_sse, *feature_avx, *feature_mpx, +- *feature_avx512, *feature_pkeys; ++ *feature_avx512, *feature_pkeys, *feature_segments; + int i, num_regs, valid_p; + + if (! tdesc_has_registers (tdesc)) +@@ -8198,6 +8198,9 @@ i386_validate_tdesc_p (struct gdbarch_tdep *tdep, + /* Try AVX512 registers. */ + feature_avx512 = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.avx512"); + ++ /* Try segment base registers. */ ++ feature_segments = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.segments"); ++ + /* Try PKEYS */ + feature_pkeys = tdesc_find_feature (tdesc, "org.gnu.gdb.i386.pkeys"); + +@@ -8307,6 +8310,16 @@ i386_validate_tdesc_p (struct gdbarch_tdep *tdep, + tdep->mpx_register_names[i]); + } + ++ if (feature_segments) ++ { ++ if (tdep->fsbase_regnum < 0) ++ tdep->fsbase_regnum = I386_FSBASE_REGNUM; ++ valid_p &= tdesc_numbered_register (feature_segments, tdesc_data, ++ tdep->fsbase_regnum, "fs_base"); ++ valid_p &= tdesc_numbered_register (feature_segments, tdesc_data, ++ tdep->fsbase_regnum + 1, "gs_base"); ++ } ++ + if (feature_pkeys) + { + tdep->xcr0 |= X86_XSTATE_PKRU; +@@ -8543,14 +8556,14 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + /* Even though the default ABI only includes general-purpose registers, + floating-point registers and the SSE registers, we have to leave a + gap for the upper AVX, MPX and AVX512 registers. */ +- set_gdbarch_num_regs (gdbarch, I386_PKEYS_NUM_REGS); ++ set_gdbarch_num_regs (gdbarch, I386_NUM_REGS); + + set_gdbarch_gnu_triplet_regexp (gdbarch, i386_gnu_triplet_regexp); + + /* Get the x86 target description from INFO. */ + tdesc = info.target_desc; + if (! tdesc_has_registers (tdesc)) +- tdesc = i386_target_description (X86_XSTATE_SSE_MASK); ++ tdesc = i386_target_description (X86_XSTATE_SSE_MASK, false); + tdep->tdesc = tdesc; + + tdep->num_core_regs = I386_NUM_GREGS + I387_NUM_REGS; +@@ -8592,6 +8605,9 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + tdep->pkru_regnum = -1; + tdep->num_pkeys_regs = 0; + ++ /* No segment base registers. */ ++ tdep->fsbase_regnum = -1; ++ + tdesc_data = tdesc_data_alloc (); + + set_gdbarch_relocate_instruction (gdbarch, i386_relocate_instruction); +@@ -8717,20 +8733,21 @@ i386_gdbarch_init (struct gdbarch_info info, struct gdbarch_list *arches) + /* Return the target description for a specified XSAVE feature mask. */ + + const struct target_desc * +-i386_target_description (uint64_t xcr0) ++i386_target_description (uint64_t xcr0, bool segments) + { + static target_desc *i386_tdescs \ +- [2/*SSE*/][2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/] = {}; ++ [2/*SSE*/][2/*AVX*/][2/*MPX*/][2/*AVX512*/][2/*PKRU*/][2/*segments*/] = {}; + target_desc **tdesc; + + tdesc = &i386_tdescs[(xcr0 & X86_XSTATE_SSE) ? 1 : 0] + [(xcr0 & X86_XSTATE_AVX) ? 1 : 0] + [(xcr0 & X86_XSTATE_MPX) ? 1 : 0] + [(xcr0 & X86_XSTATE_AVX512) ? 1 : 0] +- [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0]; ++ [(xcr0 & X86_XSTATE_PKRU) ? 1 : 0] ++ [segments ? 1 : 0]; + + if (*tdesc == NULL) +- *tdesc = i386_create_target_description (xcr0, false); ++ *tdesc = i386_create_target_description (xcr0, false, segments); + + return *tdesc; + } +@@ -9072,7 +9089,7 @@ Show Intel Memory Protection Extensions specific variables."), + + for (auto &a : xml_masks) + { +- auto tdesc = i386_target_description (a.mask); ++ auto tdesc = i386_target_description (a.mask, false); + + selftests::record_xml_tdesc (a.xml, tdesc); + } +diff --git gdb/i386-tdep.h gdb/i386-tdep.h +index 2532306e5c..c0d494824c 100644 +--- gdb/i386-tdep.h ++++ gdb/i386-tdep.h +@@ -200,6 +200,10 @@ struct gdbarch_tdep + /* PKEYS register names. */ + const char **pkeys_register_names; + ++ /* Register number for %fsbase. Set this to -1 to indicate the ++ absence of segment base registers. */ ++ int fsbase_regnum; ++ + /* Target description. */ + const struct target_desc *tdesc; + +@@ -296,7 +300,9 @@ enum i386_regnum + I386_K7_REGNUM = I386_K0_REGNUM + 7, + I386_ZMM0H_REGNUM, /* %zmm0h */ + I386_ZMM7H_REGNUM = I386_ZMM0H_REGNUM + 7, +- I386_PKRU_REGNUM ++ I386_PKRU_REGNUM, ++ I386_FSBASE_REGNUM, ++ I386_GSBASE_REGNUM + }; + + /* Register numbers of RECORD_REGMAP. */ +@@ -337,6 +343,7 @@ enum record_i386_regnum + #define I386_MPX_NUM_REGS (I386_BNDSTATUS_REGNUM + 1) + #define I386_AVX512_NUM_REGS (I386_ZMM7H_REGNUM + 1) + #define I386_PKEYS_NUM_REGS (I386_PKRU_REGNUM + 1) ++#define I386_NUM_REGS (I386_GSBASE_REGNUM + 1) + + /* Size of the largest register. */ + #define I386_MAX_REGISTER_SIZE 64 +@@ -440,7 +447,8 @@ extern int i386_svr4_reg_to_regnum (struct gdbarch *gdbarch, int reg); + + extern int i386_process_record (struct gdbarch *gdbarch, + struct regcache *regcache, CORE_ADDR addr); +-extern const struct target_desc *i386_target_description (uint64_t xcr0); ++extern const struct target_desc *i386_target_description (uint64_t xcr0, ++ bool segments); + + /* Return true iff the current target is MPX enabled. */ + extern int i386_mpx_enabled (void); Index: head/devel/gdb/files/commit-2861ee4fde =================================================================== --- head/devel/gdb/files/commit-2861ee4fde +++ head/devel/gdb/files/commit-2861ee4fde @@ -1,63 +0,0 @@ -commit 2861ee4fde97d0afafc506380c5deaf71c8439ac -Author: John Baldwin -Date: Wed Dec 5 10:51:16 2018 -0800 - - Use separate sed expressions to escape auto-load directories. - - Not all sed implementations support alternation via \| in the default - regular expressions. Instead, resort to separate sed expressions via - -e for $debugdir and $datadir. This fixes the default setting of the - auto-load directories on FreeBSD. Previously on FreeBSD the sed - invocation was a no-op causing the debugdir and datadir values to be - expanded yielding an autoload path of ':${prefix}/share/gdb'. - - gdb/ChangeLog: - - * configure: Re-generate. - * configure.ac: Use separate sed expressions to escape variables - in auto-load directories. - -diff --git gdb/configure gdb/configure -index 7665ba6531..3777230898 100755 ---- gdb/configure -+++ gdb/configure -@@ -6579,7 +6579,7 @@ else - with_auto_load_dir='$debugdir:$datadir/auto-load' - fi - --escape_dir=`echo $with_auto_load_dir | sed 's/[$]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'` -+escape_dir=`echo $with_auto_load_dir | sed -e 's/[$]datadir\>/\\\\\\\\\\\\&/g' -e 's/[$]debugdir\>/\\\\\\\\\\\\&/g'` - - test "x$prefix" = xNONE && prefix="$ac_default_prefix" - test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -@@ -6606,7 +6606,7 @@ else - with_auto_load_safe_path="$with_auto_load_dir" - fi - --escape_dir=`echo $with_auto_load_safe_path | sed 's/[$]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'` -+escape_dir=`echo $with_auto_load_safe_path | sed -e 's/[$]datadir\>/\\\\\\\\\\\\&/g' -e 's/[$]debugdir\>/\\\\\\\\\\\\&/g'` - - test "x$prefix" = xNONE && prefix="$ac_default_prefix" - test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' -diff --git gdb/configure.ac gdb/configure.ac -index e1ea60660b..eca7ea6d41 100644 ---- gdb/configure.ac -+++ gdb/configure.ac -@@ -146,7 +146,7 @@ AC_ARG_WITH(auto-load-dir, - AS_HELP_STRING([--with-auto-load-dir=PATH], - [directories from which to load auto-loaded scripts @<:@$debugdir:$datadir/auto-load@:>@]),, - [with_auto_load_dir='$debugdir:$datadir/auto-load']) --escape_dir=`echo $with_auto_load_dir | sed 's/[[$]]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'` -+escape_dir=`echo $with_auto_load_dir | sed -e 's/[[$]]datadir\>/\\\\\\\\\\\\&/g' -e 's/[[$]]debugdir\>/\\\\\\\\\\\\&/g'` - AC_DEFINE_DIR(AUTO_LOAD_DIR, escape_dir, - [Directories from which to load auto-loaded scripts.]) - AC_MSG_RESULT([$with_auto_load_dir]) -@@ -161,7 +161,7 @@ AS_HELP_STRING([--without-auto-load-safe-path], - with_auto_load_safe_path="/" - fi], - [with_auto_load_safe_path="$with_auto_load_dir"]) --escape_dir=`echo $with_auto_load_safe_path | sed 's/[[$]]\(datadir\|debugdir\)\>/\\\\\\\\\\\\&/g'` -+escape_dir=`echo $with_auto_load_safe_path | sed -e 's/[[$]]datadir\>/\\\\\\\\\\\\&/g' -e 's/[[$]]debugdir\>/\\\\\\\\\\\\&/g'` - AC_DEFINE_DIR(AUTO_LOAD_SAFE_PATH, escape_dir, - [Directories safe to hold auto-loaded files.]) - AC_MSG_RESULT([$with_auto_load_safe_path]) Index: head/devel/gdb/files/commit-36c53a0262 =================================================================== --- head/devel/gdb/files/commit-36c53a0262 +++ head/devel/gdb/files/commit-36c53a0262 @@ -0,0 +1,60 @@ +commit 36c53a0262f84ad11d738471789dadfa9c4eb320 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Remove code disabled since at least 1999 from lookup_struct_elt_type. + + Update the comment above the function to reflect the code removal and + document the existing behavior. + + gdb/ChangeLog: + + * gdbtypes.c (lookup_struct_elt_type): Update comment and + remove disabled code block. + +diff --git gdb/gdbtypes.c gdb/gdbtypes.c +index 09284ef259..5924b15520 100644 +--- gdb/gdbtypes.c ++++ gdb/gdbtypes.c +@@ -1644,8 +1644,7 @@ lookup_template_type (char *name, struct type *type, + return (SYMBOL_TYPE (sym)); + } + +-/* Given a type TYPE, lookup the type of the component of type named +- NAME. ++/* Given a type TYPE, lookup the type of the component named NAME. + + TYPE can be either a struct or union, or a pointer or reference to + a struct or union. If it is a pointer or reference, its target +@@ -1653,8 +1652,8 @@ lookup_template_type (char *name, struct type *type, + as specified for the definitions of the expression element types + STRUCTOP_STRUCT and STRUCTOP_PTR. + +- If NOERR is nonzero, return zero if NAME is not suitably defined. +- If NAME is the name of a baseclass type, return that type. */ ++ If NOERR is nonzero, return NULL if there is no component named ++ NAME. */ + + struct type * + lookup_struct_elt_type (struct type *type, const char *name, int noerr) +@@ -1678,20 +1677,6 @@ lookup_struct_elt_type (struct type *type, const char *name, int noerr) + type_name.c_str ()); + } + +-#if 0 +- /* FIXME: This change put in by Michael seems incorrect for the case +- where the structure tag name is the same as the member name. +- I.e. when doing "ptype bell->bar" for "struct foo { int bar; int +- foo; } bell;" Disabled by fnf. */ +- { +- char *type_name; +- +- type_name = TYPE_NAME (type); +- if (type_name != NULL && strcmp (type_name, name) == 0) +- return type; +- } +-#endif +- + for (i = TYPE_NFIELDS (type) - 1; i >= TYPE_N_BASECLASSES (type); i--) + { + const char *t_field_name = TYPE_FIELD_NAME (type, i); Index: head/devel/gdb/files/commit-6e056c8178 =================================================================== --- head/devel/gdb/files/commit-6e056c8178 +++ head/devel/gdb/files/commit-6e056c8178 @@ -0,0 +1,166 @@ +commit 6e056c817845f3d736a1be6b68c69b439c6c6d25 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Add a new gdbarch method to resolve the address of TLS variables. + + Permit TLS variable addresses to be resolved purely by an ABI rather + than requiring a target method. This doesn't try the target method if + the ABI function is present (even if the ABI function fails) to + simplify error handling. + + gdb/ChangeLog: + + * gdbarch.sh (get_thread_local_address): New method. + * gdbarch.h, gdbarch.c: Regenerate. + * target.c (target_translate_tls_address): Use + gdbarch_get_thread_local_address if present instead of + target::get_thread_local_address. + +diff --git gdb/gdbarch.c gdb/gdbarch.c +index 434ee3bfcf..2b3fcef004 100644 +--- gdb/gdbarch.c ++++ gdb/gdbarch.c +@@ -251,6 +251,7 @@ struct gdbarch + CORE_ADDR deprecated_function_start_offset; + gdbarch_remote_register_number_ftype *remote_register_number; + gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address; ++ gdbarch_get_thread_local_address_ftype *get_thread_local_address; + CORE_ADDR frame_args_skip; + gdbarch_unwind_pc_ftype *unwind_pc; + gdbarch_unwind_sp_ftype *unwind_sp; +@@ -613,6 +614,7 @@ verify_gdbarch (struct gdbarch *gdbarch) + /* Skip verify of deprecated_function_start_offset, invalid_p == 0 */ + /* Skip verify of remote_register_number, invalid_p == 0 */ + /* Skip verify of fetch_tls_load_module_address, has predicate. */ ++ /* Skip verify of get_thread_local_address, has predicate. */ + /* Skip verify of frame_args_skip, invalid_p == 0 */ + /* Skip verify of unwind_pc, invalid_p == 0 */ + /* Skip verify of unwind_sp, invalid_p == 0 */ +@@ -1073,6 +1075,12 @@ gdbarch_dump (struct gdbarch *gdbarch, struct ui_file *file) + fprintf_unfiltered (file, + "gdbarch_dump: get_syscall_number = <%s>\n", + host_address_to_string (gdbarch->get_syscall_number)); ++ fprintf_unfiltered (file, ++ "gdbarch_dump: gdbarch_get_thread_local_address_p() = %d\n", ++ gdbarch_get_thread_local_address_p (gdbarch)); ++ fprintf_unfiltered (file, ++ "gdbarch_dump: get_thread_local_address = <%s>\n", ++ host_address_to_string (gdbarch->get_thread_local_address)); + fprintf_unfiltered (file, + "gdbarch_dump: gnu_triplet_regexp = <%s>\n", + host_address_to_string (gdbarch->gnu_triplet_regexp)); +@@ -3018,6 +3026,30 @@ set_gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, + gdbarch->fetch_tls_load_module_address = fetch_tls_load_module_address; + } + ++int ++gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch) ++{ ++ gdb_assert (gdbarch != NULL); ++ return gdbarch->get_thread_local_address != NULL; ++} ++ ++CORE_ADDR ++gdbarch_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset) ++{ ++ gdb_assert (gdbarch != NULL); ++ gdb_assert (gdbarch->get_thread_local_address != NULL); ++ if (gdbarch_debug >= 2) ++ fprintf_unfiltered (gdb_stdlog, "gdbarch_get_thread_local_address called\n"); ++ return gdbarch->get_thread_local_address (gdbarch, ptid, lm_addr, offset); ++} ++ ++void ++set_gdbarch_get_thread_local_address (struct gdbarch *gdbarch, ++ gdbarch_get_thread_local_address_ftype get_thread_local_address) ++{ ++ gdbarch->get_thread_local_address = get_thread_local_address; ++} ++ + CORE_ADDR + gdbarch_frame_args_skip (struct gdbarch *gdbarch) + { +diff --git gdb/gdbarch.h gdb/gdbarch.h +index 75618376ab..abb72e752b 100644 +--- gdb/gdbarch.h ++++ gdb/gdbarch.h +@@ -649,6 +649,18 @@ typedef CORE_ADDR (gdbarch_fetch_tls_load_module_address_ftype) (struct objfile + extern CORE_ADDR gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, struct objfile *objfile); + extern void set_gdbarch_fetch_tls_load_module_address (struct gdbarch *gdbarch, gdbarch_fetch_tls_load_module_address_ftype *fetch_tls_load_module_address); + ++/* Return the thread-local address at OFFSET in the thread-local ++ storage for the thread PTID and the shared library or executable ++ file given by LM_ADDR. If that block of thread-local storage hasn't ++ been allocated yet, this function may throw an error. LM_ADDR may ++ be zero for statically linked multithreaded inferiors. */ ++ ++extern int gdbarch_get_thread_local_address_p (struct gdbarch *gdbarch); ++ ++typedef CORE_ADDR (gdbarch_get_thread_local_address_ftype) (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset); ++extern CORE_ADDR gdbarch_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset); ++extern void set_gdbarch_get_thread_local_address (struct gdbarch *gdbarch, gdbarch_get_thread_local_address_ftype *get_thread_local_address); ++ + extern CORE_ADDR gdbarch_frame_args_skip (struct gdbarch *gdbarch); + extern void set_gdbarch_frame_args_skip (struct gdbarch *gdbarch, CORE_ADDR frame_args_skip); + +diff --git gdb/gdbarch.sh gdb/gdbarch.sh +index 48fcebd19a..63bfbad7d9 100755 +--- gdb/gdbarch.sh ++++ gdb/gdbarch.sh +@@ -602,6 +602,14 @@ m;int;remote_register_number;int regno;regno;;default_remote_register_number;;0 + + # Fetch the target specific address used to represent a load module. + F;CORE_ADDR;fetch_tls_load_module_address;struct objfile *objfile;objfile ++ ++# Return the thread-local address at OFFSET in the thread-local ++# storage for the thread PTID and the shared library or executable ++# file given by LM_ADDR. If that block of thread-local storage hasn't ++# been allocated yet, this function may throw an error. LM_ADDR may ++# be zero for statically linked multithreaded inferiors. ++ ++M;CORE_ADDR;get_thread_local_address;ptid_t ptid, CORE_ADDR lm_addr, CORE_ADDR offset;ptid, lm_addr, offset + # + v;CORE_ADDR;frame_args_skip;;;0;;;0 + m;CORE_ADDR;unwind_pc;struct frame_info *next_frame;next_frame;;default_unwind_pc;;0 +diff --git gdb/target.c gdb/target.c +index 8579c19d05..c27157d209 100644 +--- gdb/target.c ++++ gdb/target.c +@@ -698,8 +698,9 @@ target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset) + { + volatile CORE_ADDR addr = 0; + struct target_ops *target = current_top_target (); ++ struct gdbarch *gdbarch = target_gdbarch (); + +- if (gdbarch_fetch_tls_load_module_address_p (target_gdbarch ())) ++ if (gdbarch_fetch_tls_load_module_address_p (gdbarch)) + { + ptid_t ptid = inferior_ptid; + +@@ -708,10 +709,14 @@ target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset) + CORE_ADDR lm_addr; + + /* Fetch the load module address for this objfile. */ +- lm_addr = gdbarch_fetch_tls_load_module_address (target_gdbarch (), ++ lm_addr = gdbarch_fetch_tls_load_module_address (gdbarch, + objfile); + +- addr = target->get_thread_local_address (ptid, lm_addr, offset); ++ if (gdbarch_get_thread_local_address_p (gdbarch)) ++ addr = gdbarch_get_thread_local_address (gdbarch, ptid, lm_addr, ++ offset); ++ else ++ addr = target->get_thread_local_address (ptid, lm_addr, offset); + } + /* If an error occurred, print TLS related messages here. Otherwise, + throw the error to some higher catcher. */ +@@ -766,8 +771,6 @@ target_translate_tls_address (struct objfile *objfile, CORE_ADDR offset) + } + END_CATCH + } +- /* It wouldn't be wrong here to try a gdbarch method, too; finding +- TLS is an ABI-specific thing. But we don't do that yet. */ + else + error (_("Cannot find thread-local variables on this target")); + Index: head/devel/gdb/files/commit-8399425f5f =================================================================== --- head/devel/gdb/files/commit-8399425f5f +++ head/devel/gdb/files/commit-8399425f5f @@ -0,0 +1,69 @@ +commit 8399425f5f472ad8e630bb30ad2dbefeddbb68b7 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Support TLS variables on FreeBSD/powerpc. + + Derive the pointer to the DTV array from the %r2 register on 32-bit + powerpc and %r13 on 64-bit powerpc. + + gdb/ChangeLog: + + * ppc-fbsd-tdep.c (ppcfbsd_get_thread_local_address): New. + (ppcfbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +diff --git gdb/ppc-fbsd-tdep.c gdb/ppc-fbsd-tdep.c +index c21a52c898..290bd1fd88 100644 +--- gdb/ppc-fbsd-tdep.c ++++ gdb/ppc-fbsd-tdep.c +@@ -279,6 +279,39 @@ ppcfbsd_return_value (struct gdbarch *gdbarch, struct value *function, + regcache, readbuf, writebuf); + } + ++/* Implement the "get_thread_local_address" gdbarch method. */ ++ ++static CORE_ADDR ++ppcfbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, ++ CORE_ADDR lm_addr, CORE_ADDR offset) ++{ ++ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ++ struct regcache *regcache; ++ int tp_offset, tp_regnum; ++ ++ regcache = get_thread_arch_regcache (ptid, gdbarch); ++ ++ if (tdep->wordsize == 4) ++ { ++ tp_offset = 0x7008; ++ tp_regnum = PPC_R0_REGNUM + 2; ++ } ++ else ++ { ++ tp_offset = 0x7010; ++ tp_regnum = PPC_R0_REGNUM + 13; ++ } ++ target_fetch_registers (regcache, tp_regnum); ++ ++ ULONGEST tp; ++ if (regcache->cooked_read (tp_regnum, &tp) != REG_VALID) ++ error (_("Unable to fetch tcb pointer")); ++ ++ /* tp points to the end of the TCB block. The first member of the ++ TCB is the pointer to the DTV array. */ ++ CORE_ADDR dtv_addr = tp - tp_offset; ++ return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset); ++} + + static void + ppcfbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +@@ -322,6 +355,8 @@ ppcfbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + + set_gdbarch_fetch_tls_load_module_address (gdbarch, + svr4_fetch_objfile_link_map); ++ set_gdbarch_get_thread_local_address (gdbarch, ++ ppcfbsd_get_thread_local_address); + } + + void Index: head/devel/gdb/files/commit-8aa0243d54 =================================================================== --- head/devel/gdb/files/commit-8aa0243d54 +++ head/devel/gdb/files/commit-8aa0243d54 @@ -1,197 +0,0 @@ -commit 739ab2e92e1840c9285f3cfce1f1236c0fa68730 -Author: Simon Ser -Date: Thu Sep 6 15:03:19 2018 -0700 - - Generate NT_PROCSTAT_{AUXV,VMMAP,PS_STRINGS} in FreeBSD coredumps - - gcore generates NT_AUXV and NT_FILE notes for Linux targets. On - FreeBSD auxv is stored in a NT_PROCSTAT_AUXV section, virtual memory - mappings are stored in a NT_PROCSTAT_VMMAP, and both are prefixed with - the struct size. In addition, store a NT_PROCSTAT_PS_STRINGS note - saving the initial location of the argv[] and environment[] arrays. - - gdb/ChangeLog: - - PR gdb/23105 - * fbsd-nat.c (fbsd_nat_target::xfer_partial): Add support for - TARGET_OBJECT_FREEBSD_VMMAP and TARGET_OBJECT_FREEBSD_PS_STRINGS. - * fbsd-tdep.c (fbsd_make_note_desc): New. - (fbsd_make_corefile_notes): Write NT_PROCSTAT_AUXV, - NT_PROCSTAT_VMMAP and NT_PROCSTAT_PS_STRINGS notes. - * target.h (enum target_object) Add FreeBSD-specific - TARGET_OBJECT_FREEBSD_VMMAP and TARGET_OBJECT_FREEBSD_PS_STRINGS. - -diff --git gdb/ChangeLog gdb/ChangeLog -index 410fbef920..e6f44a3ac2 100644 ---- gdb/ChangeLog -+++ gdb/ChangeLog -@@ -1,3 +1,14 @@ -+2018-09-06 Simon Ser -+ -+ PR gdb/23105 -+ * fbsd-nat.c (fbsd_nat_target::xfer_partial): Add support for -+ TARGET_OBJECT_FREEBSD_VMMAP and TARGET_OBJECT_FREEBSD_PS_STRINGS. -+ * fbsd-tdep.c (fbsd_make_note_desc): New. -+ (fbsd_make_corefile_notes): Write NT_PROCSTAT_AUXV, -+ NT_PROCSTAT_VMMAP and NT_PROCSTAT_PS_STRINGS notes. -+ * target.h (enum target_object) Add FreeBSD-specific -+ TARGET_OBJECT_FREEBSD_VMMAP and TARGET_OBJECT_FREEBSD_PS_STRINGS. -+ - 2018-09-06 Simon Marchi - - * compile/compile-c.h (generate_c_for_variable_locations): -diff --git gdb/fbsd-nat.c gdb/fbsd-nat.c -index 115deac070..a255318d14 100644 ---- gdb/fbsd-nat.c -+++ gdb/fbsd-nat.c -@@ -751,6 +751,61 @@ fbsd_nat_target::xfer_partial (enum target_object object, - } - return TARGET_XFER_E_IO; - } -+ case TARGET_OBJECT_FREEBSD_VMMAP: -+ case TARGET_OBJECT_FREEBSD_PS_STRINGS: -+ { -+ gdb::byte_vector buf_storage; -+ gdb_byte *buf; -+ size_t buflen; -+ int mib[4]; -+ -+ int proc_target; -+ uint32_t struct_size; -+ switch (object) -+ { -+ case TARGET_OBJECT_FREEBSD_VMMAP: -+ proc_target = KERN_PROC_VMMAP; -+ struct_size = sizeof (struct kinfo_vmentry); -+ break; -+ case TARGET_OBJECT_FREEBSD_PS_STRINGS: -+ proc_target = KERN_PROC_PS_STRINGS; -+ struct_size = sizeof (void *); -+ break; -+ } -+ -+ if (writebuf != NULL) -+ return TARGET_XFER_E_IO; -+ -+ mib[0] = CTL_KERN; -+ mib[1] = KERN_PROC; -+ mib[2] = proc_target; -+ mib[3] = pid; -+ -+ if (sysctl (mib, 4, NULL, &buflen, NULL, 0) != 0) -+ return TARGET_XFER_E_IO; -+ buflen += sizeof (struct_size); -+ -+ if (offset >= buflen) -+ { -+ *xfered_len = 0; -+ return TARGET_XFER_EOF; -+ } -+ -+ buf_storage.resize (buflen); -+ buf = buf_storage.data (); -+ -+ memcpy (buf, &struct_size, sizeof (struct_size)); -+ buflen -= sizeof (struct_size); -+ if (sysctl (mib, 4, buf + sizeof (struct_size), &buflen, NULL, 0) != 0) -+ return TARGET_XFER_E_IO; -+ buflen += sizeof (struct_size); -+ -+ if (buflen - offset < len) -+ len = buflen - offset; -+ memcpy (readbuf, buf + offset, len); -+ *xfered_len = len; -+ return TARGET_XFER_OK; -+ } - default: - return inf_ptrace_target::xfer_partial (object, annex, - readbuf, writebuf, offset, -diff --git gdb/fbsd-tdep.c gdb/fbsd-tdep.c -index 78d0c3d830..ed43087169 100644 ---- gdb/fbsd-tdep.c -+++ gdb/fbsd-tdep.c -@@ -512,6 +512,28 @@ fbsd_corefile_thread (struct thread_info *info, - args->note_size, args->stop_signal); - } - -+/* Return a byte_vector containing the contents of a core dump note -+ for the target object of type OBJECT. If STRUCTSIZE is non-zero, -+ the data is prefixed with a 32-bit integer size to match the format -+ used in FreeBSD NT_PROCSTAT_* notes. */ -+ -+static gdb::optional -+fbsd_make_note_desc (enum target_object object, uint32_t structsize) -+{ -+ gdb::optional buf = -+ target_read_alloc (current_top_target (), object, NULL); -+ if (!buf || buf->empty ()) -+ return {}; -+ -+ if (structsize == 0) -+ return buf; -+ -+ gdb::byte_vector desc (sizeof (structsize) + buf->size ()); -+ memcpy (desc.data (), &structsize, sizeof (structsize)); -+ memcpy (desc.data () + sizeof (structsize), buf->data (), buf->size ()); -+ return desc; -+} -+ - /* Create appropriate note sections for a corefile, returning them in - allocated memory. */ - -@@ -586,6 +608,40 @@ fbsd_make_corefile_notes (struct gdbarch *gdbarch, bfd *obfd, int *note_size) - - note_data = thread_args.note_data; - -+ /* Auxiliary vector. */ -+ uint32_t structsize = gdbarch_ptr_bit (gdbarch) / 4; /* Elf_Auxinfo */ -+ gdb::optional note_desc = -+ fbsd_make_note_desc (TARGET_OBJECT_AUXV, structsize); -+ if (note_desc && !note_desc->empty ()) -+ { -+ note_data = elfcore_write_note (obfd, note_data, note_size, "FreeBSD", -+ NT_FREEBSD_PROCSTAT_AUXV, -+ note_desc->data (), note_desc->size ()); -+ if (!note_data) -+ return NULL; -+ } -+ -+ /* Virtual memory mappings. */ -+ note_desc = fbsd_make_note_desc (TARGET_OBJECT_FREEBSD_VMMAP, 0); -+ if (note_desc && !note_desc->empty ()) -+ { -+ note_data = elfcore_write_note (obfd, note_data, note_size, "FreeBSD", -+ NT_FREEBSD_PROCSTAT_VMMAP, -+ note_desc->data (), note_desc->size ()); -+ if (!note_data) -+ return NULL; -+ } -+ -+ note_desc = fbsd_make_note_desc (TARGET_OBJECT_FREEBSD_PS_STRINGS, 0); -+ if (note_desc && !note_desc->empty ()) -+ { -+ note_data = elfcore_write_note (obfd, note_data, note_size, "FreeBSD", -+ NT_FREEBSD_PROCSTAT_PSSTRINGS, -+ note_desc->data (), note_desc->size ()); -+ if (!note_data) -+ return NULL; -+ } -+ - return note_data; - } - -diff --git gdb/target.h gdb/target.h -index 229b5d0551..a3000c80c6 100644 ---- gdb/target.h -+++ gdb/target.h -@@ -202,6 +202,10 @@ enum target_object - of the process ID of the process in question, in hexadecimal - format. */ - TARGET_OBJECT_EXEC_FILE, -+ /* FreeBSD virtual memory mappings. */ -+ TARGET_OBJECT_FREEBSD_VMMAP, -+ /* FreeBSD process strings. */ -+ TARGET_OBJECT_FREEBSD_PS_STRINGS, - /* Possible future objects: TARGET_OBJECT_FILE, ... */ - }; - Index: head/devel/gdb/files/commit-93579f6f90 =================================================================== --- head/devel/gdb/files/commit-93579f6f90 +++ head/devel/gdb/files/commit-93579f6f90 @@ -1,57 +0,0 @@ -commit 93579f6f908fa6010b141fd5da2974d878869c80 -Author: John Baldwin -Date: Fri Nov 30 15:14:18 2018 -0800 - - Use kinfo_getfile to implement fdwalk on FreeBSD. - - kinfo_getfile() requires a couple of system calls to fetch the list of - open file descriptors. This can be much cheaper than invoking fstat - on all of the values from 0 to the open file resource limit maximum. - - gdb/ChangeLog: - - * common/filestuff.c [HAVE_KINFO_GETFILE]: Include headers. - (fdwalk) [HAVE_KINFO_GETFILE]: Use kinfo_getfile. - -diff --git gdb/common/filestuff.c gdb/common/filestuff.c -index 0db5c6936b..f4d5e38f07 100644 ---- gdb/common/filestuff.c -+++ gdb/common/filestuff.c -@@ -36,6 +36,11 @@ - #define HAVE_SOCKETS 1 - #endif - -+#ifdef HAVE_KINFO_GETFILE -+#include -+#include -+#endif -+ - #ifdef HAVE_SYS_RESOURCE_H - #include - #endif /* HAVE_SYS_RESOURCE_H */ -@@ -108,6 +113,25 @@ fdwalk (int (*func) (void *, int), void *arg) - } - /* We may fall through to the next case. */ - #endif -+#ifdef HAVE_KINFO_GETFILE -+ int nfd; -+ gdb::unique_xmalloc_ptr fdtbl -+ (kinfo_getfile (getpid (), &nfd)); -+ if (fdtbl != NULL) -+ { -+ for (int i = 0; i < nfd; i++) -+ { -+ if (fdtbl[i].kf_fd >= 0) -+ { -+ int result = func (arg, fdtbl[i].kf_fd); -+ if (result != 0) -+ return result; -+ } -+ } -+ return 0; -+ } -+ /* We may fall through to the next case. */ -+#endif - - { - int max, fd; Index: head/devel/gdb/files/commit-945f3901b5 =================================================================== --- head/devel/gdb/files/commit-945f3901b5 +++ head/devel/gdb/files/commit-945f3901b5 @@ -0,0 +1,224 @@ +commit 945f3901b5889e57edf5a2ee25acb51f0078a719 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Add a helper function to resolve TLS variable addresses for FreeBSD. + + The fbsd_get_thread_local_address function accepts the base address of + a thread's DTV array and the base address of an object file's link map + and uses this to compute a TLS variable's address. FreeBSD + architectures use an architecture-specific method to determine the + address of the DTV array pointer and call this helper function to + perform the rest of the address calculation. + + * fbsd-tdep.c (fbsd_pspace_data_handle): New variable. + (struct fbsd_pspace_data): New type. + (get_fbsd_pspace_data, fbsd_pspace_data_cleanup) + (fbsd_read_integer_by_name, fbsd_fetch_rtld_offsets) + (fbsd_get_tls_index, fbsd_get_thread_local_address): New function. + (_initialize_fbsd_tdep): Initialize 'fbsd_pspace_data_handle'. + * fbsd-tdep.c (fbsd_get_thread_local_address): New prototype. + +diff --git gdb/fbsd-tdep.c gdb/fbsd-tdep.c +index d971d3a653..f06836216d 100644 +--- gdb/fbsd-tdep.c ++++ gdb/fbsd-tdep.c +@@ -24,6 +24,7 @@ + #include "regcache.h" + #include "regset.h" + #include "gdbthread.h" ++#include "objfiles.h" + #include "xml-syscall.h" + #include + #include +@@ -444,6 +445,41 @@ get_fbsd_gdbarch_data (struct gdbarch *gdbarch) + gdbarch_data (gdbarch, fbsd_gdbarch_data_handle)); + } + ++/* Per-program-space data for FreeBSD architectures. */ ++static const struct program_space_data *fbsd_pspace_data_handle; ++ ++struct fbsd_pspace_data ++{ ++ /* Offsets in the runtime linker's 'Obj_Entry' structure. */ ++ LONGEST off_linkmap; ++ LONGEST off_tlsindex; ++ bool rtld_offsets_valid; ++}; ++ ++static struct fbsd_pspace_data * ++get_fbsd_pspace_data (struct program_space *pspace) ++{ ++ struct fbsd_pspace_data *data; ++ ++ data = ((struct fbsd_pspace_data *) ++ program_space_data (pspace, fbsd_pspace_data_handle)); ++ if (data == NULL) ++ { ++ data = XCNEW (struct fbsd_pspace_data); ++ set_program_space_data (pspace, fbsd_pspace_data_handle, data); ++ } ++ ++ return data; ++} ++ ++/* The cleanup callback for FreeBSD architecture per-program-space data. */ ++ ++static void ++fbsd_pspace_data_cleanup (struct program_space *pspace, void *data) ++{ ++ xfree (data); ++} ++ + /* This is how we want PTIDs from core files to be printed. */ + + static const char * +@@ -1932,6 +1968,121 @@ fbsd_get_syscall_number (struct gdbarch *gdbarch, thread_info *thread) + internal_error (__FILE__, __LINE__, _("fbsd_get_sycall_number called")); + } + ++/* Read an integer symbol value from the current target. */ ++ ++static LONGEST ++fbsd_read_integer_by_name (struct gdbarch *gdbarch, const char *name) ++{ ++ bound_minimal_symbol ms = lookup_minimal_symbol (name, NULL, NULL); ++ if (ms.minsym == NULL) ++ error (_("Unable to resolve symbol '%s'"), name); ++ ++ gdb_byte buf[4]; ++ if (target_read_memory (BMSYMBOL_VALUE_ADDRESS (ms), buf, sizeof buf) != 0) ++ error (_("Unable to read value of '%s'"), name); ++ ++ return extract_signed_integer (buf, sizeof buf, gdbarch_byte_order (gdbarch)); ++} ++ ++/* Lookup offsets of fields in the runtime linker's 'Obj_Entry' ++ structure needed to determine the TLS index of an object file. */ ++ ++static void ++fbsd_fetch_rtld_offsets (struct gdbarch *gdbarch, struct fbsd_pspace_data *data) ++{ ++ TRY ++ { ++ /* Fetch offsets from debug symbols in rtld. */ ++ struct symbol *obj_entry_sym ++ = lookup_symbol_in_language ("Struct_Obj_Entry", NULL, STRUCT_DOMAIN, ++ language_c, NULL).symbol; ++ if (obj_entry_sym == NULL) ++ error (_("Unable to find Struct_Obj_Entry symbol")); ++ data->off_linkmap = lookup_struct_elt (SYMBOL_TYPE(obj_entry_sym), ++ "linkmap", 0).offset / 8; ++ data->off_tlsindex = lookup_struct_elt (SYMBOL_TYPE(obj_entry_sym), ++ "tlsindex", 0).offset / 8; ++ data->rtld_offsets_valid = true; ++ return; ++ } ++ CATCH (e, RETURN_MASK_ERROR) ++ { ++ data->off_linkmap = -1; ++ } ++ END_CATCH ++ ++ TRY ++ { ++ /* Fetch offsets from global variables in libthr. Note that ++ this does not work for single-threaded processes that are not ++ linked against libthr. */ ++ data->off_linkmap = fbsd_read_integer_by_name (gdbarch, ++ "_thread_off_linkmap"); ++ data->off_tlsindex = fbsd_read_integer_by_name (gdbarch, ++ "_thread_off_tlsindex"); ++ data->rtld_offsets_valid = true; ++ return; ++ } ++ CATCH (e, RETURN_MASK_ERROR) ++ { ++ data->off_linkmap = -1; ++ } ++ END_CATCH ++} ++ ++/* Helper function to read the TLS index of an object file associated ++ with a link map entry at LM_ADDR. */ ++ ++static LONGEST ++fbsd_get_tls_index (struct gdbarch *gdbarch, CORE_ADDR lm_addr) ++{ ++ struct fbsd_pspace_data *data = get_fbsd_pspace_data (current_program_space); ++ ++ if (!data->rtld_offsets_valid) ++ fbsd_fetch_rtld_offsets (gdbarch, data); ++ ++ if (data->off_linkmap == -1) ++ throw_error (TLS_GENERIC_ERROR, ++ _("Cannot fetch runtime linker structure offsets")); ++ ++ /* Simulate container_of to convert from LM_ADDR to the Obj_Entry ++ pointer and then compute the offset of the tlsindex member. */ ++ CORE_ADDR tlsindex_addr = lm_addr - data->off_linkmap + data->off_tlsindex; ++ ++ gdb_byte buf[4]; ++ if (target_read_memory (tlsindex_addr, buf, sizeof buf) != 0) ++ throw_error (TLS_GENERIC_ERROR, ++ _("Cannot find thread-local variables on this target")); ++ ++ return extract_signed_integer (buf, sizeof buf, gdbarch_byte_order (gdbarch)); ++} ++ ++/* See fbsd-tdep.h. */ ++ ++CORE_ADDR ++fbsd_get_thread_local_address (struct gdbarch *gdbarch, CORE_ADDR dtv_addr, ++ CORE_ADDR lm_addr, CORE_ADDR offset) ++{ ++ LONGEST tls_index = fbsd_get_tls_index (gdbarch, lm_addr); ++ ++ gdb_byte buf[gdbarch_ptr_bit (gdbarch) / TARGET_CHAR_BIT]; ++ if (target_read_memory (dtv_addr, buf, sizeof buf) != 0) ++ throw_error (TLS_GENERIC_ERROR, ++ _("Cannot find thread-local variables on this target")); ++ ++ const struct builtin_type *builtin = builtin_type (gdbarch); ++ CORE_ADDR addr = gdbarch_pointer_to_address (gdbarch, ++ builtin->builtin_data_ptr, buf); ++ ++ addr += (tls_index + 1) * TYPE_LENGTH (builtin->builtin_data_ptr); ++ if (target_read_memory (addr, buf, sizeof buf) != 0) ++ throw_error (TLS_GENERIC_ERROR, ++ _("Cannot find thread-local variables on this target")); ++ ++ addr = gdbarch_pointer_to_address (gdbarch, builtin->builtin_data_ptr, buf); ++ return addr + offset; ++} ++ + /* To be called from GDB_OSABI_FREEBSD handlers. */ + + void +@@ -1957,4 +2108,6 @@ _initialize_fbsd_tdep (void) + { + fbsd_gdbarch_data_handle = + gdbarch_data_register_post_init (init_fbsd_gdbarch_data); ++ fbsd_pspace_data_handle ++ = register_program_space_data_with_cleanup (NULL, fbsd_pspace_data_cleanup); + } +diff --git gdb/fbsd-tdep.h gdb/fbsd-tdep.h +index efd7c2c78f..0e29508c9f 100644 +--- gdb/fbsd-tdep.h ++++ gdb/fbsd-tdep.h +@@ -60,4 +60,15 @@ extern void fbsd_info_proc_mappings_entry (int addr_bit, ULONGEST kve_start, + int kve_flags, int kve_protection, + const void *kve_path); + ++/* Helper function to fetch the address of a thread-local variable. ++ DTV_ADDR is the base address of the thread's dtv array. LM_ADDR is ++ the address of the link_map structure for the associated object ++ file. OFFSET is the offset of the variable in the object file's ++ thread-local variable block. */ ++ ++extern CORE_ADDR fbsd_get_thread_local_address (struct gdbarch *gdbarch, ++ CORE_ADDR dtv_addr, ++ CORE_ADDR lm_addr, ++ CORE_ADDR offset); ++ + #endif /* fbsd-tdep.h */ Index: head/devel/gdb/files/commit-b0f87ed032 =================================================================== --- head/devel/gdb/files/commit-b0f87ed032 +++ head/devel/gdb/files/commit-b0f87ed032 @@ -0,0 +1,60 @@ +commit b0f87ed032bb68a9965de81cbf9fd676a83b9174 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Support TLS variables on FreeBSD/riscv. + + Derive the pointer to the DTV array from the tp register. + + gdb/ChangeLog: + + * riscv-fbsd-tdep.c (riscv_fbsd_get_thread_local_address): New. + (riscv_fbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +diff --git gdb/riscv-fbsd-tdep.c gdb/riscv-fbsd-tdep.c +index 97ad28f59a..3125a2285e 100644 +--- gdb/riscv-fbsd-tdep.c ++++ gdb/riscv-fbsd-tdep.c +@@ -174,6 +174,28 @@ static const struct tramp_frame riscv_fbsd_sigframe = + riscv_fbsd_sigframe_init + }; + ++/* Implement the "get_thread_local_address" gdbarch method. */ ++ ++static CORE_ADDR ++riscv_fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, ++ CORE_ADDR lm_addr, CORE_ADDR offset) ++{ ++ struct regcache *regcache; ++ ++ regcache = get_thread_arch_regcache (ptid, gdbarch); ++ ++ target_fetch_registers (regcache, RISCV_TP_REGNUM); ++ ++ ULONGEST tp; ++ if (regcache->cooked_read (RISCV_TP_REGNUM, &tp) != REG_VALID) ++ error (_("Unable to fetch %%tp")); ++ ++ /* %tp points to the end of the TCB which contains two pointers. ++ The first pointer in the TCB points to the DTV array. */ ++ CORE_ADDR dtv_addr = tp - (gdbarch_ptr_bit (gdbarch) / 8) * 2; ++ return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset); ++} ++ + /* Implement the 'init_osabi' method of struct gdb_osabi_handler. */ + + static void +@@ -193,6 +215,11 @@ riscv_fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + + set_gdbarch_iterate_over_regset_sections + (gdbarch, riscv_fbsd_iterate_over_regset_sections); ++ ++ set_gdbarch_fetch_tls_load_module_address (gdbarch, ++ svr4_fetch_objfile_link_map); ++ set_gdbarch_get_thread_local_address (gdbarch, ++ riscv_fbsd_get_thread_local_address); + } + + void Index: head/devel/gdb/files/commit-cd250a1898 =================================================================== --- head/devel/gdb/files/commit-cd250a1898 +++ head/devel/gdb/files/commit-cd250a1898 @@ -0,0 +1,30 @@ +commit cd250a1898bb6fdb41f4a1063dbcfac04affcd11 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Update comment for target::get_thread_local_address. + + There isn't an 'objfile' parameter, instead 'load_module_addr' is used + to indicate the executable or shared library. Also, the function + throws errors rather than returning error values. + + gdb/ChangeLog: + + * target.h (target::get_thread_local_address): Update comment. + +diff --git gdb/target.h gdb/target.h +index c95151a404..5fe6aa74b0 100644 +--- gdb/target.h ++++ gdb/target.h +@@ -718,9 +718,9 @@ struct target_ops + TARGET_DEFAULT_NORETURN (tcomplain ()); + /* Return the thread-local address at OFFSET in the + thread-local storage for the thread PTID and the shared library +- or executable file given by OBJFILE. If that block of ++ or executable file given by LOAD_MODULE_ADDR. If that block of + thread-local storage hasn't been allocated yet, this function +- may return an error. LOAD_MODULE_ADDR may be zero for statically ++ may throw an error. LOAD_MODULE_ADDR may be zero for statically + linked multithreaded inferiors. */ + virtual CORE_ADDR get_thread_local_address (ptid_t ptid, + CORE_ADDR load_module_addr, Index: head/devel/gdb/files/commit-ce25aa57a3 =================================================================== --- head/devel/gdb/files/commit-ce25aa57a3 +++ head/devel/gdb/files/commit-ce25aa57a3 @@ -0,0 +1,64 @@ +commit ce25aa57a3cdd028be5868423e6e55506ccd1053 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Support TLS variables on FreeBSD/i386. + + Derive the pointer to the DTV array from the gs_base register. As + with FreeBSD/amd64, gs_base is currently only available via the native + target. + + gdb/ChangeLog: + + * i386-fbsd-tdep.c (i386fbsd_get_thread_local_address): New. + (i386fbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +diff --git gdb/i386-fbsd-tdep.c gdb/i386-fbsd-tdep.c +index ac57e7383d..f274847174 100644 +--- gdb/i386-fbsd-tdep.c ++++ gdb/i386-fbsd-tdep.c +@@ -320,6 +320,30 @@ i386fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, + "XSAVE extended state", cb_data); + } + ++/* Implement the get_thread_local_address gdbarch method. */ ++ ++static CORE_ADDR ++i386fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, ++ CORE_ADDR lm_addr, CORE_ADDR offset) ++{ ++ struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ++ struct regcache *regcache; ++ ++ if (tdep->fsbase_regnum == -1) ++ error (_("Unable to fetch %%gsbase")); ++ ++ regcache = get_thread_arch_regcache (ptid, gdbarch); ++ ++ target_fetch_registers (regcache, tdep->fsbase_regnum + 1); ++ ++ ULONGEST gsbase; ++ if (regcache->cooked_read (tdep->fsbase_regnum + 1, &gsbase) != REG_VALID) ++ error (_("Unable to fetch %%gsbase")); ++ ++ CORE_ADDR dtv_addr = gsbase + gdbarch_ptr_bit (gdbarch) / 8; ++ return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset); ++} ++ + static void + i386fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + { +@@ -418,6 +442,11 @@ i386fbsd4_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + + set_gdbarch_core_read_description (gdbarch, + i386fbsd_core_read_description); ++ ++ set_gdbarch_fetch_tls_load_module_address (gdbarch, ++ svr4_fetch_objfile_link_map); ++ set_gdbarch_get_thread_local_address (gdbarch, ++ i386fbsd_get_thread_local_address); + } + + void Index: head/devel/gdb/files/commit-dd6876c91c =================================================================== --- head/devel/gdb/files/commit-dd6876c91c +++ head/devel/gdb/files/commit-dd6876c91c @@ -0,0 +1,237 @@ +commit dd6876c91cd40cc105b1a91f418ca2c80683b314 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Support fs_base and gs_base on FreeBSD/i386. + + The i386 BSD native target uses the same ptrace operations + (PT_[GS]ET[FG]SBASE) as the amd64 BSD native target to fetch and store + the registers. + + The amd64 BSD native now uses 'tdep->fsbase_regnum' instead of + hardcoding AMD64_FSBASE_REGNUM and AMD64_GSBASE_REGNUM to support + 32-bit targets. In addition, the store operations explicitly zero the + new register value before fetching it from the register cache to + ensure 32-bit values are zero-extended. + + gdb/ChangeLog: + + * amd64-bsd-nat.c (amd64bsd_fetch_inferior_registers): Use + tdep->fsbase_regnum instead of constants for fs_base and gs_base. + (amd64bsd_store_inferior_registers): Likewise. + * amd64-fbsd-nat.c (amd64_fbsd_nat_target::read_description): + Enable segment base registers. + * i386-bsd-nat.c (i386bsd_fetch_inferior_registers): Use + PT_GETFSBASE and PT_GETGSBASE. + (i386bsd_store_inferior_registers): Use PT_SETFSBASE and + PT_SETGSBASE. + * i386-fbsd-nat.c (i386_fbsd_nat_target::read_description): Enable + segment base registers. + * i386-fbsd-tdep.c (i386fbsd_core_read_description): Likewise. + +diff --git gdb/amd64-bsd-nat.c gdb/amd64-bsd-nat.c +index a2a91abb91..35763a5b95 100644 +--- gdb/amd64-bsd-nat.c ++++ gdb/amd64-bsd-nat.c +@@ -43,6 +43,9 @@ amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum) + { + struct gdbarch *gdbarch = regcache->arch (); + pid_t pid = get_ptrace_pid (regcache->ptid ()); ++#if defined(PT_GETFSBASE) || defined(PT_GETGSBASE) ++ const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ++#endif + + if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum)) + { +@@ -57,27 +60,27 @@ amd64bsd_fetch_inferior_registers (struct regcache *regcache, int regnum) + } + + #ifdef PT_GETFSBASE +- if (regnum == -1 || regnum == AMD64_FSBASE_REGNUM) ++ if (regnum == -1 || regnum == tdep->fsbase_regnum) + { + register_t base; + + if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + perror_with_name (_("Couldn't get segment register fs_base")); + +- regcache->raw_supply (AMD64_FSBASE_REGNUM, &base); ++ regcache->raw_supply (tdep->fsbase_regnum, &base); + if (regnum != -1) + return; + } + #endif + #ifdef PT_GETGSBASE +- if (regnum == -1 || regnum == AMD64_GSBASE_REGNUM) ++ if (regnum == -1 || regnum == tdep->fsbase_regnum + 1) + { + register_t base; + + if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + perror_with_name (_("Couldn't get segment register gs_base")); + +- regcache->raw_supply (AMD64_GSBASE_REGNUM, &base); ++ regcache->raw_supply (tdep->fsbase_regnum + 1, &base); + if (regnum != -1) + return; + } +@@ -116,6 +119,9 @@ amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum) + { + struct gdbarch *gdbarch = regcache->arch (); + pid_t pid = get_ptrace_pid (regcache->ptid ()); ++#if defined(PT_SETFSBASE) || defined(PT_SETGSBASE) ++ const struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); ++#endif + + if (regnum == -1 || amd64_native_gregset_supplies_p (gdbarch, regnum)) + { +@@ -134,11 +140,13 @@ amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum) + } + + #ifdef PT_SETFSBASE +- if (regnum == -1 || regnum == AMD64_FSBASE_REGNUM) ++ if (regnum == -1 || regnum == tdep->fsbase_regnum) + { + register_t base; + +- regcache->raw_collect (AMD64_FSBASE_REGNUM, &base); ++ /* Clear the full base value to support 32-bit targets. */ ++ base = 0; ++ regcache->raw_collect (tdep->fsbase_regnum, &base); + + if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + perror_with_name (_("Couldn't write segment register fs_base")); +@@ -147,11 +155,13 @@ amd64bsd_store_inferior_registers (struct regcache *regcache, int regnum) + } + #endif + #ifdef PT_SETGSBASE +- if (regnum == -1 || regnum == AMD64_GSBASE_REGNUM) ++ if (regnum == -1 || regnum == tdep->fsbase_regnum + 1) + { + register_t base; + +- regcache->raw_collect (AMD64_GSBASE_REGNUM, &base); ++ /* Clear the full base value to support 32-bit targets. */ ++ base = 0; ++ regcache->raw_collect (tdep->fsbase_regnum + 1, &base); + + if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) + perror_with_name (_("Couldn't write segment register gs_base")); +diff --git gdb/amd64-fbsd-nat.c gdb/amd64-fbsd-nat.c +index 9fff763dd3..cc676d3214 100644 +--- gdb/amd64-fbsd-nat.c ++++ gdb/amd64-fbsd-nat.c +@@ -190,13 +190,13 @@ amd64_fbsd_nat_target::read_description () + if (is64) + return amd64_target_description (xcr0, true); + else +- return i386_target_description (xcr0, false); ++ return i386_target_description (xcr0, true); + } + #endif + if (is64) + return amd64_target_description (X86_XSTATE_SSE_MASK, true); + else +- return i386_target_description (X86_XSTATE_SSE_MASK, false); ++ return i386_target_description (X86_XSTATE_SSE_MASK, true); + } + + #if defined(HAVE_PT_GETDBREGS) && defined(USE_SIGTRAP_SIGINFO) +diff --git gdb/i386-bsd-nat.c gdb/i386-bsd-nat.c +index 009a8dc1b2..a10b496096 100644 +--- gdb/i386-bsd-nat.c ++++ gdb/i386-bsd-nat.c +@@ -144,6 +144,33 @@ i386bsd_fetch_inferior_registers (struct regcache *regcache, int regnum) + return; + } + ++#ifdef PT_GETFSBASE ++ if (regnum == -1 || regnum == I386_FSBASE_REGNUM) ++ { ++ register_t base; ++ ++ if (ptrace (PT_GETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) ++ perror_with_name (_("Couldn't get segment register fs_base")); ++ ++ regcache->raw_supply (I386_FSBASE_REGNUM, &base); ++ if (regnum != -1) ++ return; ++ } ++#endif ++#ifdef PT_GETGSBASE ++ if (regnum == -1 || regnum == I386_GSBASE_REGNUM) ++ { ++ register_t base; ++ ++ if (ptrace (PT_GETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) ++ perror_with_name (_("Couldn't get segment register gs_base")); ++ ++ regcache->raw_supply (I386_GSBASE_REGNUM, &base); ++ if (regnum != -1) ++ return; ++ } ++#endif ++ + if (regnum == -1 || regnum >= I386_ST0_REGNUM) + { + struct fpreg fpregs; +@@ -211,6 +238,33 @@ i386bsd_store_inferior_registers (struct regcache *regcache, int regnum) + return; + } + ++#ifdef PT_SETFSBASE ++ if (regnum == -1 || regnum == I386_FSBASE_REGNUM) ++ { ++ register_t base; ++ ++ regcache->raw_collect (I386_FSBASE_REGNUM, &base); ++ ++ if (ptrace (PT_SETFSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) ++ perror_with_name (_("Couldn't write segment register fs_base")); ++ if (regnum != -1) ++ return; ++ } ++#endif ++#ifdef PT_SETGSBASE ++ if (regnum == -1 || regnum == I386_GSBASE_REGNUM) ++ { ++ register_t base; ++ ++ regcache->raw_collect (I386_GSBASE_REGNUM, &base); ++ ++ if (ptrace (PT_SETGSBASE, pid, (PTRACE_TYPE_ARG3) &base, 0) == -1) ++ perror_with_name (_("Couldn't write segment register gs_base")); ++ if (regnum != -1) ++ return; ++ } ++#endif ++ + if (regnum == -1 || regnum >= I386_ST0_REGNUM) + { + struct fpreg fpregs; +diff --git gdb/i386-fbsd-nat.c gdb/i386-fbsd-nat.c +index 7106e90801..be5d4c67be 100644 +--- gdb/i386-fbsd-nat.c ++++ gdb/i386-fbsd-nat.c +@@ -160,7 +160,7 @@ i386_fbsd_nat_target::read_description () + if (x86bsd_xsave_len == 0) + xcr0 = X86_XSTATE_SSE_MASK; + +- return i386_target_description (xcr0, false); ++ return i386_target_description (xcr0, true); + } + #endif + +diff --git gdb/i386-fbsd-tdep.c gdb/i386-fbsd-tdep.c +index 2f28bad728..ac57e7383d 100644 +--- gdb/i386-fbsd-tdep.c ++++ gdb/i386-fbsd-tdep.c +@@ -267,7 +267,7 @@ i386fbsd_core_read_description (struct gdbarch *gdbarch, + struct target_ops *target, + bfd *abfd) + { +- return i386_target_description (i386fbsd_core_read_xcr0 (abfd), false); ++ return i386_target_description (i386fbsd_core_read_xcr0 (abfd), true); + } + + /* Similar to i386_supply_fpregset, but use XSAVE extended state. */ Index: head/devel/gdb/files/commit-df22c1e5d5 =================================================================== --- head/devel/gdb/files/commit-df22c1e5d5 +++ head/devel/gdb/files/commit-df22c1e5d5 @@ -0,0 +1,36 @@ +commit df22c1e5d53c38f38bce6072bb46de240f9e0e2b +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Handle an edge case for minisym TLS variable lookups. + + If a TLS variable is provided by a minisym from a separate debug file, + the separate debug file is passed to + gdbarch_fetch_tls_load_module_address. However, the object files + stored in the shared object list are the original object files, not + the separate debug object files. In this case, + svr4_fetch_objfile_link_map was failing to find the link map entry + since the debug object file is not in its internal list, only the + original object file. + + gdb/ChangeLog: + + * solib-svr4.c (svr4_fetch_objfile_link_map): Look for + objfile->separate_debug_objfile_backlink if not NULL. + +diff --git gdb/solib-svr4.c gdb/solib-svr4.c +index 84693c1766..14a471b6dc 100644 +--- gdb/solib-svr4.c ++++ gdb/solib-svr4.c +@@ -1551,6 +1551,11 @@ svr4_fetch_objfile_link_map (struct objfile *objfile) + if (objfile == symfile_objfile) + return info->main_lm_addr; + ++ /* If OBJFILE is a separate debug object file, look for the ++ original object file. */ ++ if (objfile->separate_debug_objfile_backlink != NULL) ++ objfile = objfile->separate_debug_objfile_backlink; ++ + /* The other link map addresses may be found by examining the list + of shared libraries. */ + for (so = master_so_list (); so; so = so->next) Index: head/devel/gdb/files/commit-ef0bd2046f =================================================================== --- head/devel/gdb/files/commit-ef0bd2046f +++ head/devel/gdb/files/commit-ef0bd2046f @@ -0,0 +1,165 @@ +commit ef0bd2046f58fac69577892c2d3b44b20d027476 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Add a more general version of lookup_struct_elt_type. + + lookup_struct_elt is a new function which returns a tuple of + information about a component of a structure or union. The returned + tuple contains a pointer to the struct field object for the component + as well as a bit offset of that field within the structure. If the + field names a field in an anonymous substructure, the offset is the + "global" offset relative to the original structure type. If noerr is + set, then the returned tuple will set the field pointer to NULL to + indicate a missing component rather than throwing an error. + + lookup_struct_elt_type is now reimplemented in terms of this new + function. It simply returns the type of the returned field. + + gdb/ChangeLog: + + * gdbtypes.c (lookup_struct_elt): New function. + (lookup_struct_elt_type): Reimplement via lookup_struct_elt. + * gdbtypes.h (struct struct_elt): New type. + (lookup_struct_elt): New prototype. + +diff --git gdb/gdbtypes.c gdb/gdbtypes.c +index 5924b15520..db470dafac 100644 +--- gdb/gdbtypes.c ++++ gdb/gdbtypes.c +@@ -1644,19 +1644,10 @@ lookup_template_type (char *name, struct type *type, + return (SYMBOL_TYPE (sym)); + } + +-/* Given a type TYPE, lookup the type of the component named NAME. ++/* See gdbtypes.h. */ + +- TYPE can be either a struct or union, or a pointer or reference to +- a struct or union. If it is a pointer or reference, its target +- type is automatically used. Thus '.' and '->' are interchangable, +- as specified for the definitions of the expression element types +- STRUCTOP_STRUCT and STRUCTOP_PTR. +- +- If NOERR is nonzero, return NULL if there is no component named +- NAME. */ +- +-struct type * +-lookup_struct_elt_type (struct type *type, const char *name, int noerr) ++struct_elt ++lookup_struct_elt (struct type *type, const char *name, int noerr) + { + int i; + +@@ -1683,39 +1674,47 @@ lookup_struct_elt_type (struct type *type, const char *name, int noerr) + + if (t_field_name && (strcmp_iw (t_field_name, name) == 0)) + { +- return TYPE_FIELD_TYPE (type, i); ++ return {&TYPE_FIELD (type, i), TYPE_FIELD_BITPOS (type, i)}; + } + else if (!t_field_name || *t_field_name == '\0') + { +- struct type *subtype +- = lookup_struct_elt_type (TYPE_FIELD_TYPE (type, i), name, 1); +- +- if (subtype != NULL) +- return subtype; ++ struct_elt elt ++ = lookup_struct_elt (TYPE_FIELD_TYPE (type, i), name, 1); ++ if (elt.field != NULL) ++ { ++ elt.offset += TYPE_FIELD_BITPOS (type, i); ++ return elt; ++ } + } + } + + /* OK, it's not in this class. Recursively check the baseclasses. */ + for (i = TYPE_N_BASECLASSES (type) - 1; i >= 0; i--) + { +- struct type *t; +- +- t = lookup_struct_elt_type (TYPE_BASECLASS (type, i), name, 1); +- if (t != NULL) +- { +- return t; +- } ++ struct_elt elt = lookup_struct_elt (TYPE_BASECLASS (type, i), name, 1); ++ if (elt.field != NULL) ++ return elt; + } + + if (noerr) +- { +- return NULL; +- } ++ return {nullptr, 0}; + + std::string type_name = type_to_string (type); + error (_("Type %s has no component named %s."), type_name.c_str (), name); + } + ++/* See gdbtypes.h. */ ++ ++struct type * ++lookup_struct_elt_type (struct type *type, const char *name, int noerr) ++{ ++ struct_elt elt = lookup_struct_elt (type, name, noerr); ++ if (elt.field != NULL) ++ return FIELD_TYPE (*elt.field); ++ else ++ return NULL; ++} ++ + /* Store in *MAX the largest number representable by unsigned integer type + TYPE. */ + +diff --git gdb/gdbtypes.h gdb/gdbtypes.h +index a6d4f64e9b..66051cf02c 100644 +--- gdb/gdbtypes.h ++++ gdb/gdbtypes.h +@@ -1873,6 +1873,44 @@ extern struct type *allocate_stub_method (struct type *); + + extern const char *type_name_or_error (struct type *type); + ++struct struct_elt ++{ ++ /* The field of the element, or NULL if no element was found. */ ++ struct field *field; ++ ++ /* The bit offset of the element in the parent structure. */ ++ LONGEST offset; ++}; ++ ++/* Given a type TYPE, lookup the field and offset of the component named ++ NAME. ++ ++ TYPE can be either a struct or union, or a pointer or reference to ++ a struct or union. If it is a pointer or reference, its target ++ type is automatically used. Thus '.' and '->' are interchangable, ++ as specified for the definitions of the expression element types ++ STRUCTOP_STRUCT and STRUCTOP_PTR. ++ ++ If NOERR is nonzero, the returned structure will have field set to ++ NULL if there is no component named NAME. ++ ++ If the component NAME is a field in an anonymous substructure of ++ TYPE, the returned offset is a "global" offset relative to TYPE ++ rather than an offset within the substructure. */ ++ ++extern struct_elt lookup_struct_elt (struct type *, const char *, int); ++ ++/* Given a type TYPE, lookup the type of the component named NAME. ++ ++ TYPE can be either a struct or union, or a pointer or reference to ++ a struct or union. If it is a pointer or reference, its target ++ type is automatically used. Thus '.' and '->' are interchangable, ++ as specified for the definitions of the expression element types ++ STRUCTOP_STRUCT and STRUCTOP_PTR. ++ ++ If NOERR is nonzero, return NULL if there is no component named ++ NAME. */ ++ + extern struct type *lookup_struct_elt_type (struct type *, const char *, int); + + extern struct type *make_pointer_type (struct type *, struct type **); Index: head/devel/gdb/files/commit-f5424cfa7e =================================================================== --- head/devel/gdb/files/commit-f5424cfa7e +++ head/devel/gdb/files/commit-f5424cfa7e @@ -0,0 +1,63 @@ +commit f5424cfa7e9337a6cb02a1f83c9feea0995c5350 +Author: John Baldwin +Date: Tue Mar 12 13:39:02 2019 -0700 + + Support TLS variables on FreeBSD/amd64. + + Use the fs_base register to fetch the address of a thread's tcb and + calculate the address of the DTV array. This value is then passed to + fbsd_get_thread_local_address to compute the final variable address. + + Note that fs_base is currently only available via the native target as + core dumps on FreeBSD do not store the value of fs_base. + + gdb/ChangeLog: + + * amd64-fbsd-tdep.c (amd64fbsd_get_thread_local_address): New. + (amd64fbsd_init_abi): Install gdbarch + "fetch_tls_load_module_address" and "get_thread_local_address" + methods. + +diff --git gdb/amd64-fbsd-tdep.c gdb/amd64-fbsd-tdep.c +index 403e65022d..7e2e9edf21 100644 +--- gdb/amd64-fbsd-tdep.c ++++ gdb/amd64-fbsd-tdep.c +@@ -204,6 +204,26 @@ amd64fbsd_iterate_over_regset_sections (struct gdbarch *gdbarch, + &amd64fbsd_xstateregset, "XSAVE extended state", cb_data); + } + ++/* Implement the get_thread_local_address gdbarch method. */ ++ ++static CORE_ADDR ++amd64fbsd_get_thread_local_address (struct gdbarch *gdbarch, ptid_t ptid, ++ CORE_ADDR lm_addr, CORE_ADDR offset) ++{ ++ struct regcache *regcache; ++ ++ regcache = get_thread_arch_regcache (ptid, gdbarch); ++ ++ target_fetch_registers (regcache, AMD64_FSBASE_REGNUM); ++ ++ ULONGEST fsbase; ++ if (regcache->cooked_read (AMD64_FSBASE_REGNUM, &fsbase) != REG_VALID) ++ error (_("Unable to fetch %%fsbase")); ++ ++ CORE_ADDR dtv_addr = fsbase + gdbarch_ptr_bit (gdbarch) / 8; ++ return fbsd_get_thread_local_address (gdbarch, dtv_addr, lm_addr, offset); ++} ++ + static void + amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + { +@@ -241,6 +261,11 @@ amd64fbsd_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) + /* FreeBSD uses SVR4-style shared libraries. */ + set_solib_svr4_fetch_link_map_offsets + (gdbarch, svr4_lp64_fetch_link_map_offsets); ++ ++ set_gdbarch_fetch_tls_load_module_address (gdbarch, ++ svr4_fetch_objfile_link_map); ++ set_gdbarch_get_thread_local_address (gdbarch, ++ amd64fbsd_get_thread_local_address); + } + + void 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 13627e07e0..a72fd8fe0f 100644 +index 5614cc3386..b9acc63c3f 100644 --- gdb/Makefile.in +++ gdb/Makefile.in -@@ -236,7 +236,8 @@ INCGNU = -I$(srcdir)/gnulib/import -I$(GNULIB_BUILDDIR)/import +@@ -230,7 +230,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,7 +12,7 @@ # # CLI sub directory definitons -@@ -643,6 +644,7 @@ TARGET_OBS = @TARGET_OBS@ +@@ -632,6 +633,7 @@ TARGET_OBS = @TARGET_OBS@ # All target-dependent objects files that require 64-bit CORE_ADDR # (used with --enable-targets=all --enable-64-bit-bfd). ALL_64_TARGET_OBS = \ @@ -20,7 +20,7 @@ aarch64-fbsd-tdep.o \ aarch64-linux-tdep.o \ aarch64-newlib-tdep.o \ -@@ -656,6 +658,7 @@ ALL_64_TARGET_OBS = \ +@@ -646,6 +648,7 @@ ALL_64_TARGET_OBS = \ amd64-darwin-tdep.o \ amd64-dicos-tdep.o \ amd64-fbsd-tdep.o \ @@ -28,7 +28,7 @@ amd64-linux-tdep.o \ amd64-nbsd-tdep.o \ amd64-obsd-tdep.o \ -@@ -670,6 +673,7 @@ ALL_64_TARGET_OBS = \ +@@ -660,6 +663,7 @@ ALL_64_TARGET_OBS = \ ia64-vms-tdep.o \ mips64-obsd-tdep.o \ sparc64-fbsd-tdep.o \ @@ -36,24 +36,24 @@ sparc64-linux-tdep.o \ sparc64-nbsd-tdep.o \ sparc64-obsd-tdep.o \ -@@ -685,6 +689,7 @@ ALL_TARGET_OBS = \ - arch/i386.o \ +@@ -676,6 +680,7 @@ ALL_TARGET_OBS = \ arch/ppc-linux-common.o \ + arch/riscv.o \ arm-bsd-tdep.o \ + arm-fbsd-kern.o \ arm-fbsd-tdep.o \ arm-linux-tdep.o \ arm-nbsd-tdep.o \ -@@ -699,6 +704,8 @@ ALL_TARGET_OBS = \ - cris-linux-tdep.o \ - cris-tdep.o \ +@@ -693,6 +698,8 @@ ALL_TARGET_OBS = \ + csky-linux-tdep.o \ + csky-tdep.o \ dicos-tdep.o \ + fbsd-kld.o \ + fbsd-kthr.o \ fbsd-tdep.o \ frv-linux-tdep.o \ frv-tdep.o \ -@@ -715,6 +722,7 @@ ALL_TARGET_OBS = \ +@@ -709,6 +716,7 @@ ALL_TARGET_OBS = \ i386-darwin-tdep.o \ i386-dicos-tdep.o \ i386-fbsd-tdep.o \ @@ -61,7 +61,7 @@ i386-gnu-tdep.o \ i386-go32-tdep.o \ i386-linux-tdep.o \ -@@ -738,6 +746,7 @@ ALL_TARGET_OBS = \ +@@ -732,6 +740,7 @@ ALL_TARGET_OBS = \ mep-tdep.o \ microblaze-linux-tdep.o \ microblaze-tdep.o \ @@ -69,15 +69,23 @@ mips-fbsd-tdep.o \ mips-linux-tdep.o \ mips-nbsd-tdep.o \ -@@ -755,6 +764,7 @@ ALL_TARGET_OBS = \ - obsd-tdep.o \ +@@ -750,6 +759,7 @@ ALL_TARGET_OBS = \ + or1k-linux-tdep.o \ or1k-tdep.o \ ppc-fbsd-tdep.o \ + ppcfbsd-kern.o \ ppc-linux-tdep.o \ ppc-nbsd-tdep.o \ ppc-obsd-tdep.o \ -@@ -1611,7 +1621,7 @@ generated_files = \ +@@ -757,6 +767,7 @@ ALL_TARGET_OBS = \ + ppc-sysv-tdep.o \ + ppc64-tdep.o \ + ravenscar-thread.o \ ++ riscv-fbsd-kern.o \ + riscv-fbsd-tdep.o \ + riscv-linux-tdep.o \ + riscv-tdep.o \ +@@ -1629,7 +1640,7 @@ generated_files = \ # Flags needed to compile Python code PYTHON_CFLAGS = @PYTHON_CFLAGS@ @@ -86,37 +94,36 @@ @$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=`echo $(SUBDIRS) | sed 's/testsuite//'`" subdir_do # Rule for compiling .c files in the top-level gdb directory. -@@ -1924,6 +1934,12 @@ ifneq ($(CODESIGN_CERT),) +@@ -1894,6 +1905,12 @@ ifneq ($(CODESIGN_CERT),) $(ECHO_SIGN) $(CODESIGN) -s $(CODESIGN_CERT) gdb$(EXEEXT) endif +kgdb$(EXEEXT): kgdb-main.o $(LIBGDB_OBS) $(ADD_DEPS) $(CDEPS) $(TDEPLIBS) -+ rm -f kgdb$(EXEEXT) -+ $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \ ++ $(SILENCE) rm -f kgdb$(EXEEXT) ++ $(ECHO_CXXLD) $(CC_LD) $(INTERNAL_LDFLAGS) $(WIN32LDAPP) \ + -o kgdb$(EXEEXT) kgdb-main.o $(LIBGDB_OBS) \ + $(TDEPLIBS) $(TUI_LIBRARY) $(CLIBS) $(LOADLIBES) + # Convenience rule to handle recursion. $(LIBGNU) $(GNULIB_H): all-lib all-lib: $(GNULIB_BUILDDIR)/Makefile -@@ -1968,7 +1984,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 -- rm -f gdb$(EXEEXT) core make.log -+ rm -f gdb$(EXEEXT) core make.log kgdb$(EXEEXT) +@@ -1940,6 +1957,7 @@ clean mostlyclean: $(CONFIG_CLEAN) + rm -f init.c stamp-init version.c stamp-version + rm -f gdb$(EXEEXT) core make.log rm -f gdb[0-9]$(EXEEXT) ++ rm -f kgdb$(EXEEXT) rm -f test-cp-name-parser$(EXEEXT) rm -f xml-builtin.c stamp-xml -@@ -2183,6 +2199,7 @@ MAKEOVERRIDES = + rm -f $(DEPDIR)/* +@@ -2154,6 +2172,7 @@ force_update: + MAKEOVERRIDES = ALLDEPFILES = \ - aarch64-fbsd-nat.c \ + aarch64-fbsd-kern.c \ + aarch64-fbsd-nat.c \ aarch64-fbsd-tdep.c \ aarch64-linux-nat.c \ - aarch64-linux-tdep.c \ -@@ -2200,6 +2217,7 @@ ALLDEPFILES = \ +@@ -2173,6 +2192,7 @@ ALLDEPFILES = \ amd64-bsd-nat.c \ amd64-darwin-tdep.c \ amd64-dicos-tdep.c \ @@ -124,7 +131,7 @@ amd64-fbsd-nat.c \ amd64-fbsd-tdep.c \ amd64-linux-nat.c \ -@@ -2214,6 +2232,7 @@ ALLDEPFILES = \ +@@ -2187,6 +2207,7 @@ ALLDEPFILES = \ arc-tdep.c \ arm.c \ arm-bsd-tdep.c \ @@ -132,17 +139,17 @@ arm-fbsd-nat.c \ arm-fbsd-tdep.c \ arm-get-next-pcs.c \ -@@ -2233,6 +2252,9 @@ ALLDEPFILES = \ +@@ -2207,6 +2228,9 @@ ALLDEPFILES = \ + csky-tdep.c \ darwin-nat.c \ dicos-tdep.c \ - exec.c \ + fbsd-kld.c \ + fbsd-kthr.c \ + fbsd-kvm.c \ fbsd-nat.c \ fbsd-tdep.c \ fork-child.c \ -@@ -2254,6 +2276,7 @@ ALLDEPFILES = \ +@@ -2228,6 +2252,7 @@ ALLDEPFILES = \ i386-darwin-nat.c \ i386-darwin-tdep.c \ i386-dicos-tdep.c \ @@ -150,15 +157,15 @@ i386-fbsd-nat.c \ i386-fbsd-tdep.c \ i386-gnu-nat.c \ -@@ -2293,6 +2316,7 @@ ALLDEPFILES = \ +@@ -2264,6 +2289,7 @@ ALLDEPFILES = \ + microblaze-linux-tdep.c \ + microblaze-tdep.c \ mingw-hdep.c \ ++ mipsfbsd-kern.c \ mips-fbsd-nat.c \ mips-fbsd-tdep.c \ -+ mipsfbsd-kern.c \ mips-linux-nat.c \ - mips-linux-tdep.c \ - mips-nbsd-nat.c \ -@@ -2310,6 +2334,7 @@ ALLDEPFILES = \ +@@ -2283,6 +2309,7 @@ ALLDEPFILES = \ obsd-nat.c \ obsd-tdep.c \ posix-hdep.c \ @@ -166,7 +173,15 @@ ppc-fbsd-nat.c \ ppc-fbsd-tdep.c \ ppc-linux-nat.c \ -@@ -2355,6 +2380,7 @@ ALLDEPFILES = \ +@@ -2297,6 +2324,7 @@ ALLDEPFILES = \ + procfs.c \ + ravenscar-thread.c \ + remote-sim.c \ ++ riscv-fbsd-kern.c \ + riscv-fbsd-nat.c \ + riscv-fbsd-tdep.c \ + riscv-linux-nat.c \ +@@ -2333,6 +2361,7 @@ ALLDEPFILES = \ sparc-sol2-nat.c \ sparc-sol2-tdep.c \ sparc-tdep.c \ @@ -174,7 +189,7 @@ sparc64-fbsd-nat.c \ sparc64-fbsd-tdep.c \ sparc64-linux-nat.c \ -@@ -2643,7 +2669,7 @@ endif +@@ -2596,7 +2625,7 @@ endif # A list of all the objects we might care about in this build, for # dependency tracking. @@ -184,10 +199,10 @@ # All the .deps files to include. diff --git gdb/config.in gdb/config.in -index 527290296e..8e0e90fd67 100644 +index ea907d2b56..ee9146fd4e 100644 --- gdb/config.in +++ gdb/config.in -@@ -228,6 +228,9 @@ +@@ -219,6 +219,9 @@ /* Define to 1 if your system has the kinfo_getvmmap function. */ #undef HAVE_KINFO_GETVMMAP @@ -198,10 +213,10 @@ #undef HAVE_LANGINFO_CODESET diff --git gdb/configure gdb/configure -index 3849b9494f..18d2e363dc 100755 +index 854837c50a..1f2da364cf 100755 --- gdb/configure +++ gdb/configure -@@ -8082,6 +8082,66 @@ $as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h +@@ -8107,6 +8107,66 @@ $as_echo "#define HAVE_KINFO_GETFILE 1" >>confdefs.h fi @@ -269,10 +284,10 @@ if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" diff --git gdb/configure.ac gdb/configure.ac -index 4c20ea5178..df156b484f 100644 +index 1527585839..37e8ce54b0 100644 --- gdb/configure.ac +++ gdb/configure.ac -@@ -534,6 +534,11 @@ AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd, +@@ -511,6 +511,11 @@ AC_SEARCH_LIBS(kinfo_getfile, util util-freebsd, [AC_DEFINE(HAVE_KINFO_GETFILE, 1, [Define to 1 if your system has the kinfo_getfile function. ])]) @@ -285,24 +300,24 @@ # GDB may fork/exec the iconv program to get the list of supported character diff --git gdb/configure.nat gdb/configure.nat -index 7611266d86..8656015365 100644 +index 64ee101d83..f32e6328e0 100644 --- gdb/configure.nat +++ gdb/configure.nat -@@ -62,7 +62,8 @@ case ${gdb_host} in +@@ -63,7 +63,8 @@ case ${gdb_host} in LOADLIBES='-ldl $(RDYNAMIC)' ;; fbsd*) -- NATDEPFILES='fork-child.o fork-inferior.o inf-ptrace.o fbsd-nat.o' -+ NATDEPFILES='fork-child.o fork-inferior.o inf-ptrace.o fbsd-nat.o \ +- NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o fbsd-nat.o' ++ NATDEPFILES='fork-child.o nat/fork-inferior.o inf-ptrace.o fbsd-nat.o \ + fbsd-kvm.o' HAVE_NATIVE_GCORE_HOST=1 LOADLIBES='-lkvm' ;; diff --git gdb/configure.tgt gdb/configure.tgt -index f197160896..ced1140328 100644 +index 27f122ad04..5fa0d0179e 100644 --- gdb/configure.tgt +++ gdb/configure.tgt -@@ -94,7 +94,7 @@ esac +@@ -98,7 +98,7 @@ esac case "${targ}" in *-*-freebsd* | *-*-kfreebsd*-gnu) @@ -311,7 +326,7 @@ *-*-netbsd* | *-*-knetbsd*-gnu) os_obs="nbsd-tdep.o solib-svr4.o";; *-*-openbsd*) -@@ -111,7 +111,7 @@ aarch64*-*-elf | aarch64*-*-rtems*) +@@ -115,7 +115,7 @@ aarch64*-*-elf | aarch64*-*-rtems*) aarch64*-*-freebsd*) # Target: FreeBSD/aarch64 @@ -320,7 +335,7 @@ ;; aarch64*-*-linux*) -@@ -164,7 +164,7 @@ arm*-*-linux*) +@@ -168,7 +168,7 @@ arm*-*-linux*) ;; arm*-*-freebsd*) # Target: FreeBSD/arm @@ -329,7 +344,7 @@ ;; arm*-*-netbsd* | arm*-*-knetbsd*-gnu) # Target: NetBSD/arm -@@ -251,7 +251,11 @@ i[34567]86-*-dicos*) +@@ -267,7 +267,11 @@ i[34567]86-*-dicos*) ;; i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu) # Target: FreeBSD/i386 @@ -342,7 +357,7 @@ ;; i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu) # Target: NetBSD/i386 -@@ -405,7 +409,7 @@ mips*-*-netbsd* | mips*-*-knetbsd*-gnu) +@@ -421,7 +425,7 @@ mips*-*-netbsd* | mips*-*-knetbsd*-gnu) ;; mips*-*-freebsd*) # Target: MIPS running FreeBSD @@ -351,7 +366,7 @@ gdb_sim=../sim/mips/libsim.a ;; mips64*-*-openbsd*) -@@ -464,7 +468,7 @@ or1k-*-* | or1knd-*-*) +@@ -488,7 +492,7 @@ or1k-*-* | or1knd-*-*) powerpc*-*-freebsd*) # Target: FreeBSD/powerpc gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppc64-tdep.o \ @@ -360,7 +375,16 @@ ravenscar-thread.o ppc-ravenscar-thread.o" ;; -@@ -587,6 +591,7 @@ sparc64-*-linux*) +@@ -543,7 +547,7 @@ s390*-*-linux*) + + riscv*-*-freebsd*) + # Target: FreeBSD/riscv +- gdb_target_obs="riscv-fbsd-tdep.o" ++ gdb_target_obs="riscv-fbsd-tdep.o riscv-fbsd-kern.o" + ;; + + riscv*-*-linux*) +@@ -622,6 +626,7 @@ sparc64-*-linux*) sparc*-*-freebsd* | sparc*-*-kfreebsd*-gnu) # Target: FreeBSD/sparc64 gdb_target_obs="sparc-tdep.o sparc64-tdep.o sparc64-fbsd-tdep.o \ @@ -368,7 +392,7 @@ ravenscar-thread.o sparc-ravenscar-thread.o" ;; sparc-*-netbsd* | sparc-*-knetbsd*-gnu) -@@ -709,8 +714,8 @@ x86_64-*-linux*) +@@ -749,8 +754,8 @@ x86_64-*-linux*) ;; x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu) # Target: FreeBSD/amd64 @@ -380,10 +404,10 @@ x86_64-*-mingw* | x86_64-*-cygwin*) # Target: MingW/amd64 diff --git gdb/defs.h gdb/defs.h -index fc4217005a..3d2eb6b1e9 100644 +index a44e186907..c4bfd42073 100644 --- gdb/defs.h +++ gdb/defs.h -@@ -481,6 +481,7 @@ enum gdb_osabi +@@ -484,6 +484,7 @@ enum gdb_osabi GDB_OSABI_SOLARIS, GDB_OSABI_LINUX, GDB_OSABI_FREEBSD, @@ -392,10 +416,10 @@ GDB_OSABI_OPENBSD, GDB_OSABI_WINCE, diff --git gdb/gnulib/configure gdb/gnulib/configure -index a152abcb76..140c4ad6a8 100644 +index 340c622cb3..bf0c4dd5d9 100644 --- gdb/gnulib/configure +++ gdb/gnulib/configure -@@ -17214,6 +17214,7 @@ else +@@ -18579,6 +18579,7 @@ else case "$host_os" in # Guess all is fine on glibc systems. *-gnu*) gl_cv_func_gettimeofday_clobber="guessing no" ;; @@ -404,7 +428,7 @@ *) gl_cv_func_gettimeofday_clobber="guessing yes" ;; esac diff --git gdb/osabi.c gdb/osabi.c -index 7d0540b181..c61c518652 100644 +index 5d4bbcdff8..a982b22624 100644 --- gdb/osabi.c +++ gdb/osabi.c @@ -66,6 +66,7 @@ static const struct osabi_names gdb_osabi_names[] = @@ -416,10 +440,10 @@ { "OpenBSD", NULL }, { "WindowsCE", NULL }, diff --git gdb/regcache.c gdb/regcache.c -index f3f845aad6..7ca007a422 100644 +index 6e3eee9663..49ca1e1535 100644 --- gdb/regcache.c +++ gdb/regcache.c -@@ -1035,6 +1035,22 @@ reg_buffer::raw_supply_zeroed (int regnum) +@@ -1003,6 +1003,22 @@ reg_buffer::raw_supply_zeroed (int regnum) m_register_status[regnum] = REG_VALID; } @@ -443,10 +467,10 @@ void diff --git gdb/regcache.h gdb/regcache.h -index 4a45f33871..94f542c087 100644 +index 2b703ea4a4..d06e001957 100644 --- gdb/regcache.h +++ gdb/regcache.h -@@ -207,6 +207,8 @@ public: +@@ -224,6 +224,8 @@ public: only LEN, without editing the rest of the register. */ void raw_supply_part (int regnum, int offset, int len, const gdb_byte *in); Index: head/devel/gdb/files/kgdb/aarch64-fbsd-kern.c =================================================================== --- head/devel/gdb/files/kgdb/aarch64-fbsd-kern.c +++ head/devel/gdb/files/kgdb/aarch64-fbsd-kern.c @@ -73,7 +73,7 @@ struct gdbarch *gdbarch = get_frame_arch (this_frame); enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct trad_frame_cache *cache; - CORE_ADDR addr, func, pc, sp; + CORE_ADDR func, pc, sp; const char *name; int i; 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 @@ -37,7 +37,7 @@ #include "symtab.h" #include "trad-frame.h" #include "amd64-tdep.h" -#include "x86-xstate.h" +#include "common/x86-xstate.h" #ifdef __amd64__ #include 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 @@ -138,7 +138,6 @@ find_kld_path (const char *filename, char *path, size_t path_size) { struct kld_info *info; - struct cleanup *cleanup; gdb::unique_xmalloc_ptr module_path; char *module_dir, *cp; int error; @@ -403,7 +402,7 @@ "&((struct linker_file *)0)->pathname"); info->off_next = parse_and_eval_address( "&((struct linker_file *)0)->link.tqe_next"); - } CATCH(e, RETURN_MASK_ERROR) { + } CATCH(e2, RETURN_MASK_ERROR) { return; } END_CATCH 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 @@ -155,7 +155,6 @@ { struct gdbarch *gdbarch = target_gdbarch (); struct type *ptr_type = builtin_type (gdbarch)->builtin_data_ptr; - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct kthr *kt; CORE_ADDR addr, paddr; @@ -230,7 +229,7 @@ "&((struct thread *)0)->td_plist"); thread_oncpu_size = parse_and_eval_long( "sizeof(((struct thread *)0)->td_oncpu)"); - } CATCH(e, RETURN_MASK_ERROR) { + } CATCH(e2, RETURN_MASK_ERROR) { proc_off_p_pid = offsetof(struct proc, p_pid); proc_off_p_comm = offsetof(struct proc, p_comm); proc_off_p_list = offsetof(struct proc, p_list); 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 @@ -37,6 +37,7 @@ #include "inferior.h" #include "objfiles.h" #include "osabi.h" +#include "process-stratum-target.h" #include "solib.h" #include "target.h" #include "value.h" @@ -192,6 +193,7 @@ break; if (osabi != GDB_OSABI_FREEBSD) return (GDB_OSABI_UNKNOWN); + break; } default: return (GDB_OSABI_UNKNOWN); @@ -218,11 +220,10 @@ target vmcore [-w] [filename]") }; -class fbsd_kvm_target final : public target_ops +class fbsd_kvm_target final : public process_stratum_target { public: - fbsd_kvm_target () - { this->to_stratum = process_stratum; } + fbsd_kvm_target () = default; const target_info &info () const override { return fbsd_kvm_target_info; } @@ -243,9 +244,11 @@ const char *pid_to_str (ptid_t) override; const char *extra_thread_info (thread_info *) override; - bool has_memory () override { return true; } - bool has_stack () override { return true; } - bool has_registers () override { return true; } + bool has_all_memory () override { return false; } + bool has_memory () override; + bool has_stack () override; + bool has_registers () override; + bool has_execution (ptid_t) override { return false; } }; /* Target ops for libkvm interface. */ @@ -273,12 +276,10 @@ char kvm_err[_POSIX2_LINE_MAX]; struct inferior *inf; struct cleanup *old_chain; - struct thread_info *ti; struct kthr *kt; kvm_t *nkvm; char *temp, *kernel, *filename; bool writeable; - int ontop; if (ops == NULL || ops->supply_pcb == NULL || ops->cpu_pcb_addr == NULL) error ("ABI doesn't support a vmcore target"); @@ -384,7 +385,7 @@ init_thread_list(); kt = kgdb_thr_init(ops->cpu_pcb_addr); while (kt != NULL) { - ti = add_thread_silent(fbsd_vmcore_ptid(kt->tid)); + add_thread_silent(fbsd_vmcore_ptid(kt->tid)); kt = kgdb_thr_next(kt); } if (curkthr != 0) @@ -432,6 +433,24 @@ { return (kgdb_thr_extra_thread_info(ti->ptid.tid())); +} + +bool +fbsd_kvm_target::has_memory () +{ + return (kvm != NULL); +} + +bool +fbsd_kvm_target::has_stack () +{ + return (kvm != NULL); +} + +bool +fbsd_kvm_target::has_registers () +{ + return (kvm != NULL); } void 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 @@ -132,10 +132,9 @@ mipsfbsd_trapframe_cache (struct frame_info *this_frame, void **this_cache) { struct gdbarch *gdbarch = get_frame_arch (this_frame); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); size_t regsize = mips_isa_regsize (gdbarch); struct trad_frame_cache *cache; - CORE_ADDR addr, func, pc, sp; + CORE_ADDR addr, func, sp; int regnum; if (*this_cache != NULL) 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 @@ -109,10 +109,9 @@ { struct gdbarch *gdbarch = get_frame_arch (this_frame); struct gdbarch_tdep *tdep = gdbarch_tdep (gdbarch); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); struct trad_frame_cache *cache; CORE_ADDR base; - int i, regnum; + int i; if (*this_cache) return (struct trad_frame_cache *)*this_cache; Index: head/devel/gdb/files/kgdb/riscv-fbsd-kern.c =================================================================== --- head/devel/gdb/files/kgdb/riscv-fbsd-kern.c +++ head/devel/gdb/files/kgdb/riscv-fbsd-kern.c @@ -0,0 +1,210 @@ +/*- + * Copyright (c) 2018 John Baldwin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR + * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. + * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT, + * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT + * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * $FreeBSD$ + */ + +/* Target-dependent code for FreeBSD/riscv64 kernels. */ + +#include "defs.h" + +#include "riscv-tdep.h" +#include "frame-unwind.h" +#include "gdbcore.h" +#include "osabi.h" +#include "regcache.h" +#include "regset.h" +#include "solib.h" +#include "target.h" +#include "trad-frame.h" + +#include "kgdb.h" + +static const struct regcache_map_entry riscv_fbsd_pcbmap[] = + { + { 1, RISCV_RA_REGNUM, 0 }, + { 1, RISCV_SP_REGNUM, 0 }, + { 1, RISCV_GP_REGNUM, 0 }, + { 1, RISCV_TP_REGNUM, 0 }, + { 3, 5, 0 }, /* t0 - t2 */ + { 4, 28, 0 }, /* t3 - t6 */ + { 2, RISCV_FP_REGNUM, 0 }, /* s0 - s1 */ + { 10, 18, 0 }, /* s2 - s11 */ + { 8, RISCV_A0_REGNUM, 0 }, /* a0 - a7 */ + { 0 } + }; + +static const struct regset riscv_fbsd_pcbregset = + { + riscv_fbsd_pcbmap, + regcache_supply_regset, regcache_collect_regset + }; + +static void +riscv_fbsd_supply_pcb(struct regcache *regcache, CORE_ADDR pcb_addr) +{ + gdb_byte buf[31 * 8]; + + /* Always give a value for PC in case the PCB isn't readable. */ + regcache->raw_supply_zeroed (RISCV_PC_REGNUM); + regcache->raw_supply_zeroed (RISCV_ZERO_REGNUM); + if (target_read_memory (pcb_addr, buf, sizeof buf) == 0) + { + regcache->supply_regset (&riscv_fbsd_pcbregset, -1, buf, + sizeof (buf)); + + /* Supply the RA as PC as well to simulate the PC as if the + thread had just returned. */ + regcache->raw_supply (RISCV_PC_REGNUM, buf); + } +} + +static const struct regcache_map_entry riscv_fbsd_tfmap[] = + { + { 1, RISCV_RA_REGNUM, 0 }, + { 1, RISCV_SP_REGNUM, 0 }, + { 1, RISCV_GP_REGNUM, 0 }, + { 1, RISCV_TP_REGNUM, 0 }, + { 3, 5, 0 }, /* t0 - t2 */ + { 4, 28, 0 }, /* t3 - t6 */ + { 2, RISCV_FP_REGNUM, 0 }, /* s0 - s1 */ + { 10, 18, 0 }, /* s2 - s11 */ + { 8, RISCV_A0_REGNUM, 0 }, /* a0 - a7 */ + { 1, RISCV_PC_REGNUM, 0 }, + { 1, RISCV_CSR_SSTATUS_REGNUM, 0 }, + { 1, RISCV_CSR_STVAL_REGNUM, 0 }, + { 1, RISCV_CSR_SCAUSE_REGNUM, 0 }, + { 0 } + }; + +static struct trad_frame_cache * +riscv_fbsd_trapframe_cache (struct frame_info *this_frame, void **this_cache) +{ + struct gdbarch *gdbarch = get_frame_arch (this_frame); + enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); + struct trad_frame_cache *cache; + CORE_ADDR func, pc, sp; + const char *name; + int xlen; + + if (*this_cache != NULL) + return ((struct trad_frame_cache *)*this_cache); + + cache = trad_frame_cache_zalloc (this_frame); + *this_cache = cache; + + sp = get_frame_register_unsigned (this_frame, RISCV_SP_REGNUM); + + xlen = riscv_isa_xlen (gdbarch); + trad_frame_set_reg_regmap (cache, riscv_fbsd_tfmap, sp, 35 * xlen); + + /* Read $PC from trap frame. */ + func = get_frame_func (this_frame); + find_pc_partial_function (func, &name, NULL, NULL); + pc = read_memory_unsigned_integer (sp + 31 * xlen, xlen, byte_order); + + if (pc == 0 && strcmp(name, "fork_trampoline") == 0) + { + /* Initial frame of a kthread; terminate backtrace. */ + trad_frame_set_id (cache, outer_frame_id); + } + else + { + /* Construct the frame ID using the function start. */ + trad_frame_set_id (cache, frame_id_build (sp + 35 * xlen, func)); + } + + return cache; +} + +static void +riscv_fbsd_trapframe_this_id (struct frame_info *this_frame, + void **this_cache, struct frame_id *this_id) +{ + struct trad_frame_cache *cache = + riscv_fbsd_trapframe_cache (this_frame, this_cache); + + trad_frame_get_id (cache, this_id); +} + +static struct value * +riscv_fbsd_trapframe_prev_register (struct frame_info *this_frame, + void **this_cache, int regnum) +{ + struct trad_frame_cache *cache = + riscv_fbsd_trapframe_cache (this_frame, this_cache); + + return trad_frame_get_register (cache, this_frame, regnum); +} + +static int +riscv_fbsd_trapframe_sniffer (const struct frame_unwind *self, + struct frame_info *this_frame, + void **this_prologue_cache) +{ + const char *name; + + find_pc_partial_function (get_frame_func (this_frame), &name, NULL, NULL); + return (name != NULL + && ((strcmp (name, "cpu_exception_handler_user") == 0) || + (strcmp (name, "cpu_exception_handler_supervisor") == 0))); +} + +static const struct frame_unwind riscv_fbsd_trapframe_unwind = { + SIGTRAMP_FRAME, + default_frame_unwind_stop_reason, + riscv_fbsd_trapframe_this_id, + riscv_fbsd_trapframe_prev_register, + NULL, + riscv_fbsd_trapframe_sniffer +}; + +/* Implement the 'init_osabi' method of struct gdb_osabi_handler. */ + +static void +riscv_fbsd_kernel_init_abi (struct gdbarch_info info, struct gdbarch *gdbarch) +{ + frame_unwind_prepend_unwinder (gdbarch, &riscv_fbsd_trapframe_unwind); + + set_solib_ops (gdbarch, &kld_so_ops); + + set_gdbarch_software_single_step (gdbarch, riscv_software_single_step); + + fbsd_vmcore_set_supply_pcb (gdbarch, riscv_fbsd_supply_pcb); + fbsd_vmcore_set_cpu_pcb_addr (gdbarch, kgdb_trgt_stop_pcb); +} + +/* Provide a prototype to silence -Wmissing-prototypes. */ +extern initialize_file_ftype _initialize_riscv_kgdb_tdep; + +void +_initialize_riscv_kgdb_tdep (void) +{ + gdbarch_register_osabi_sniffer(bfd_arch_riscv, + bfd_target_elf_flavour, + fbsd_kernel_osabi_sniffer); + gdbarch_register_osabi (bfd_arch_riscv, 0, GDB_OSABI_FREEBSD_KERNEL, + riscv_fbsd_kernel_init_abi); +} Index: head/devel/gdb/files/patch-fixes =================================================================== --- head/devel/gdb/files/patch-fixes +++ head/devel/gdb/files/patch-fixes @@ -1,10 +1,10 @@ ---- gdb/compile/compile-loc2c.c.orig 2017-09-14 09:28:17 UTC -+++ gdb/compile/compile-loc2c.c -@@ -669,6 +669,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file &stream, +--- gdb/compile/compile-loc2c.c.orig 2019-02-26 20:51:50.000000000 -0800 ++++ gdb/compile/compile-loc2c.c 2019-05-24 16:07:42.382379000 -0700 +@@ -657,6 +657,7 @@ do_compile_dwarf_expr_to_c (int indent, string_file *s 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_aarch64-fbsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_aarch64-fbsd-tdep.c +++ head/devel/gdb/files/patch-gdb_aarch64-fbsd-tdep.c @@ -1,19 +0,0 @@ ---- gdb/aarch64-fbsd-tdep.c.orig 2018-03-15 16:39:29.951492000 +0100 -+++ gdb/aarch64-fbsd-tdep.c 2018-03-15 16:40:31.553135000 +0100 -@@ -118,11 +118,11 @@ - SIGTRAMP_FRAME, - 4, - { -- {0x910003e0, -1}, /* mov x0, sp */ -- {0x91014000, -1}, /* add x0, x0, #SF_UC */ -- {0xd2803428, -1}, /* mov x8, #SYS_sigreturn */ -- {0xd4000001, -1}, /* svc 0x0 */ -- {TRAMP_SENTINEL_INSN, -1} -+ {0x910003e0, static_cast(-1)}, /* mov x0, sp */ -+ {0x91014000, static_cast(-1)}, /* add x0, x0, #SF_UC */ -+ {0xd2803428, static_cast(-1)}, /* mov x8, #SYS_sigreturn */ -+ {0xd4000001, static_cast(-1)}, /* svc 0x0 */ -+ {TRAMP_SENTINEL_INSN, static_cast(-1)} - }, - aarch64_fbsd_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_aarch64-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_aarch64-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_aarch64-linux-tdep.c @@ -1,18 +0,0 @@ ---- gdb/aarch64-linux-tdep.c.orig 2018-03-15 16:42:39.445907000 +0100 -+++ gdb/aarch64-linux-tdep.c 2018-03-15 16:43:15.167745000 +0100 -@@ -176,12 +176,12 @@ - { - /* movz x8, 0x8b (S=1,o=10,h=0,i=0x8b,r=8) - Soo1 0010 1hhi iiii iiii iiii iiir rrrr */ -- {0xd2801168, -1}, -+ {0xd2801168, static_cast(-1)}, - - /* svc 0x0 (o=0, l=1) - 1101 0100 oooi iiii iiii iiii iii0 00ll */ -- {0xd4000001, -1}, -- {TRAMP_SENTINEL_INSN, -1} -+ {0xd4000001, static_cast(-1)}, -+ {TRAMP_SENTINEL_INSN, static_cast(-1)} - }, - aarch64_linux_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_aarch64-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_aarch64-tdep.c +++ head/devel/gdb/files/patch-gdb_aarch64-tdep.c @@ -1,11 +0,0 @@ ---- gdb/aarch64-tdep.c.orig 2018-03-15 16:44:16.746186000 +0100 -+++ gdb/aarch64-tdep.c 2018-03-15 16:44:52.315010000 +0100 -@@ -2412,7 +2412,7 @@ - const int insn_size = 4; - const int atomic_sequence_length = 16; /* Instruction sequence length. */ - CORE_ADDR pc = regcache_read_pc (regcache); -- CORE_ADDR breaks[2] = { -1, -1 }; -+ CORE_ADDR breaks[2] = { static_cast(-1), static_cast(-1) }; - CORE_ADDR loc = pc; - CORE_ADDR closing_insn = 0; - uint32_t insn = read_memory_unsigned_integer (loc, insn_size, Index: head/devel/gdb/files/patch-gdb_alpha-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_alpha-tdep.c +++ head/devel/gdb/files/patch-gdb_alpha-tdep.c @@ -1,11 +0,0 @@ ---- gdb/alpha-tdep.c.orig 2018-03-15 16:45:58.726244000 +0100 -+++ gdb/alpha-tdep.c 2018-03-15 16:46:30.051357000 +0100 -@@ -769,7 +769,7 @@ - static std::vector - alpha_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc) - { -- CORE_ADDR breaks[2] = {-1, -1}; -+ CORE_ADDR breaks[2] = {static_cast(-1), static_cast(-1)}; - CORE_ADDR loc = pc; - CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */ - unsigned int insn = alpha_read_insn (gdbarch, loc); Index: head/devel/gdb/files/patch-gdb_arch_arm-get-next-pcs.c =================================================================== --- head/devel/gdb/files/patch-gdb_arch_arm-get-next-pcs.c +++ head/devel/gdb/files/patch-gdb_arch_arm-get-next-pcs.c @@ -1,20 +0,0 @@ ---- gdb/arch/arm-get-next-pcs.c.orig 2018-03-15 10:02:33.823447000 +0100 -+++ gdb/arch/arm-get-next-pcs.c 2018-03-15 10:29:48.532027000 +0100 -@@ -49,7 +49,7 @@ - thumb_deal_with_atomic_sequence_raw (struct arm_get_next_pcs *self) - { - int byte_order_for_code = self->byte_order_for_code; -- CORE_ADDR breaks[2] = {-1, -1}; -+ CORE_ADDR breaks[2] = {static_cast(-1), static_cast(-1)}; - CORE_ADDR pc = regcache_read_pc (self->regcache); - CORE_ADDR loc = pc; - unsigned short insn1, insn2; -@@ -187,7 +187,7 @@ - arm_deal_with_atomic_sequence_raw (struct arm_get_next_pcs *self) - { - int byte_order_for_code = self->byte_order_for_code; -- CORE_ADDR breaks[2] = {-1, -1}; -+ CORE_ADDR breaks[2] = {static_cast(-1), static_cast(-1)}; - CORE_ADDR pc = regcache_read_pc (self->regcache); - CORE_ADDR loc = pc; - unsigned int insn; Index: head/devel/gdb/files/patch-gdb_arm-fbsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_arm-fbsd-tdep.c +++ head/devel/gdb/files/patch-gdb_arm-fbsd-tdep.c @@ -1,19 +0,0 @@ ---- gdb/arm-fbsd-tdep.c.orig 2018-03-15 10:31:28.468820000 +0100 -+++ gdb/arm-fbsd-tdep.c 2018-03-15 10:39:51.558505000 +0100 -@@ -123,11 +123,11 @@ - SIGTRAMP_FRAME, - 4, - { -- {0xe1a0000d, -1}, /* mov r0, sp */ -- {0xe2800040, -1}, /* add r0, r0, #SIGF_UC */ -- {0xe59f700c, -1}, /* ldr r7, [pc, #12] */ -- {0xef0001a1, -1}, /* swi SYS_sigreturn */ -- {TRAMP_SENTINEL_INSN, -1} -+ {0xe1a0000d, static_cast(-1)}, /* mov r0, sp */ -+ {0xe2800040, static_cast(-1)}, /* add r0, r0, #SIGF_UC */ -+ {0xe59f700c, static_cast(-1)}, /* ldr r7, [pc, #12] */ -+ {0xef0001a1, static_cast(-1)}, /* swi SYS_sigreturn */ -+ {TRAMP_SENTINEL_INSN, static_cast(-1)} - }, - arm_fbsd_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_arm-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_arm-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_arm-linux-tdep.c @@ -1,90 +0,0 @@ ---- gdb/arm-linux-tdep.c.orig 2018-03-15 10:36:38.853100000 +0100 -+++ gdb/arm-linux-tdep.c 2018-03-15 10:42:37.222568000 +0100 -@@ -385,7 +385,7 @@ - SIGTRAMP_FRAME, - 4, - { -- { ARM_LINUX_SIGRETURN_INSTR, -1 }, -+ { ARM_LINUX_SIGRETURN_INSTR, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_sigreturn_init -@@ -395,7 +395,7 @@ - SIGTRAMP_FRAME, - 4, - { -- { ARM_LINUX_RT_SIGRETURN_INSTR, -1 }, -+ { ARM_LINUX_RT_SIGRETURN_INSTR, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_rt_sigreturn_init -@@ -405,8 +405,8 @@ - SIGTRAMP_FRAME, - 4, - { -- { ARM_SET_R7_SIGRETURN, -1 }, -- { ARM_EABI_SYSCALL, -1 }, -+ { ARM_SET_R7_SIGRETURN, static_cast(-1) }, -+ { ARM_EABI_SYSCALL, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_sigreturn_init -@@ -416,8 +416,8 @@ - SIGTRAMP_FRAME, - 4, - { -- { ARM_SET_R7_RT_SIGRETURN, -1 }, -- { ARM_EABI_SYSCALL, -1 }, -+ { ARM_SET_R7_RT_SIGRETURN, static_cast(-1) }, -+ { ARM_EABI_SYSCALL, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_rt_sigreturn_init -@@ -427,9 +427,9 @@ - SIGTRAMP_FRAME, - 2, - { -- { THUMB2_SET_R7_SIGRETURN1, -1 }, -- { THUMB2_SET_R7_SIGRETURN2, -1 }, -- { THUMB2_EABI_SYSCALL, -1 }, -+ { THUMB2_SET_R7_SIGRETURN1, static_cast(-1) }, -+ { THUMB2_SET_R7_SIGRETURN2, static_cast(-1) }, -+ { THUMB2_EABI_SYSCALL, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_sigreturn_init -@@ -439,9 +439,9 @@ - SIGTRAMP_FRAME, - 2, - { -- { THUMB2_SET_R7_RT_SIGRETURN1, -1 }, -- { THUMB2_SET_R7_RT_SIGRETURN2, -1 }, -- { THUMB2_EABI_SYSCALL, -1 }, -+ { THUMB2_SET_R7_RT_SIGRETURN1, static_cast(-1) }, -+ { THUMB2_SET_R7_RT_SIGRETURN2, static_cast(-1) }, -+ { THUMB2_EABI_SYSCALL, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_rt_sigreturn_init -@@ -451,8 +451,8 @@ - NORMAL_FRAME, - 4, - { -- { ARM_OABI_SYSCALL_RESTART_SYSCALL, -1 }, -- { ARM_LDR_PC_SP_12, -1 }, -+ { ARM_OABI_SYSCALL_RESTART_SYSCALL, static_cast(-1) }, -+ { ARM_LDR_PC_SP_12, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_restart_syscall_init -@@ -462,8 +462,8 @@ - NORMAL_FRAME, - 4, - { -- { ARM_OABI_SYSCALL_RESTART_SYSCALL, -1 }, -- { ARM_LDR_PC_SP_4, -1 }, -+ { ARM_OABI_SYSCALL_RESTART_SYSCALL, static_cast(-1) }, -+ { ARM_LDR_PC_SP_4, static_cast(-1) }, - { TRAMP_SENTINEL_INSN } - }, - arm_linux_restart_syscall_init Index: head/devel/gdb/files/patch-gdb_arm-obsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_arm-obsd-tdep.c +++ head/devel/gdb/files/patch-gdb_arm-obsd-tdep.c @@ -1,19 +0,0 @@ ---- gdb/arm-obsd-tdep.c.orig 2018-03-15 10:43:44.244835000 +0100 -+++ gdb/arm-obsd-tdep.c 2018-03-15 10:44:36.608679000 +0100 -@@ -58,11 +58,11 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0xe28d0010, -1 }, /* add r0, sp, #16 */ -- { 0xef000067, -1 }, /* swi SYS_sigreturn */ -- { 0xef000001, -1 }, /* swi SYS_exit */ -- { 0xeafffffc, -1 }, /* b . - 8 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0xe28d0010, static_cast(-1) }, /* add r0, sp, #16 */ -+ { 0xef000067, static_cast(-1) }, /* swi SYS_sigreturn */ -+ { 0xef000001, static_cast(-1) }, /* swi SYS_exit */ -+ { 0xeafffffc, static_cast(-1) }, /* b . - 8 */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - armobsd_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_bfin-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_bfin-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_bfin-linux-tdep.c @@ -1,11 +0,0 @@ ---- gdb/bfin-linux-tdep.c.orig 2018-03-15 10:45:37.746477000 +0100 -+++ gdb/bfin-linux-tdep.c 2018-03-15 10:46:02.925435000 +0100 -@@ -121,7 +121,7 @@ - { - { 0x00ADE128, 0xffffffff }, /* P0 = __NR_rt_sigreturn; */ - { 0x00A0, 0xffff }, /* EXCPT 0; */ -- { TRAMP_SENTINEL_INSN, -1 }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) }, - }, - bfin_linux_sigframe_init, - }; Index: head/devel/gdb/files/patch-gdb_completer.c =================================================================== --- head/devel/gdb/files/patch-gdb_completer.c +++ head/devel/gdb/files/patch-gdb_completer.c @@ -1,11 +0,0 @@ ---- gdb/completer.c.orig 2018-03-15 16:51:01.106677000 +0100 -+++ gdb/completer.c 2018-03-15 16:51:47.055214000 +0100 -@@ -2038,7 +2038,7 @@ - /* We don't rely on readline appending the quote char as - delimiter as then readline wouldn't append the ' ' after the - completion. */ -- char buf[2] = { quote_char () }; -+ char buf[2] = { static_cast (quote_char ()) }; - - match_list[0] = reconcat (match_list[0], match_list[0], - buf, (char *) NULL); Index: head/devel/gdb/files/patch-gdb_configure =================================================================== --- head/devel/gdb/files/patch-gdb_configure +++ head/devel/gdb/files/patch-gdb_configure @@ -1,16 +1,16 @@ ---- gdb/configure.orig 2017-09-14 09:28:17 UTC -+++ gdb/configure -@@ -15467,10 +15467,10 @@ fi +--- gdb/configure.orig 2019-05-11 11:19:02.000000000 -0700 ++++ gdb/configure 2019-05-24 16:21:50.559870000 -0700 +@@ -15511,10 +15511,10 @@ fi # The options we'll try to enable. build_warnings="-Wall -Wpointer-arith \ ---Wno-unused -Wunused-value -Wunused-function \ -+-Wno-unused \ +--Wno-unused -Wunused-value -Wunused-variable -Wunused-function \ ++-Wno-unused \ -Wno-switch -Wno-char-subscripts \ --Wempty-body -Wunused-but-set-parameter -Wunused-but-set-variable \ ---Wno-sign-compare -Wno-narrowing -Wno-error=maybe-uninitialized \ +--Wno-sign-compare -Wno-error=maybe-uninitialized \ +-Wempty-body \ -+-Wno-sign-compare -Wno-narrowing \ ++-Wno-sign-compare \ -Wno-mismatched-tags \ -Wno-error=deprecated-register \ -Wsuggest-override \ 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,17 +1,17 @@ ---- gdb/fbsd-nat.c.orig 2017-09-14 09:28:17 UTC -+++ gdb/fbsd-nat.c -@@ -1108,6 +1108,14 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum gdb_signal signo) - struct thread_info *tp; - int request; +--- gdb/fbsd-nat.c.orig 2019-05-11 11:19:03.000000000 -0700 ++++ gdb/fbsd-nat.c 2019-05-24 16:25:52.961523000 -0700 +@@ -1178,6 +1178,14 @@ fbsd_nat_target::resume (ptid_t ptid, int step, enum g + /* If ptid is a specific LWP, suspend all other LWPs in the process. */ + inferior *inf = find_inferior_ptid (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 -+ only run a single thread. Force an update of the thread list ++ only run a single thread. Force an update of the thread list + to ensure that any such threads are suspended before the process + is resumed. */ -+ fbsd_add_threads (ptid_get_pid (ptid)); ++ fbsd_add_threads (ptid.pid ()); +#endif - ALL_NON_EXITED_THREADS (tp) + for (thread_info *tp : inf->non_exited_threads ()) { - if (tp->ptid.pid () != ptid.pid ()) + int request; Index: head/devel/gdb/files/patch-gdb_hppa-nbsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_hppa-nbsd-tdep.c +++ head/devel/gdb/files/patch-gdb_hppa-nbsd-tdep.c @@ -1,44 +0,0 @@ ---- gdb/hppa-nbsd-tdep.c.orig 2018-03-15 15:58:14.876431000 +0100 -+++ gdb/hppa-nbsd-tdep.c 2018-03-15 16:00:44.247395000 +0100 -@@ -71,25 +71,25 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0xc7d7c012, -1 }, /* bb,>=,n %arg3, 30, 1f */ -- { 0xd6e01c1e, -1 }, /* depwi 0,31,2,%arg3 */ -- { 0x0ee81093, -1 }, /* ldw 4(%arg3), %r19 */ -- { 0x0ee01097, -1 }, /* ldw 0(%arg3), %arg3 */ -+ { 0xc7d7c012, static_cast(-1) }, /* bb,>=,n %arg3, 30, 1f */ -+ { 0xd6e01c1e, static_cast(-1) }, /* depwi 0,31,2,%arg3 */ -+ { 0x0ee81093, static_cast(-1) }, /* ldw 4(%arg3), %r19 */ -+ { 0x0ee01097, static_cast(-1) }, /* ldw 0(%arg3), %arg3 */ - /* 1: */ -- { 0xe8404000, -1 }, /* blr %r0, %rp */ -- { 0xeae0c002, -1 }, /* bv,n %r0(%arg3) */ -- { 0x08000240, -1 }, /* nop */ -+ { 0xe8404000, static_cast(-1) }, /* blr %r0, %rp */ -+ { 0xeae0c002, static_cast(-1) }, /* bv,n %r0(%arg3) */ -+ { 0x08000240, static_cast(-1) }, /* nop */ - -- { 0x0803025a, -1 }, /* copy %r3, %arg0 */ -- { 0x20200801, -1 }, /* ldil -40000000, %r1 */ -- { 0xe420e008, -1 }, /* be,l 4(%sr7, %r1), %sr0, %r31 */ -- { 0x34160268, -1 }, /* ldi 134, %t1 ; SYS_setcontext */ -+ { 0x0803025a, static_cast(-1) }, /* copy %r3, %arg0 */ -+ { 0x20200801, static_cast(-1) }, /* ldil -40000000, %r1 */ -+ { 0xe420e008, static_cast(-1) }, /* be,l 4(%sr7, %r1), %sr0, %r31 */ -+ { 0x34160268, static_cast(-1) }, /* ldi 134, %t1 ; SYS_setcontext */ - -- { 0x081c025a, -1 }, /* copy ret0, %arg0 */ -- { 0x20200801, -1 }, /* ldil -40000000, %r1 */ -- { 0xe420e008, -1 }, /* be,l 4(%sr7, %r1), %sr0, %r31 */ -- { 0x34160002, -1 }, /* ldi 1, %t1 ; SYS_exit */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x081c025a, static_cast(-1) }, /* copy ret0, %arg0 */ -+ { 0x20200801, static_cast(-1) }, /* ldil -40000000, %r1 */ -+ { 0xe420e008, static_cast(-1) }, /* be,l 4(%sr7, %r1), %sr0, %r31 */ -+ { 0x34160002, static_cast(-1) }, /* ldi 1, %t1 ; SYS_exit */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - hppanbsd_sigtramp_cache_init - }; Index: head/devel/gdb/files/patch-gdb_i386-nbsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_i386-nbsd-tdep.c +++ head/devel/gdb/files/patch-gdb_i386-nbsd-tdep.c @@ -1,157 +0,0 @@ ---- gdb/i386-nbsd-tdep.c.orig 2018-03-15 10:50:06.446434000 +0100 -+++ gdb/i386-nbsd-tdep.c 2018-03-15 11:04:42.700720000 +0100 -@@ -106,19 +106,19 @@ - SIGTRAMP_FRAME, - 1, - { -- { 0x8d, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x10, -1 }, -+ { 0x8d, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x10, static_cast(-1) }, - /* leal 0x10(%esp), %eax */ -- { 0x50, -1 }, /* pushl %eax */ -- { 0x50, -1 }, /* pushl %eax */ -- { 0xb8, -1 }, { 0x27, -1 }, {0x01, -1 }, {0x00, -1 }, {0x00, -1 }, -+ { 0x50, static_cast(-1) }, /* pushl %eax */ -+ { 0x50, static_cast(-1) }, /* pushl %eax */ -+ { 0xb8, static_cast(-1) }, { 0x27, static_cast(-1) }, {0x01, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, - /* movl $0x127, %eax # __sigreturn14 */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { 0xb8, -1 }, { 0x01, -1 }, {0x00, -1 }, {0x00, -1 }, {0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x01, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, - /* movl $0x1, %eax # exit */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - i386nbsd_sigtramp_cache_init - }; -@@ -128,21 +128,21 @@ - SIGTRAMP_FRAME, - 1, - { -- { 0x8d, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x0c, -1 }, -+ { 0x8d, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x0c, static_cast(-1) }, - /* leal 0x0c(%esp), %eax */ -- { 0x89, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, - /* movl %eax, 0x4(%esp) */ -- { 0xb8, -1 }, { 0x27, -1 }, {0x01, -1 }, {0x00, -1 }, {0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x27, static_cast(-1) }, {0x01, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, - /* movl $0x127, %eax # __sigreturn14 */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { 0x89, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, - /* movl %eax, 0x4(%esp) */ -- { 0xb8, -1 }, { 0x01, -1 }, {0x00, -1 }, {0x00, -1 }, {0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x01, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, - /* movl $0x1, %eax */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - i386nbsd_sigtramp_cache_init - }; -@@ -152,21 +152,22 @@ - SIGTRAMP_FRAME, - 1, - { -- { 0x8b, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x08, -1 }, -+ { 0x8b, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x08, static_cast(-1) }, - /* movl 8(%esp),%eax */ -- { 0x89, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, - /* movl %eax, 0x4(%esp) */ -- { 0xb8, -1 }, { 0x34, -1 }, { 0x01, -1 }, { 0x00, -1 }, { 0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x34, static_cast(-1) }, { 0x01, static_cast(-1) }, { 0x00, static_cast(-1) }, { 0x00, static_cast(-1) }, - /* movl $0x134, %eax # setcontext */ -- { 0xcd, -1 }, { 0x80, -1 }, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1) }, - /* int $0x80 */ -- { 0x89, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, - /* movl %eax, 0x4(%esp) */ -- { 0xb8, -1 }, { 0x01, -1 }, { 0x00, -1 }, { 0x00, -1 }, { 0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x01, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, - /* movl $0x1, %eax */ -- { 0xcd, -1 }, { 0x80, -1 }, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - i386nbsd_sigtramp_cache_init - }; -@@ -176,22 +177,22 @@ - SIGTRAMP_FRAME, - 1, - { -- { 0x8d, -1 }, { 0x84, -1 }, { 0x24, -1 }, -- { 0x8c, -1 }, { 0x00, -1 }, { 0x00, -1 }, { 0x00, -1 }, -+ { 0x8d, static_cast(-1) }, { 0x84, static_cast(-1) }, { 0x24, static_cast(-1) }, -+ { 0x8c, static_cast(-1) }, { 0x00, static_cast(-1) }, { 0x00, static_cast(-1) }, { 0x00, static_cast(-1) }, - /* leal 0x8c(%esp), %eax */ -- { 0x89, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, - /* movl %eax, 0x4(%esp) */ -- { 0xb8, -1 }, { 0x34, -1 }, { 0x01, -1 }, { 0x00, -1 }, { 0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x34, static_cast(-1) }, { 0x01, static_cast(-1) }, { 0x00, static_cast(-1) }, { 0x00, static_cast(-1) }, - /* movl $0x134, %eax # setcontext */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { 0x89, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, - /* movl %eax, 0x4(%esp) */ -- { 0xb8, -1 }, { 0x01, -1 }, {0x00, -1 }, {0x00, -1 }, {0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x01, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, - /* movl $0x1, %eax */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - i386nbsd_sigtramp_cache_init - }; -@@ -201,23 +202,23 @@ - SIGTRAMP_FRAME, - 1, - { -- { 0x8d, -1 }, { 0x84, -1 }, { 0x24, -1 }, -- { 0x8c, -1 }, { 0x00, -1 }, { 0x00, -1 }, { 0x00, -1 }, -+ { 0x8d, static_cast(-1) }, { 0x84, static_cast(-1) }, { 0x24, static_cast(-1) }, -+ { 0x8c, static_cast(-1) }, { 0x00, static_cast(-1) }, { 0x00, static_cast(-1) }, { 0x00, static_cast(-1) }, - /* leal 0x8c(%esp), %eax */ -- { 0x89, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -+ { 0x89, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, - /* movl %eax, 0x4(%esp) */ -- { 0xb8, -1 }, { 0x34, -1 }, { 0x01, -1 }, { 0x00, -1 }, { 0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x34, static_cast(-1) }, { 0x01, static_cast(-1) }, { 0x00, static_cast(-1) }, { 0x00, static_cast(-1) }, - /* movl $0x134, %eax # setcontext */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { 0xc7, -1 }, { 0x44, -1 }, { 0x24, -1 }, { 0x04, -1 }, -- { 0xff, -1 }, { 0xff, -1 }, { 0xff, -1 }, { 0xff, -1 }, -+ { 0xc7, static_cast(-1) }, { 0x44, static_cast(-1) }, { 0x24, static_cast(-1) }, { 0x04, static_cast(-1) }, -+ { 0xff, static_cast(-1) }, { 0xff, static_cast(-1) }, { 0xff, static_cast(-1) }, { 0xff, static_cast(-1) }, - /* movl $0xffffffff,0x4(%esp) */ -- { 0xb8, -1 }, { 0x01, -1 }, {0x00, -1 }, {0x00, -1 }, {0x00, -1 }, -+ { 0xb8, static_cast(-1) }, { 0x01, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, {0x00, static_cast(-1) }, - /* movl $0x1, %eax */ -- { 0xcd, -1 }, { 0x80, -1}, -+ { 0xcd, static_cast(-1) }, { 0x80, static_cast(-1)}, - /* int $0x80 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - i386nbsd_sigtramp_cache_init - }; Index: head/devel/gdb/files/patch-gdb_linespec.c =================================================================== --- head/devel/gdb/files/patch-gdb_linespec.c +++ head/devel/gdb/files/patch-gdb_linespec.c @@ -1,11 +0,0 @@ ---- gdb/linespec.c.orig 2018-03-15 16:52:46.342610000 +0100 -+++ gdb/linespec.c 2018-03-15 16:53:18.324077000 +0100 -@@ -2912,7 +2912,7 @@ - new "quote" char. */ - if (tracker.quote_char ()) - { -- char quote_char_str[2] = { tracker.quote_char () }; -+ char quote_char_str[2] = { static_cast(tracker.quote_char () )}; - - fn = reconcat (fn, fn, quote_char_str, (char *) NULL); - tracker.set_quote_char (':'); Index: head/devel/gdb/files/patch-gdb_microblaze-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_microblaze-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_microblaze-linux-tdep.c @@ -1,13 +0,0 @@ ---- gdb/microblaze-linux-tdep.c.orig 2018-03-15 11:06:05.114101000 +0100 -+++ gdb/microblaze-linux-tdep.c 2018-03-15 11:06:36.384643000 +0100 -@@ -107,8 +107,8 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x31800077, -1 }, /* addik R12,R0,119. */ -- { 0xb9cc0008, -1 }, /* brki R14,8. */ -+ { 0x31800077, static_cast(-1) }, /* addik R12,R0,119. */ -+ { 0xb9cc0008, static_cast(-1) }, /* brki R14,8. */ - { TRAMP_SENTINEL_INSN }, - }, - microblaze_linux_sighandler_cache_init Index: head/devel/gdb/files/patch-gdb_mips-fbsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_mips-fbsd-tdep.c +++ head/devel/gdb/files/patch-gdb_mips-fbsd-tdep.c @@ -1,53 +0,0 @@ ---- gdb/mips-fbsd-tdep.c.orig 2018-03-15 11:11:08.892968000 +0100 -+++ gdb/mips-fbsd-tdep.c 2018-03-15 11:14:38.323126000 +0100 -@@ -342,11 +342,11 @@ - 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_INST_ADDIU_A0_SP_O32, static_cast(-1) }, /* addiu a0, sp, SIGF_UC */ -+ { MIPS_INST_LI_V0_SIGRETURN, static_cast(-1) }, /* li v0, SYS_sigreturn */ -+ { MIPS_INST_SYSCALL, static_cast(-1) }, /* syscall */ -+ { MIPS_INST_BREAK, static_cast(-1) }, /* break */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_fbsd_sigframe_init - }; -@@ -434,11 +434,11 @@ - SIGTRAMP_FRAME, - MIPS_INSN32_SIZE, - { -- { MIPS_INST_ADDIU_A0_SP_N32, -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_INST_ADDIU_A0_SP_N32, static_cast(-1) }, /* addiu a0, sp, SIGF_UC */ -+ { MIPS_INST_LI_V0_SIGRETURN, static_cast(-1) }, /* li v0, SYS_sigreturn */ -+ { MIPS_INST_SYSCALL, static_cast(-1) }, /* syscall */ -+ { MIPS_INST_BREAK, static_cast(-1) }, /* break */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips64_fbsd_sigframe_init - }; -@@ -451,11 +451,11 @@ - 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 } -+ { MIPS_INST_DADDIU_A0_SP_N64, static_cast(-1) }, /* daddiu a0, sp, SIGF_UC */ -+ { MIPS_INST_LI_V0_SIGRETURN, static_cast(-1) }, /* li v0, SYS_sigreturn */ -+ { MIPS_INST_SYSCALL, static_cast(-1) }, /* syscall */ -+ { MIPS_INST_BREAK, static_cast(-1) }, /* break */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips64_fbsd_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_mips-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_mips-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_mips-linux-tdep.c @@ -1,122 +0,0 @@ ---- gdb/mips-linux-tdep.c.orig 2018-03-15 11:07:40.749034000 +0100 -+++ gdb/mips-linux-tdep.c 2018-03-15 11:09:52.878504000 +0100 -@@ -831,9 +831,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { MIPS_INST_LI_V0_SIGRETURN, -1 }, -- { MIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { MIPS_INST_LI_V0_SIGRETURN, static_cast(-1) }, -+ { MIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_linux_o32_sigframe_init, - mips_linux_sigframe_validate -@@ -843,9 +843,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { MIPS_INST_LI_V0_RT_SIGRETURN, -1 }, -- { MIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } }, -+ { MIPS_INST_LI_V0_RT_SIGRETURN, static_cast(-1) }, -+ { MIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } }, - mips_linux_o32_sigframe_init, - mips_linux_sigframe_validate - }; -@@ -854,9 +854,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { MIPS_INST_LI_V0_N32_RT_SIGRETURN, -1 }, -- { MIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { MIPS_INST_LI_V0_N32_RT_SIGRETURN, static_cast(-1) }, -+ { MIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_linux_n32n64_sigframe_init, - mips_linux_sigframe_validate -@@ -866,9 +866,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { MIPS_INST_LI_V0_N64_RT_SIGRETURN, -1 }, -- { MIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { MIPS_INST_LI_V0_N64_RT_SIGRETURN, static_cast(-1) }, -+ { MIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_linux_n32n64_sigframe_init, - mips_linux_sigframe_validate -@@ -878,11 +878,11 @@ - SIGTRAMP_FRAME, - 2, - { -- { MICROMIPS_INST_LI_V0, -1 }, -- { MIPS_NR_sigreturn, -1 }, -- { MICROMIPS_INST_POOL32A, -1 }, -- { MICROMIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { MICROMIPS_INST_LI_V0, static_cast(-1) }, -+ { MIPS_NR_sigreturn, static_cast(-1) }, -+ { MICROMIPS_INST_POOL32A, static_cast(-1) }, -+ { MICROMIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_linux_o32_sigframe_init, - micromips_linux_sigframe_validate -@@ -892,11 +892,11 @@ - SIGTRAMP_FRAME, - 2, - { -- { MICROMIPS_INST_LI_V0, -1 }, -- { MIPS_NR_rt_sigreturn, -1 }, -- { MICROMIPS_INST_POOL32A, -1 }, -- { MICROMIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { MICROMIPS_INST_LI_V0, static_cast(-1) }, -+ { MIPS_NR_rt_sigreturn, static_cast(-1) }, -+ { MICROMIPS_INST_POOL32A, static_cast(-1) }, -+ { MICROMIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_linux_o32_sigframe_init, - micromips_linux_sigframe_validate -@@ -906,11 +906,11 @@ - SIGTRAMP_FRAME, - 2, - { -- { MICROMIPS_INST_LI_V0, -1 }, -- { MIPS_NR_N32_rt_sigreturn, -1 }, -- { MICROMIPS_INST_POOL32A, -1 }, -- { MICROMIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { MICROMIPS_INST_LI_V0, static_cast(-1) }, -+ { MIPS_NR_N32_rt_sigreturn, static_cast(-1) }, -+ { MICROMIPS_INST_POOL32A, static_cast(-1) }, -+ { MICROMIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_linux_n32n64_sigframe_init, - micromips_linux_sigframe_validate -@@ -920,11 +920,11 @@ - SIGTRAMP_FRAME, - 2, - { -- { MICROMIPS_INST_LI_V0, -1 }, -- { MIPS_NR_N64_rt_sigreturn, -1 }, -- { MICROMIPS_INST_POOL32A, -1 }, -- { MICROMIPS_INST_SYSCALL, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { MICROMIPS_INST_LI_V0, static_cast(-1) }, -+ { MIPS_NR_N64_rt_sigreturn, static_cast(-1) }, -+ { MICROMIPS_INST_POOL32A, static_cast(-1) }, -+ { MICROMIPS_INST_SYSCALL, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips_linux_n32n64_sigframe_init, - micromips_linux_sigframe_validate Index: head/devel/gdb/files/patch-gdb_mips-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_mips-tdep.c +++ head/devel/gdb/files/patch-gdb_mips-tdep.c @@ -1,20 +0,0 @@ ---- gdb/mips-tdep.c.orig 2018-03-15 11:15:08.500010000 +0100 -+++ gdb/mips-tdep.c 2018-03-15 11:16:05.745083000 +0100 -@@ -3882,7 +3882,7 @@ - static std::vector - mips_deal_with_atomic_sequence (struct gdbarch *gdbarch, CORE_ADDR pc) - { -- CORE_ADDR breaks[2] = {-1, -1}; -+ CORE_ADDR breaks[2] = {static_cast(-1), static_cast(-1)}; - CORE_ADDR loc = pc; - CORE_ADDR branch_bp; /* Breakpoint at branch instruction's destination. */ - ULONGEST insn; -@@ -3985,7 +3985,7 @@ - { - const int atomic_sequence_length = 16; /* Instruction sequence length. */ - int last_breakpoint = 0; /* Defaults to 0 (no breakpoints placed). */ -- CORE_ADDR breaks[2] = {-1, -1}; -+ CORE_ADDR breaks[2] = {static_cast(-1), static_cast(-1)}; - CORE_ADDR branch_bp = 0; /* Breakpoint at branch instruction's - destination. */ - CORE_ADDR loc = pc; Index: head/devel/gdb/files/patch-gdb_mips64-obsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_mips64-obsd-tdep.c +++ head/devel/gdb/files/patch-gdb_mips64-obsd-tdep.c @@ -1,19 +0,0 @@ ---- gdb/mips64-obsd-tdep.c.orig 2018-03-15 16:47:34.626536000 +0100 -+++ gdb/mips64-obsd-tdep.c 2018-03-15 16:48:17.150853000 +0100 -@@ -127,11 +127,11 @@ - SIGTRAMP_FRAME, - MIPS_INSN32_SIZE, - { -- { 0x67a40020, -1 }, /* daddiu a0,sp,32 */ -- { 0x24020067, -1 }, /* li v0,103 */ -- { 0x0000000c, -1 }, /* syscall */ -- { 0x0000000d, -1 }, /* break */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x67a40020, static_cast(-1) }, /* daddiu a0,sp,32 */ -+ { 0x24020067, static_cast(-1) }, /* li v0,103 */ -+ { 0x0000000c, static_cast(-1) }, /* syscall */ -+ { 0x0000000d, static_cast(-1) }, /* break */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - mips64obsd_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_mn10300-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_mn10300-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_mn10300-linux-tdep.c @@ -1,42 +0,0 @@ ---- gdb/mn10300-linux-tdep.c.orig 2018-03-15 11:17:21.462824000 +0100 -+++ gdb/mn10300-linux-tdep.c 2018-03-15 11:20:05.266582000 +0100 -@@ -476,13 +476,13 @@ - 1, - { - /* mov 119,d0 */ -- { 0x2c, -1 }, -- { 0x77, -1 }, -- { 0x00, -1 }, -+ { 0x2c, static_cast(-1) }, -+ { 0x77, static_cast(-1) }, -+ { 0x00, static_cast(-1) }, - /* syscall 0 */ -- { 0xf0, -1 }, -- { 0xe0, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0xf0, static_cast(-1) }, -+ { 0xe0, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - am33_linux_sigframe_cache_init - }; -@@ -492,13 +492,13 @@ - 1, - { - /* mov 173,d0 */ -- { 0x2c, -1 }, -- { 0xad, -1 }, -- { 0x00, -1 }, -+ { 0x2c, static_cast(-1) }, -+ { 0xad, static_cast(-1) }, -+ { 0x00, static_cast(-1) }, - /* syscall 0 */ -- { 0xf0, -1 }, -- { 0xe0, -1 }, -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0xf0, static_cast(-1) }, -+ { 0xe0, static_cast(-1) }, -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - am33_linux_sigframe_cache_init - }; Index: head/devel/gdb/files/patch-gdb_nios2-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_nios2-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_nios2-linux-tdep.c @@ -1,24 +0,0 @@ ---- gdb/nios2-linux-tdep.c.orig 2018-03-15 11:23:52.815692000 +0100 -+++ gdb/nios2-linux-tdep.c 2018-03-15 11:55:44.876122000 +0100 -@@ -164,8 +164,8 @@ - SIGTRAMP_FRAME, - 4, - { -- { MATCH_R1_MOVI | SET_IW_I_B (2) | SET_IW_I_IMM16 (139), -1 }, -- { MATCH_R1_TRAP | SET_IW_R_IMM5 (0), -1}, -+ { MATCH_R1_MOVI | SET_IW_I_B (2) | SET_IW_I_IMM16 (139), static_cast(-1) }, -+ { MATCH_R1_TRAP | SET_IW_R_IMM5 (0), static_cast(-1)}, - { TRAMP_SENTINEL_INSN } - }, - nios2_linux_rt_sigreturn_init -@@ -176,8 +176,8 @@ - SIGTRAMP_FRAME, - 4, - { -- { MATCH_R2_MOVI | SET_IW_F2I16_B (2) | SET_IW_F2I16_IMM16 (139), -1 }, -- { MATCH_R2_TRAP | SET_IW_X2L5_IMM5 (0), -1}, -+ { MATCH_R2_MOVI | SET_IW_F2I16_B (2) | SET_IW_F2I16_IMM16 (139), static_cast(-1) }, -+ { MATCH_R2_TRAP | SET_IW_X2L5_IMM5 (0), static_cast(-1)}, - { TRAMP_SENTINEL_INSN } - }, - nios2_linux_rt_sigreturn_init Index: head/devel/gdb/files/patch-gdb_ppc-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_ppc-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_ppc-linux-tdep.c @@ -1,50 +0,0 @@ ---- gdb/ppc-linux-tdep.c.orig 2018-03-15 11:56:24.120083000 +0100 -+++ gdb/ppc-linux-tdep.c 2018-03-15 11:57:57.568381000 +0100 -@@ -663,8 +663,8 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x380000ac, -1 }, /* li r0, 172 */ -- { 0x44000002, -1 }, /* sc */ -+ { 0x380000ac, static_cast(-1) }, /* li r0, 172 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ - { TRAMP_SENTINEL_INSN }, - }, - ppc32_linux_sigaction_cache_init -@@ -673,9 +673,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x38210080, -1 }, /* addi r1,r1,128 */ -- { 0x380000ac, -1 }, /* li r0, 172 */ -- { 0x44000002, -1 }, /* sc */ -+ { 0x38210080, static_cast(-1) }, /* addi r1,r1,128 */ -+ { 0x380000ac, static_cast(-1) }, /* li r0, 172 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ - { TRAMP_SENTINEL_INSN }, - }, - ppc64_linux_sigaction_cache_init -@@ -684,8 +684,8 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x38000077, -1 }, /* li r0,119 */ -- { 0x44000002, -1 }, /* sc */ -+ { 0x38000077, static_cast(-1) }, /* li r0,119 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ - { TRAMP_SENTINEL_INSN }, - }, - ppc32_linux_sighandler_cache_init -@@ -694,9 +694,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x38210080, -1 }, /* addi r1,r1,128 */ -- { 0x38000077, -1 }, /* li r0,119 */ -- { 0x44000002, -1 }, /* sc */ -+ { 0x38210080, static_cast(-1) }, /* addi r1,r1,128 */ -+ { 0x38000077, static_cast(-1) }, /* li r0,119 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ - { TRAMP_SENTINEL_INSN }, - }, - ppc64_linux_sighandler_cache_init Index: head/devel/gdb/files/patch-gdb_ppc-nbsd-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_ppc-nbsd-tdep.c +++ head/devel/gdb/files/patch-gdb_ppc-nbsd-tdep.c @@ -1,48 +0,0 @@ ---- gdb/ppc-nbsd-tdep.c.orig 2018-03-15 13:48:32.041494000 +0100 -+++ gdb/ppc-nbsd-tdep.c 2018-03-15 13:50:31.332926000 +0100 -@@ -137,14 +137,14 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x3821fff0, -1 }, /* add r1,r1,-16 */ -- { 0x4e800021, -1 }, /* blrl */ -- { 0x38610018, -1 }, /* addi r3,r1,24 */ -- { 0x38000127, -1 }, /* li r0,295 */ -- { 0x44000002, -1 }, /* sc */ -- { 0x38000001, -1 }, /* li r0,1 */ -- { 0x44000002, -1 }, /* sc */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x3821fff0, static_cast(-1) }, /* add r1,r1,-16 */ -+ { 0x4e800021, static_cast(-1) }, /* blrl */ -+ { 0x38610018, static_cast(-1) }, /* addi r3,r1,24 */ -+ { 0x38000127, static_cast(-1) }, /* li r0,295 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ -+ { 0x38000001, static_cast(-1) }, /* li r0,1 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - ppcnbsd_sigtramp_cache_init - }; -@@ -156,14 +156,14 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x3821fff0, -1 }, /* add r1,r1,-16 */ -- { 0x4e800021, -1 }, /* blrl */ -- { 0x38610010, -1 }, /* addi r3,r1,16 */ -- { 0x38000127, -1 }, /* li r0,295 */ -- { 0x44000002, -1 }, /* sc */ -- { 0x38000001, -1 }, /* li r0,1 */ -- { 0x44000002, -1 }, /* sc */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x3821fff0, static_cast(-1) }, /* add r1,r1,-16 */ -+ { 0x4e800021, static_cast(-1) }, /* blrl */ -+ { 0x38610010, static_cast(-1) }, /* addi r3,r1,16 */ -+ { 0x38000127, static_cast(-1) }, /* li r0,295 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ -+ { 0x38000001, static_cast(-1) }, /* li r0,1 */ -+ { 0x44000002, static_cast(-1) }, /* sc */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - ppcnbsd_sigtramp_cache_init - }; Index: head/devel/gdb/files/patch-gdb_ppc64-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_ppc64-tdep.c +++ head/devel/gdb/files/patch-gdb_ppc64-tdep.c @@ -1,252 +0,0 @@ ---- gdb/ppc64-tdep.c.orig 2018-03-15 16:02:11.651610000 +0100 -+++ gdb/ppc64-tdep.c 2018-03-15 16:10:27.958608000 +0100 -@@ -30,24 +30,27 @@ - you can use -1 to make masks. */ - - #define insn_d(opcd, rts, ra, d) \ -+ static_cast( \ - ((((opcd) & 0x3f) << 26) \ - | (((rts) & 0x1f) << 21) \ - | (((ra) & 0x1f) << 16) \ -- | ((d) & 0xffff)) -+ | ((d) & 0xffff))) - - #define insn_ds(opcd, rts, ra, d, xo) \ -+ static_cast( \ - ((((opcd) & 0x3f) << 26) \ - | (((rts) & 0x1f) << 21) \ - | (((ra) & 0x1f) << 16) \ - | ((d) & 0xfffc) \ -- | ((xo) & 0x3)) -+ | ((xo) & 0x3))) - - #define insn_xfx(opcd, rts, spr, xo) \ -+ static_cast( \ - ((((opcd) & 0x3f) << 26) \ - | (((rts) & 0x1f) << 21) \ - | (((spr) & 0x1f) << 16) \ - | (((spr) & 0x3e0) << 6) \ -- | (((xo) & 0x3ff) << 1)) -+ | (((xo) & 0x3ff) << 1))) - - /* PLT_OFF is the TOC-relative offset of a 64-bit PowerPC PLT entry. - Return the function's entry point. */ -@@ -86,7 +89,7 @@ - { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 }, - - /* std r2, 40(r1) */ -- { -1, insn_ds (62, 2, 1, 40, 0), 0 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 40, 0), 0 }, - - /* ld r11, (r12) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, -@@ -107,7 +110,7 @@ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 }, - - /* bctr */ -- { -1, 0x4e800420, 0 }, -+ { static_cast(-1), 0x4e800420, 0 }, - - { 0, 0, 0 } - }; -@@ -122,13 +125,13 @@ - static struct ppc_insn_pattern ppc64_standard_linkage2[] = - { - /* std r2, 40(r1) */ -- { -1, insn_ds (62, 2, 1, 40, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 40, 0), 1 }, - - /* addis r12, r2, */ - { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 }, - - /* std r2, 40(r1) */ -- { -1, insn_ds (62, 2, 1, 40, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 40, 0), 1 }, - - /* ld r11, (r12) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 0 }, -@@ -140,10 +143,10 @@ - { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, - - /* xor r11, r11, r11 */ -- { -1, 0x7d6b5a78, 1 }, -+ { static_cast(-1), 0x7d6b5a78, 1 }, - - /* add r12, r12, r11 */ -- { -1, 0x7d8c5a14, 1 }, -+ { static_cast(-1), 0x7d8c5a14, 1 }, - - /* ld r2, (r12) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 12, 0, 0), 0 }, -@@ -152,10 +155,10 @@ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 12, 0, 0), 1 }, - - /* bctr */ -- { -1, 0x4e800420, 1 }, -+ { static_cast(-1), 0x4e800420, 1 }, - - /* cmpldi r2, 0 */ -- { -1, 0x28220000, 1 }, -+ { static_cast(-1), 0x28220000, 1 }, - - { 0, 0, 0 } - }; -@@ -165,7 +168,7 @@ - static struct ppc_insn_pattern ppc64_standard_linkage3[] = - { - /* std r2, 40(r1) */ -- { -1, insn_ds (62, 2, 1, 40, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 40, 0), 1 }, - - /* ld r11, (r2) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 0 }, -@@ -177,10 +180,10 @@ - { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 11, 9, 467), 0 }, - - /* xor r11, r11, r11 */ -- { -1, 0x7d6b5a78, 1 }, -+ { static_cast(-1), 0x7d6b5a78, 1 }, - - /* add r2, r2, r11 */ -- { -1, 0x7c425a14, 1 }, -+ { static_cast(-1), 0x7c425a14, 1 }, - - /* ld r11, (r2) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 1 }, -@@ -189,10 +192,10 @@ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 }, - - /* bctr */ -- { -1, 0x4e800420, 1 }, -+ { static_cast(-1), 0x4e800420, 1 }, - - /* cmpldi r2, 0 */ -- { -1, 0x28220000, 1 }, -+ { static_cast(-1), 0x28220000, 1 }, - - { 0, 0, 0 } - }; -@@ -204,7 +207,7 @@ - static struct ppc_insn_pattern ppc64_standard_linkage4[] = - { - /* std r2, 40(r1) */ -- { -1, insn_ds (62, 2, 1, 40, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 40, 0), 1 }, - - /* addis r11, r2, */ - { insn_d (-1, -1, -1, 0), insn_d (15, 11, 2, 0), 0 }, -@@ -219,10 +222,10 @@ - { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, - - /* xor r2, r12, r12 */ -- { -1, 0x7d826278, 1 }, -+ { static_cast(-1), 0x7d826278, 1 }, - - /* add r11, r11, r2 */ -- { -1, 0x7d6b1214, 1 }, -+ { static_cast(-1), 0x7d6b1214, 1 }, - - /* ld r2, (r11) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 11, 0, 0), 0 }, -@@ -231,10 +234,10 @@ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 11, 0, 0), 1 }, - - /* bctr */ -- { -1, 0x4e800420, 1 }, -+ { static_cast(-1), 0x4e800420, 1 }, - - /* cmpldi r2, 0 */ -- { -1, 0x28220000, 1 }, -+ { static_cast(-1), 0x28220000, 1 }, - - { 0, 0, 0 } - }; -@@ -246,7 +249,7 @@ - static struct ppc_insn_pattern ppc64_standard_linkage5[] = - { - /* std r2, 40(r1) */ -- { -1, insn_ds (62, 2, 1, 40, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 40, 0), 1 }, - - /* ld r12, (r2) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 12, 2, 0, 0), 0 }, -@@ -258,10 +261,10 @@ - { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, - - /* xor r11, r12, r12 */ -- { -1, 0x7d8b6278, 1 }, -+ { static_cast(-1), 0x7d8b6278, 1 }, - - /* add r2, r2, r11 */ -- { -1, 0x7c425a14, 1 }, -+ { static_cast(-1), 0x7c425a14, 1 }, - - /* ld r11, (r2) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 11, 2, 0, 0), 1 }, -@@ -270,10 +273,10 @@ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 2, 2, 0, 0), 0 }, - - /* bctr */ -- { -1, 0x4e800420, 1 }, -+ { static_cast(-1), 0x4e800420, 1 }, - - /* cmpldi r2, 0 */ -- { -1, 0x28220000, 1 }, -+ { static_cast(-1), 0x28220000, 1 }, - - { 0, 0, 0 } - }; -@@ -283,7 +286,7 @@ - static struct ppc_insn_pattern ppc64_standard_linkage6[] = - { - /* std r2, 24(r1) */ -- { -1, insn_ds (62, 2, 1, 24, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 24, 0), 1 }, - - /* addis r11, r2, */ - { insn_d (-1, -1, -1, 0), insn_d (15, 11, 2, 0), 0 }, -@@ -295,7 +298,7 @@ - { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, - - /* bctr */ -- { -1, 0x4e800420, 0 }, -+ { static_cast(-1), 0x4e800420, 0 }, - - { 0, 0, 0 } - }; -@@ -305,7 +308,7 @@ - static struct ppc_insn_pattern ppc64_standard_linkage7[] = - { - /* std r2, 24(r1) */ -- { -1, insn_ds (62, 2, 1, 24, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 24, 0), 1 }, - - /* ld r12, (r2) */ - { insn_ds (-1, -1, -1, 0, -1), insn_ds (58, 12, 2, 0, 0), 0 }, -@@ -314,7 +317,7 @@ - { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, - - /* bctr */ -- { -1, 0x4e800420, 0 }, -+ { static_cast(-1), 0x4e800420, 0 }, - - { 0, 0, 0 } - }; -@@ -325,7 +328,7 @@ - static struct ppc_insn_pattern ppc64_standard_linkage8[] = - { - /* std r2, 24(r1) */ -- { -1, insn_ds (62, 2, 1, 24, 0), 1 }, -+ { static_cast(-1), insn_ds (62, 2, 1, 24, 0), 1 }, - - /* addis r12, r2, */ - { insn_d (-1, -1, -1, 0), insn_d (15, 12, 2, 0), 0 }, -@@ -337,7 +340,7 @@ - { insn_xfx (-1, -1, -1, -1), insn_xfx (31, 12, 9, 467), 0 }, - - /* bctr */ -- { -1, 0x4e800420, 0 }, -+ { static_cast(-1), 0x4e800420, 0 }, - - { 0, 0, 0 } - }; Index: head/devel/gdb/files/patch-gdb_rs6000-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_rs6000-tdep.c +++ head/devel/gdb/files/patch-gdb_rs6000-tdep.c @@ -1,11 +0,0 @@ ---- gdb/rs6000-tdep.c.orig 2018-03-15 16:11:47.189448000 +0100 -+++ gdb/rs6000-tdep.c 2018-03-15 16:12:36.114973000 +0100 -@@ -1173,7 +1173,7 @@ - struct gdbarch *gdbarch = regcache->arch (); - enum bfd_endian byte_order = gdbarch_byte_order (gdbarch); - CORE_ADDR pc = regcache_read_pc (regcache); -- CORE_ADDR breaks[2] = {-1, -1}; -+ CORE_ADDR breaks[2] = {static_cast(-1),static_cast(-1)}; - CORE_ADDR loc = pc; - CORE_ADDR closing_insn; /* Instruction that closes the atomic sequence. */ - int insn = read_memory_integer (loc, PPC_INSN_SIZE, byte_order); Index: head/devel/gdb/files/patch-gdb_sparc-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_sparc-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_sparc-linux-tdep.c @@ -1,28 +0,0 @@ ---- gdb/sparc-linux-tdep.c.orig 2018-03-15 16:27:40.393176000 +0100 -+++ gdb/sparc-linux-tdep.c 2018-03-15 16:29:00.339581000 +0100 -@@ -68,9 +68,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x821020d8, -1 }, /* mov __NR_sugreturn, %g1 */ -- { 0x91d02010, -1 }, /* ta 0x10 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x821020d8, static_cast(-1) }, /* mov __NR_sugreturn, %g1 */ -+ { 0x91d02010, static_cast(-1) }, /* ta 0x10 */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - sparc32_linux_sigframe_init - }; -@@ -83,9 +83,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x82102065, -1 }, /* mov __NR_rt_sigreturn, %g1 */ -- { 0x91d02010, -1 }, /* ta 0x10 */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x82102065, static_cast(-1) }, /* mov __NR_rt_sigreturn, %g1 */ -+ { 0x91d02010, static_cast(-1) }, /* ta 0x10 */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - sparc32_linux_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_sparc64-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_sparc64-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_sparc64-linux-tdep.c @@ -1,15 +0,0 @@ ---- gdb/sparc64-linux-tdep.c.orig 2018-03-15 16:48:31.376247000 +0100 -+++ gdb/sparc64-linux-tdep.c 2018-03-15 16:49:05.405119000 +0100 -@@ -64,9 +64,9 @@ - SIGTRAMP_FRAME, - 4, - { -- { 0x82102065, -1 }, /* mov __NR_rt_sigreturn, %g1 */ -- { 0x91d0206d, -1 }, /* ta 0x6d */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x82102065, static_cast(-1) }, /* mov __NR_rt_sigreturn, %g1 */ -+ { 0x91d0206d, static_cast(-1) }, /* ta 0x6d */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - sparc64_linux_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_tick6x-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_tick6x-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_tick6x-linux-tdep.c @@ -1,11 +0,0 @@ ---- gdb/tic6x-linux-tdep.c.orig 2018-03-15 16:29:54.131451000 +0100 -+++ gdb/tic6x-linux-tdep.c 2018-03-15 16:30:19.640674000 +0100 -@@ -137,7 +137,7 @@ - 4, - { - {0x000045aa, 0x0fffffff}, /* mvk .S2 139,b0 */ -- {0x10000000, -1}, /* swe */ -+ {0x10000000, static_cast(-1)}, /* swe */ - {TRAMP_SENTINEL_INSN} - }, - tic6x_linux_rt_sigreturn_init Index: head/devel/gdb/files/patch-gdb_tilegx-linux-tdep.c =================================================================== --- head/devel/gdb/files/patch-gdb_tilegx-linux-tdep.c +++ head/devel/gdb/files/patch-gdb_tilegx-linux-tdep.c @@ -1,15 +0,0 @@ ---- gdb/tilegx-linux-tdep.c.orig 2018-03-15 16:31:44.623131000 +0100 -+++ gdb/tilegx-linux-tdep.c 2018-03-15 16:32:29.603585000 +0100 -@@ -65,9 +65,9 @@ - SIGTRAMP_FRAME, - 8, - { -- { 0x00045fe551483000ULL, -1 }, /* { moveli r10, 139 } */ -- { 0x286b180051485000ULL, -1 }, /* { swint1 } */ -- { TRAMP_SENTINEL_INSN, -1 } -+ { 0x00045fe551483000ULL, static_cast(-1) }, /* { moveli r10, 139 } */ -+ { 0x286b180051485000ULL, static_cast(-1) }, /* { swint1 } */ -+ { TRAMP_SENTINEL_INSN, static_cast(-1) } - }, - tilegx_linux_sigframe_init - }; Index: head/devel/gdb/files/patch-gdb_tramp-frame.h =================================================================== --- head/devel/gdb/files/patch-gdb_tramp-frame.h +++ head/devel/gdb/files/patch-gdb_tramp-frame.h @@ -1,11 +0,0 @@ ---- gdb/tramp-frame.h.orig 2018-03-15 10:38:21.385046000 +0100 -+++ gdb/tramp-frame.h 2018-03-15 10:38:49.942224000 +0100 -@@ -41,7 +41,7 @@ - - /* Magic instruction that to mark the end of the signal trampoline - instruction sequence. */ --#define TRAMP_SENTINEL_INSN ((LONGEST) -1) -+#define TRAMP_SENTINEL_INSN ((ULONGEST) -1) - - struct tramp_frame - { Index: head/devel/gdb/files/patch-gdb_xtensa-tdep.h =================================================================== --- head/devel/gdb/files/patch-gdb_xtensa-tdep.h +++ head/devel/gdb/files/patch-gdb_xtensa-tdep.h @@ -1,20 +0,0 @@ ---- gdb/xtensa-tdep.h.orig 2018-03-15 16:33:53.194056000 +0100 -+++ gdb/xtensa-tdep.h 2018-03-15 16:37:44.151472000 +0100 -@@ -130,7 +130,7 @@ - ct, bsz, sz, al, tnum, flg, cp, mas, fet, sto}, - #define XTREG_END \ - {0, 0, (xtensa_register_type_t) 0, (xtensa_register_group_t) 0, \ -- 0, 0, 0, 0, -1, 0, 0, 0, 0, 0}, -+ 0, 0, 0, 0, static_cast(-1), 0, 0, 0, 0, 0}, - - #define XTENSA_REGISTER_FLAGS_PRIVILEGED 0x0001 - #define XTENSA_REGISTER_FLAGS_READABLE 0x0002 -@@ -228,7 +228,7 @@ - #define XTENSA_GDBARCH_TDEP_INSTANTIATE(rmap,spillsz) \ - { \ - 0, /* target_flags */ \ -- -1, /* spill_location */ \ -+ static_cast(-1), /* spill_location */ \ - (spillsz), /* spill_size */ \ - 0, /* unused */ \ - (XSHAL_ABI == XTHAL_ABI_CALL0 \