diff options
author | Gary Benson <gary@redhat.com> | 2013-06-04 13:31:00 +0000 |
---|---|---|
committer | Gary Benson <gary@redhat.com> | 2013-06-04 13:31:00 +0000 |
commit | afacd7f34ae5f4d74b0220089c2798d332422f6a (patch) | |
tree | d887389f32417046dfd05bfc4d5e3a6539e54a4c /gdb/testsuite/gdb.base/info-shared.exp | |
parent | a29a3fb7a350b70ec755b1964d2830094314dba8 (diff) | |
download | gdb-afacd7f34ae5f4d74b0220089c2798d332422f6a.zip gdb-afacd7f34ae5f4d74b0220089c2798d332422f6a.tar.gz gdb-afacd7f34ae5f4d74b0220089c2798d332422f6a.tar.bz2 |
2013-06-04 Gary Benson <gbenson@redhat.com>
* gdb.base/break-probes.exp: New file.
* gdb.base/break-probes.c: Likewise.
* gdb.base/break-probes-solib.c: Likewise.
* gdb.base/info-shared.exp: New file.
* gdb.base/info-shared.c: Likewise.
* gdb.base/info-shared-solib1.c: Likewise.
* gdb.base/info-shared-solib2.c: Likewise.
Diffstat (limited to 'gdb/testsuite/gdb.base/info-shared.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/info-shared.exp | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/info-shared.exp b/gdb/testsuite/gdb.base/info-shared.exp new file mode 100644 index 0000000..ab09617 --- /dev/null +++ b/gdb/testsuite/gdb.base/info-shared.exp @@ -0,0 +1,146 @@ +# Copyright 2012-2013 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] } { + return 0 +} + +standard_testfile + +set lib1name $testfile-solib1 +set srcfile_lib1 $srcdir/$subdir/$lib1name.c +set binfile_lib1 [standard_output_file $lib1name.so] +set define1 -DSHLIB1_NAME=\"$binfile_lib1\" + +set lib2name $testfile-solib2 +set srcfile_lib2 $srcdir/$subdir/$lib2name.c +set binfile_lib2 [standard_output_file $lib2name.so] +set define2 -DSHLIB2_NAME=\"$binfile_lib2\" + +if { [gdb_compile_shlib $srcfile_lib1 $binfile_lib1 \ + [list additional_flags=-fPIC]] != "" } { + untested "Could not compile $binfile_lib1." + return -1 +} + +if { [gdb_compile_shlib $srcfile_lib2 $binfile_lib2 \ + [list additional_flags=-fPIC]] != "" } { + untested "Could not compile $binfile_lib2." + return -1 +} + +set cflags "$define1 $define2" +if { [prepare_for_testing $testfile.exp $testfile $srcfile \ + [list additional_flags=$cflags libs=-ldl]] } { + return -1 +} + +# Run "info sharedlibrary" and check for the presence or absence of +# our libraries. +proc check_info_shared { test expect1 expect2 } { + global lib1name + global lib2name + global gdb_prompt + + set actual1 0 + set actual2 0 + + gdb_test_multiple "info sharedlibrary" $test { + -re $lib1name { + set actual1 1 + exp_continue + } + -re $lib2name { + set actual2 1 + exp_continue + } + -re "\r\n$gdb_prompt $" { + if { $actual1 == $expect1 && $actual2 == $expect2 } { + pass $test + } else { + fail $test + } + } + } +} + +# Start the inferior, and check neither of the libraries are loaded at +# the start. +if ![runto_main] { + return 0 +} +check_info_shared "info sharedlibrary #1" 0 0 + +# Set up breakpoints. +gdb_breakpoint "stop" +gdb_breakpoint "foo" allow-pending +gdb_breakpoint "bar" allow-pending + +# Run to the first stop and check that only the first library is loaded. +gdb_continue_to_breakpoint "library load #1" "stop .*" +check_info_shared "info sharedlibrary #2" 1 0 + +# Run to the second stop and check that both libraries are loaded. +gdb_continue_to_breakpoint "library load #2" "stop .*" +check_info_shared "info sharedlibrary #3" 1 1 + +# Check that the next stop is in foo. +gdb_continue_to_breakpoint "library function #1" "foo .*" + +# Check that the next stop is in bar. +gdb_continue_to_breakpoint "library function #2" "bar .*" + +# Restart the inferior and make sure there are no breakpoint reset +# errors. These can happen with the probes-based runtime linker +# interface if the cache is not cleared correctly. +set test "restart" +gdb_run_cmd +gdb_test_multiple "" $test { + -re {Start it from the beginning\? \(y or n\) $} { + send_gdb "y\n" + exp_continue + } + -re {Error in re-setting breakpoint} { + fail $test + } + -re "\r\n$gdb_prompt $" { + pass $test + } +} + +# Check that neither library is loaded. +check_info_shared "info sharedlibrary #4" 0 0 + +# Run to the first stop and check that only the first library is loaded. +gdb_continue_to_breakpoint "library load #3" "stop .*" +check_info_shared "info sharedlibrary #5" 1 0 + +# Run to the second stop and check that both libraries are loaded. +gdb_continue_to_breakpoint "library load #4" "stop .*" +check_info_shared "info sharedlibrary #6" 1 1 + +# Check that the next stop is in foo. +gdb_continue_to_breakpoint "library function #3" "foo .*" + +# Check that the next stop is in bar. +gdb_continue_to_breakpoint "library function #4" "bar .*" + +# Run to the next stop and check that the first library has been unloaded. +gdb_continue_to_breakpoint "library unload #1" "stop .*" +check_info_shared "info sharedlibrary #7" 0 1 + +# Run to the last stop and check that both libraries are gone. +gdb_continue_to_breakpoint "library unload #2" "stop .*" +check_info_shared "info sharedlibrary #8" 0 0 |