mirror of
https://git.freebsd.org/ports.git
synced 2025-06-29 08:30:37 -04:00
- Notable upstream fixes for FreeBSD include better support for multiprocessing as well as support for AVX and other extended registers in core dumps on newer AMD CPUs. - Use all-gdb as the build target to reduce build time. - sim can no longer be excluded during the tarball as a couple of source files in GDB now use headers from sim/ unconditionally. Instead, use --disable-sim to skip building the simulators. Reviewed by: pizzamig Sponsored by: DARPA Differential Revision: https://reviews.freebsd.org/D43053
605 lines
17 KiB
Text
605 lines
17 KiB
Text
diff --git gdb/Makefile.in gdb/Makefile.in
|
|
index 9c0a0bff2cd..0e62786dd31 100644
|
|
--- gdb/Makefile.in
|
|
+++ gdb/Makefile.in
|
|
@@ -704,6 +704,7 @@ ALL_AMD_DBGAPI_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 = \
|
|
+ aarch64-fbsd-kern.o \
|
|
aarch64-fbsd-tdep.o \
|
|
aarch64-linux-tdep.o \
|
|
aarch64-newlib-tdep.o \
|
|
@@ -718,6 +719,7 @@ ALL_64_TARGET_OBS = \
|
|
amd64-darwin-tdep.o \
|
|
amd64-dicos-tdep.o \
|
|
amd64-fbsd-tdep.o \
|
|
+ amd64fbsd-kern.o \
|
|
amd64-linux-tdep.o \
|
|
amd64-netbsd-tdep.o \
|
|
amd64-obsd-tdep.o \
|
|
@@ -737,18 +739,21 @@ ALL_64_TARGET_OBS = \
|
|
ia64-vms-tdep.o \
|
|
loongarch-linux-tdep.o \
|
|
loongarch-tdep.o \
|
|
+ mipsfbsd-kern.o \
|
|
mips-fbsd-tdep.o \
|
|
mips-linux-tdep.o \
|
|
mips-netbsd-tdep.o \
|
|
mips-sde-tdep.o \
|
|
mips-tdep.o \
|
|
mips64-obsd-tdep.o \
|
|
+ riscv-fbsd-kern.o \
|
|
riscv-fbsd-tdep.o \
|
|
riscv-linux-tdep.o \
|
|
riscv-none-tdep.o \
|
|
riscv-ravenscar-thread.o \
|
|
riscv-tdep.o \
|
|
sparc64-fbsd-tdep.o \
|
|
+ sparc64fbsd-kern.o \
|
|
sparc64-linux-tdep.o \
|
|
sparc64-netbsd-tdep.o \
|
|
sparc64-obsd-tdep.o \
|
|
@@ -773,6 +778,7 @@ ALL_TARGET_OBS = \
|
|
arch/loongarch.o \
|
|
arch/ppc-linux-common.o \
|
|
arm-bsd-tdep.o \
|
|
+ arm-fbsd-kern.o \
|
|
arm-fbsd-tdep.o \
|
|
arm-linux-tdep.o \
|
|
arm-netbsd-tdep.o \
|
|
@@ -790,6 +796,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 \
|
|
@@ -804,6 +812,7 @@ ALL_TARGET_OBS = \
|
|
i386-bsd-tdep.o \
|
|
i386-darwin-tdep.o \
|
|
i386-dicos-tdep.o \
|
|
+ i386fbsd-kern.o \
|
|
i386-fbsd-tdep.o \
|
|
i386-gnu-tdep.o \
|
|
i386-go32-tdep.o \
|
|
@@ -841,6 +850,7 @@ ALL_TARGET_OBS = \
|
|
obsd-tdep.o \
|
|
or1k-linux-tdep.o \
|
|
or1k-tdep.o \
|
|
+ ppcfbsd-kern.o \
|
|
ppc-fbsd-tdep.o \
|
|
ppc-linux-tdep.o \
|
|
ppc-netbsd-tdep.o \
|
|
@@ -1642,6 +1652,7 @@ ALLDEPFILES = \
|
|
arch/riscv.c \
|
|
arch/tic6x.c \
|
|
aarch32-tdep.c \
|
|
+ aarch64-fbsd-kern.c \
|
|
aarch64-fbsd-nat.c \
|
|
aarch64-fbsd-tdep.c \
|
|
aarch64-linux-nat.c \
|
|
@@ -1662,6 +1673,7 @@ ALLDEPFILES = \
|
|
amd64-bsd-nat.c \
|
|
amd64-darwin-tdep.c \
|
|
amd64-dicos-tdep.c \
|
|
+ amd64fbsd-kern.c \
|
|
amd64-fbsd-nat.c \
|
|
amd64-fbsd-tdep.c \
|
|
amd64-linux-nat.c \
|
|
@@ -1678,6 +1690,7 @@ ALLDEPFILES = \
|
|
arc-linux-nat.c \
|
|
arc-tdep.c \
|
|
arm-bsd-tdep.c \
|
|
+ arm-fbsd-kern.c \
|
|
arm-fbsd-nat.c \
|
|
arm-fbsd-tdep.c \
|
|
arm-linux-nat.c \
|
|
@@ -1697,6 +1710,9 @@ ALLDEPFILES = \
|
|
csky-tdep.c \
|
|
darwin-nat.c \
|
|
dicos-tdep.c \
|
|
+ fbsd-kld.c \
|
|
+ fbsd-kthr.c \
|
|
+ fbsd-kvm.c \
|
|
fbsd-nat.c \
|
|
fbsd-tdep.c \
|
|
fork-child.c \
|
|
@@ -1717,6 +1733,7 @@ ALLDEPFILES = \
|
|
i386-darwin-nat.c \
|
|
i386-darwin-tdep.c \
|
|
i386-dicos-tdep.c \
|
|
+ i386fbsd-kern.c \
|
|
i386-fbsd-nat.c \
|
|
i386-fbsd-tdep.c \
|
|
i386-gnu-nat.c \
|
|
@@ -1757,6 +1774,7 @@ ALLDEPFILES = \
|
|
microblaze-linux-tdep.c \
|
|
microblaze-tdep.c \
|
|
mingw-hdep.c \
|
|
+ mipsfbsd-kern.c \
|
|
mips-fbsd-nat.c \
|
|
mips-fbsd-tdep.c \
|
|
mips-linux-nat.c \
|
|
@@ -1777,6 +1795,7 @@ ALLDEPFILES = \
|
|
obsd-tdep.c \
|
|
or1k-linux-nat.c \
|
|
posix-hdep.c \
|
|
+ ppcfbsd-kern.c \
|
|
ppc-fbsd-nat.c \
|
|
ppc-fbsd-tdep.c \
|
|
ppc-linux-nat.c \
|
|
@@ -1791,6 +1810,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 \
|
|
@@ -1828,6 +1848,7 @@ ALLDEPFILES = \
|
|
sparc-sol2-nat.c \
|
|
sparc-sol2-tdep.c \
|
|
sparc-tdep.c \
|
|
+ sparc64fbsd-kern.c \
|
|
sparc64-fbsd-nat.c \
|
|
sparc64-fbsd-tdep.c \
|
|
sparc64-linux-nat.c \
|
|
@@ -1915,7 +1936,7 @@ generated_files = \
|
|
# Flags needed to compile Python code
|
|
PYTHON_CFLAGS = @PYTHON_CFLAGS@
|
|
|
|
-all: gdb$(EXEEXT) $(CONFIG_ALL) gdb-gdb.py gdb-gdb.gdb
|
|
+all: gdb$(EXEEXT) kgdb$(EXEEXT) $(CONFIG_ALL) gdb-gdb.py gdb-gdb.gdb
|
|
@$(MAKE) $(FLAGS_TO_PASS) DO=all "DODIRS=$(SUBDIRS)" subdir_do
|
|
|
|
# Rule for compiling .c files in the top-level gdb directory.
|
|
@@ -2178,6 +2199,12 @@ ifneq ($(CODESIGN_CERT),)
|
|
$(ECHO_SIGN) $(CODESIGN) -s $(CODESIGN_CERT) gdb$(EXEEXT)
|
|
endif
|
|
|
|
+kgdb$(EXEEXT): kgdb-main.o $(LIBGDB_OBS) $(CDEPS) $(TDEPLIBS)
|
|
+ $(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)
|
|
+
|
|
# This is useful when debugging GDB, because some Unix's don't let you run GDB
|
|
# on itself without copying the executable. So "make gdb1" will make
|
|
# gdb and put a copy in gdb1, and you can run it with "gdb gdb1".
|
|
@@ -2213,6 +2240,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
|
|
rm -f $(DEPDIR)/*
|
|
@@ -2636,7 +2664,7 @@ endif
|
|
|
|
# A list of all the objects we might care about in this build, for
|
|
# dependency tracking.
|
|
-all_object_files = gdb.o $(LIBGDB_OBS) gdbtk-main.o \
|
|
+all_object_files = kgdb-main.o gdb.o $(LIBGDB_OBS) gdbtk-main.o \
|
|
test-cp-name-parser.o
|
|
|
|
# All the .deps files to include.
|
|
diff --git gdb/config.in gdb/config.in
|
|
index e17245156d8..e1be9fdbc40 100644
|
|
--- gdb/config.in
|
|
+++ gdb/config.in
|
|
@@ -229,6 +229,12 @@
|
|
/* Define to 1 if you have the `kinfo_getfile' function. */
|
|
#undef HAVE_KINFO_GETFILE
|
|
|
|
+/* Define to 1 if your system has the kvm_kerndisp function. */
|
|
+#undef HAVE_KVM_DISP
|
|
+
|
|
+/* Define to 1 if your system has the kvm_open2 function. */
|
|
+#undef HAVE_KVM_OPEN2
|
|
+
|
|
/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
|
|
#undef HAVE_LANGINFO_CODESET
|
|
|
|
diff --git gdb/configure gdb/configure
|
|
index 5361bf42952..9f4c500fd22 100755
|
|
--- gdb/configure
|
|
+++ gdb/configure
|
|
@@ -19724,6 +19724,126 @@ fi
|
|
|
|
|
|
|
|
+# kgdb needs kvm_open2 for cross-debugging
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kvm_open2" >&5
|
|
+$as_echo_n "checking for library containing kvm_open2... " >&6; }
|
|
+if ${ac_cv_search_kvm_open2+:} false; then :
|
|
+ $as_echo_n "(cached) " >&6
|
|
+else
|
|
+ ac_func_search_save_LIBS=$LIBS
|
|
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
+/* end confdefs.h. */
|
|
+
|
|
+/* Override any GCC internal prototype to avoid an error.
|
|
+ Use char because int might match the return type of a GCC
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+char kvm_open2 ();
|
|
+int
|
|
+main ()
|
|
+{
|
|
+return kvm_open2 ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+for ac_lib in '' kvm; do
|
|
+ if test -z "$ac_lib"; then
|
|
+ ac_res="none required"
|
|
+ else
|
|
+ ac_res=-l$ac_lib
|
|
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
|
|
+ fi
|
|
+ if ac_fn_c_try_link "$LINENO"; then :
|
|
+ ac_cv_search_kvm_open2=$ac_res
|
|
+fi
|
|
+rm -f core conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext
|
|
+ if ${ac_cv_search_kvm_open2+:} false; then :
|
|
+ break
|
|
+fi
|
|
+done
|
|
+if ${ac_cv_search_kvm_open2+:} false; then :
|
|
+
|
|
+else
|
|
+ ac_cv_search_kvm_open2=no
|
|
+fi
|
|
+rm conftest.$ac_ext
|
|
+LIBS=$ac_func_search_save_LIBS
|
|
+fi
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kvm_open2" >&5
|
|
+$as_echo "$ac_cv_search_kvm_open2" >&6; }
|
|
+ac_res=$ac_cv_search_kvm_open2
|
|
+if test "$ac_res" != no; then :
|
|
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
|
|
+
|
|
+$as_echo "#define HAVE_KVM_OPEN2 1" >>confdefs.h
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
+# kgdb needs kvm_kerndisp for relocatable kernels
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for library containing kvm_kerndisp" >&5
|
|
+$as_echo_n "checking for library containing kvm_kerndisp... " >&6; }
|
|
+if ${ac_cv_search_kvm_kerndisp+:} false; then :
|
|
+ $as_echo_n "(cached) " >&6
|
|
+else
|
|
+ ac_func_search_save_LIBS=$LIBS
|
|
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
|
|
+/* end confdefs.h. */
|
|
+
|
|
+/* Override any GCC internal prototype to avoid an error.
|
|
+ Use char because int might match the return type of a GCC
|
|
+ builtin and then its argument prototype would still apply. */
|
|
+#ifdef __cplusplus
|
|
+extern "C"
|
|
+#endif
|
|
+char kvm_kerndisp ();
|
|
+int
|
|
+main ()
|
|
+{
|
|
+return kvm_kerndisp ();
|
|
+ ;
|
|
+ return 0;
|
|
+}
|
|
+_ACEOF
|
|
+for ac_lib in '' kvm; do
|
|
+ if test -z "$ac_lib"; then
|
|
+ ac_res="none required"
|
|
+ else
|
|
+ ac_res=-l$ac_lib
|
|
+ LIBS="-l$ac_lib $ac_func_search_save_LIBS"
|
|
+ fi
|
|
+ if ac_fn_c_try_link "$LINENO"; then :
|
|
+ ac_cv_search_kvm_kerndisp=$ac_res
|
|
+fi
|
|
+rm -f core conftest.err conftest.$ac_objext \
|
|
+ conftest$ac_exeext
|
|
+ if ${ac_cv_search_kvm_kerndisp+:} false; then :
|
|
+ break
|
|
+fi
|
|
+done
|
|
+if ${ac_cv_search_kvm_kerndisp+:} false; then :
|
|
+
|
|
+else
|
|
+ ac_cv_search_kvm_kerndisp=no
|
|
+fi
|
|
+rm conftest.$ac_ext
|
|
+LIBS=$ac_func_search_save_LIBS
|
|
+fi
|
|
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_search_kvm_kerndisp" >&5
|
|
+$as_echo "$ac_cv_search_kvm_kerndisp" >&6; }
|
|
+ac_res=$ac_cv_search_kvm_kerndisp
|
|
+if test "$ac_res" != no; then :
|
|
+ test "$ac_res" = "none required" || LIBS="$ac_res $LIBS"
|
|
+
|
|
+$as_echo "#define HAVE_KVM_DISP 1" >>confdefs.h
|
|
+
|
|
+fi
|
|
+
|
|
+
|
|
|
|
# Check whether --with-zstd was given.
|
|
if test "${with_zstd+set}" = set; then :
|
|
diff --git gdb/configure.ac gdb/configure.ac
|
|
index 3912b77b27f..bc960202b22 100644
|
|
--- gdb/configure.ac
|
|
+++ gdb/configure.ac
|
|
@@ -516,6 +516,16 @@ AC_SEARCH_LIBS(gethostbyname, nsl)
|
|
AM_ZLIB
|
|
AC_ZSTD
|
|
|
|
+# kgdb needs kvm_open2 for cross-debugging
|
|
+AC_SEARCH_LIBS(kvm_open2, kvm,
|
|
+ [AC_DEFINE(HAVE_KVM_OPEN2, 1,
|
|
+ [Define to 1 if your system has the kvm_open2 function. ])])
|
|
+
|
|
+# kgdb needs kvm_kerndisp for relocatable kernels
|
|
+AC_SEARCH_LIBS(kvm_kerndisp, kvm,
|
|
+ [AC_DEFINE(HAVE_KVM_DISP, 1,
|
|
+ [Define to 1 if your system has the kvm_kerndisp function. ])])
|
|
+
|
|
AM_ICONV
|
|
|
|
# GDB may fork/exec the iconv program to get the list of supported character
|
|
diff --git gdb/configure.nat gdb/configure.nat
|
|
index 1dc4206b69c..cb46e1505c7 100644
|
|
--- gdb/configure.nat
|
|
+++ gdb/configure.nat
|
|
@@ -63,7 +63,8 @@ case ${gdb_host} in
|
|
LOADLIBES='-ldl $(RDYNAMIC)'
|
|
;;
|
|
fbsd*)
|
|
- 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 47a674201f9..4b4b6893edf 100644
|
|
--- gdb/configure.tgt
|
|
+++ gdb/configure.tgt
|
|
@@ -122,7 +122,7 @@ esac
|
|
|
|
case "${targ}" in
|
|
*-*-freebsd* | *-*-kfreebsd*-gnu)
|
|
- os_obs="fbsd-tdep.o solib-svr4.o";;
|
|
+ os_obs="fbsd-tdep.o solib-svr4.o fbsd-kld.o fbsd-kthr.o";;
|
|
*-*-netbsd* | *-*-knetbsd*-gnu)
|
|
os_obs="netbsd-tdep.o solib-svr4.o";;
|
|
*-*-openbsd*)
|
|
@@ -139,7 +139,7 @@ aarch64*-*-elf | aarch64*-*-rtems*)
|
|
|
|
aarch64*-*-freebsd*)
|
|
# Target: FreeBSD/aarch64
|
|
- gdb_target_obs="aarch64-fbsd-tdep.o"
|
|
+ gdb_target_obs="aarch64-fbsd-tdep.o aarch64-fbsd-kern.o"
|
|
;;
|
|
|
|
aarch64*-*-linux*)
|
|
@@ -202,7 +202,7 @@ arm*-*-linux*)
|
|
;;
|
|
arm*-*-freebsd*)
|
|
# Target: FreeBSD/arm
|
|
- gdb_target_obs="arm-fbsd-tdep.o"
|
|
+ gdb_target_obs="arm-fbsd-tdep.o arm-fbsd-kern.o"
|
|
;;
|
|
arm*-*-netbsd* | arm*-*-knetbsd*-gnu)
|
|
# Target: NetBSD/arm
|
|
@@ -294,7 +294,11 @@ i[34567]86-*-dicos*)
|
|
;;
|
|
i[34567]86-*-freebsd* | i[34567]86-*-kfreebsd*-gnu)
|
|
# Target: FreeBSD/i386
|
|
- gdb_target_obs="i386-bsd-tdep.o i386-fbsd-tdep.o "
|
|
+ gdb_target_obs="i386-bsd-tdep.o i386-fbsd-tdep.o i386fbsd-kern.o"
|
|
+ if test "x$enable_64_bit_bfd" = "xyes"; then
|
|
+ # Target: FreeBSD amd64
|
|
+ gdb_target_obs="amd64fbsd-tdep.o amd64fbsd-kern.o ${gdb_target_obs}"
|
|
+ fi
|
|
;;
|
|
i[34567]86-*-netbsd* | i[34567]86-*-knetbsd*-gnu)
|
|
# Target: NetBSD/i386
|
|
@@ -434,7 +438,7 @@ mips*-*-netbsd* | mips*-*-knetbsd*-gnu)
|
|
;;
|
|
mips*-*-freebsd*)
|
|
# Target: MIPS running FreeBSD
|
|
- gdb_target_obs="mips-tdep.o mips-fbsd-tdep.o"
|
|
+ gdb_target_obs="mips-tdep.o mips-fbsd-tdep.o mipsfbsd-kern.o"
|
|
;;
|
|
mips64*-*-openbsd*)
|
|
# Target: OpenBSD/mips64
|
|
@@ -492,7 +496,7 @@ or1k-*-* | or1knd-*-*)
|
|
powerpc*-*-freebsd*)
|
|
# Target: FreeBSD/powerpc
|
|
gdb_target_obs="rs6000-tdep.o ppc-sysv-tdep.o ppc64-tdep.o \
|
|
- ppc-fbsd-tdep.o \
|
|
+ ppc-fbsd-tdep.o ppcfbsd-kern.o \
|
|
ravenscar-thread.o ppc-ravenscar-thread.o"
|
|
;;
|
|
|
|
@@ -541,7 +545,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*)
|
|
@@ -606,6 +610,7 @@ sparc64-*-linux*)
|
|
sparc*-*-freebsd* | sparc*-*-kfreebsd*-gnu)
|
|
# Target: FreeBSD/sparc64
|
|
gdb_target_obs="sparc-tdep.o sparc64-tdep.o sparc64-fbsd-tdep.o \
|
|
+ sparc64fbsd-kern.o \
|
|
ravenscar-thread.o sparc-ravenscar-thread.o"
|
|
;;
|
|
sparc-*-netbsd* | sparc-*-knetbsd*-gnu)
|
|
@@ -722,8 +727,8 @@ x86_64-*-linux*)
|
|
;;
|
|
x86_64-*-freebsd* | x86_64-*-kfreebsd*-gnu)
|
|
# Target: FreeBSD/amd64
|
|
- gdb_target_obs="amd64-fbsd-tdep.o ${i386_tobjs} \
|
|
- i386-bsd-tdep.o i386-fbsd-tdep.o"
|
|
+ gdb_target_obs="amd64-fbsd-tdep.o amd64fbsd-kern.o ${i386_tobjs} \
|
|
+ i386-bsd-tdep.o i386-fbsd-tdep.o i386fbsd-kern.o"
|
|
;;
|
|
x86_64-*-mingw* | x86_64-*-cygwin*)
|
|
# Target: MingW/amd64
|
|
diff --git gdb/osabi.c gdb/osabi.c
|
|
index ad3dad5b849..29e8578d031 100644
|
|
--- gdb/osabi.c
|
|
+++ gdb/osabi.c
|
|
@@ -67,6 +67,7 @@ static const struct osabi_names gdb_osabi_names[] =
|
|
{ "Solaris", NULL },
|
|
{ "GNU/Linux", "linux(-gnu[^-]*)?" },
|
|
{ "FreeBSD", NULL },
|
|
+ { "FreeBSD/kernel", NULL },
|
|
{ "NetBSD", NULL },
|
|
{ "OpenBSD", NULL },
|
|
{ "WindowsCE", NULL },
|
|
diff --git gdb/osabi.h gdb/osabi.h
|
|
index 35f14ec433c..1276d34d5f7 100644
|
|
--- gdb/osabi.h
|
|
+++ gdb/osabi.h
|
|
@@ -31,6 +31,7 @@ enum gdb_osabi
|
|
GDB_OSABI_SOLARIS,
|
|
GDB_OSABI_LINUX,
|
|
GDB_OSABI_FREEBSD,
|
|
+ GDB_OSABI_FREEBSD_KERNEL,
|
|
GDB_OSABI_NETBSD,
|
|
GDB_OSABI_OPENBSD,
|
|
GDB_OSABI_WINCE,
|
|
diff --git gdb/regcache.c gdb/regcache.c
|
|
index 91b20b7a2a2..0cfa1bae3d9 100644
|
|
--- gdb/regcache.c
|
|
+++ gdb/regcache.c
|
|
@@ -1123,6 +1123,22 @@ reg_buffer::raw_supply_zeroed (int regnum)
|
|
m_register_status[regnum] = REG_VALID;
|
|
}
|
|
|
|
+void
|
|
+reg_buffer::raw_supply_unsigned (int regnum, ULONGEST val)
|
|
+{
|
|
+ enum bfd_endian byte_order = gdbarch_byte_order (m_descr->gdbarch);
|
|
+ gdb_byte *regbuf;
|
|
+ size_t regsize;
|
|
+
|
|
+ assert_regnum (regnum);
|
|
+
|
|
+ regbuf = register_buffer (regnum);
|
|
+ regsize = m_descr->sizeof_register[regnum];
|
|
+
|
|
+ store_unsigned_integer (regbuf, regsize, byte_order, val);
|
|
+ m_register_status[regnum] = REG_VALID;
|
|
+}
|
|
+
|
|
/* See gdbsupport/common-regcache.h. */
|
|
|
|
void
|
|
@@ -1289,6 +1305,53 @@ regcache::collect_regset (const struct regset *regset, int regbase,
|
|
size);
|
|
}
|
|
|
|
+/* See regcache.h */
|
|
+
|
|
+int
|
|
+regcache_map_entry_size (const struct regcache_map_entry *map, gdbarch *gdbarch)
|
|
+{
|
|
+ int size = 0, count;
|
|
+
|
|
+ for (; (count = map->count) != 0; map++)
|
|
+ {
|
|
+ int regno = map->regno;
|
|
+ int slot_size = map->size;
|
|
+
|
|
+ if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
|
|
+ slot_size = register_size (gdbarch, regno);
|
|
+
|
|
+ size += count * slot_size;
|
|
+ }
|
|
+ return size;
|
|
+}
|
|
+
|
|
+/* See regcache.h */
|
|
+
|
|
+int
|
|
+regcache_map_offset (const struct regcache_map_entry *map, int regnum,
|
|
+ gdbarch *gdbarch)
|
|
+{
|
|
+ int offs = 0, count;
|
|
+
|
|
+ for (; (count = map->count) != 0; map++)
|
|
+ {
|
|
+ int regno = map->regno;
|
|
+ int slot_size = map->size;
|
|
+
|
|
+ if (slot_size == 0 && regno != REGCACHE_MAP_SKIP)
|
|
+ slot_size = register_size (gdbarch, regno);
|
|
+
|
|
+ if (regno != REGCACHE_MAP_SKIP && regnum >= regno
|
|
+ && regnum < regno + count)
|
|
+ return offs + (regno - regnum) * slot_size;
|
|
+
|
|
+ offs += count * slot_size;
|
|
+ }
|
|
+ return -1;
|
|
+}
|
|
+
|
|
+/* See regcache.h */
|
|
+
|
|
bool
|
|
regcache_map_supplies (const struct regcache_map_entry *map, int regnum,
|
|
struct gdbarch *gdbarch, size_t size)
|
|
diff --git gdb/regcache.h gdb/regcache.h
|
|
index 57ddac465f0..b9f62994901 100644
|
|
--- gdb/regcache.h
|
|
+++ gdb/regcache.h
|
|
@@ -133,6 +133,11 @@ regcache_map_entry_size (const struct regcache_map_entry *map)
|
|
return size;
|
|
}
|
|
|
|
+/* Same as above, but accepts a gdbarch to handle entries with a
|
|
+ variable register size. */
|
|
+extern int regcache_map_entry_size (const struct regcache_map_entry *map,
|
|
+ gdbarch *gdbarch);
|
|
+
|
|
/* Transfer a set of registers (as described by REGSET) between
|
|
REGCACHE and BUF. If REGNUM == -1, transfer all registers
|
|
belonging to the regset, otherwise just the register numbered
|
|
@@ -151,6 +156,13 @@ extern void regcache_collect_regset (const struct regset *regset,
|
|
int regnum, void *buf, size_t size);
|
|
|
|
|
|
+/* Return the offset of REGNUM in a block of registers described by an
|
|
+ array of regcache_map_entries. If the register is not found,
|
|
+ returns -1. */
|
|
+
|
|
+extern int regcache_map_offset (const struct regcache_map_entry *map,
|
|
+ int regnum, gdbarch *gdbarch);
|
|
+
|
|
/* Return true if a set of registers contains the value of the
|
|
register numbered REGNUM. The size of the set of registers is
|
|
given in SIZE, and the layout of the set of registers is described
|
|
@@ -238,6 +250,8 @@ class reg_buffer : public reg_buffer_common
|
|
only LEN, without editing the rest of the register. */
|
|
void raw_supply_part (int regnum, int offset, int len, const gdb_byte *in);
|
|
|
|
+ void raw_supply_unsigned (int regnum, ULONGEST val);
|
|
+
|
|
void invalidate (int regnum);
|
|
|
|
virtual ~reg_buffer () = default;
|