btrace: support 32-bit inferior on 64-bit host
authorMarkus Metzger <markus.t.metzger@intel.com>
Thu, 29 Jan 2015 09:43:05 +0000 (10:43 +0100)
committerMarkus Metzger <markus.t.metzger@intel.com>
Tue, 3 Mar 2015 11:47:41 +0000 (12:47 +0100)
commitd68e53f47932eb7c374df9b90faed7aca2eed9d7
tree47015cbfe454f85ccfb6c95577800d86767712ad
parent986b66010c684a871f5606cb4f074d4e3d829e2f
btrace: support 32-bit inferior on 64-bit host

The heuristic for filtering out kernel addressess in BTS trace checks the
most significant bit in each address.  This works fine for 32-bit and 64-bit
mode.

For 32-bit compatibility mode, i.e. a 32-bit inferior running on 64-bit
host, we need to check bit 63 (or any bit bigger than 31), not bit 31.

Use the machine field in struct utsname provided by a uname call to
determine whether we are running on a 64-bit host.

Thanks to Jan Kratochvil for reporting the issue.

gdb/
* nat/linux-btrace.c: Include sys/utsname.h.
(linux_determine_kernel_ptr_bits): New.
(linux_enable_bts): Call linux_determine_kernel_ptr_bits.
* x86-linux-nat.c (x86_linux_enable_btrace): Do not overwrite non-zero
ptr_bits.

gdbserver/
* linux-low.c (linux_low_enable_btrace): Do not overwrite non-zero
ptr_bits.
gdb/ChangeLog
gdb/gdbserver/ChangeLog
gdb/gdbserver/linux-low.c
gdb/nat/linux-btrace.c
gdb/x86-linux-nat.c