From d0021af39c41d8f76e596f9c923cd41955fc050b Mon Sep 17 00:00:00 2001 From: Tom de Vries Date: Tue, 26 Jan 2021 10:00:39 +0100 Subject: [PATCH] [gdb/testsuite] Fix gdb.opt/solib-intra-step.exp with -m32 When running test-case gdb.opt/solib-intra-step.exp with target board unix/-m32, we run into: ... (gdb) step^M __x86.get_pc_thunk.bx () at ../sysdeps/i386/crti.S:66^M 66 ../sysdeps/i386/crti.S: No such file or directory.^M (gdb) FAIL: gdb.opt/solib-intra-step.exp: first-hit (optimized) ... The thunk is a helper function for PIC, and given that we have line info for it, we step into. Fix this by allowing the step into the thunk, and stepping out of it. Tested on x86_64-linux. gdb/testsuite/ChangeLog: 2021-01-26 Tom de Vries * gdb.opt/solib-intra-step.exp: Handle stepping into thunk. --- gdb/testsuite/ChangeLog | 4 ++ gdb/testsuite/gdb.opt/solib-intra-step.exp | 55 +++++++++++++++------- 2 files changed, 42 insertions(+), 17 deletions(-) diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index aa18b5449a8..9d2b0fae87b 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2021-01-26 Tom de Vries + + * gdb.opt/solib-intra-step.exp: Handle stepping into thunk. + 2021-01-25 Tom de Vries * gdb.dwarf2/dw2-ranges-psym.exp (gdb_load_no_complaints): New proc. diff --git a/gdb/testsuite/gdb.opt/solib-intra-step.exp b/gdb/testsuite/gdb.opt/solib-intra-step.exp index 14b34eabd50..ad19895d890 100644 --- a/gdb/testsuite/gdb.opt/solib-intra-step.exp +++ b/gdb/testsuite/gdb.opt/solib-intra-step.exp @@ -48,33 +48,54 @@ if ![runto_main] then { } set test "first-hit" +set state 0 gdb_test_multiple "step" $test { - -re " first-hit .*\r\n$gdb_prompt $" { - pass $test + -re -wrap " first-hit .*" { + gdb_assert { $state != -1 } $test } - -re " first-retry .*\r\n$gdb_prompt $" { - gdb_test "step" " first-hit .*" "first-hit (optimized)" + -re -wrap " first-retry .*" { + if { $state != 0 } { + set state -1 + } else { + set state 1 + } + send_gdb "step\n" + exp_continue + } + -re -wrap "get_pc_thunk.*" { + if { $state != 1 } { + set state -1 + } else { + set state 2 + } + send_gdb "step\n" + exp_continue } } set test "second-hit" +set state 0 gdb_test_multiple "step" $test { - -re " second-hit .*\r\n$gdb_prompt $" { - pass $test + -re -wrap " second-hit .*" { + gdb_assert { $state != -1 } $test } - -re " first-retry .*\r\n$gdb_prompt $" { - set test "second-hit (optimized 1)" - gdb_test_multiple "step" $test { - -re " second-hit .*\r\n$gdb_prompt $" { - pass $test - } - -re " first-hit .*\r\n$gdb_prompt $" { - gdb_test "step" " second-hit .*" "second-hit (optimized 2)" - } + -re -wrap " second-retry .*" { + if { $state != 0 } { + set state -1 + } else { + set state 1 } + send_gdb "step\n" + exp_continue } - -re " second-retry .*\r\n$gdb_prompt $" { - gdb_test "step" " second-hit .*" "second-hit (optimized 3)" + -re -wrap "get_pc_thunk.*" { + if { $state != 1 } { + set state -1 + } else { + set state 2 + } + send_gdb "step\n" + exp_continue } } -- 2.30.2