This is the mail archive of the gdb-cvs@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[binutils-gdb] x32: Fix gdb.trace/mi-trace-frame-collected.exp


https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=0646e07d6e88045d650ee1ec5b674da1cdeaa6b6

commit 0646e07d6e88045d650ee1ec5b674da1cdeaa6b6
Author: Pedro Alves <palves@redhat.com>
Date:   Fri Aug 19 12:07:46 2016 +0100

    x32: Fix gdb.trace/mi-trace-frame-collected.exp
    
    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:
    2016-08-19  Pedro Alves  <palves@redhat.com>
    
    	* gdb.trace/mi-trace-frame-collected.exp
    	(test_trace_frame_collected): On x32, expect two registers.

Diff:
---
 gdb/testsuite/ChangeLog                              |  5 +++++
 gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp | 14 ++++++++++++--
 2 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog
index fda02f0..ff892a5 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-08-19  Pedro Alves  <palves@redhat.com>
+
+	* gdb.trace/mi-trace-frame-collected.exp
+	(test_trace_frame_collected): On x32, expect two registers.
+
 2016-08-18  Carl Love  <cel@us.ibm.com>
 
 	* gdb.arch/powerpc-power.s: Add new Power9 instruction tests
diff --git a/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp b/gdb/testsuite/gdb.trace/mi-trace-frame-collected.exp
index a69c329..567954a 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" \


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]