* configure.ac: Don't test for objdump, c++filt, or readelf.
[deliverable/binutils-gdb.git] / gold / testsuite / two_file_test_1.cc
CommitLineData
3bd52c28
ILT
1// two_file_test_1.cc -- a two file test case for gold, file 1 of 2
2
ebdbb458 3// Copyright 2006, 2007, 2008 Free Software Foundation, Inc.
3bd52c28
ILT
4// Written by Ian Lance Taylor <iant@google.com>.
5
6// This file is part of gold.
7
8// This program is free software; you can redistribute it and/or modify
9// it under the terms of the GNU General Public License as published by
10// the Free Software Foundation; either version 3 of the License, or
11// (at your option) any later version.
12
13// This program is distributed in the hope that it will be useful,
14// but WITHOUT ANY WARRANTY; without even the implied warranty of
15// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16// GNU General Public License for more details.
17
18// You should have received a copy of the GNU General Public License
19// along with this program; if not, write to the Free Software
20// Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston,
21// MA 02110-1301, USA.
22
23// This tests references between files. This is file 1, and
24// two_file_test_2.cc is file 2. We test in several different ways:
25
26// Files 1 and 2 linked together in executable.
27// File 1 in executable, file 2 in shared library.
28// File 1 in shared library, file 2 in executable.
29// Files 1 and 2 linked together in shared library.
30// Files 1 and 2 in different shared libraries.
31
32// We test the following cases.
33
34// 1 Code in file 1 calls code in file 2.
35// 2 Code in file 1 refers to global data in file 2.
36// 3 Code in file 1 referes to common symbol in file 2.
37// 4 Code in file 1 refers to offset within global data in file 2.
38// 5 Code in file 1 refers to offset within common symbol in file 2.
39// 6 Data in file 1 refers to global data in file 2.
40// 7 Data in file 1 refers to common symbol in file 2.
41// 8 Data in file 1 refers to offset within global data in file 2.
42// 9 Data in file 1 refers to offset within common symbol in file 2.
43// 10 Data in file 1 refers to function in file 2.
44// 11 Pass function pointer from file 1 to file 2.
45// 12 Compare address of function for equality in both files.
46// 13 Compare address of inline function for equality in both files.
f958d5fc 47// 14 Compare string constants in file 1 and file 2.
03e8f2b2
ILT
48// 15 Compare wide string constants in file 1 and file 2.
49// 16 Call a function directly after its address has been taken.
d1f003c6 50// 17 File 1 checks array of string constants defined in file 2.
3bd52c28
ILT
51
52#include "two_file_test.h"
53
54// 1 Code in file 1 calls code in file 2.
55
56bool
57t1()
58{
59 return t1_2() == 123;
60}
61
62// 2 Code in file 1 refers to global data in file 2.
63
64bool
65t2()
66{
67 return v2 == 456;
68}
69
70// 3 Code in file 1 referes to common symbol in file 2.
71
72bool
73t3()
74{
75 return v3 == 789;
76}
77
78// 4 Code in file 1 refers to offset within global data in file 2.
79
80bool
81t4()
82{
83 return v4[5] == ',';
84}
85
86// 5 Code in file 1 refers to offset within common symbol in file 2.
87
88bool
89t5()
90{
91 return v5[7] == 'w';
92}
93
94// 6 Data in file 1 refers to global data in file 2.
95
96int* p6 = &v2;
97
98bool
99t6()
100{
101 return *p6 == 456;
102}
103
104// 7 Data in file 1 refers to common symbol in file 2.
105
106int* p7 = &v3;
107
108bool
109t7()
110{
111 return *p7 == 789;
112}
113
114// 8 Data in file 1 refers to offset within global data in file 2.
115
116char* p8 = &v4[6];
117
118bool
119t8()
120{
121 return *p8 == ' ';
122}
123
124// 9 Data in file 1 refers to offset within common symbol in file 2.
125
126char* p9 = &v5[8];
127
128bool
129t9()
130{
131 return *p9 == 'o';
132}
133
134// 10 Data in file 1 refers to function in file 2.
135
136int (*pfn)() = &f10;
137
138bool
139t10()
140{
141 return (*pfn)() == 135;
142}
143
144// 11 Pass function pointer from file 1 to file 2.
145
146int
147f11a()
148{
149 return 246;
150}
151
152bool
153t11()
154{
155 return f11b(&f11a) == 246;
156}
157
158// 12 Compare address of function for equality in both files.
159
160bool
161t12()
162{
163 return &t12 == f12();
164}
165
166// 13 Compare address of inline function for equality in both files.
167
168bool
169t13()
170{
171 return &f13i == f13();
172}
f958d5fc
ILT
173
174// 14 Compare string constants in file 1 and file 2.
175
176bool
177t14()
178{
179 const char* s1 = TEST_STRING_CONSTANT;
180 const char* s2 = f14();
181 while (*s1 != '\0')
182 if (*s1++ != *s2++)
183 return false;
184 return *s2 == '\0';
185}
28ef3179
ILT
186
187// 15 Compare wide string constants in file 1 and file 2.
188
189bool
190t15()
191{
192 const wchar_t* s1 = TEST_WIDE_STRING_CONSTANT;
193 const wchar_t* s2 = f15();
194 while (*s1 != '\0')
195 if (*s1++ != *s2++)
196 return false;
197 return *s2 == '\0';
198}
03e8f2b2
ILT
199
200// 16 Call a function directly after its address has been taken.
201
202bool
203t16()
204{
205 return f10() == 135;
206}
d1f003c6
ILT
207
208// 17 File 1 checks array of string constants defined in file 2.
209
210bool
211t17()
212{
213 char c = 'a';
214 for (int i = 0; i < T17_COUNT; ++i)
215 {
216 if (t17data[i][0] != c || t17data[i][1] != '\0')
217 return false;
218 ++c;
219 }
220 return true;
221}
This page took 0.052538 seconds and 4 git commands to generate.