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