arm: Support pac_key_* register operand for MRS/MSR in Armv8.1-M Mainline
[binutils-gdb.git] / gold / testsuite / dwp_test_1.cc
blob939d71c4749fa84d3a08762ac75ada2931aec945
1 // dwp_test_1.cc -- a test case for dwp
3 // Copyright (C) 2012-2024 Free Software Foundation, Inc.
4 // Written by Cary Coutant <ccoutant@google.com>.
6 // This file is part of gold.
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.
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.
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.
23 // Adapted from two_file_test_1.cc.
25 #include "dwp_test.h"
27 // 1 Code in file 1 calls code in file 2.
29 bool
30 C1::testcase1()
32 return t1_2() == 123;
35 // 2 Code in file 1 refers to global data in file 2.
37 bool
38 C1::testcase2()
40 return v2 == 456;
43 // 3 Code in file 1 referes to common symbol in file 2.
45 bool
46 C1::testcase3()
48 return v3 == 789;
51 // 4 Code in file 1 refers to offset within global data in file 2.
53 bool
54 C1::testcase4()
56 return v4[5] == ',';
59 // 5 Code in file 1 refers to offset within common symbol in file 2.
61 bool
62 C2::testcase1()
64 return v5[7] == 'w';
67 // 6 Data in file 1 refers to global data in file 2.
69 int* p6 = &v2;
71 bool
72 C2::testcase2()
74 return *p6 == 456;
77 // 7 Data in file 1 refers to common symbol in file 2.
79 int* p7 = &v3;
81 bool
82 C2::testcase3()
84 return *p7 == 789;
87 // 8 Data in file 1 refers to offset within global data in file 2.
89 char* p8 = &v4[6];
91 bool
92 C2::testcase4()
94 return *p8 == ' ';
97 // 9 Data in file 1 refers to offset within common symbol in file 2.
99 char* p9 = &v5[8];
101 bool
102 C3::testcase1()
104 return *p9 == 'o';
107 // 10 Data in file 1 refers to function in file 2.
109 int (*pfn)() = &f10;
111 bool
112 C3::testcase2()
114 return (*pfn)() == 135;
117 // 11 Pass function pointer from file 1 to file 2.
120 f11a()
122 return 246;
125 bool
126 C3::testcase3()
128 return f11b(&f11a) == 246;
131 // 12 Compare address of function for equality in both files.
133 bool
134 t12()
136 return &t12 == c3.f4();
139 // 13 Compare address of inline function for equality in both files.
141 bool
142 t13()
144 return &f13i == f13();
147 // 14 Compare string constants in file 1 and file 2.
149 bool
150 t14()
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';
160 // 15 Compare wide string constants in file 1 and file 2.
162 bool
163 t15()
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';
173 // 16 Call a function directly after its address has been taken.
175 bool
176 t16()
178 return f10() == 135;
181 // 17 File 1 checks array of string constants defined in file 2.
183 bool
184 t17()
186 char c = 'a';
187 for (int i = 0; i < T17_COUNT; ++i)
189 if (t17data[i][0] != c || t17data[i][1] != '\0')
190 return false;
191 ++c;
193 return true;
196 // 18 File 1 checks string constants referenced in code in file 2.
198 bool
199 t18()
201 char c = 'a';
202 for (int i = 0; i < T17_COUNT; ++i)
204 const char* s = f18(i);
205 if (s[0] != c || s[1] != '\0')
206 return false;
207 ++c;
209 return true;