aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2013-06-12 16:05:39 +0000
committerPedro Alves <palves@redhat.com>2013-06-12 16:05:39 +0000
commit760256f9676dfeba19c6952df1ead3f067a992ff (patch)
tree5a5b10caf8e8014afe7453bf4184657c3500e05d
parentd0548fa274232b0aef4a578af02ffd03c39d3b5a (diff)
downloadgdb-760256f9676dfeba19c6952df1ead3f067a992ff.zip
gdb-760256f9676dfeba19c6952df1ead3f067a992ff.tar.gz
gdb-760256f9676dfeba19c6952df1ead3f067a992ff.tar.bz2
[GDBserver] Fix gdb.threads/siginfo-threads.exp, gdb.base/siginfo-obj.exp regressions.
This fixes the regressions reported at <http://sourceware.org/ml/gdb-patches/2013-06/msg00280.html>: $ runtest-gdbserver gdb.base/siginfo-obj.exp gdb.base/siginfo-thread.exp gdb.threads/siginfo-threads.exp Running ./gdb.base/siginfo-thread.exp ... FAIL: gdb.base/siginfo-thread.exp: p ssi_addr Running ./gdb.threads/siginfo-threads.exp ... FAIL: gdb.threads/siginfo-threads.exp: signal 0 si_pid FAIL: gdb.threads/siginfo-threads.exp: signal 1 si_pid FAIL: gdb.threads/siginfo-threads.exp: signal 2 si_pid FAIL: gdb.threads/siginfo-threads.exp: signal 3 si_pid Running ./gdb.base/siginfo-obj.exp ... FAIL: gdb.base/siginfo-obj.exp: p ssi_addr FAIL: gdb.base/siginfo-obj.exp: p ssi_addr The multi-arch patch made GDBserver do the the wrong siginfo layout conversion, because most uses of `linux_is_elf64' were removed, and it ended up never set. A global really is the wrong thing to use as elf64-ness is a per-process property; `linux_is_elf64' was just accidentally left behind. Tested on x86_64 Fedora 17. gdb/gdbserver/ 2013-06-12 Pedro Alves <palves@redhat.com> * linux-x86-low.c (linux_is_elf64): Delete global. (x86_siginfo_fixup): Replace reference to `linux_is_elf64' global with local linux_pid_exe_is_elf_64_file use.
-rw-r--r--gdb/gdbserver/ChangeLog6
-rw-r--r--gdb/gdbserver/linux-x86-low.c8
2 files changed, 11 insertions, 3 deletions
diff --git a/gdb/gdbserver/ChangeLog b/gdb/gdbserver/ChangeLog
index f3e47a8..b15614a 100644
--- a/gdb/gdbserver/ChangeLog
+++ b/gdb/gdbserver/ChangeLog
@@ -1,3 +1,9 @@
+2013-06-12 Pedro Alves <palves@redhat.com>
+
+ * linux-x86-low.c (linux_is_elf64): Delete global.
+ (x86_siginfo_fixup): Replace reference to `linux_is_elf64' global
+ with local linux_pid_exe_is_elf_64_file use.
+
2013-06-11 Pedro Alves <palves@redhat.com>
* linux-low.c (regset_disabled, disable_regset): New functions.
diff --git a/gdb/gdbserver/linux-x86-low.c b/gdb/gdbserver/linux-x86-low.c
index eeedb7c..3a4f007 100644
--- a/gdb/gdbserver/linux-x86-low.c
+++ b/gdb/gdbserver/linux-x86-low.c
@@ -1138,8 +1138,6 @@ siginfo_from_compat_x32_siginfo (siginfo_t *to,
}
}
-/* Is this process 64-bit? */
-static int linux_is_elf64;
#endif /* __x86_64__ */
/* Convert a native/host siginfo object, into/from the siginfo in the
@@ -1152,6 +1150,10 @@ static int
x86_siginfo_fixup (siginfo_t *native, void *inf, int direction)
{
#ifdef __x86_64__
+ unsigned int machine;
+ int tid = lwpid_of (get_thread_lwp (current_inferior));
+ int is_elf64 = linux_pid_exe_is_elf_64_file (tid, &machine);
+
/* Is the inferior 32-bit? If so, then fixup the siginfo object. */
if (!is_64bit_tdesc ())
{
@@ -1166,7 +1168,7 @@ x86_siginfo_fixup (siginfo_t *native, void *inf, int direction)
return 1;
}
/* No fixup for native x32 GDB. */
- else if (!linux_is_elf64 && sizeof (void *) == 8)
+ else if (!is_elf64 && sizeof (void *) == 8)
{
if (sizeof (siginfo_t) != sizeof (compat_x32_siginfo_t))
fatal ("unexpected difference in siginfo");