This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] Update the conditionals in fbsd-nat.h so they are always honored.


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=f8eb6a9e8986c6428de629b5538e431e1c04caf1

commit f8eb6a9e8986c6428de629b5538e431e1c04caf1
Author: John Baldwin <jhb@FreeBSD.org>
Date:   Fri Nov 30 13:21:19 2018 -0800

    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.

Diff:
---
 gdb/ChangeLog  | 16 ++++++++++++++++
 gdb/fbsd-nat.c | 19 +++++++++++++++----
 gdb/fbsd-nat.h |  3 +--
 3 files changed, 32 insertions(+), 6 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 96cab87..348eb65 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,19 @@
+2018-11-30  John Baldwin  <jhb@FreeBSD.org>
+
+	* 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.
+
 2018-11-30  Andrew Burgess  <andrew.burgess@embecosm.com>
 
 	* riscv-linux-nat.c: Add 'inferior.h' and 'target-descriptions.h'
diff --git a/gdb/fbsd-nat.c b/gdb/fbsd-nat.c
index d11e990..6ec273b 100644
--- a/gdb/fbsd-nat.c
+++ b/gdb/fbsd-nat.c
@@ -532,9 +532,17 @@ fbsd_nat_target::info_proc (const char *args, enum info_proc_what what)
   return true;
 }
 
-#ifdef KERN_PROC_AUXV
+/*
+ * The current layout of siginfo_t on FreeBSD was adopted in SVN
+ * revision 153154 which shipped in FreeBSD versions 7.0 and later.
+ * Don't bother supporting the older layout on older kernels.  The
+ * older format was also never used in core dump notes.
+ */
+#if __FreeBSD_version >= 700009
+#define USE_SIGINFO
+#endif
 
-#ifdef PT_LWPINFO
+#ifdef USE_SIGINFO
 /* Return the size of siginfo for the current inferior.  */
 
 #ifdef __LP64__
@@ -676,7 +684,7 @@ fbsd_nat_target::xfer_partial (enum target_object object,
 
   switch (object)
     {
-#ifdef PT_LWPINFO
+#ifdef USE_SIGINFO
     case TARGET_OBJECT_SIGNAL_INFO:
       {
 	struct ptrace_lwpinfo pl;
@@ -708,6 +716,7 @@ fbsd_nat_target::xfer_partial (enum target_object object,
 	return TARGET_XFER_OK;
       }
 #endif
+#ifdef KERN_PROC_AUXV
     case TARGET_OBJECT_AUXV:
       {
 	gdb::byte_vector buf_storage;
@@ -749,6 +758,8 @@ fbsd_nat_target::xfer_partial (enum target_object object,
 	  }
 	return TARGET_XFER_E_IO;
       }
+#endif
+#if defined(KERN_PROC_VMMAP) && defined(KERN_PROC_PS_STRINGS)
     case TARGET_OBJECT_FREEBSD_VMMAP:
     case TARGET_OBJECT_FREEBSD_PS_STRINGS:
       {
@@ -804,13 +815,13 @@ fbsd_nat_target::xfer_partial (enum target_object object,
 	*xfered_len = len;
 	return TARGET_XFER_OK;
       }
+#endif
     default:
       return inf_ptrace_target::xfer_partial (object, annex,
 					      readbuf, writebuf, offset,
 					      len, xfered_len);
     }
 }
-#endif
 
 #ifdef PT_LWPINFO
 static int debug_fbsd_lwp;
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;


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]