summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPedro Alves <palves@redhat.com>2016-07-27 23:50:56 +0100
committerPedro Alves <palves@redhat.com>2016-07-28 02:00:15 +0100
commit3159a1c5540077b5af27311725b3b6f0b7e80dd3 (patch)
treea6be7d0d6902258c80cf781bf3078866fba80f1f
parent1b2cd0a64dea636a9151565352a01121c0556dc0 (diff)
downloadbinutils-gdb-users/palves/x32-fast-tracepoints.tar.gz
x32: Fix gdb.trace/mi-trace-frame-collected.expusers/palves/x32-fast-tracepoints
gdb.trace/mi-trace-frame-collected.exp has a couple failures on x32: FAIL: gdb.trace/mi-trace-frame-collected.exp: live: -trace-frame-collected (register) FAIL: gdb.trace/mi-trace-frame-collected.exp: tfile: -trace-frame-collected (register) gdb.log: -trace-frame-collected ^done,explicit-variables=[{name="gdb_char_test",value="0 '\\000'"}],computed-expressions=[],registers=[{number="16",value="0x4004dc"},{number="204",value="0x4004dc"}],tvars =[],memory=[{address="0x00601060",length="1"}] (gdb) FAIL: gdb.trace/mi-trace-frame-collected.exp: live: -trace-frame-collected (register) [...] -trace-frame-collected ^done,explicit-variables=[{name="gdb_char_test",value="0 '\\000'"}],computed-expressions=[],registers=[{number="16",value="0x4004dc"},{number="204",value="0x4004dc"}],tvars =[],memory=[{address="0x00601060",length="1"}] (gdb) FAIL: gdb.trace/mi-trace-frame-collected.exp: tfile: -trace-frame-collected (register) This test only collects the PC, and thus expects to only see one register in the output of -trace-frame-collected. However, while on the 64-bit ABI gdb only exposes 64-bit $pc/$rip (register 16 above), on x32, GDB exposes 32-bit $eip as well, as a pseudo-register (register 204 above). Thus, collecting $pc/$rip automatically always collects $eip as well. gdb/testsuite/ChangeLog: yyyy-mm-dd Pedro Alves <palves@redhat.com> * gdb.trace/mi-trace-frame-collected.exp (test_trace_frame_collected): On x32, expect two registers.
-rw-r--r--gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp14
1 files changed, 12 insertions, 2 deletions
diff --git a/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp b/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp
index a69c329a54e..567954a3605 100644
--- a/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp
+++ b/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp
@@ -95,15 +95,25 @@ proc test_trace_frame_collected { data_source } {
# Test MI command '-trace-frame-collected' dumps only
# collected registers.
+
+ # While the tracepoint has no explicit action that causes
+ # collection of registers other than the PC, some
+ # architectures manage to collect or guess more than that.
if { [istarget "s390*-*-*"] } {
- # Only PC is collected, but on s390 PC is a pseudo-register -
- # collecting it also collects the underlying PSWA register.
+ # On s390 PC is a pseudo-register - collecting it also
+ # collects the underlying PSWA register.
if { "$data_source" != "tfile" } {
set reg_pattern "$reg_pattern,$reg_pattern"
} else {
# For tfile, PSWM and CC are also guessed.
set reg_pattern "$reg_pattern,$reg_pattern,$reg_pattern,$reg_pattern"
}
+ } elseif {[is_amd64_regs_target] && [is_ilp32_target]} {
+ # x32. While on the 64-bit ABI gdb only exposes 64-bit
+ # $pc/$rip, on x32, GDB exposes 32-bit $eip as well, as a
+ # pseudo-register. Thus, collecting $pc/$rip
+ # automatically always collects $eip as well.
+ set reg_pattern "$reg_pattern,$reg_pattern"
}
mi_gdb_test "-trace-frame-collected" \