1/* ===-- apple_versioning.c - Adds versioning symbols for ld ---------------=== 2 * 3 * The LLVM Compiler Infrastructure 4 * 5 * This file is dual licensed under the MIT and the University of Illinois Open 6 * Source Licenses. See LICENSE.TXT for details. 7 * 8 * ===----------------------------------------------------------------------=== 9 */ 10 11 12#if __APPLE__ 13 #include <Availability.h> 14 15 #if __IPHONE_OS_VERSION_MIN_REQUIRED 16 #define NOT_HERE_BEFORE_10_6(sym) 17 #define NOT_HERE_IN_10_8_AND_EARLIER(sym) \ 18 extern const char sym##_tmp61 __asm("$ld$hide$os6.1$_" #sym ); \ 19 __attribute__((visibility("default"))) const char sym##_tmp61 = 0; \ 20 extern const char sym##_tmp60 __asm("$ld$hide$os6.0$_" #sym ); \ 21 __attribute__((visibility("default"))) const char sym##_tmp60 = 0; \ 22 extern const char sym##_tmp51 __asm("$ld$hide$os5.1$_" #sym ); \ 23 __attribute__((visibility("default"))) const char sym##_tmp51 = 0; \ 24 extern const char sym##_tmp50 __asm("$ld$hide$os5.0$_" #sym ); \ 25 __attribute__((visibility("default"))) const char sym##_tmp50 = 0; 26 #else 27 #define NOT_HERE_BEFORE_10_6(sym) \ 28 extern const char sym##_tmp4 __asm("$ld$hide$os10.4$_" #sym ); \ 29 __attribute__((visibility("default"))) const char sym##_tmp4 = 0; \ 30 extern const char sym##_tmp5 __asm("$ld$hide$os10.5$_" #sym ); \ 31 __attribute__((visibility("default"))) const char sym##_tmp5 = 0; 32 #define NOT_HERE_IN_10_8_AND_EARLIER(sym) \ 33 extern const char sym##_tmp8 __asm("$ld$hide$os10.8$_" #sym ); \ 34 __attribute__((visibility("default"))) const char sym##_tmp8 = 0; \ 35 extern const char sym##_tmp7 __asm("$ld$hide$os10.7$_" #sym ); \ 36 __attribute__((visibility("default"))) const char sym##_tmp7 = 0; \ 37 extern const char sym##_tmp6 __asm("$ld$hide$os10.6$_" #sym ); \ 38 __attribute__((visibility("default"))) const char sym##_tmp6 = 0; 39 #endif 40 41 42/* Symbols in libSystem.dylib in 10.6 and later, 43 * but are in libgcc_s.dylib in earlier versions 44 */ 45 46NOT_HERE_BEFORE_10_6(__absvdi2) 47NOT_HERE_BEFORE_10_6(__absvsi2) 48NOT_HERE_BEFORE_10_6(__absvti2) 49NOT_HERE_BEFORE_10_6(__addvdi3) 50NOT_HERE_BEFORE_10_6(__addvsi3) 51NOT_HERE_BEFORE_10_6(__addvti3) 52NOT_HERE_BEFORE_10_6(__ashldi3) 53NOT_HERE_BEFORE_10_6(__ashlti3) 54NOT_HERE_BEFORE_10_6(__ashrdi3) 55NOT_HERE_BEFORE_10_6(__ashrti3) 56NOT_HERE_BEFORE_10_6(__clear_cache) 57NOT_HERE_BEFORE_10_6(__clzdi2) 58NOT_HERE_BEFORE_10_6(__clzsi2) 59NOT_HERE_BEFORE_10_6(__clzti2) 60NOT_HERE_BEFORE_10_6(__cmpdi2) 61NOT_HERE_BEFORE_10_6(__cmpti2) 62NOT_HERE_BEFORE_10_6(__ctzdi2) 63NOT_HERE_BEFORE_10_6(__ctzsi2) 64NOT_HERE_BEFORE_10_6(__ctzti2) 65NOT_HERE_BEFORE_10_6(__divdc3) 66NOT_HERE_BEFORE_10_6(__divdi3) 67NOT_HERE_BEFORE_10_6(__divsc3) 68NOT_HERE_BEFORE_10_6(__divtc3) 69NOT_HERE_BEFORE_10_6(__divti3) 70NOT_HERE_BEFORE_10_6(__divxc3) 71NOT_HERE_BEFORE_10_6(__enable_execute_stack) 72NOT_HERE_BEFORE_10_6(__ffsdi2) 73NOT_HERE_BEFORE_10_6(__ffsti2) 74NOT_HERE_BEFORE_10_6(__fixdfdi) 75NOT_HERE_BEFORE_10_6(__fixdfti) 76NOT_HERE_BEFORE_10_6(__fixsfdi) 77NOT_HERE_BEFORE_10_6(__fixsfti) 78NOT_HERE_BEFORE_10_6(__fixtfdi) 79NOT_HERE_BEFORE_10_6(__fixunsdfdi) 80NOT_HERE_BEFORE_10_6(__fixunsdfsi) 81NOT_HERE_BEFORE_10_6(__fixunsdfti) 82NOT_HERE_BEFORE_10_6(__fixunssfdi) 83NOT_HERE_BEFORE_10_6(__fixunssfsi) 84NOT_HERE_BEFORE_10_6(__fixunssfti) 85NOT_HERE_BEFORE_10_6(__fixunstfdi) 86NOT_HERE_BEFORE_10_6(__fixunsxfdi) 87NOT_HERE_BEFORE_10_6(__fixunsxfsi) 88NOT_HERE_BEFORE_10_6(__fixunsxfti) 89NOT_HERE_BEFORE_10_6(__fixxfdi) 90NOT_HERE_BEFORE_10_6(__fixxfti) 91NOT_HERE_BEFORE_10_6(__floatdidf) 92NOT_HERE_BEFORE_10_6(__floatdisf) 93NOT_HERE_BEFORE_10_6(__floatditf) 94NOT_HERE_BEFORE_10_6(__floatdixf) 95NOT_HERE_BEFORE_10_6(__floattidf) 96NOT_HERE_BEFORE_10_6(__floattisf) 97NOT_HERE_BEFORE_10_6(__floattixf) 98NOT_HERE_BEFORE_10_6(__floatundidf) 99NOT_HERE_BEFORE_10_6(__floatundisf) 100NOT_HERE_BEFORE_10_6(__floatunditf) 101NOT_HERE_BEFORE_10_6(__floatundixf) 102NOT_HERE_BEFORE_10_6(__floatuntidf) 103NOT_HERE_BEFORE_10_6(__floatuntisf) 104NOT_HERE_BEFORE_10_6(__floatuntixf) 105NOT_HERE_BEFORE_10_6(__gcc_personality_v0) 106NOT_HERE_BEFORE_10_6(__lshrdi3) 107NOT_HERE_BEFORE_10_6(__lshrti3) 108NOT_HERE_BEFORE_10_6(__moddi3) 109NOT_HERE_BEFORE_10_6(__modti3) 110NOT_HERE_BEFORE_10_6(__muldc3) 111NOT_HERE_BEFORE_10_6(__muldi3) 112NOT_HERE_BEFORE_10_6(__mulsc3) 113NOT_HERE_BEFORE_10_6(__multc3) 114NOT_HERE_BEFORE_10_6(__multi3) 115NOT_HERE_BEFORE_10_6(__mulvdi3) 116NOT_HERE_BEFORE_10_6(__mulvsi3) 117NOT_HERE_BEFORE_10_6(__mulvti3) 118NOT_HERE_BEFORE_10_6(__mulxc3) 119NOT_HERE_BEFORE_10_6(__negdi2) 120NOT_HERE_BEFORE_10_6(__negti2) 121NOT_HERE_BEFORE_10_6(__negvdi2) 122NOT_HERE_BEFORE_10_6(__negvsi2) 123NOT_HERE_BEFORE_10_6(__negvti2) 124NOT_HERE_BEFORE_10_6(__paritydi2) 125NOT_HERE_BEFORE_10_6(__paritysi2) 126NOT_HERE_BEFORE_10_6(__parityti2) 127NOT_HERE_BEFORE_10_6(__popcountdi2) 128NOT_HERE_BEFORE_10_6(__popcountsi2) 129NOT_HERE_BEFORE_10_6(__popcountti2) 130NOT_HERE_BEFORE_10_6(__powidf2) 131NOT_HERE_BEFORE_10_6(__powisf2) 132NOT_HERE_BEFORE_10_6(__powitf2) 133NOT_HERE_BEFORE_10_6(__powixf2) 134NOT_HERE_BEFORE_10_6(__subvdi3) 135NOT_HERE_BEFORE_10_6(__subvsi3) 136NOT_HERE_BEFORE_10_6(__subvti3) 137NOT_HERE_BEFORE_10_6(__ucmpdi2) 138NOT_HERE_BEFORE_10_6(__ucmpti2) 139NOT_HERE_BEFORE_10_6(__udivdi3) 140NOT_HERE_BEFORE_10_6(__udivmoddi4) 141NOT_HERE_BEFORE_10_6(__udivmodti4) 142NOT_HERE_BEFORE_10_6(__udivti3) 143NOT_HERE_BEFORE_10_6(__umoddi3) 144NOT_HERE_BEFORE_10_6(__umodti3) 145 146 147#if __ppc__ 148NOT_HERE_BEFORE_10_6(__gcc_qadd) 149NOT_HERE_BEFORE_10_6(__gcc_qdiv) 150NOT_HERE_BEFORE_10_6(__gcc_qmul) 151NOT_HERE_BEFORE_10_6(__gcc_qsub) 152NOT_HERE_BEFORE_10_6(__trampoline_setup) 153#endif /* __ppc__ */ 154 155NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange) 156NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_1) 157NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_2) 158NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_4) 159NOT_HERE_IN_10_8_AND_EARLIER(__atomic_compare_exchange_8) 160 161NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange) 162NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_1) 163NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_2) 164NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_4) 165NOT_HERE_IN_10_8_AND_EARLIER(__atomic_exchange_8) 166 167NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_1) 168NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_2) 169NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_4) 170NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_add_8) 171 172NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_1) 173NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_2) 174NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_4) 175NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_and_8) 176 177NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_1) 178NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_2) 179NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_4) 180NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_or_8) 181 182NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_1) 183NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_2) 184NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_4) 185NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_sub_8) 186 187NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_1) 188NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_2) 189NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_4) 190NOT_HERE_IN_10_8_AND_EARLIER(__atomic_fetch_xor_8) 191 192NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load) 193NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_1) 194NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_2) 195NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_4) 196NOT_HERE_IN_10_8_AND_EARLIER(__atomic_load_8) 197 198NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store) 199NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_1) 200NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_2) 201NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_4) 202NOT_HERE_IN_10_8_AND_EARLIER(__atomic_store_8) 203 204 205#if __arm__ && __DYNAMIC__ 206 #define NOT_HERE_UNTIL_AFTER_4_3(sym) \ 207 extern const char sym##_tmp1 __asm("$ld$hide$os3.0$_" #sym ); \ 208 __attribute__((visibility("default"))) const char sym##_tmp1 = 0; \ 209 extern const char sym##_tmp2 __asm("$ld$hide$os3.1$_" #sym ); \ 210 __attribute__((visibility("default"))) const char sym##_tmp2 = 0; \ 211 extern const char sym##_tmp3 __asm("$ld$hide$os3.2$_" #sym ); \ 212 __attribute__((visibility("default"))) const char sym##_tmp3 = 0; \ 213 extern const char sym##_tmp4 __asm("$ld$hide$os4.0$_" #sym ); \ 214 __attribute__((visibility("default"))) const char sym##_tmp4 = 0; \ 215 extern const char sym##_tmp5 __asm("$ld$hide$os4.1$_" #sym ); \ 216 __attribute__((visibility("default"))) const char sym##_tmp5 = 0; \ 217 extern const char sym##_tmp6 __asm("$ld$hide$os4.2$_" #sym ); \ 218 __attribute__((visibility("default"))) const char sym##_tmp6 = 0; \ 219 extern const char sym##_tmp7 __asm("$ld$hide$os4.3$_" #sym ); \ 220 __attribute__((visibility("default"))) const char sym##_tmp7 = 0; 221 222NOT_HERE_UNTIL_AFTER_4_3(__absvdi2) 223NOT_HERE_UNTIL_AFTER_4_3(__absvsi2) 224NOT_HERE_UNTIL_AFTER_4_3(__adddf3) 225NOT_HERE_UNTIL_AFTER_4_3(__adddf3vfp) 226NOT_HERE_UNTIL_AFTER_4_3(__addsf3) 227NOT_HERE_UNTIL_AFTER_4_3(__addsf3vfp) 228NOT_HERE_UNTIL_AFTER_4_3(__addvdi3) 229NOT_HERE_UNTIL_AFTER_4_3(__addvsi3) 230NOT_HERE_UNTIL_AFTER_4_3(__ashldi3) 231NOT_HERE_UNTIL_AFTER_4_3(__ashrdi3) 232NOT_HERE_UNTIL_AFTER_4_3(__bswapdi2) 233NOT_HERE_UNTIL_AFTER_4_3(__bswapsi2) 234NOT_HERE_UNTIL_AFTER_4_3(__clzdi2) 235NOT_HERE_UNTIL_AFTER_4_3(__clzsi2) 236NOT_HERE_UNTIL_AFTER_4_3(__cmpdi2) 237NOT_HERE_UNTIL_AFTER_4_3(__ctzdi2) 238NOT_HERE_UNTIL_AFTER_4_3(__ctzsi2) 239NOT_HERE_UNTIL_AFTER_4_3(__divdc3) 240NOT_HERE_UNTIL_AFTER_4_3(__divdf3) 241NOT_HERE_UNTIL_AFTER_4_3(__divdf3vfp) 242NOT_HERE_UNTIL_AFTER_4_3(__divdi3) 243NOT_HERE_UNTIL_AFTER_4_3(__divsc3) 244NOT_HERE_UNTIL_AFTER_4_3(__divsf3) 245NOT_HERE_UNTIL_AFTER_4_3(__divsf3vfp) 246NOT_HERE_UNTIL_AFTER_4_3(__divsi3) 247NOT_HERE_UNTIL_AFTER_4_3(__eqdf2) 248NOT_HERE_UNTIL_AFTER_4_3(__eqdf2vfp) 249NOT_HERE_UNTIL_AFTER_4_3(__eqsf2) 250NOT_HERE_UNTIL_AFTER_4_3(__eqsf2vfp) 251NOT_HERE_UNTIL_AFTER_4_3(__extendsfdf2) 252NOT_HERE_UNTIL_AFTER_4_3(__extendsfdf2vfp) 253NOT_HERE_UNTIL_AFTER_4_3(__ffsdi2) 254NOT_HERE_UNTIL_AFTER_4_3(__fixdfdi) 255NOT_HERE_UNTIL_AFTER_4_3(__fixdfsi) 256NOT_HERE_UNTIL_AFTER_4_3(__fixdfsivfp) 257NOT_HERE_UNTIL_AFTER_4_3(__fixsfdi) 258NOT_HERE_UNTIL_AFTER_4_3(__fixsfsi) 259NOT_HERE_UNTIL_AFTER_4_3(__fixsfsivfp) 260NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfdi) 261NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfsi) 262NOT_HERE_UNTIL_AFTER_4_3(__fixunsdfsivfp) 263NOT_HERE_UNTIL_AFTER_4_3(__fixunssfdi) 264NOT_HERE_UNTIL_AFTER_4_3(__fixunssfsi) 265NOT_HERE_UNTIL_AFTER_4_3(__fixunssfsivfp) 266NOT_HERE_UNTIL_AFTER_4_3(__floatdidf) 267NOT_HERE_UNTIL_AFTER_4_3(__floatdisf) 268NOT_HERE_UNTIL_AFTER_4_3(__floatsidf) 269NOT_HERE_UNTIL_AFTER_4_3(__floatsidfvfp) 270NOT_HERE_UNTIL_AFTER_4_3(__floatsisf) 271NOT_HERE_UNTIL_AFTER_4_3(__floatsisfvfp) 272NOT_HERE_UNTIL_AFTER_4_3(__floatundidf) 273NOT_HERE_UNTIL_AFTER_4_3(__floatundisf) 274NOT_HERE_UNTIL_AFTER_4_3(__floatunsidf) 275NOT_HERE_UNTIL_AFTER_4_3(__floatunsisf) 276NOT_HERE_UNTIL_AFTER_4_3(__floatunssidfvfp) 277NOT_HERE_UNTIL_AFTER_4_3(__floatunssisfvfp) 278NOT_HERE_UNTIL_AFTER_4_3(__gedf2) 279NOT_HERE_UNTIL_AFTER_4_3(__gedf2vfp) 280NOT_HERE_UNTIL_AFTER_4_3(__gesf2) 281NOT_HERE_UNTIL_AFTER_4_3(__gesf2vfp) 282NOT_HERE_UNTIL_AFTER_4_3(__gtdf2) 283NOT_HERE_UNTIL_AFTER_4_3(__gtdf2vfp) 284NOT_HERE_UNTIL_AFTER_4_3(__gtsf2) 285NOT_HERE_UNTIL_AFTER_4_3(__gtsf2vfp) 286NOT_HERE_UNTIL_AFTER_4_3(__ledf2) 287NOT_HERE_UNTIL_AFTER_4_3(__ledf2vfp) 288NOT_HERE_UNTIL_AFTER_4_3(__lesf2) 289NOT_HERE_UNTIL_AFTER_4_3(__lesf2vfp) 290NOT_HERE_UNTIL_AFTER_4_3(__lshrdi3) 291NOT_HERE_UNTIL_AFTER_4_3(__ltdf2) 292NOT_HERE_UNTIL_AFTER_4_3(__ltdf2vfp) 293NOT_HERE_UNTIL_AFTER_4_3(__ltsf2) 294NOT_HERE_UNTIL_AFTER_4_3(__ltsf2vfp) 295NOT_HERE_UNTIL_AFTER_4_3(__moddi3) 296NOT_HERE_UNTIL_AFTER_4_3(__modsi3) 297NOT_HERE_UNTIL_AFTER_4_3(__muldc3) 298NOT_HERE_UNTIL_AFTER_4_3(__muldf3) 299NOT_HERE_UNTIL_AFTER_4_3(__muldf3vfp) 300NOT_HERE_UNTIL_AFTER_4_3(__muldi3) 301NOT_HERE_UNTIL_AFTER_4_3(__mulsc3) 302NOT_HERE_UNTIL_AFTER_4_3(__mulsf3) 303NOT_HERE_UNTIL_AFTER_4_3(__mulsf3vfp) 304NOT_HERE_UNTIL_AFTER_4_3(__mulvdi3) 305NOT_HERE_UNTIL_AFTER_4_3(__mulvsi3) 306NOT_HERE_UNTIL_AFTER_4_3(__nedf2) 307NOT_HERE_UNTIL_AFTER_4_3(__nedf2vfp) 308NOT_HERE_UNTIL_AFTER_4_3(__negdi2) 309NOT_HERE_UNTIL_AFTER_4_3(__negvdi2) 310NOT_HERE_UNTIL_AFTER_4_3(__negvsi2) 311NOT_HERE_UNTIL_AFTER_4_3(__nesf2) 312NOT_HERE_UNTIL_AFTER_4_3(__nesf2vfp) 313NOT_HERE_UNTIL_AFTER_4_3(__paritydi2) 314NOT_HERE_UNTIL_AFTER_4_3(__paritysi2) 315NOT_HERE_UNTIL_AFTER_4_3(__popcountdi2) 316NOT_HERE_UNTIL_AFTER_4_3(__popcountsi2) 317NOT_HERE_UNTIL_AFTER_4_3(__powidf2) 318NOT_HERE_UNTIL_AFTER_4_3(__powisf2) 319NOT_HERE_UNTIL_AFTER_4_3(__subdf3) 320NOT_HERE_UNTIL_AFTER_4_3(__subdf3vfp) 321NOT_HERE_UNTIL_AFTER_4_3(__subsf3) 322NOT_HERE_UNTIL_AFTER_4_3(__subsf3vfp) 323NOT_HERE_UNTIL_AFTER_4_3(__subvdi3) 324NOT_HERE_UNTIL_AFTER_4_3(__subvsi3) 325NOT_HERE_UNTIL_AFTER_4_3(__truncdfsf2) 326NOT_HERE_UNTIL_AFTER_4_3(__truncdfsf2vfp) 327NOT_HERE_UNTIL_AFTER_4_3(__ucmpdi2) 328NOT_HERE_UNTIL_AFTER_4_3(__udivdi3) 329NOT_HERE_UNTIL_AFTER_4_3(__udivmoddi4) 330NOT_HERE_UNTIL_AFTER_4_3(__udivsi3) 331NOT_HERE_UNTIL_AFTER_4_3(__umoddi3) 332NOT_HERE_UNTIL_AFTER_4_3(__umodsi3) 333NOT_HERE_UNTIL_AFTER_4_3(__unorddf2) 334NOT_HERE_UNTIL_AFTER_4_3(__unorddf2vfp) 335NOT_HERE_UNTIL_AFTER_4_3(__unordsf2) 336NOT_HERE_UNTIL_AFTER_4_3(__unordsf2vfp) 337 338NOT_HERE_UNTIL_AFTER_4_3(__divmodsi4) 339NOT_HERE_UNTIL_AFTER_4_3(__udivmodsi4) 340#endif // __arm__ && __DYNAMIC__ 341 342 343 344 345 346#else /* !__APPLE__ */ 347 348extern int avoid_empty_file; 349 350#endif /* !__APPLE__*/ 351