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