From 5b4e221c82f3010f2004c6cba145c188c9ebfe6c Mon Sep 17 00:00:00 2001 From: Mike Frysinger Date: Sun, 29 Sep 2013 03:57:34 +0000 Subject: [PATCH] gdb: btrace: fix build errors on older glibc builds It is possible to have a build of glibc where SYS_perf_event_open is not defined (because when the glibc was compiled, the syscall did not exist), but have newer kernel headers installed so that linux/perf_event.h is available. In this setup, you get a build failure: ./common/linux-btrace.c: In function 'kernel_supports_btrace': ./common/linux-btrace.c:316:23: error: 'SYS_perf_event_open' undeclared (first use in this function) Update the ifdef check to also see if the syscall is available. URL: https://bugs.gentoo.org/473522 Reported-by: William Throwe Signed-off-by: Mike Frysinger --- gdb/ChangeLog | 6 ++++++ gdb/common/linux-btrace.c | 7 +++++-- gdb/gdbserver/ChangeLog | 5 +++++ gdb/gdbserver/config.in | 3 +++ gdb/gdbserver/configure | 2 +- gdb/gdbserver/configure.ac | 2 +- 6 files changed, 21 insertions(+), 4 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 7114670a6ac..5788c695739 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,9 @@ +2013-09-28 Mike Frysinger + + * common/linux-btrace.c: Move sys/syscall.h out of the + HAVE_LINUX_PERF_EVENT_H check and wrap it in HAVE_SYS_SYSCALL_H. + Also check for SYS_perf_event_open before attempting to buid. + 2013-09-27 Doug Evans * dwarf2read.c (dwarf2_section_info): Add comment. diff --git a/gdb/common/linux-btrace.c b/gdb/common/linux-btrace.c index b874c847a96..7e20745a657 100644 --- a/gdb/common/linux-btrace.c +++ b/gdb/common/linux-btrace.c @@ -33,13 +33,16 @@ #include "gdb_wait.h" #include "i386-cpuid.h" -#if HAVE_LINUX_PERF_EVENT_H +#ifdef HAVE_SYS_SYSCALL_H +#include +#endif + +#if HAVE_LINUX_PERF_EVENT_H && defined(SYS_perf_event_open) #include #include #include #include -#include #include #include #include diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog index da57151d2de..460d9a12057 100644 --- a/gdb/gdbserver/ChangeLog +++ b/gdb/gdbserver/ChangeLog @@ -1,3 +1,8 @@ +2013-09-28 Mike Frysinger + + * configure.ac (AC_CHECK_HEADERS): Add sys/syscall.h + * config.in, configure: Regenerated. + 2013-09-18 Yao Qi PR server/15959 diff --git a/gdb/gdbserver/config.in b/gdb/gdbserver/config.in index 7f23a31796a..9398413124a 100644 --- a/gdb/gdbserver/config.in +++ b/gdb/gdbserver/config.in @@ -199,6 +199,9 @@ /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H +/* Define to 1 if you have the header file. */ +#undef HAVE_SYS_SYSCALL_H + /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H diff --git a/gdb/gdbserver/configure b/gdb/gdbserver/configure index 193aedc27b0..55dba8400e6 100755 --- a/gdb/gdbserver/configure +++ b/gdb/gdbserver/configure @@ -4873,7 +4873,7 @@ $as_echo "$as_me: running $SHELL $ac_sub_configure $ac_sub_configure_args --cach cd "$ac_popdir" -for ac_header in sgtty.h termio.h termios.h sys/reg.h string.h proc_service.h sys/procfs.h thread_db.h linux/elf.h stdlib.h errno.h fcntl.h signal.h sys/file.h malloc.h sys/ioctl.h netinet/in.h sys/socket.h netdb.h netinet/tcp.h arpa/inet.h sys/wait.h wait.h sys/un.h linux/perf_event.h +for ac_header in sgtty.h termio.h termios.h sys/reg.h string.h proc_service.h sys/procfs.h thread_db.h linux/elf.h stdlib.h errno.h fcntl.h signal.h sys/file.h malloc.h sys/ioctl.h netinet/in.h sys/socket.h netdb.h netinet/tcp.h arpa/inet.h sys/wait.h wait.h sys/un.h linux/perf_event.h sys/syscall.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" diff --git a/gdb/gdbserver/configure.ac b/gdb/gdbserver/configure.ac index 456a1f76b6c..c1675086c0b 100644 --- a/gdb/gdbserver/configure.ac +++ b/gdb/gdbserver/configure.ac @@ -84,7 +84,7 @@ AC_CHECK_HEADERS(sgtty.h termio.h termios.h sys/reg.h string.h dnl errno.h fcntl.h signal.h sys/file.h malloc.h dnl sys/ioctl.h netinet/in.h sys/socket.h netdb.h dnl netinet/tcp.h arpa/inet.h sys/wait.h wait.h sys/un.h dnl - linux/perf_event.h) + linux/perf_event.h sys/syscall.h) AC_CHECK_FUNCS(pread pwrite pread64 readlink fdwalk pipe2) AC_REPLACE_FUNCS(vasprintf vsnprintf) -- 2.30.2