OpenCores
URL https://opencores.org/ocsvn/open8_urisc/open8_urisc/trunk

Subversion Repositories open8_urisc

[/] [open8_urisc/] [trunk/] [gnu/] [binutils/] [gold/] [testsuite/] [two_file_test_1_v1.cc] - Blame information for rev 27

Go to most recent revision | Details | Compare with Previous | View Log

Line No. Rev Author Line
1 27 khays
// two_file_test_1_v1.cc -- a two file test case for gold, file 1 of 2
2
 
3
// Copyright 2006, 2007, 2008, 2011 Free Software Foundation, Inc.
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 is an alternate version of the source file two_file_test_1.cc,
24
// used to test incremental linking.  We build a binary first using this
25
// source file, then do an incremental link with the primary version of
26
// the file.
27
 
28
// This tests references between files.  This is file 1, and
29
// two_file_test_2.cc is file 2.  We test in several different ways:
30
 
31
// Files 1 and 2 linked together in executable.
32
// File 1 in executable, file 2 in shared library.
33
// File 1 in shared library, file 2 in executable.
34
// Files 1 and 2 linked together in shared library.
35
// Files 1 and 2 in different shared libraries.
36
 
37
// We test the following cases.
38
 
39
// 1  Code in file 1 calls code in file 2.
40
// 2  Code in file 1 refers to global data in file 2.
41
// 3  Code in file 1 referes to common symbol in file 2.
42
// 4  Code in file 1 refers to offset within global data in file 2.
43
// 5  Code in file 1 refers to offset within common symbol in file 2.
44
// 6  Data in file 1 refers to global data in file 2.
45
// 7  Data in file 1 refers to common symbol in file 2.
46
// 8  Data in file 1 refers to offset within global data in file 2.
47
// 9  Data in file 1 refers to offset within common symbol in file 2.
48
// 10 Data in file 1 refers to function in file 2.
49
// 11 Pass function pointer from file 1 to file 2.
50
// 12 Compare address of function for equality in both files.
51
// 13 Compare address of inline function for equality in both files.
52
// 14 Compare string constants in file 1 and file 2.
53
// 15 Compare wide string constants in file 1 and file 2.
54
// 16 Call a function directly after its address has been taken.
55
// 17 File 1 checks array of string constants defined in file 2.
56
// 18 File 1 checks string constants referenced in code in file 2.
57
 
58
#include "two_file_test.h"
59
 
60
// 1  Code in file 1 calls code in file 2.
61
 
62
bool
63
t1()
64
{
65
  return t1_2() == 0;
66
}
67
 
68
// 2  Code in file 1 refers to global data in file 2.
69
 
70
bool
71
t2()
72
{
73
  return v2 == 0;
74
}
75
 
76
// 3  Code in file 1 referes to common symbol in file 2.
77
 
78
bool
79
t3()
80
{
81
  return v3 == 0;
82
}
83
 
84
// 4  Code in file 1 refers to offset within global data in file 2.
85
 
86
bool
87
t4()
88
{
89
  return v4[5] == ',';
90
}
91
 
92
// 5  Code in file 1 refers to offset within common symbol in file 2.
93
 
94
bool
95
t5()
96
{
97
  return v5[7] == 'w';
98
}
99
 
100
// 6  Data in file 1 refers to global data in file 2.
101
 
102
int* p6 = &v2;
103
 
104
bool
105
t6()
106
{
107
  return *p6 == 456;
108
}
109
 
110
// 7  Data in file 1 refers to common symbol in file 2.
111
 
112
int* p7 = &v3;
113
 
114
bool
115
t7()
116
{
117
  return *p7 == 789;
118
}
119
 
120
// 8  Data in file 1 refers to offset within global data in file 2.
121
 
122
char* p8 = &v4[6];
123
 
124
bool
125
t8()
126
{
127
  return *p8 == ' ';
128
}
129
 
130
// 9  Data in file 1 refers to offset within common symbol in file 2.
131
 
132
char* p9 = &v5[8];
133
 
134
bool
135
t9()
136
{
137
  return *p9 == 'o';
138
}
139
 
140
// 10 Data in file 1 refers to function in file 2.
141
 
142
int (*pfn)() = &f10;
143
 
144
bool
145
t10()
146
{
147
  return (*pfn)() == 135;
148
}
149
 
150
// 11 Pass function pointer from file 1 to file 2.
151
 
152
int
153
f11a()
154
{
155
  return 246;
156
}
157
 
158
bool
159
t11()
160
{
161
  return f11b(&f11a) == 246;
162
}
163
 
164
// 12 Compare address of function for equality in both files.
165
 
166
bool
167
t12()
168
{
169
  return &t12 == f12();
170
}
171
 
172
// 13 Compare address of inline function for equality in both files.
173
 
174
bool
175
t13()
176
{
177
  return &f13i == f13();
178
}
179
 
180
// 14 Compare string constants in file 1 and file 2.
181
 
182
bool
183
t14()
184
{
185
  const char* s1 = TEST_STRING_CONSTANT;
186
  const char* s2 = f14();
187
  while (*s1 != '\0')
188
    if (*s1++ != *s2++)
189
      return false;
190
  return *s2 == '\0';
191
}
192
 
193
// 15 Compare wide string constants in file 1 and file 2.
194
 
195
bool
196
t15()
197
{
198
  const wchar_t* s1 = TEST_WIDE_STRING_CONSTANT;
199
  const wchar_t* s2 = f15();
200
  while (*s1 != '\0')
201
    if (*s1++ != *s2++)
202
      return false;
203
  return *s2 == '\0';
204
}
205
 
206
// 16 Call a function directly after its address has been taken.
207
 
208
bool
209
t16()
210
{
211
  return f10() == 135;
212
}
213
 
214
// 17 File 1 checks array of string constants defined in file 2.
215
 
216
bool
217
t17()
218
{
219
  char c = 'a';
220
  for (int i = 0; i < T17_COUNT; ++i)
221
    {
222
      if (t17data[i][0] != c || t17data[i][1] != '\0')
223
        return false;
224
      ++c;
225
    }
226
  return true;
227
}
228
 
229
// 18 File 1 checks string constants referenced in code in file 2.
230
 
231
bool
232
t18()
233
{
234
  char c = 'a';
235
  for (int i = 0; i < T17_COUNT; ++i)
236
    {
237
      const char* s = f18(i);
238
      if (s[0] != c || s[1] != '\0')
239
        return false;
240
      ++c;
241
    }
242
  return true;
243
}

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.