aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom de Vries <tdevries@suse.de>2024-07-23 14:38:16 +0200
committerTom de Vries <tdevries@suse.de>2024-07-23 14:38:16 +0200
commitd0af16d5a105948ea17e4410d3ddbb12ba64e586 (patch)
tree214e1eee2de9cd6e775882ed4e5b45df71b0538d
parent128eb414a715733dfeafec4d2c31f84ff0ba20c1 (diff)
downloadfsf-binutils-gdb-d0af16d5a105948ea17e4410d3ddbb12ba64e586.zip
fsf-binutils-gdb-d0af16d5a105948ea17e4410d3ddbb12ba64e586.tar.gz
fsf-binutils-gdb-d0af16d5a105948ea17e4410d3ddbb12ba64e586.tar.bz2
[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>
-rw-r--r--gdb/testsuite/gdb.base/hbreak.exp40
1 files changed, 34 insertions, 6 deletions
diff --git a/gdb/testsuite/gdb.base/hbreak.exp b/gdb/testsuite/gdb.base/hbreak.exp
index 73a3e2a..b140257 100644
--- a/gdb/testsuite/gdb.base/hbreak.exp
+++ b/gdb/testsuite/gdb.base/hbreak.exp
@@ -27,10 +27,38 @@ if ![runto_main] {
set breakline [gdb_get_line_number "break-at-exit"]
-gdb_test "hbreak ${srcfile}:${breakline}" \
- "Hardware assisted breakpoint \[0-9\]+ at 0x\[0-9a-f\]+: file .*${srcfile}, line ${breakline}\\." \
- "hbreak"
+set re_loc "file \[^\r\n\]*$srcfile, line $breakline"
+set re_dot [string_to_regexp .]
-gdb_test "continue" \
- "Continuing\\.\[ \r\n\]+Breakpoint \[0-9\]+, .*break-at-exit.*" \
- "continue to break-at-exit after hbreak"
+set addr 0x0
+gdb_test_multiple "hbreak ${srcfile}:${breakline}" "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
+ }
+ }
+}