[gdb/testsuite] Fix stepi test-cases with unix/-m32/-fPIE/-pie
authorTom de Vries <tdevries@suse.de>
Tue, 2 Nov 2021 08:27:48 +0000 (09:27 +0100)
committerTom de Vries <tdevries@suse.de>
Tue, 2 Nov 2021 08:27:48 +0000 (09:27 +0100)
When running test-case gdb.base/step-indirect-call-thunk.exp with target board
unix/-m32/-fPIE/-pie, I run into:
...
(gdb) stepi^M
0x5655552e      22      {                /* inc.1 */^M
(gdb) stepi^M
0x56555530      22      {                /* inc.1 */^M
(gdb) stepi^M
0x565555f7 in __x86.get_pc_thunk.ax ()^M
(gdb) FAIL: gdb.base/step-indirect-call-thunk.exp: stepi into return thunk
...

In contrast, with unix/-m32 we have instead:
...
(gdb) stepi^M
0x08048407      22      {                /* inc.1 */^M
(gdb) stepi^M
23        return x + 1;  /* inc.2 */^M
(gdb) stepi^M
0x0804840c      23        return x + 1;  /* inc.2 */^M
(gdb) stepi^M
24      }                /* inc.3 */^M
(gdb) stepi^M
0x08048410      24      }                /* inc.3 */^M
(gdb) stepi^M
0x0804848f in __x86_return_thunk ()^M
(gdb) PASS: gdb.base/step-indirect-call-thunk.exp: stepi into return thunk
...

The test-case doesn't expect to run into __x86.get_pc_thunk.ax, which is a
PIC helper function for x86_64-linux.

Fix this by insn-stepping through it.

Likewise in a few other test-cases.

Tested on x86_64-linux.

gdb/testsuite/gdb.base/step-indirect-call-thunk.exp
gdb/testsuite/gdb.base/step-test.exp
gdb/testsuite/gdb.reverse/step-indirect-call-thunk.exp
gdb/testsuite/gdb.reverse/step-precsave.exp
gdb/testsuite/gdb.reverse/step-reverse.exp

index e919d31cfc3803d28be9a34d04e946592f5021ac..579dbf9c16f5e386ed06e9af54c2b7d50e772c3e 100644 (file)
@@ -64,9 +64,12 @@ gdb_test "step" "inc\.2.*" "step through call thunk into inc"
 gdb_test "step" "inc\.3.*" "step inside inc"
 gdb_test "step" "thrice\.4.*" "step through return thunk back into thrice"
 
+set alphanum_re "\[a-zA-Z0-9\]"
+set pic_thunk_re  "__$alphanum_re*\\.get_pc_thunk\\.$alphanum_re* \\(\\)"
+
 # We can use instruction stepping to step into thunks.
 stepi_until "thrice" "indirect_thunk" "stepi into call thunk"
 stepi_until "indirect_thunk" "inc." "stepi out of call thunk into inc"
-stepi_until "inc" "return_thunk" "stepi into return thunk"
+stepi_until "(inc|$pic_thunk_re)" "return_thunk" "stepi into return thunk"
 stepi_until "return_thunk" "thrice" \
     "stepi out of return thunk back into thrice"
index 0cde9e218bfd6b5a176ec68360a4a8f7de47fc28..b7acb588e44ec99d7944c5cd05faf09bf34a0713 100644 (file)
@@ -127,8 +127,10 @@ test_i "stepi into function" "stepi" \
 # Continue to step until we reach the function's body.  This makes it
 # more likely that we've actually completed the prologue, so "finish"
 # will work.
+set alphanum_re "\[a-zA-Z0-9\]"
+set pic_thunk_re  "__$alphanum_re*\\.get_pc_thunk\\.$alphanum_re* \\(\\)"
 test_i "stepi into function's first source line" "stepi" \
-       ".*${decimal}.*int callee" \
+       "(${decimal}.*int callee|$pic_thunk_re)" \
        ".*${decimal}.*myglob.*; return 0;"
 
 # Have to be careful here, if the finish does not work, 
index 7537a01eeb8852bfba5f78fd3a9b0e27feedf8d7..8fe108b1e5e389af0483f032ee06389dd7d2e8fd 100644 (file)
@@ -85,7 +85,9 @@ gdb_test "reverse-next" "apply\.2.*" \
 step_until "stepi" "apply\.2" "indirect_thunk" "stepi into call thunk"
 step_until "stepi" "indirect_thunk" "inc" \
     "stepi out of call thunk into inc"
-step_until "stepi" "inc" "return_thunk" "stepi into return thunk"
+set alphanum_re "\[a-zA-Z0-9\]"
+set pic_thunk_re  "__$alphanum_re*\\.get_pc_thunk\\.$alphanum_re* \\(\\)"
+step_until "stepi" "(inc|$pic_thunk_re)" "return_thunk" "stepi into return thunk"
 step_until "stepi" "return_thunk" "apply" \
     "stepi out of return thunk back into apply"
 
@@ -93,7 +95,7 @@ step_until "reverse-stepi" "apply" "return_thunk" \
     "reverse-stepi into return thunk"
 step_until "reverse-stepi" "return_thunk" "inc" \
     "reverse-stepi out of return thunk into inc"
-step_until "reverse-stepi" "inc" "indirect_thunk" \
+step_until "reverse-stepi" "(inc|$pic_thunk_re)" "indirect_thunk" \
     "reverse-stepi into call thunk"
 step_until "reverse-stepi" "indirect_thunk" "apply" \
     "reverse-stepi out of call thunk into apply"
index 43f6ab3a11a15a14cfbb743342e64ccb174603d7..e85cdabfb7336d68883e83e9f5879e8fcda72450 100644 (file)
@@ -124,6 +124,8 @@ gdb_test_multiple "stepi" "$test_message" {
 
 # stepi into a function call
 
+set alphanum_re "\[a-zA-Z0-9\]"
+set pic_thunk_re  "__$alphanum_re*\\.get_pc_thunk\\.$alphanum_re* \\(\\)"
 set test_message "stepi into function call"
 gdb_test_multiple "stepi" "$test_message" {
     -re "ARRIVED IN CALLEE.*$gdb_prompt $" {
@@ -143,6 +145,10 @@ gdb_test_multiple "stepi" "$test_message" {
        send_gdb "stepi\n"
        exp_continue
     }
+    -re "$pic_thunk_re.*$gdb_prompt $" {
+       send_gdb "stepi\n"
+       exp_continue
+    }
 }
 
 # stepi thru return of a function call
@@ -216,6 +222,10 @@ gdb_test_multiple "stepi" "$test_message" {
        send_gdb "stepi\n" 
        exp_continue
     }
+    -re "$pic_thunk_re.*$gdb_prompt $" {
+       send_gdb "stepi\n"
+       exp_continue
+    }
     -re "${hex} in main .*:$stepi_location.*STEPI TEST.*$gdb_prompt $" {
        send_gdb "stepi\n"
        exp_continue
index 335ccfbd39990c18cf0cd4cc442f4d32388a7994..32c18faaaa6c7aca065658a330ca94fcb0361373 100644 (file)
@@ -87,6 +87,8 @@ gdb_test_multiple "stepi" "$test_message" {
 
 # stepi into a function call
 
+set alphanum_re "\[a-zA-Z0-9\]"
+set pic_thunk_re  "__$alphanum_re*\\.get_pc_thunk\\.$alphanum_re* \\(\\)"
 set test_message "stepi into function call"
 gdb_test_multiple "stepi" "$test_message" {
     -re "ARRIVED IN CALLEE.*$gdb_prompt $" {
@@ -106,6 +108,10 @@ gdb_test_multiple "stepi" "$test_message" {
        send_gdb "stepi\n"
        exp_continue
     }
+    -re "$pic_thunk_re.*$gdb_prompt $" {
+       send_gdb "stepi\n"
+       exp_continue
+    }
 }
 
 # stepi thru return of a function call
@@ -179,6 +185,10 @@ gdb_test_multiple "stepi" "$test_message" {
        send_gdb "stepi\n" 
        exp_continue
     }
+    -re "$pic_thunk_re.*$gdb_prompt $" {
+       send_gdb "stepi\n"
+       exp_continue
+    }
     -re "${hex} in main .*:$stepi_location.*STEPI TEST.*$gdb_prompt $" {
        send_gdb "stepi\n"
        exp_continue