OLD | NEW |
(Empty) | |
| 1 # Copyright 2012 Free Software Foundation, Inc. |
| 2 |
| 3 # This program is free software; you can redistribute it and/or modify |
| 4 # it under the terms of the GNU General Public License as published by |
| 5 # the Free Software Foundation; either version 3 of the License, or |
| 6 # (at your option) any later version. |
| 7 # |
| 8 # This program is distributed in the hope that it will be useful, |
| 9 # but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 10 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 # GNU General Public License for more details. |
| 12 # |
| 13 # You should have received a copy of the GNU General Public License |
| 14 # along with this program. If not, see <http://www.gnu.org/licenses/>. */ |
| 15 |
| 16 set executable ctxobj-m |
| 17 |
| 18 # The sources used to build two shared libraries (SO). We use the exact |
| 19 # same sources to build both SOs, but differentiate them through the use |
| 20 # of macros defined when calling the compiler. |
| 21 # |
| 22 # We need two source files per SO, because we need to test the situation |
| 23 # where we are trying to print the value of a global variable defined |
| 24 # in that SO while the variable's associated symtab has not been created |
| 25 # yet. |
| 26 set libsrc [list "${srcdir}/${subdir}/ctxobj-v.c" \ |
| 27 "${srcdir}/${subdir}/ctxobj-f.c"] |
| 28 |
| 29 set libobj1 "${objdir}/${subdir}/libctxobj1.so" |
| 30 set libobj2 "${objdir}/${subdir}/libctxobj2.so" |
| 31 |
| 32 set libobj1_opts { debug additional_flags=-fPIC |
| 33 additional_flags=-DVERSION=104 |
| 34 additional_flags=-DGET_VERSION=get_version_1 } |
| 35 set libobj2_opts { debug additional_flags=-fPIC |
| 36 additional_flags=-DVERSION=203 |
| 37 additional_flags=-DGET_VERSION=get_version_2 } |
| 38 |
| 39 if { [gdb_compile_shlib $libsrc $libobj1 $libobj1_opts ] != "" } { |
| 40 return -1 |
| 41 } |
| 42 if { [gdb_compile_shlib $libsrc $libobj2 $libobj2_opts ] != "" } { |
| 43 return -1 |
| 44 } |
| 45 if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \ |
| 46 "${objdir}/${subdir}/${executable}" \ |
| 47 executable \ |
| 48 [list debug shlib=${libobj1} shlib=${libobj2}]] |
| 49 != ""} { |
| 50 return -1 |
| 51 } |
| 52 |
| 53 clean_restart $executable |
| 54 gdb_load_shlibs $libobj1 $libobj2 |
| 55 |
| 56 if ![runto_main] { |
| 57 untested "could not run to main" |
| 58 return -1 |
| 59 } |
| 60 |
| 61 set bp_location [gdb_get_line_number "STOP" "ctxobj-f.c"] |
| 62 gdb_test "break ctxobj-f.c:$bp_location" \ |
| 63 "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \ |
| 64 "break in get_version functions" |
| 65 |
| 66 gdb_test "continue" \ |
| 67 "Breakpoint $decimal, get_version_1 \\(\\).*" \ |
| 68 "continue to get_version_1" |
| 69 |
| 70 # Try printing "this_version_num". There are two global variables |
| 71 # with that name, and some systems such as GNU/Linux merge them |
| 72 # into one single entity, while some other systems such as Windows |
| 73 # keep them separate. In the first situation, we have to verify |
| 74 # that GDB does not randomly select the wrong instance. And in |
| 75 # the second case, we have to verify that GDB prints the value |
| 76 # of the instance from the current debugging context (the shared |
| 77 # library currently being debugged). |
| 78 # |
| 79 # We perform two tests: The first print test verifies that we are |
| 80 # doing things right when the partial symtab hasn't been expanded. |
| 81 # And the second print test will do the same, but after the partial |
| 82 # symtab has been expanded. |
| 83 # |
| 84 # To avoid adding target-specific code in this testcase, the program |
| 85 # sets a local variable named 'v' with the value of the global |
| 86 # variable 'this_version_number'. This allows us to compare the value |
| 87 # that GDB thinks 'this_version_num' has, against the actual value |
| 88 # seen by the program itself. |
| 89 |
| 90 gdb_test "print this_version_num == v" \ |
| 91 " = 1" \ |
| 92 "print libctxobj1's this_version_num from partial symtab" |
| 93 |
| 94 gdb_test "print this_version_num == v" \ |
| 95 " = 1" \ |
| 96 "print libctxobj1's this_version_num from symtab" |
| 97 |
| 98 # Do the same, but from get_version_2. |
| 99 |
| 100 gdb_test "continue" \ |
| 101 "Breakpoint $decimal, get_version_2 \\(\\).*" \ |
| 102 "continue to get_version_2" |
| 103 |
| 104 gdb_test "print this_version_num == v" \ |
| 105 " = 1" \ |
| 106 "print libctxobj2's this_version_num from partial symtab" |
| 107 |
| 108 gdb_test "print this_version_num == v" \ |
| 109 " = 1" \ |
| 110 "print libctxobj2's this_version_num from symtab" |
OLD | NEW |