Commit | Line | Data |
---|---|---|
618f726f | 1 | # Copyright 2012-2016 Free Software Foundation, Inc. |
64ea88dc JB |
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 | ||
48b56b6a | 16 | if {[skip_shlib_tests]} { |
17 | return -1 | |
18 | } | |
19 | ||
64ea88dc JB |
20 | set executable print-file-var-main |
21 | ||
22 | set lib1 "print-file-var-lib1" | |
23 | set lib2 "print-file-var-lib2" | |
24 | ||
822bd149 TT |
25 | set libobj1 [standard_output_file ${lib1}.so] |
26 | set libobj2 [standard_output_file ${lib2}.so] | |
64ea88dc JB |
27 | |
28 | set lib_opts { debug additional_flags=-fPIC } | |
29 | ||
30 | if { [gdb_compile_shlib ${srcdir}/${subdir}/${lib1}.c \ | |
31 | ${libobj1} \ | |
32 | ${lib_opts} ] != "" } { | |
33 | return -1 | |
34 | } | |
35 | if { [gdb_compile_shlib ${srcdir}/${subdir}/${lib2}.c \ | |
36 | ${libobj2} \ | |
37 | ${lib_opts} ] != "" } { | |
38 | return -1 | |
39 | } | |
40 | if { [gdb_compile "${srcdir}/${subdir}/${executable}.c" \ | |
822bd149 | 41 | [standard_output_file ${executable}] \ |
64ea88dc JB |
42 | executable \ |
43 | [list debug shlib=${libobj1} shlib=${libobj2}]] | |
44 | != ""} { | |
45 | return -1 | |
46 | } | |
47 | ||
48 | clean_restart $executable | |
fca4cfd9 SM |
49 | gdb_load_shlibs $libobj1 |
50 | gdb_load_shlibs $libobj2 | |
64ea88dc JB |
51 | |
52 | if ![runto_main] { | |
53 | untested "could not run to main" | |
54 | return -1 | |
55 | } | |
56 | ||
c56e7c43 JB |
57 | # Try printing "this_version_num" qualified with the name of the file |
58 | # where the variables are defined. There are two global variables | |
59 | # with that name, and some systems such as GNU/Linux merge them | |
60 | # into one single entity, while some other systems such as Windows | |
61 | # keep them separate. In the first situation, we have to verify | |
62 | # that GDB does not randomly select the wrong instance, even when | |
63 | # a specific filename is used to qualified the lookup. And in the | |
64 | # second case, we have to verify that GDB does select the instance | |
65 | # defined in the given filename. | |
66 | # | |
67 | # To avoid adding target-specific code in this testcase, the program | |
68 | # sets two local variable named 'v1' and 'v2' with the value of | |
69 | # our global variables. This allows us to compare the value that | |
70 | # GDB returns for each query against the actual value seen by | |
71 | # the program itself. | |
72 | ||
73 | # Get past the initialization of variables 'v1' and 'v2'. | |
74 | ||
75 | set bp_location \ | |
76 | [gdb_get_line_number "STOP" "${executable}.c"] | |
77 | gdb_test "break $executable.c:$bp_location" \ | |
78 | "Breakpoint \[0-9\]+ at 0x\[0-9a-fA-F\]+: .*" \ | |
79 | "breapoint past v1 & v2 initialization" | |
80 | ||
81 | gdb_test "continue" \ | |
82 | "Breakpoint \[0-9\]+, main \\(\\) at.*" \ | |
83 | "continue to STOP marker" | |
84 | ||
85 | # Now check the value of this_version_id in both print-file-var-lib1.c | |
86 | # and print-file-var-lib2.c. | |
87 | ||
88 | gdb_test "print 'print-file-var-lib1.c'::this_version_id == v1" \ | |
89 | " = 1" | |
64ea88dc | 90 | |
c56e7c43 JB |
91 | gdb_test "print 'print-file-var-lib2.c'::this_version_id == v2" \ |
92 | " = 1" |