+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'
 
   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__
 
   switch (object)
     {
-#ifdef PT_LWPINFO
+#ifdef USE_SIGINFO
     case TARGET_OBJECT_SIGNAL_INFO:
       {
        struct ptrace_lwpinfo pl;
        return TARGET_XFER_OK;
       }
 #endif
+#ifdef KERN_PROC_AUXV
     case TARGET_OBJECT_AUXV:
       {
        gdb::byte_vector buf_storage;
          }
        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:
       {
        *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;
 
 #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
 
   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;