Index: gdb/testsuite/gdb.base/catch-load.exp |
diff --git a/gdb/testsuite/gdb.base/catch-load.exp b/gdb/testsuite/gdb.base/catch-load.exp |
new file mode 100644 |
index 0000000000000000000000000000000000000000..97fe7d1117474cd05c322f7ded0718805d071d2a |
--- /dev/null |
+++ b/gdb/testsuite/gdb.base/catch-load.exp |
@@ -0,0 +1,113 @@ |
+# Copyright 2012 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 |
+# the Free Software Foundation; either version 3 of the License, or |
+# (at your option) any later version. |
+# |
+# This program is distributed in the hope that it will be useful, |
+# but WITHOUT ANY WARRANTY; without even the implied warranty of |
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+# GNU General Public License for more details. |
+# |
+# 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 {[skip_shlib_tests]} { |
+ untested catch-load.exp |
+ return -1 |
+} |
+ |
+if {[get_compiler_info]} { |
+ warning "Could not get compiler info" |
+ untested catch-load.exp |
+ return -1 |
+} |
+ |
+set testfile catch-load |
+set srcfile ${testfile}.c |
+set binfile ${objdir}/${subdir}/${testfile} |
+if { [gdb_compile "${srcdir}/${subdir}/${srcfile}" "${binfile}" executable {debug shlib_load}] != "" } { |
+ untested catch-load.exp |
+ return -1 |
+} |
+ |
+set testfile2 catch-load-so |
+set srcfile2 ${testfile2}.c |
+set binfile2 ${objdir}/${subdir}/${testfile2}.so |
+set binfile2_dlopen [shlib_target_file ${testfile2}.so] |
+if { [gdb_compile_shlib "${srcdir}/${subdir}/${srcfile2}" ${binfile2} {debug}] != "" } { |
+ untested catch-load.exp |
+ return -1 |
+} |
+ |
+# Run one set of tests. |
+# SCENARIO is the name of the test scenario, it is just used in test |
+# names. |
+# KIND is passed to the "catch" command. |
+# MATCH is a boolean saying whether we expect the catchpoint to be hit. |
+proc one_catch_load_test {scenario kind match sostop} { with_test_prefix "${scenario}" { |
+ global verbose testfile testfile2 binfile2 binfile2_dlopen |
+ global srcfile |
+ global decimal gdb_prompt |
+ |
+ clean_restart $testfile |
+ gdb_load_shlibs $binfile2 |
+ |
+ if {![runto_main]} { |
+ fail "can't run to main" |
+ return |
+ } |
+ |
+ gdb_breakpoint [gdb_get_line_number "final breakpoint here"] |
+ gdb_test_no_output "set var libname = \"$binfile2_dlopen\"" |
+ gdb_test_no_output "set stop-on-solib-events $sostop" |
+ gdb_test "catch $kind" "Catchpoint $decimal \\(.*\\)" |
+ |
+ gdb_test_multiple "continue" "continue" { |
+ -re "Catchpoint $decimal\r\n.*loaded .*/$testfile2.*\r\n.*$gdb_prompt $" { |
+ if {$match} { |
+ pass "continue" |
+ } else { |
+ fail "continue" |
+ } |
+ } |
+ |
+ -re "Stopped due to shared library event.*\r\n$gdb_prompt $" { |
+ if {$sostop} { |
+ pass "continue" |
+ } else { |
+ fail "continue" |
+ } |
+ } |
+ |
+ -re "Breakpoint $decimal, .*\r\n$gdb_prompt $" { |
+ if {!$match} { |
+ pass "continue" |
+ } else { |
+ fail "continue" |
+ } |
+ } |
+ |
+ -re ".*$gdb_prompt $" { |
+ fail "continue" |
+ } |
+ } |
+}} |
+ |
+one_catch_load_test "plain load" "load" 1 0 |
+one_catch_load_test "plain load with stop-on-solib-events" "load" 1 1 |
+one_catch_load_test "rx load" "load $testfile2" 1 0 |
+one_catch_load_test "rx load with stop-on-solib-events" "load $testfile2" 1 1 |
+one_catch_load_test "non-matching load" "load zardoz" 0 0 |
+one_catch_load_test "non-matching load with stop-on-solib-events" \ |
+ "load zardoz" 0 1 |
+ |
+one_catch_load_test "plain unload" "unload" 1 0 |
+one_catch_load_test "plain unload with stop-on-solib-events" "unload" 1 1 |
+one_catch_load_test "rx unload" "unload $testfile2" 1 0 |
+one_catch_load_test "rx unload with stop-on-solib-events" \ |
+ "unload $testfile2" 1 1 |
+one_catch_load_test "non-matching unload" "unload zardoz" 0 0 |
+one_catch_load_test "non-matching unload with stop-on-solib-events" \ |
+ "unload zardoz" 0 1 |