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.cc] - Blame information for rev 303

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

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

powered by: WebSVN 2.1.0

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