1// dwp_test_1.cc -- a test case for dwp 2 3// Copyright (C) 2012-2017 Free Software Foundation, Inc. 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 29bool 30C1::testcase1() 31{ 32 return t1_2() == 123; 33} 34 35// 2 Code in file 1 refers to global data in file 2. 36 37bool 38C1::testcase2() 39{ 40 return v2 == 456; 41} 42 43// 3 Code in file 1 referes to common symbol in file 2. 44 45bool 46C1::testcase3() 47{ 48 return v3 == 789; 49} 50 51// 4 Code in file 1 refers to offset within global data in file 2. 52 53bool 54C1::testcase4() 55{ 56 return v4[5] == ','; 57} 58 59// 5 Code in file 1 refers to offset within common symbol in file 2. 60 61bool 62C2::testcase1() 63{ 64 return v5[7] == 'w'; 65} 66 67// 6 Data in file 1 refers to global data in file 2. 68 69int* p6 = &v2; 70 71bool 72C2::testcase2() 73{ 74 return *p6 == 456; 75} 76 77// 7 Data in file 1 refers to common symbol in file 2. 78 79int* p7 = &v3; 80 81bool 82C2::testcase3() 83{ 84 return *p7 == 789; 85} 86 87// 8 Data in file 1 refers to offset within global data in file 2. 88 89char* p8 = &v4[6]; 90 91bool 92C2::testcase4() 93{ 94 return *p8 == ' '; 95} 96 97// 9 Data in file 1 refers to offset within common symbol in file 2. 98 99char* p9 = &v5[8]; 100 101bool 102C3::testcase1() 103{ 104 return *p9 == 'o'; 105} 106 107// 10 Data in file 1 refers to function in file 2. 108 109int (*pfn)() = &f10; 110 111bool 112C3::testcase2() 113{ 114 return (*pfn)() == 135; 115} 116 117// 11 Pass function pointer from file 1 to file 2. 118 119int 120f11a() 121{ 122 return 246; 123} 124 125bool 126C3::testcase3() 127{ 128 return f11b(&f11a) == 246; 129} 130 131// 12 Compare address of function for equality in both files. 132 133bool 134t12() 135{ 136 return &t12 == c3.f4(); 137} 138 139// 13 Compare address of inline function for equality in both files. 140 141bool 142t13() 143{ 144 return &f13i == f13(); 145} 146 147// 14 Compare string constants in file 1 and file 2. 148 149bool 150t14() 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 162bool 163t15() 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 175bool 176t16() 177{ 178 return f10() == 135; 179} 180 181// 17 File 1 checks array of string constants defined in file 2. 182 183bool 184t17() 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 198bool 199t18() 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} 211