1// dwp_test_2.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_2.cc. 24 25#include "dwp_test.h" 26 27// 1 Code in file 1 calls code in file 2. 28 29int 30C1::t1_2() 31{ 32 return 123; 33} 34 35bool 36C1::t1a() 37{ 38 return t1_2() == 123; 39} 40 41// 2 Code in file 1 refers to global data in file 2. 42 43int v2 = 456; 44 45// 3 Code in file 1 referes to common symbol in file 2. This is 46// initialized at runtime to 789. 47 48int v3; 49 50// 4 Code in file 1 refers to offset within global data in file 2. 51 52char v4[] = "Hello, world"; 53 54// 5 Code in file 1 refers to offset within common symbol in file 2. 55// This is initialized at runtime to a copy of v4. 56 57char v5[13]; 58 59// 6 Data in file 1 refers to global data in file 2. This reuses v2. 60 61// 7 Data in file 1 refers to common symbol in file 2. This reuses v3. 62 63// 8 Data in file 1 refers to offset within global data in file 2. 64// This reuses v4. 65 66// 9 Data in file 1 refers to offset within common symbol in file 2. 67// This reuses v5. 68 69// 10 Data in file 1 refers to function in file 2. 70 71int 72f10() 73{ 74 return 135; 75} 76 77// 11 Pass function pointer from file 1 to file 2. 78 79int 80f11b(int (*pfn)()) 81{ 82 return (*pfn)(); 83} 84 85// 12 Compare address of function for equality in both files. 86 87bool 88(*C3::f4())() 89{ 90 return &t12; 91} 92 93// 13 Compare address of inline function for equality in both files. 94 95void 96(*f13())() 97{ 98 return &f13i; 99} 100 101// 14 Compare string constants in file 1 and file 2. 102 103const char* 104f14() 105{ 106 return TEST_STRING_CONSTANT; 107} 108 109// 15 Compare wide string constants in file 1 and file 2. 110 111const wchar_t* 112f15() 113{ 114 return TEST_WIDE_STRING_CONSTANT; 115} 116 117// 17 File 1 checks array of string constants defined in file 2. 118 119const char* t17data[T17_COUNT] = 120{ 121 "a", "b", "c", "d", "e" 122}; 123 124// 18 File 1 checks string constants referenced directly in file 2. 125 126const char* 127f18(int i) 128{ 129 switch (i) 130 { 131 case 0: 132 return "a"; 133 case 1: 134 return "b"; 135 case 2: 136 return "c"; 137 case 3: 138 return "d"; 139 case 4: 140 return "e"; 141 default: 142 return 0; 143 } 144} 145