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] Add workaround from gdbserver's gdb_proc_service.h to GDB


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

commit 43b7e92b0c73d693d3b656b84b2a1181e40477ca
Author: Gary Benson <gbenson@redhat.com>
Date:   Mon Oct 1 10:37:39 2018 +0100

    Add workaround from gdbserver's gdb_proc_service.h to GDB
    
    This commit adds a workaround from gdbserver's gdb_proc_service.h
    to GDB's.  It doesn't seem to have been needed on any glibc as far
    back as 2001, but it's possibly required for other C libraries so
    I've retained it.
    
    gdb/ChangeLog:
    
    	* configure.ac: Check if sys/procfs.h defines elf_fpregset_t.
    	(AC_CHECK_HEADERS): Check for linux/elf.h.
    	* configure, config.in: Rebuild.
    	* gdb_proc_service.h: Include linux/elf.h if sys/procfs.h
    	doesn't define elf_fpregset_t.

Diff:
---
 gdb/ChangeLog          |  8 ++++++++
 gdb/config.in          |  6 ++++++
 gdb/configure          | 39 ++++++++++++++++++++++++++++++++++++++-
 gdb/configure.ac       |  3 ++-
 gdb/gdb_proc_service.h |  9 +++++++++
 5 files changed, 63 insertions(+), 2 deletions(-)

diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index 01ae331..698c9b7 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,13 @@
 2018-10-01  Gary Benson <gbenson@redhat.com>
 
+	* configure.ac: Check if sys/procfs.h defines elf_fpregset_t.
+	(AC_CHECK_HEADERS): Check for linux/elf.h.
+	* configure, config.in: Rebuild.
+	* gdb_proc_service.h: Include linux/elf.h if sys/procfs.h
+	doesn't define elf_fpregset_t.
+
+2018-10-01  Gary Benson <gbenson@redhat.com>
+
 	* gdb_proc_service.h: Whitespace change.
 
 2018-10-01  Tom Tromey  <tom@tromey.com>
diff --git a/gdb/config.in b/gdb/config.in
index 01acda1..fc7c859 100644
--- a/gdb/config.in
+++ b/gdb/config.in
@@ -156,6 +156,9 @@
 /* Define if ELF support should be included. */
 #undef HAVE_ELF
 
+/* Define if <sys/procfs.h> has elf_fpregset_t. */
+#undef HAVE_ELF_FPREGSET_T
+
 /* Define to 1 if you have the <elf_hp.h> header file. */
 #undef HAVE_ELF_HP_H
 
@@ -261,6 +264,9 @@
 /* Define to 1 if you have the <libunwind-ia64.h> header file. */
 #undef HAVE_LIBUNWIND_IA64_H
 
+/* Define to 1 if you have the <linux/elf.h> header file. */
+#undef HAVE_LINUX_ELF_H
+
 /* Define to 1 if you have the <linux/perf_event.h> header file. */
 #undef HAVE_LINUX_PERF_EVENT_H
 
diff --git a/gdb/configure b/gdb/configure
index a5d6e74..4a725f6 100755
--- a/gdb/configure
+++ b/gdb/configure
@@ -12165,7 +12165,7 @@ fi
 
 # elf_hp.h is for HP/UX 64-bit shared library support.
 for ac_header in nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \
-                  thread_db.h \
+                  thread_db.h linux/elf.h \
 		  sys/file.h sys/filio.h sys/ioctl.h sys/param.h \
 		  sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \
 		  sys/reg.h sys/debugreg.h sys/select.h \
@@ -14636,6 +14636,43 @@ $as_echo "#define HAVE_PSADDR_T 1" >>confdefs.h
  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_psaddr_t" >&5
 $as_echo "$bfd_cv_have_sys_procfs_type_psaddr_t" >&6; }
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for elf_fpregset_t in sys/procfs.h" >&5
+$as_echo_n "checking for elf_fpregset_t in sys/procfs.h... " >&6; }
+ if ${bfd_cv_have_sys_procfs_type_elf_fpregset_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _SYSCALL32
+/* Needed for new procfs interface on sparc-solaris.  */
+#define _STRUCTURED_PROC 1
+#include <sys/procfs.h>
+int
+main ()
+{
+elf_fpregset_t avar
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  bfd_cv_have_sys_procfs_type_elf_fpregset_t=yes
+else
+  bfd_cv_have_sys_procfs_type_elf_fpregset_t=no
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+
+ if test $bfd_cv_have_sys_procfs_type_elf_fpregset_t = yes; then
+
+$as_echo "#define HAVE_ELF_FPREGSET_T 1" >>confdefs.h
+
+ fi
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: $bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&5
+$as_echo "$bfd_cv_have_sys_procfs_type_elf_fpregset_t" >&6; }
+
 
 
 
diff --git a/gdb/configure.ac b/gdb/configure.ac
index 66fc6c6..a469d0a 100644
--- a/gdb/configure.ac
+++ b/gdb/configure.ac
@@ -1296,7 +1296,7 @@ fi
 AC_HEADER_STDC
 # elf_hp.h is for HP/UX 64-bit shared library support.
 AC_CHECK_HEADERS([nlist.h machine/reg.h poll.h sys/poll.h proc_service.h \
-                  thread_db.h \
+                  thread_db.h linux/elf.h \
 		  sys/file.h sys/filio.h sys/ioctl.h sys/param.h \
 		  sys/resource.h sys/procfs.h sys/ptrace.h ptrace.h \
 		  sys/reg.h sys/debugreg.h sys/select.h \
@@ -1528,6 +1528,7 @@ if test "$ac_cv_header_sys_procfs_h" = yes; then
   BFD_HAVE_SYS_PROCFS_TYPE(prgregset32_t)
   BFD_HAVE_SYS_PROCFS_TYPE(lwpid_t)
   BFD_HAVE_SYS_PROCFS_TYPE(psaddr_t)
+  BFD_HAVE_SYS_PROCFS_TYPE(elf_fpregset_t)
 
   dnl Check for broken prfpregset_t type
 
diff --git a/gdb/gdb_proc_service.h b/gdb/gdb_proc_service.h
index 39f0e03..ee9358d 100644
--- a/gdb/gdb_proc_service.h
+++ b/gdb/gdb_proc_service.h
@@ -64,6 +64,15 @@ EXTERN_C_POP
 #include <sys/procfs.h>
 #endif
 
+/* Not all platforms bring in <linux/elf.h> via <sys/procfs.h>.  If
+   <sys/procfs.h> wasn't enough to find elf_fpregset_t, try the kernel
+   headers also (but don't if we don't need to).  */
+#ifndef HAVE_ELF_FPREGSET_T
+# ifdef HAVE_LINUX_ELF_H
+#  include <linux/elf.h>
+# endif
+#endif
+
 EXTERN_C_PUSH
 
 /* Functions in this interface return one of these status codes.  */


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