1 /* This is part of the shared library ld test. This file becomes part 2 of a shared library. */ 3 4 /* This variable is supplied by the main program. */ 5 #ifndef XCOFF_TEST 6 extern int mainvar; 7 #endif 8 9 /* This variable is defined in the shared library, and overridden by 10 the main program. */ 11 #ifndef XCOFF_TEST 12 int overriddenvar = -1; 13 #endif 14 15 /* This variable is defined in the shared library. */ 16 int shlibvar1 = 3; 17 18 /* This variable is defined by another object in the shared library. */ 19 extern int shlibvar2; 20 21 /* These functions return the values of the above variables as seen in 22 the shared library. */ 23 24 #ifndef XCOFF_TEST 25 int shlib_mainvar()26shlib_mainvar () 27 { 28 return mainvar; 29 } 30 #endif 31 32 #ifndef XCOFF_TEST 33 int shlib_overriddenvar()34shlib_overriddenvar () 35 { 36 return overriddenvar; 37 } 38 #endif 39 40 int shlib_shlibvar1()41shlib_shlibvar1 () 42 { 43 return shlibvar1; 44 } 45 46 int shlib_shlibvar2()47shlib_shlibvar2 () 48 { 49 return shlibvar2; 50 } 51 52 /* This function calls a function defined by another object in the 53 shared library. */ 54 55 extern int shlib_shlibcalled (); 56 57 int shlib_shlibcall()58shlib_shlibcall () 59 { 60 return shlib_shlibcalled (); 61 } 62 63 #ifndef XCOFF_TEST 64 /* This function calls a function defined in this object in the shared 65 library. The main program will override the called function. */ 66 67 extern int shlib_overriddencall2 (); 68 69 int shlib_shlibcall2()70shlib_shlibcall2 () 71 { 72 return shlib_overriddencall2 (); 73 } 74 #endif 75 76 /* This function calls a function defined by the main program. */ 77 78 #ifndef XCOFF_TEST 79 extern int main_called (); 80 81 int shlib_maincall()82shlib_maincall () 83 { 84 return main_called (); 85 } 86 #endif 87 88 /* This function is passed a function pointer to shlib_mainvar. It 89 confirms that the pointer compares equally. */ 90 91 int 92 shlib_checkfunptr1 (p) 93 int (*p) (); 94 { 95 return p == shlib_shlibvar1; 96 } 97 98 /* This function is passed a function pointer to main_called. It 99 confirms that the pointer compares equally. */ 100 101 #ifndef XCOFF_TEST 102 int 103 shlib_checkfunptr2 (p) 104 int (*p) (); 105 { 106 return p == main_called; 107 } 108 #endif 109 110 /* This function returns a pointer to shlib_mainvar. */ 111 112 int shlib_getfunptr1()113(*shlib_getfunptr1 ()) () 114 { 115 return shlib_shlibvar1; 116 } 117 118 /* This function returns a pointer to main_called. */ 119 120 #ifndef XCOFF_TEST 121 int shlib_getfunptr2()122(*shlib_getfunptr2 ()) () 123 { 124 return main_called; 125 } 126 #endif 127 128 /* This function makes sure that constant data and local functions 129 work. */ 130 131 #ifndef __STDC__ 132 #define const 133 #endif 134 135 static int i = 6; 136 static const char *str = "Hello, world\n"; 137 138 int shlib_check()139shlib_check () 140 { 141 const char *s1, *s2; 142 143 if (i != 6) 144 return 0; 145 146 /* To isolate the test, don't rely on any external functions, such 147 as strcmp. */ 148 s1 = "Hello, world\n"; 149 s2 = str; 150 while (*s1 != '\0') 151 if (*s1++ != *s2++) 152 return 0; 153 if (*s2 != '\0') 154 return 0; 155 156 if (shlib_shlibvar1 () != 3) 157 return 0; 158 159 return 1; 160 } 161