diff options
Diffstat (limited to 'gdb/testsuite/gdb.base/ctxobj.exp')
-rw-r--r-- | gdb/testsuite/gdb.base/ctxobj.exp | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/gdb/testsuite/gdb.base/ctxobj.exp b/gdb/testsuite/gdb.base/ctxobj.exp new file mode 100644 index 0000000..57ed4c1 --- /dev/null +++ b/gdb/testsuite/gdb.base/ctxobj.exp @@ -0,0 +1,94 @@ +# 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/>. */ + +set executable ctxobj-m + +# The sources used to build two shared libraries (SO). We use the exact +# same sources to build both SOs, but differentiate them through the use +# of macros defined when calling the compiler. +# +# We need two source files per SO, because we need to test the situation +# where we are trying to print the value of a global variable defined +# in that SO while the variable's associated symtab has not been created +# yet. +set libsrc [list "${srcdir}/${subdir}/ctxobj-v.c" \ + "${srcdir}/${subdir}/ctxobj-f.c"] + +set libobj1 "${objdir}/${subdir}/libctxobj1.so" +set libobj2 "${objdir}/${subdir}/libctxobj2.so" + +set libobj1_opts { debug additional_flags=-fPIC + additional_flags=-DVERSION=104 + additional_flags=-DGET_VERSION=get_version_1 } +set libobj2_opts { debug additional_flags=-fPIC + additional_flags=-DVERSION=203 + additional_flags=-DGET_VERSION=get_version_2 } + +if { [gdb_compile_shlib $libsrc $libobj1 $libobj1_opts ] != "" } { + return -1 +} +if { [gdb_compile_shlib $libsrc $libobj2 $libobj2_opts ] != "" } { + return -1 +} +if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \ + "${objdir}/${subdir}/${executable}" \ + executable \ + [list debug shlib=${libobj1} shlib=${libobj2}]] + != ""} { + return -1 +} + +clean_restart $executable + +if ![runto_main] { + untested "could not run to main" + return -1 +} + +gdb_breakpoint "get_version_1" +gdb_test "continue" \ + "Breakpoint $decimal, get_version_1 \\(\\).*" \ + "continue to get_version_1" + +# Try printing "this_version_num". There are two global variables +# with that name, but we should pick the one in the shared library +# we are currently debugging. We will know we picked the correct one +# if the value printed is 104. The first print test verifies that +# we're doing things right when the partial symtab hasn't been +# expanded. And the second print test will do the same, but after +# the partial symtab has been expanded. + +gdb_test "print this_version_num" \ + " = 104" \ + "print libctxobj1's this_version_num from partial symtab" + +gdb_test "print this_version_num" \ + " = 104" \ + "print libctxobj1's this_version_num from symtab" + +# Do the same, but from get_version_2. + +gdb_breakpoint "get_version_2" +gdb_test "continue" \ + "Breakpoint $decimal, get_version_2 \\(\\).*" \ + "continue to get_version_2" + +gdb_test "print this_version_num" \ + " = 203" \ + "print libctxobj2's this_version_num from partial symtab" + +gdb_test "print this_version_num" \ + " = 203" \ + "print libctxobj2's this_version_num from symtab" |