Implement pahole-like 'ptype /o' option
[deliverable/binutils-gdb.git] / gdb / testsuite / gdb.base / find-unmapped.exp
index 2f3473f73ce3544d7da8e075e05d2250fe111632..d150d9726064951df539fd1848a012dcbb797903 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright 2012-2016 Free Software Foundation, Inc.
+# Copyright 2012-2017 Free Software Foundation, Inc.
 
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 # You should have received a copy of the GNU General Public License
 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-if {[is_remote target]} {
-    # gdbserver prints the warning message but expect is parsing only the
-    # GDB output, not the gdbserver output.
-    return 0
-}
-
 standard_testfile
 
-if { [prepare_for_testing ${testfile}.exp ${testfile}] } {
+if { [prepare_for_testing "failed to prepare" ${testfile}] } {
     return -1
 }
 
@@ -35,12 +29,58 @@ gdb_test "x/5w global_var_1" \
 gdb_test "x/5w global_var_2" \
     "$hex:\[ \t\]+Cannot access memory at address $hex"
 
-# Now try a find starting from each global.
-gdb_test "find global_var_0, global_var_2, 0xff" \
-    "warning: Unable to access $decimal bytes of target memory at $hex, halting search\.\r\nPattern not found."
 
-gdb_test "find global_var_1, global_var_2, 0xff" \
-    "warning: Unable to access $decimal bytes of target memory at $hex, halting search\.\r\nPattern not found."
+# Try a find starting from each global, expecting the search to fail
+# due to memory access failure.
+#
+# If EXPECT_WARNING is true, then expect the "Unable to access
+# ... halting search" warning before the "Pattern not found" output.
+# Otherwise, don't expect the warning.
+#
+# (EXPECT_WARNING is necessary because when testing with the RSP
+# against servers that support the remote search memory packet, GDB
+# does not print that "halting search" warning.  While there are
+# servers that do print the same warning message as GDB would if it
+# were in charge of the search (like GDBserver), we're only parsing
+# GDB's output here, not the server's output.  And while we could read
+# GDBserver's output from $inferior_spawn_id, having GDBserver print
+# the warnings on its terminal doesn't really help users.  Much better
+# would be to extend the remote protocol to let the server tell GDB
+# which memory range couldn't be accessed, and then let GDB print the
+# warning instead of the server.  See PR gdb/22293.)
+
+proc test_not_found {expect_warning} {
+    global decimal hex
+
+    if {$expect_warning} {
+       set halting_search_re \
+           "warning: Unable to access $decimal bytes of target memory at $hex, halting search\.\r\n"
+    } else {
+       set halting_search_re ""
+    }
 
-gdb_test "find global_var_2, (global_var_2 + 16), 0xff" \
-    "warning: Unable to access $decimal bytes of target memory at $hex, halting search\.\r\nPattern not found."
+    # Now try a find starting from each global.
+    gdb_test "find global_var_0, global_var_2, 0xff" \
+       "${halting_search_re}Pattern not found."
+
+    gdb_test "find global_var_1, global_var_2, 0xff" \
+       "${halting_search_re}Pattern not found."
+
+    gdb_test "find global_var_2, (global_var_2 + 16), 0xff" \
+       "${halting_search_re}Pattern not found."
+}
+
+# If testing with the RSP, also test with target-side search
+# acceleration disabled.  This serves as proxy for servers that don't
+# support the memory search packet, when testing with GDBserver.
+
+if {[target_info gdb_protocol] == "remote"
+    || [target_info gdb_protocol] == "extended-remote"} {
+    test_not_found 0
+    with_test_prefix "search-memory-packet off" {
+       gdb_test_no_output "set remote search-memory-packet off"
+       test_not_found 0
+    }
+} else {
+    test_not_found 1
+}
This page took 0.025662 seconds and 4 git commands to generate.