aboutsummaryrefslogtreecommitdiff
path: root/gdb/configure.ac
diff options
context:
space:
mode:
authorJohn Baldwin <jhb@FreeBSD.org>2016-06-12 21:24:42 -0700
committerJohn Baldwin <jhb@FreeBSD.org>2016-06-24 10:46:03 -0700
commite6cdd38e8f0fead14cd3c528e9a4b666e1871752 (patch)
tree357ce93c54e5400c660476da9aac57d511aca674 /gdb/configure.ac
parent82372b2f2747d347e24bb10ddc7bc7e828222a42 (diff)
downloadgdb-e6cdd38e8f0fead14cd3c528e9a4b666e1871752.zip
gdb-e6cdd38e8f0fead14cd3c528e9a4b666e1871752.tar.gz
gdb-e6cdd38e8f0fead14cd3c528e9a4b666e1871752.tar.bz2
Add support for catching system calls to native FreeBSD targets.
All platforms on FreeBSD use a shared system call table, so use a single XML file to describe the system calls available on each FreeBSD platform. Recent versions of FreeBSD include the identifier of the current system call when reporting a system call entry or exit event in the ptrace_lwpinfo structure obtained via PT_LWPINFO in fbsd_wait. As such, FreeBSD native targets do not use the gdbarch method to fetch the system call code. In addition, FreeBSD register sets fetched via ptrace do not include an equivalent of 'orig_rax' (on amd64 for example), so the system call code cannot be extracted from the available registers during a system call exit. However, GDB assumes that system call catch points are not supported if the gdbarch method is not present. As a workaround, FreeBSD ABIs install a dummy gdbarch method that throws an internal_error if it is ever invoked. gdb/ChangeLog: * configure.ac: Check for support for system call LWP fields on FreeBSD. * config.in, configure: Rebuild. * data-directory/Makefile.in (SYSCALLS_FILES): Add freebsd.xml. * fbsd-nat.c (fbsd_wait) [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE]: Report system call events. [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE] (fbsd_set_syscall_catchpoint): New function. (fbsd_nat_add_target) [HAVE_STRUCT_PTRACE_LWPINFO_PL_SYSCALL_CODE]: Set "to_set_syscall_catchpoint" to "fbsd_set_syscall_catchpoint". * fbsd-tdep.c: Include xml-syscall.h (fbsd_get_syscall_number): New function. (fbsd_init_abi): Set XML system call file name. Add "get_syscall_number" gdbarch method. * syscalls/freebsd.xml: New file.
Diffstat (limited to 'gdb/configure.ac')
-rw-r--r--gdb/configure.ac5
1 files changed, 5 insertions, 0 deletions
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 6a72f72..920c228 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1526,6 +1526,11 @@ fi
AC_CHECK_MEMBERS([struct ptrace_lwpinfo.pl_tdname], [], [],
[#include <sys/ptrace.h>])
+# See if <sys/ptrace.h> supports syscall fields on FreeBSD. The
+# pl_syscall_code member of `struct ptrace_lwpinfo' was added in
+# FreeBSD 10.3.
+AC_CHECK_MEMBERS([struct ptrace_lwpinfo.pl_syscall_code], [], [],
+ [#include <sys/ptrace.h>])
# Detect which type of /proc is in use, such as for Solaris.