[gdb/testsuite] Add xfail in gdb.base/hbreak.exp

On an aarch64-linux system with 32-bit userland running in a chroot, and using
target board unix/mthumb I get:
...
(gdb) hbreak hbreak.c:27^M
Hardware assisted breakpoint 2 at 0x4004e2: file hbreak.c, line 27.^M
(gdb) PASS: gdb.base/hbreak.exp: hbreak
continue^M
Continuing.^M
Unexpected error setting breakpoint: Invalid argument.^M
(gdb) FAIL: gdb.base/hbreak.exp: continue to break-at-exit after hbreak
...
due to this call in arm_linux_nat_target::low_prepare_to_resume:
...
          if (ptrace (PTRACE_SETHBPREGS, pid,
              (PTRACE_TYPE_ARG3) ((i << 1) + 1), &bpts[i].address) < 0)
            perror_with_name (_("Unexpected error setting breakpoint"));
...

This problem does not happen if instead we use a 4-byte aligned address.

I'm not sure if this is simply unsupported or if there's a kernel bug of some
sort, but I don't see what gdb can do about this.

Tentatively mark this as xfail.

Tested on aarch64-linux.

Approved-By: Luis Machado <luis.machado@arm.com>
This commit is contained in:
Tom de Vries
2024-07-23 14:38:16 +02:00
parent 128eb414a7
commit d0af16d5a1

View File

@@ -27,10 +27,38 @@ if ![runto_main] {
set breakline [gdb_get_line_number "break-at-exit"] set breakline [gdb_get_line_number "break-at-exit"]
gdb_test "hbreak ${srcfile}:${breakline}" \ set re_loc "file \[^\r\n\]*$srcfile, line $breakline"
"Hardware assisted breakpoint \[0-9\]+ at 0x\[0-9a-f\]+: file .*${srcfile}, line ${breakline}\\." \ set re_dot [string_to_regexp .]
"hbreak"
gdb_test "continue" \ set addr 0x0
"Continuing\\.\[ \r\n\]+Breakpoint \[0-9\]+, .*break-at-exit.*" \ gdb_test_multiple "hbreak ${srcfile}:${breakline}" "hbreak" {
"continue to break-at-exit after hbreak" -re -wrap "Hardware assisted breakpoint $decimal at ($hex): $re_loc$re_dot" {
set addr $expect_out(1,string)
pass $gdb_test_name
}
}
set have_xfail 0
if { [istarget arm*-*-*] } {
# When running 32-bit userland on aarch64 kernel, thumb instructions that
# are not 4-byte aligned may not be supported for setting a hardware
# breakpoint on.
set have_xfail [expr ($addr & 0x2) == 2]
}
set re_xfail \
[string_to_regexp \
"Unexpected error setting breakpoint: Invalid argument."]
gdb_test_multiple "continue" "continue to break-at-exit after hbreak" {
-re -wrap "Continuing\\.\[ \r\n\]+Breakpoint \[0-9\]+, .*break-at-exit.*" {
pass $gdb_test_name
}
-re -wrap $re_xfail {
if { $have_xfail } {
xfail $gdb_test_name
} else {
fail $gdb_test_name
}
}
}