diff options
author | Gary Benson <gbenson@redhat.com> | 2018-10-01 10:37:39 +0100 |
---|---|---|
committer | Gary Benson <gbenson@redhat.com> | 2018-10-01 10:37:39 +0100 |
commit | 43b7e92b0c73d693d3b656b84b2a1181e40477ca (patch) | |
tree | 67c903d2e6e885643849f3833847b75dd88a0c71 | |
parent | 3795e814428a269a3528d3d9a86da957449fc5b6 (diff) | |
download | gdb-43b7e92b0c73d693d3b656b84b2a1181e40477ca.zip gdb-43b7e92b0c73d693d3b656b84b2a1181e40477ca.tar.gz gdb-43b7e92b0c73d693d3b656b84b2a1181e40477ca.tar.bz2 |
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.
-rw-r--r-- | gdb/ChangeLog | 8 | ||||
-rw-r--r-- | gdb/config.in | 6 | ||||
-rwxr-xr-x | gdb/configure | 39 | ||||
-rw-r--r-- | gdb/configure.ac | 3 | ||||
-rw-r--r-- | 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. */ |