Commit | Line | Data |
---|---|---|
35c813e2 CC |
1 | // dwp_test_1.cc -- a test case for dwp |
2 | ||
2571583a | 3 | // Copyright (C) 2012-2017 Free Software Foundation, Inc. |
35c813e2 CC |
4 | // Written by Cary Coutant <ccoutant@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 | // Adapted from two_file_test_1.cc. | |
24 | ||
25 | #include "dwp_test.h" | |
26 | ||
27 | // 1 Code in file 1 calls code in file 2. | |
28 | ||
29 | bool | |
30 | C1::testcase1() | |
31 | { | |
32 | return t1_2() == 123; | |
33 | } | |
34 | ||
35 | // 2 Code in file 1 refers to global data in file 2. | |
36 | ||
37 | bool | |
38 | C1::testcase2() | |
39 | { | |
40 | return v2 == 456; | |
41 | } | |
42 | ||
43 | // 3 Code in file 1 referes to common symbol in file 2. | |
44 | ||
45 | bool | |
46 | C1::testcase3() | |
47 | { | |
48 | return v3 == 789; | |
49 | } | |
50 | ||
51 | // 4 Code in file 1 refers to offset within global data in file 2. | |
52 | ||
53 | bool | |
54 | C1::testcase4() | |
55 | { | |
56 | return v4[5] == ','; | |
57 | } | |
58 | ||
59 | // 5 Code in file 1 refers to offset within common symbol in file 2. | |
60 | ||
61 | bool | |
62 | C2::testcase1() | |
63 | { | |
64 | return v5[7] == 'w'; | |
65 | } | |
66 | ||
67 | // 6 Data in file 1 refers to global data in file 2. | |
68 | ||
69 | int* p6 = &v2; | |
70 | ||
71 | bool | |
72 | C2::testcase2() | |
73 | { | |
74 | return *p6 == 456; | |
75 | } | |
76 | ||
77 | // 7 Data in file 1 refers to common symbol in file 2. | |
78 | ||
79 | int* p7 = &v3; | |
80 | ||
81 | bool | |
82 | C2::testcase3() | |
83 | { | |
84 | return *p7 == 789; | |
85 | } | |
86 | ||
87 | // 8 Data in file 1 refers to offset within global data in file 2. | |
88 | ||
89 | char* p8 = &v4[6]; | |
90 | ||
91 | bool | |
92 | C2::testcase4() | |
93 | { | |
94 | return *p8 == ' '; | |
95 | } | |
96 | ||
97 | // 9 Data in file 1 refers to offset within common symbol in file 2. | |
98 | ||
99 | char* p9 = &v5[8]; | |
100 | ||
101 | bool | |
102 | C3::testcase1() | |
103 | { | |
104 | return *p9 == 'o'; | |
105 | } | |
106 | ||
107 | // 10 Data in file 1 refers to function in file 2. | |
108 | ||
109 | int (*pfn)() = &f10; | |
110 | ||
111 | bool | |
112 | C3::testcase2() | |
113 | { | |
114 | return (*pfn)() == 135; | |
115 | } | |
116 | ||
117 | // 11 Pass function pointer from file 1 to file 2. | |
118 | ||
119 | int | |
120 | f11a() | |
121 | { | |
122 | return 246; | |
123 | } | |
124 | ||
125 | bool | |
126 | C3::testcase3() | |
127 | { | |
128 | return f11b(&f11a) == 246; | |
129 | } | |
130 | ||
131 | // 12 Compare address of function for equality in both files. | |
132 | ||
133 | bool | |
134 | t12() | |
135 | { | |
136 | return &t12 == c3.f4(); | |
137 | } | |
138 | ||
139 | // 13 Compare address of inline function for equality in both files. | |
140 | ||
141 | bool | |
142 | t13() | |
143 | { | |
144 | return &f13i == f13(); | |
145 | } | |
146 | ||
147 | // 14 Compare string constants in file 1 and file 2. | |
148 | ||
149 | bool | |
150 | t14() | |
151 | { | |
152 | const char* s1 = TEST_STRING_CONSTANT; | |
153 | const char* s2 = f14(); | |
154 | while (*s1 != '\0') | |
155 | if (*s1++ != *s2++) | |
156 | return false; | |
157 | return *s2 == '\0'; | |
158 | } | |
159 | ||
160 | // 15 Compare wide string constants in file 1 and file 2. | |
161 | ||
162 | bool | |
163 | t15() | |
164 | { | |
165 | const wchar_t* s1 = TEST_WIDE_STRING_CONSTANT; | |
166 | const wchar_t* s2 = f15(); | |
167 | while (*s1 != '\0') | |
168 | if (*s1++ != *s2++) | |
169 | return false; | |
170 | return *s2 == '\0'; | |
171 | } | |
172 | ||
173 | // 16 Call a function directly after its address has been taken. | |
174 | ||
175 | bool | |
176 | t16() | |
177 | { | |
178 | return f10() == 135; | |
179 | } | |
180 | ||
181 | // 17 File 1 checks array of string constants defined in file 2. | |
182 | ||
183 | bool | |
184 | t17() | |
185 | { | |
186 | char c = 'a'; | |
187 | for (int i = 0; i < T17_COUNT; ++i) | |
188 | { | |
189 | if (t17data[i][0] != c || t17data[i][1] != '\0') | |
190 | return false; | |
191 | ++c; | |
192 | } | |
193 | return true; | |
194 | } | |
195 | ||
196 | // 18 File 1 checks string constants referenced in code in file 2. | |
197 | ||
198 | bool | |
199 | t18() | |
200 | { | |
201 | char c = 'a'; | |
202 | for (int i = 0; i < T17_COUNT; ++i) | |
203 | { | |
204 | const char* s = f18(i); | |
205 | if (s[0] != c || s[1] != '\0') | |
206 | return false; | |
207 | ++c; | |
208 | } | |
209 | return true; | |
210 | } |