summaryrefslogtreecommitdiff
path: root/gdb/testsuite/gdb.base
diff options
context:
space:
mode:
authorAndrew Burgess <aburgess@redhat.com>2022-10-20 11:14:33 +0100
committerAndrew Burgess <aburgess@redhat.com>2023-04-03 14:46:32 +0100
commit3812b38d8de5804ad3eadd6c7a5d532402ddabab (patch)
tree24567807fc8f29e4b8eaab45db57fcf4e9f494d6 /gdb/testsuite/gdb.base
parent0576dff20f052ab6d1ddba861235c7dc2584a145 (diff)
downloadbinutils-gdb-3812b38d8de5804ad3eadd6c7a5d532402ddabab.tar.gz
gdbserver: allow agent expressions to fail with invalid memory access
This commit extends gdbserver to take account of a failed memory access from agent_mem_read, and to return a new eval_result_type expr_eval_invalid_memory_access. I have only updated the agent_mem_read calls related directly to reading memory, I have not updated any of the calls related to tracepoint data collection. This is just because I'm not familiar with that area of gdb/gdbserver, and I don't want to break anything, so leaving the existing behaviour untouched seems like the safest approach. I've then updated gdb.base/bp-cond-failure.exp to test evaluating the breakpoints on the target, and have also extended the test so that it checks for different sizes of memory access.
Diffstat (limited to 'gdb/testsuite/gdb.base')
-rw-r--r--gdb/testsuite/gdb.base/bp-cond-failure.exp22
1 files changed, 7 insertions, 15 deletions
diff --git a/gdb/testsuite/gdb.base/bp-cond-failure.exp b/gdb/testsuite/gdb.base/bp-cond-failure.exp
index b528ccce4ad..cb572203772 100644
--- a/gdb/testsuite/gdb.base/bp-cond-failure.exp
+++ b/gdb/testsuite/gdb.base/bp-cond-failure.exp
@@ -47,7 +47,7 @@ if { [is_address_zero_readable] } {
# Where the breakpoint will be placed.
set bp_line [gdb_get_line_number "Breakpoint here"]
-proc run_test { cond_eval } {
+proc run_test { cond_eval access_type } {
clean_restart ${::binfile}
if { ![runto_main] } {
@@ -59,7 +59,7 @@ proc run_test { cond_eval } {
}
# Setup the conditional breakpoint and record its number.
- gdb_breakpoint "${::srcfile}:${::bp_line} if (*(int *) 0) == 0"
+ gdb_breakpoint "${::srcfile}:${::bp_line} if (*(${access_type} *) 0) == 0"
set bp_num [get_integer_valueof "\$bpnum" "*UNKNOWN*"]
gdb_test "continue" \
@@ -88,17 +88,7 @@ set cond_eval_modes { "auto" }
gdb_test_multiple "show breakpoint condition-evaluation" "" {
-re -wrap "Breakpoint condition evaluation mode is auto \\(currently target\\)\\." {
-
- ## NOTE: Instead of testing with "auto" and "host" in this
- ## case we only test with "host". This is because a GDB bug
- ## prevents the "auto" (a.k.a. target) mode from working.
- ##
- ## Don't worry, this will be fixed in a later commit, and this
- ## comment will be removed at that time.
- ##
- ## lappend cond_eval_modes "host"
-
- set cond_eval_modes { "host" }
+ lappend cond_eval_modes "host"
pass $gdb_test_name
}
@@ -107,6 +97,8 @@ gdb_test_multiple "show breakpoint condition-evaluation" "" {
}
}
-foreach_with_prefix cond_eval $cond_eval_modes {
- run_test $cond_eval
+foreach_with_prefix access_type { "char" "short" "int" "long long" } {
+ foreach_with_prefix cond_eval $cond_eval_modes {
+ run_test $cond_eval $access_type
+ }
}