diff options
author | Tom Tromey <tom@tromey.com> | 2018-01-03 11:12:34 -0700 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2018-01-15 11:49:35 -0700 |
commit | 92533dc55ed6aee88da718487f075692074b00dd (patch) | |
tree | a29e338f2ae62dfc230a180c3ccdbabb619ff611 | |
parent | ea3b3edea774c2625e894eb9cfa051601e88d068 (diff) | |
download | gdb-92533dc55ed6aee88da718487f075692074b00dd.zip gdb-92533dc55ed6aee88da718487f075692074b00dd.tar.gz gdb-92533dc55ed6aee88da718487f075692074b00dd.tar.bz2 |
Fix scm-ports.exp regression
In https://sourceware.org/ml/gdb-patches/2017-12/msg00215.html, Jan
pointed out that the scalar printing patches caused a regression in
scm-ports.exp on x86.
What happens is that on x86, this:
set sp_reg [get_integer_valueof "\$sp" 0]
... ends up setting sp_reg to a negative value, because
get_integer_valueof uses "print/d":
print /d $sp
$1 = -11496
Then later the test suite does:
gdb_test "guile (print (seek rw-mem-port (value->integer sp-reg) SEEK_SET))" \
"= $sp_reg" \
"seek to \$sp"
... expecting this value to be identical to the saved $sp_reg value.
However it gets:
guile (print (seek rw-mem-port (value->integer sp-reg) SEEK_SET))
= 4294955800
"print" is just a wrapper for guile's format:
gdb_test_no_output "guile (define (print x) (format #t \"= ~A\" x) (newline))"
The seek function returns a scm_t_off, the printing of which is
handled by guile, not by gdb.
Tested on x86-64 Fedora 26 using an ordinary build and also a -m32
build.
2018-01-15 Tom Tromey <tom@tromey.com>
* gdb.guile/scm-ports.exp (test_mem_port_rw): Use get_valueof to
compute sp_reg.
-rw-r--r-- | gdb/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/testsuite/gdb.guile/scm-ports.exp | 2 |
2 files changed, 6 insertions, 1 deletions
diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 06d8829..daa7065 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2018-01-15 Tom Tromey <tom@tromey.com> + + * gdb.guile/scm-ports.exp (test_mem_port_rw): Use get_valueof to + compute sp_reg. + 2017-09-05 Simon Marchi <simon.marchi@ericsson.com> * gdb.multi/multi-arch-exec.exp: Test with different diff --git a/gdb/testsuite/gdb.guile/scm-ports.exp b/gdb/testsuite/gdb.guile/scm-ports.exp index 314db3a..825cbda 100644 --- a/gdb/testsuite/gdb.guile/scm-ports.exp +++ b/gdb/testsuite/gdb.guile/scm-ports.exp @@ -104,7 +104,7 @@ proc test_mem_port_rw { kind } { "get sp reg" # Note: Only use $sp_reg for gdb_test result matching, don't use it in # gdb commands. Otherwise transcript.N becomes unusable. - set sp_reg [get_integer_valueof "\$sp" 0] + set sp_reg [get_valueof /u "\$sp" 0] gdb_test_no_output "guile (define byte-at-sp (parse-and-eval \"*(char*) \$sp\"))" \ "save current value at sp" # Pass the result of parse-and-eval through value-fetch-lazy!, |