aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarl Love <cel@us.ibm.com>2022-11-04 12:06:37 -0400
committerCarl Love <cel@us.ibm.com>2022-11-04 12:06:37 -0400
commit91836f41e209a60a8a836faef2e7889e144df297 (patch)
treed38f39e6eeec0e6ec04f36a37607b859beb03c96
parentac87b20a96adec653af45253fc3b2daf1a0710eb (diff)
downloadgdb-91836f41e209a60a8a836faef2e7889e144df297.zip
gdb-91836f41e209a60a8a836faef2e7889e144df297.tar.gz
gdb-91836f41e209a60a8a836faef2e7889e144df297.tar.bz2
Powerpc fix for gdb.base/unwind-on-each-insn.exp
The test disassembles function foo and searches for the line "End of assembler dump" to determing the last address in the function. The assumption is the last instruction will be given right before the line "End of assembler dump". This assumption fails on PowerPC. The PowerPC disassembly of the function foo looks like: Dump of assembler code for function foo: # => 0x00000000100006dc <+0>: std r31,-8(r1) # 0x00000000100006e0 <+4>: stdu r1,-48(r1) # 0x00000000100006e4 <+8>: mr r31,r1 # 0x00000000100006e8 <+12>: nop # 0x00000000100006ec <+16>: addi r1,r31,48 # 0x00000000100006f0 <+20>: ld r31,-8(r1) # 0x00000000100006f4 <+24>: blr # 0x00000000100006f8 <+28>: .long 0x0 # 0x00000000100006fc <+32>: .long 0x0 # 0x0000000010000700 <+36>: .long 0x1000180 # End of assembler dump. The blr instruction is the last instruction in function foo. The lines with .long following the blr instruction need to be ignored. This patch adds a new condition to the gdb_test_multiple "disassemble foo" test to ignore the lines with the .long. The patch has been tested on PowerPC and Intel X86-64.
-rw-r--r--gdb/testsuite/gdb.base/unwind-on-each-insn.exp22
1 files changed, 22 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/unwind-on-each-insn.exp b/gdb/testsuite/gdb.base/unwind-on-each-insn.exp
index 3b48805..d8863ad 100644
--- a/gdb/testsuite/gdb.base/unwind-on-each-insn.exp
+++ b/gdb/testsuite/gdb.base/unwind-on-each-insn.exp
@@ -75,6 +75,24 @@ gdb_continue_to_breakpoint "enter foo"
# Figure out the range of addresses covered by this function.
set last_addr_in_foo ""
+
+# The disassembly of foo on PowerPC looks like:
+# Dump of assembler code for function foo:
+# => 0x00000000100006dc <+0>: std r31,-8(r1)
+# 0x00000000100006e0 <+4>: stdu r1,-48(r1)
+# 0x00000000100006e4 <+8>: mr r31,r1
+# 0x00000000100006e8 <+12>: nop
+# 0x00000000100006ec <+16>: addi r1,r31,48
+# 0x00000000100006f0 <+20>: ld r31,-8(r1)
+# 0x00000000100006f4 <+24>: blr
+# 0x00000000100006f8 <+28>: .long 0x0
+# 0x00000000100006fc <+32>: .long 0x0
+# 0x0000000010000700 <+36>: .long 0x1000180
+# End of assembler dump.
+#
+# The last instruction in function foo is blr. Need to ignore the .long
+# entries following the blr instruction.
+
gdb_test_multiple "disassemble foo" "" {
-re "^disassemble foo\r\n" {
exp_continue
@@ -84,6 +102,10 @@ gdb_test_multiple "disassemble foo" "" {
exp_continue
}
+ -re "^...($hex) \[<>+0-9:\s\t\]*\.long\[\s\t\]*\[^\r\n\]*\r\n" {
+ exp_continue
+ }
+
-re "^...($hex) \[^\r\n\]+\r\n" {
set last_addr_in_foo $expect_out(1,string)
exp_continue