gdbserver-amd64: add HAVE_STRUCT_USER_REGS_STRUCT_(GS|FS)_BASE for gdbserver.
authorWalfred Tedeschi <walfred.tedeschi@intel.com>
Fri, 27 Jan 2017 14:19:12 +0000 (15:19 +0100)
committerWalfred Tedeschi <walfred.tedeschi@intel.com>
Fri, 27 Jan 2017 14:20:11 +0000 (15:20 +0100)
The macros mentioned in the title were set only for GDB. In gdbserver they
were not set until now.  To align the code in GDB and gdbserver these macros
are also added into gdbserver, enabling read and write of gs_base and fs_base
registers from the system in new and old kernels.

2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>

gdb/gdbserver/ChangeLog:

     * configure.ac: Check if the fs_base and gs_base members of
     `struct user_regs_struct' exist.
     * config.in: Regenerated.
     * configure: Likewise.

gdb/gdbserver/ChangeLog
gdb/gdbserver/config.in
gdb/gdbserver/configure
gdb/gdbserver/configure.ac

index d3fba9bfec6bd3fdc6bb62768616d3ee2dd08cea..79fe2f9703b56cce75f2ceb63ac060080e331ad1 100644 (file)
@@ -1,3 +1,10 @@
+2017-01-27  Walfred Tedeschi  <walfred.tedeschi@intel.com>
+
+       * configure.ac: Check if the fs_base and gs_base members of
+       `struct user_regs_struct' exist.
+       * config.in: Regenerated.
+       * configure: Likewise.
+
 2017-01-09  Antoine Tremblay  <antoine.tremblay@ericsson.com>
 
        * linux-aarch32-low.c (arm_breakpoint_kind_from_pc): Use
index b721ea83cf11c414d4ccf369ed788a03620691ec..34a7443433874313e45a38f87cdae5dc8ddc66ec 100644 (file)
 /* Define to 1 if `struct stat' is a member of `st_blocks'. */
 #undef HAVE_STRUCT_STAT_ST_BLOCKS
 
+/* Define to 1 if `struct user_regs_struct' is a member of `fs_base'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE
+
+/* Define to 1 if `struct user_regs_struct' is a member of `gs_base'. */
+#undef HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE
+
 /* Define to 1 if the target supports __sync_*_compare_and_swap */
 #undef HAVE_SYNC_BUILTINS
 
index 53c26f39f4365e0efbf6d7121635af6043f1f1c0..6ae486539f4e0f2c026aa14bdc4a41b46610d681 100755 (executable)
@@ -7498,6 +7498,32 @@ _ACEOF
 fi
 
 
+# See if <sys/user.h> supports the %fs_base and %gs_base amd64 segment
+# registers.  Older amd64 Linux's don't have the fs_base and gs_base
+# members of `struct user_regs_struct'.
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "fs_base" "ac_cv_member_struct_user_regs_struct_fs_base" "#include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_fs_base" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_USER_REGS_STRUCT_FS_BASE 1
+_ACEOF
+
+
+fi
+ac_fn_c_check_member "$LINENO" "struct user_regs_struct" "gs_base" "ac_cv_member_struct_user_regs_struct_gs_base" "#include <sys/user.h>
+"
+if test "x$ac_cv_member_struct_user_regs_struct_gs_base" = x""yes; then :
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STRUCT_USER_REGS_STRUCT_GS_BASE 1
+_ACEOF
+
+
+fi
+
+
+
 ac_fn_c_check_type "$LINENO" "socklen_t" "ac_cv_type_socklen_t" "#include <sys/types.h>
 #include <sys/socket.h>
 
index d013c219cc7a35afcfe0d4cacea970af98d2c953..4ea7913c9818aa0e2d96ac5891c28962ee3dc0bc 100644 (file)
@@ -163,6 +163,13 @@ AC_CHECK_DECLS([strerror, perror, vasprintf, vsnprintf])
 
 AC_CHECK_MEMBERS([struct stat.st_blocks, struct stat.st_blksize])
 
+# See if <sys/user.h> supports the %fs_base and %gs_bas amd64 segment registers.
+# Older amd64 Linux's don't have the fs_base and gs_base members of
+# `struct user_regs_struct'.
+AC_CHECK_MEMBERS([struct user_regs_struct.fs_base, struct user_regs_struct.gs_base],
+                [], [], [#include <sys/user.h>])
+
+
 AC_CHECK_TYPES(socklen_t, [], [],
 [#include <sys/types.h>
 #include <sys/socket.h>