diff options
author | John Baldwin <jhb@FreeBSD.org> | 2018-11-30 13:21:19 -0800 |
---|---|---|
committer | John Baldwin <jhb@FreeBSD.org> | 2018-11-30 13:21:19 -0800 |
commit | f8eb6a9e8986c6428de629b5538e431e1c04caf1 (patch) | |
tree | 029b3d85b6d99ed5a3d7013e688d4aee74af6bf2 /gdb/fbsd-nat.h | |
parent | 27c634e0ed18f769fb92d03fb75ea491fb6656ec (diff) | |
download | gdb-f8eb6a9e8986c6428de629b5538e431e1c04caf1.zip gdb-f8eb6a9e8986c6428de629b5538e431e1c04caf1.tar.gz gdb-f8eb6a9e8986c6428de629b5538e431e1c04caf1.tar.bz2 |
Update the conditionals in fbsd-nat.h so they are always honored.
Not all of the architecture-specific FreeBSD target files were
including the right headers to enable conditionals in fbsd-nat.h after
the C++ target conversion. As a result, certain operations like 'info
auxv' and 'p $_siginfo' were not working for some native targets
(noticed on RISC-V). Fix this in a couple of ways:
1) Declare fbsd_nat_target::xfer_partial unconditionally and only use
conditionals in the function body for individual target objects.
Originally this function was only used to read the ELF auxiliary
vector, so the entire function was conditional on a macro required
for that object (KERN_AUXV_PROC). However, xfer_partial has since
grown support for additional objects. Making the function
unconditional avoids needing to add the right header to fbsd-nat.h
and allows each target object to use independent requirements.
This did require using a more explicit conditional test for the
$_siginfo support. Removing the "outer" KERN_PROC_AUXV test
enabled $_siginfo for all kernels with PT_LWPINFO, but some older
kernels (FreeBSD 6.0) exposed PT_LWPINFO with a different siginfo
format. Instead use an explicit test for when the current siginfo
format was adopted (shipped in FreeBSD 7.0). This actually enables
$_siginfo on a wider range of kernels as KERN_PROC_AUXV wasn't
introduced until FreeBSD 9.1/10.0.
2) Include <sys/proc.h> in fbsd-nat.h for the definition of
TDP_RFPPWAIT that governs support for fork following.
gdb/ChangeLog:
* fbsd-nat.c [__FreeBSD_version >= 700009] (USE_SIGINFO): Macro
defined.
(union sigval32, struct siginfo32, fbsd_siginfo_size)
(fbsd_convert_siginfo): Make conditional on USE_SIGINFO instead
of KERN_PROC_AUXV and PT_LWPINFO.
(fbsd_nat_target::xfer_partial): Define method unconditionally.
Make TARGET_OBJECT_SIGNAL_INFO conditional on USE_SIGINFO.
Make TARGET_OBJECT_AUXV conditional on KERN_PROC_AUXV.
Make TARGET_OBJECT_FREEBSD_VMMAP and
TARGET_OBJECT_FREEBSD_PS_STRINGS conditional on KERN_PROC_VMMAP
and KERN_PROC_PS_STRINGS.
* fbsd-nat.h: Include <sys/proc.h>.
(fbsd_nat_target::xfer_partial): Declare method unconditionally.
Diffstat (limited to 'gdb/fbsd-nat.h')
-rw-r--r-- | gdb/fbsd-nat.h | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/gdb/fbsd-nat.h b/gdb/fbsd-nat.h index 3e34600..1bc5d58 100644 --- a/gdb/fbsd-nat.h +++ b/gdb/fbsd-nat.h @@ -21,6 +21,7 @@ #define FBSD_NAT_H #include "inf-ptrace.h" +#include <sys/proc.h> #ifdef TRAP_BRKPT /* MIPS does not set si_code for SIGTRAP. sparc64 reports @@ -41,14 +42,12 @@ public: bool info_proc (const char *, enum info_proc_what) override; -#ifdef KERN_PROC_AUXV enum target_xfer_status xfer_partial (enum target_object object, const char *annex, gdb_byte *readbuf, const gdb_byte *writebuf, ULONGEST offset, ULONGEST len, ULONGEST *xfered_len) override; -#endif #ifdef PT_LWPINFO bool thread_alive (ptid_t ptid) override; |