forked from Imagelibrary/binutils-gdb
Remove gdb/19675 kfails (displaced stepping + clone)
Now that gdb/19675 is fixed for both native and gdbserver GNU/Linux, remove the gdb/19675 kfails. Change-Id: I95c1c38ca370100675d303cd3c8995860bef465d Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=19675
This commit is contained in:
@@ -42,44 +42,15 @@ if { [istarget "i\[34567\]86-*-linux*"] || [istarget "x86_64-*-linux*"] } {
|
|||||||
}
|
}
|
||||||
|
|
||||||
proc_with_prefix check_pc_after_cross_syscall { displaced syscall syscall_insn_next_addr } {
|
proc_with_prefix check_pc_after_cross_syscall { displaced syscall syscall_insn_next_addr } {
|
||||||
global gdb_prompt
|
|
||||||
|
|
||||||
set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"]
|
set syscall_insn_next_addr_found [get_hexadecimal_valueof "\$pc" "0"]
|
||||||
|
|
||||||
# After the 'stepi' we expect thread 1 to still be selected.
|
# After the 'stepi' we expect thread 1 to still be selected.
|
||||||
# However, when displaced stepping over a clone bug gdb/19675
|
|
||||||
# means this might not be the case.
|
|
||||||
#
|
|
||||||
# Which thread we end up in depends on a race between the original
|
|
||||||
# thread-1, and the new thread (created by the clone), so we can't
|
|
||||||
# guarantee which thread we will be in at this point.
|
|
||||||
#
|
|
||||||
# For the fork/vfork syscalls, which are correctly handled by
|
|
||||||
# displaced stepping we will always be in thread-1 or the original
|
|
||||||
# process at this point.
|
|
||||||
set curr_thread "unknown"
|
set curr_thread "unknown"
|
||||||
gdb_test_multiple "info threads" "" {
|
gdb_test_multiple "thread" "" {
|
||||||
-re "Id\\s+Target Id\\s+Frame\\s*\r\n" {
|
-re -wrap "Current thread is (\\d+) .*" {
|
||||||
exp_continue
|
|
||||||
}
|
|
||||||
-re "^\\* (\\d+)\\s+\[^\r\n\]+\r\n" {
|
|
||||||
set curr_thread $expect_out(1,string)
|
set curr_thread $expect_out(1,string)
|
||||||
exp_continue
|
pass $gdb_test_name
|
||||||
}
|
}
|
||||||
-re "^\\s+\\d+\\s+\[^\r\n\]+\r\n" {
|
|
||||||
exp_continue
|
|
||||||
}
|
|
||||||
-re "$gdb_prompt " {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
# If we are displaced stepping over a clone, and we ended up in
|
|
||||||
# the wrong thread then the following check of the $pc value will
|
|
||||||
# fail.
|
|
||||||
if { $displaced == "on" && $syscall == "clone" && $curr_thread != 1 } {
|
|
||||||
# GDB doesn't support stepping over clone syscall with
|
|
||||||
# displaced stepping.
|
|
||||||
setup_kfail "*-*-*" "gdb/19675"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gdb_assert {$syscall_insn_next_addr != 0 \
|
gdb_assert {$syscall_insn_next_addr != 0 \
|
||||||
@@ -299,15 +270,6 @@ proc step_over_syscall { syscall } {
|
|||||||
|
|
||||||
gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*"
|
gdb_test "break marker" "Breakpoint.*at.* file .*${testfile}.c, line.*"
|
||||||
|
|
||||||
# If we are displaced stepping over a clone syscall then
|
|
||||||
# we expect the following check to fail. See also the
|
|
||||||
# code in check_pc_after_cross_syscall.
|
|
||||||
if { $displaced == "on" && $syscall == "clone" } {
|
|
||||||
# GDB doesn't support stepping over clone syscall with
|
|
||||||
# displaced stepping.
|
|
||||||
setup_kfail "*-*-*" "gdb/19675"
|
|
||||||
}
|
|
||||||
|
|
||||||
gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
|
gdb_test "continue" "Continuing\\..*Breakpoint \[0-9\]+, marker \\(\\) at.*" \
|
||||||
"continue to marker ($syscall)"
|
"continue to marker ($syscall)"
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user