1 # These are the functions which clang needs when it is targeting a previous 2 # version of the OS. The issue is that the backend may use functions which were 3 # not present in the libgcc that shipped on the platform. In such cases, we link 4 # with a version of the library which contains private_extern definitions of all 5 # the extra functions which might be referenced. 6 7 Description := Static runtime libraries for clang/Darwin. 8 9 # A function that ensures we don't try to build for architectures and SDKs 10 # that we don't have working toolchains for. Arguments: 11 # (1): List of architectures 12 # (2): Library name 13 # (3): SDK path 14 # The result is a possibly empty subset of the architectures from argument 1. 15 CheckArches = \ 16 $(shell \ 17 result=""; \ 18 if [ "X$(3)" != X ]; then \ 19 for arch in $(1); do \ 20 if $(LD) -v 2>&1 | grep "configured to support" \ 21 | tr ' ' '\n' | grep "^$$arch$$" >/dev/null 2>/dev/null; then \ 22 if $(CC) -arch $$arch \ 23 -integrated-as \ 24 $(ProjSrcRoot)/make/platform/clang_darwin_test_input.c \ 25 -isysroot $(3) \ 26 -o /dev/null > /dev/null 2> /dev/null; then \ 27 result="$$result$$arch "; \ 28 else \ 29 printf 1>&2 \ 30 "warning: clang_darwin.mk: dropping arch '$$arch' from lib '$(2)'"; \ 31 printf 1>&2 " (clang or system libraries do not support it)\n"; \ 32 fi; \ 33 else \ 34 printf 1>&2 \ 35 "warning: clang_darwin.mk: dropping arch '$$arch' from lib '$(2)'";\ 36 printf 1>&2 " (ld does not support it)\n"; \ 37 fi; \ 38 done; \ 39 fi; \ 40 echo $$result) 41 42 XCRun = \ 43 $(shell \ 44 result=`xcrun -find $(1) 2> /dev/null`; \ 45 if [ "$$?" != "0" ]; then result=$(1); fi; \ 46 echo $$result) 47 # Prefer building with the internal SDKs. 48 XCRunSdkPath = \ 49 $(shell \ 50 result=`xcrun --sdk $(1).internal --show-sdk-path 2> /dev/null`; \ 51 if [ "$$?" != "0" ]; then \ 52 result=`xcrun --sdk $(1) --show-sdk-path 2> /dev/null`; \ 53 if [ "$$?" != "0" ]; then result=""; fi; \ 54 fi; \ 55 echo $$result) 56 ### 57 58 CC := $(call XCRun,clang) 59 LD := $(shell $(CC) -print-prog-name=ld) 60 AR := $(call XCRun,ar) 61 RANLIB := $(call XCRun,ranlib) 62 STRIP := $(call XCRun,strip) 63 LIPO := $(call XCRun,lipo) 64 DSYMUTIL := $(call XCRun,dsymutil) 65 66 OSX_SDK := $(call XCRunSdkPath,macosx) 67 IOS_SDK := $(call XCRunSdkPath,iphoneos) 68 IOSSIM_SDK := $(call XCRunSdkPath,iphonesimulator) 69 70 Configs := 71 UniversalArchs := 72 73 # Configuration solely for providing access to an eprintf symbol, which may 74 # still be referenced from Darwin system headers. This symbol is only ever 75 # needed on i386. 76 Configs += eprintf 77 UniversalArchs.eprintf := $(call CheckArches,i386,eprintf,$(OSX_SDK)) 78 79 # Configuration for targeting 10.4. We need a few functions missing from 80 # libgcc_s.10.4.dylib. We only build x86 slices since clang doesn't really 81 # support targeting PowerPC. 82 Configs += 10.4 83 UniversalArchs.10.4 := $(call CheckArches,i386 x86_64,10.4,$(OSX_SDK)) 84 85 # Configuration for targeting iOS for a couple of functions that didn't 86 # make it into libSystem. 87 Configs += ios 88 UniversalArchs.ios := $(call CheckArches,i386 x86_64,ios,$(IOSSIM_SDK)) 89 UniversalArchs.ios += $(call CheckArches,armv7 arm64,ios,$(IOS_SDK)) 90 91 # Configuration for targeting OSX. These functions may not be in libSystem 92 # so we should provide our own. 93 Configs += osx 94 UniversalArchs.osx := $(call CheckArches,i386 x86_64 x86_64h,osx,$(OSX_SDK)) 95 96 # Configuration for use with kernel/kexts. 97 Configs += cc_kext 98 UniversalArchs.cc_kext := $(call CheckArches,i386 x86_64 x86_64h,cc_kext,$(OSX_SDK)) 99 100 # Configuration for use with iOS kernel/kexts 101 Configs += cc_kext_ios 102 UniversalArchs.cc_kext_ios += $(call CheckArches,armv7,cc_kext_ios,$(IOS_SDK)) 103 104 # Configurations which define the profiling support functions. 105 Configs += profile_osx 106 UniversalArchs.profile_osx := $(call CheckArches,i386 x86_64 x86_64h,profile_osx,$(OSX_SDK)) 107 Configs += profile_ios 108 UniversalArchs.profile_ios := $(call CheckArches,i386 x86_64,profile_ios,$(IOSSIM_SDK)) 109 UniversalArchs.profile_ios += $(call CheckArches,armv7 arm64,profile_ios,$(IOS_SDK)) 110 111 # Configurations which define the ASAN support functions. 112 Configs += asan_osx_dynamic 113 UniversalArchs.asan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,asan_osx_dynamic,$(OSX_SDK)) 114 115 Configs += asan_iossim_dynamic 116 UniversalArchs.asan_iossim_dynamic := $(call CheckArches,i386 x86_64,asan_iossim_dynamic,$(IOSSIM_SDK)) 117 118 Configs += ubsan_osx_dynamic 119 UniversalArchs.ubsan_osx_dynamic := $(call CheckArches,i386 x86_64 x86_64h,ubsan_osx_dynamic,$(OSX_SDK)) 120 121 Configs += ubsan_iossim_dynamic 122 UniversalArchs.ubsan_iossim_dynamic := $(call CheckArches,i386 x86_64,ubsan_iossim_dynamic,$(IOSSIM_SDK)) 123 124 # Darwin 10.6 has a bug in cctools that makes it unable to use ranlib on our ARM 125 # object files. If we are on that platform, strip out all ARM archs. We still 126 # build the libraries themselves so that Clang can find them where it expects 127 # them, even though they might not have an expected slice. 128 ifneq ($(shell test -x /usr/bin/sw_vers && sw_vers -productVersion | grep 10.6),) 129 UniversalArchs.ios := $(filter-out armv7, $(UniversalArchs.ios)) 130 UniversalArchs.cc_kext_ios := $(filter-out armv7, $(UniversalArchs.cc_kext_ios)) 131 UniversalArchs.profile_ios := $(filter-out armv7, $(UniversalArchs.profile_ios)) 132 endif 133 134 # If RC_SUPPORTED_ARCHS is defined, treat it as a list of the architectures we 135 # are intended to support and limit what we try to build to that. 136 ifneq ($(RC_SUPPORTED_ARCHS),) 137 $(foreach config,$(Configs),\ 138 $(call Set,UniversalArchs.$(config),\ 139 $(filter $(RC_SUPPORTED_ARCHS),$(UniversalArchs.$(config))))) 140 endif 141 142 # Remove empty configs if we end up dropping all the requested 143 # archs for a particular config. 144 $(foreach config,$(Configs),\ 145 $(if $(strip $(UniversalArchs.$(config))),,\ 146 $(call Set,Configs,$(filter-out $(config),$(Configs))))) 147 148 ### 149 150 # Forcibly strip off any -arch, as that totally breaks our universal support. 151 override CC := $(subst -arch ,-arch_,$(CC)) 152 override CC := $(patsubst -arch_%,,$(CC)) 153 154 CFLAGS := -Wall -Werror -O3 -fomit-frame-pointer 155 156 # Always set deployment target arguments for every build, these libraries should 157 # never depend on the environmental overrides. We simply set them to minimum 158 # supported deployment target -- nothing in the compiler-rt libraries should 159 # actually depend on the deployment target. 160 OSX_DEPLOYMENT_ARGS := -mmacosx-version-min=10.4 161 IOS_DEPLOYMENT_ARGS := -mios-version-min=1.0 162 IOS6_DEPLOYMENT_ARGS := -mios-version-min=6.0 163 IOSSIM_DEPLOYMENT_ARGS := -mios-simulator-version-min=1.0 164 165 OSX_DEPLOYMENT_ARGS += -isysroot $(OSX_SDK) 166 IOS_DEPLOYMENT_ARGS += -isysroot $(IOS_SDK) 167 IOS6_DEPLOYMENT_ARGS += -isysroot $(IOS_SDK) 168 IOSSIM_DEPLOYMENT_ARGS += -isysroot $(IOSSIM_SDK) 169 170 CFLAGS.eprintf := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 171 CFLAGS.10.4 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 172 173 SANITIZER_MACOSX_DEPLOYMENT_ARGS := -mmacosx-version-min=10.7 174 SANITIZER_IOSSIM_DEPLOYMENT_ARGS := -mios-simulator-version-min=7.0 \ 175 -isysroot $(IOSSIM_SDK) 176 SANITIZER_CFLAGS := -fno-builtin -gline-tables-only -stdlib=libc++ 177 178 CFLAGS.asan_osx_dynamic := \ 179 $(CFLAGS) $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) \ 180 $(SANITIZER_CFLAGS) \ 181 -DMAC_INTERPOSE_FUNCTIONS=1 \ 182 -DASAN_DYNAMIC=1 183 184 CFLAGS.asan_iossim_dynamic := \ 185 $(CFLAGS) $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) \ 186 $(SANITIZER_CFLAGS) \ 187 -DMAC_INTERPOSE_FUNCTIONS=1 \ 188 -DASAN_DYNAMIC=1 189 190 CFLAGS.ubsan_osx_dynamic := \ 191 $(CFLAGS) $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) \ 192 $(SANITIZER_CFLAGS) 193 194 CFLAGS.ubsan_iossim_dynamic := \ 195 $(CFLAGS) $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) \ 196 $(SANITIZER_CFLAGS) 197 198 199 CFLAGS.ios.i386 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS) 200 CFLAGS.ios.x86_64 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS) 201 CFLAGS.ios.armv7 := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS) 202 CFLAGS.ios.armv7k := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS) 203 CFLAGS.ios.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS) 204 CFLAGS.ios.arm64 := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS) 205 CFLAGS.osx.i386 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 206 CFLAGS.osx.x86_64 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 207 CFLAGS.osx.x86_64h := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 208 CFLAGS.cc_kext.i386 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 209 CFLAGS.cc_kext.x86_64 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 210 CFLAGS.cc_kext.x86_64h := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 211 CFLAGS.cc_kext_ios.armv7 := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS) 212 CFLAGS.cc_kext_ios.armv7k := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS) 213 CFLAGS.cc_kext_ios.armv7s := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS) 214 CFLAGS.cc_kext_ios.arm64 := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS) 215 CFLAGS.profile_osx.i386 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 216 CFLAGS.profile_osx.x86_64 := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 217 CFLAGS.profile_osx.x86_64h := $(CFLAGS) $(OSX_DEPLOYMENT_ARGS) 218 CFLAGS.profile_ios.i386 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS) 219 CFLAGS.profile_ios.x86_64 := $(CFLAGS) $(IOSSIM_DEPLOYMENT_ARGS) 220 CFLAGS.profile_ios.armv7 := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS) 221 CFLAGS.profile_ios.armv7k := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS) 222 CFLAGS.profile_ios.armv7s := $(CFLAGS) $(IOS_DEPLOYMENT_ARGS) 223 CFLAGS.profile_ios.arm64 := $(CFLAGS) $(IOS6_DEPLOYMENT_ARGS) 224 225 SANITIZER_LDFLAGS := -stdlib=libc++ -lc++ -lc++abi 226 227 SHARED_LIBRARY.asan_osx_dynamic := 1 228 LDFLAGS.asan_osx_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.asan_osx_dynamic.dylib \ 229 $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) 230 231 SHARED_LIBRARY.asan_iossim_dynamic := 1 232 LDFLAGS.asan_iossim_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.asan_iossim_dynamic.dylib \ 233 -Wl,-ios_simulator_version_min,7.0.0 $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) 234 235 SHARED_LIBRARY.ubsan_osx_dynamic := 1 236 LDFLAGS.ubsan_osx_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.ubsan_osx_dynamic.dylib \ 237 $(SANITIZER_MACOSX_DEPLOYMENT_ARGS) 238 239 SHARED_LIBRARY.ubsan_iossim_dynamic := 1 240 LDFLAGS.ubsan_iossim_dynamic := $(SANITIZER_LDFLAGS) -install_name @rpath/libclang_rt.ubsan_iossim_dynamic.dylib \ 241 -Wl,-ios_simulator_version_min,7.0.0 $(SANITIZER_IOSSIM_DEPLOYMENT_ARGS) 242 243 ifneq ($(OSX_SDK),) 244 CFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK) 245 LDFLAGS.asan_osx_dynamic += -isysroot $(OSX_SDK) 246 CFLAGS.ubsan_osx_dynamic += -isysroot $(OSX_SDK) 247 LDFLAGS.ubsan_osx_dynamic += -isysroot $(OSX_SDK) 248 endif 249 250 ATOMIC_FUNCTIONS := \ 251 atomic_flag_clear \ 252 atomic_flag_clear_explicit \ 253 atomic_flag_test_and_set \ 254 atomic_flag_test_and_set_explicit \ 255 atomic_signal_fence \ 256 atomic_thread_fence 257 258 FP16_FUNCTIONS := \ 259 extendhfsf2 \ 260 truncdfhf2 \ 261 truncsfhf2 262 263 FUNCTIONS.eprintf := eprintf 264 FUNCTIONS.10.4 := eprintf floatundidf floatundisf floatundixf 265 266 FUNCTIONS.ios := divmodsi4 udivmodsi4 mulosi4 mulodi4 muloti4 \ 267 $(ATOMIC_FUNCTIONS) $(FP16_FUNCTIONS) 268 # On x86, the divmod functions reference divsi. 269 FUNCTIONS.ios.i386 := $(FUNCTIONS.ios) \ 270 divsi3 udivsi3 271 FUNCTIONS.ios.x86_64 := $(FUNCTIONS.ios.i386) 272 FUNCTIONS.ios.arm64 := mulsc3 muldc3 divsc3 divdc3 udivti3 umodti3 \ 273 $(ATOMIC_FUNCTIONS) 274 275 FUNCTIONS.osx := mulosi4 mulodi4 muloti4 $(ATOMIC_FUNCTIONS) $(FP16_FUNCTIONS) 276 277 FUNCTIONS.profile_osx := GCDAProfiling InstrProfiling InstrProfilingBuffer \ 278 InstrProfilingFile InstrProfilingPlatformDarwin \ 279 InstrProfilingRuntime InstrProfilingUtil \ 280 InstrProfilingWriter InstrProfilingValue 281 FUNCTIONS.profile_ios := $(FUNCTIONS.profile_osx) 282 283 FUNCTIONS.asan_osx_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \ 284 $(InterceptionFunctions) \ 285 $(SanitizerCommonFunctions) \ 286 $(AsanDynamicFunctions) \ 287 $(UbsanFunctions) $(UbsanCXXFunctions) 288 289 FUNCTIONS.asan_iossim_dynamic := $(AsanFunctions) $(AsanCXXFunctions) \ 290 $(InterceptionFunctions) \ 291 $(SanitizerCommonFunctions) \ 292 $(AsanDynamicFunctions) \ 293 $(UbsanFunctions) $(UbsanCXXFunctions) 294 295 FUNCTIONS.ubsan_osx_dynamic := $(UbsanFunctions) $(UbsanCXXFunctions) \ 296 $(SanitizerCommonFunctions) \ 297 $(UbsanStandaloneFunctions) 298 299 FUNCTIONS.ubsan_iossim_dynamic := $(UbsanFunctions) $(UbsanCXXFunctions) \ 300 $(SanitizerCommonFunctions) \ 301 $(UbsanStandaloneFunctions) 302 303 CCKEXT_PROFILE_FUNCTIONS := \ 304 InstrProfiling \ 305 InstrProfilingBuffer \ 306 InstrProfilingPlatformDarwin 307 308 CCKEXT_COMMON_FUNCTIONS := \ 309 $(CCKEXT_PROFILE_FUNCTIONS) \ 310 absvdi2 \ 311 absvsi2 \ 312 addvdi3 \ 313 addvsi3 \ 314 ashldi3 \ 315 ashrdi3 \ 316 bswapdi2 \ 317 bswapsi2 \ 318 clzdi2 \ 319 clzsi2 \ 320 cmpdi2 \ 321 ctzdi2 \ 322 ctzsi2 \ 323 divdc3 \ 324 divdi3 \ 325 divsc3 \ 326 divmodsi4 \ 327 udivmodsi4 \ 328 do_global_dtors \ 329 eprintf \ 330 extendhfsf2 \ 331 ffsdi2 \ 332 fixdfdi \ 333 fixsfdi \ 334 fixunsdfdi \ 335 fixunsdfsi \ 336 fixunssfdi \ 337 fixunssfsi \ 338 floatdidf \ 339 floatdisf \ 340 floatundidf \ 341 floatundisf \ 342 gcc_bcmp \ 343 lshrdi3 \ 344 moddi3 \ 345 muldc3 \ 346 muldi3 \ 347 mulsc3 \ 348 mulvdi3 \ 349 mulvsi3 \ 350 negdi2 \ 351 negvdi2 \ 352 negvsi2 \ 353 paritydi2 \ 354 paritysi2 \ 355 popcountdi2 \ 356 popcountsi2 \ 357 powidf2 \ 358 powisf2 \ 359 subvdi3 \ 360 subvsi3 \ 361 truncdfhf2 \ 362 truncsfhf2 \ 363 ucmpdi2 \ 364 udiv_w_sdiv \ 365 udivdi3 \ 366 udivmoddi4 \ 367 umoddi3 368 369 CCKEXT_ARM_FUNCTIONS := $(CCKEXT_COMMON_FUNCTIONS) \ 370 adddf3 \ 371 addsf3 \ 372 aeabi_cdcmpeq \ 373 aeabi_cdrcmple \ 374 aeabi_cfcmpeq \ 375 aeabi_cfrcmple \ 376 aeabi_dcmpeq \ 377 aeabi_dcmpge \ 378 aeabi_dcmpgt \ 379 aeabi_dcmple \ 380 aeabi_dcmplt \ 381 aeabi_drsub \ 382 aeabi_fcmpeq \ 383 aeabi_fcmpge \ 384 aeabi_fcmpgt \ 385 aeabi_fcmple \ 386 aeabi_fcmplt \ 387 aeabi_frsub \ 388 aeabi_idivmod \ 389 aeabi_uidivmod \ 390 cmpdf2 \ 391 cmpsf2 \ 392 div0 \ 393 divdf3 \ 394 divsf3 \ 395 divsi3 \ 396 extendsfdf2 \ 397 ffssi2 \ 398 fixdfsi \ 399 fixsfsi \ 400 floatsidf \ 401 floatsisf \ 402 floatunsidf \ 403 floatunsisf \ 404 comparedf2 \ 405 comparesf2 \ 406 modsi3 \ 407 muldf3 \ 408 mulsf3 \ 409 mulodi4 \ 410 negdf2 \ 411 negsf2 \ 412 subdf3 \ 413 subsf3 \ 414 switch16 \ 415 switch32 \ 416 switch8 \ 417 switchu8 \ 418 truncdfsf2 \ 419 udivsi3 \ 420 umodsi3 \ 421 unorddf2 \ 422 unordsf2 423 424 CCKEXT_ARMVFP_FUNCTIONS := $(CCKEXT_ARM_FUNCTIONS) \ 425 adddf3vfp \ 426 addsf3vfp \ 427 divdf3vfp \ 428 divsf3vfp \ 429 eqdf2vfp \ 430 eqsf2vfp \ 431 extendsfdf2vfp \ 432 fixdfsivfp \ 433 fixsfsivfp \ 434 fixunsdfsivfp \ 435 fixunssfsivfp \ 436 floatsidfvfp \ 437 floatsisfvfp \ 438 floatunssidfvfp \ 439 floatunssisfvfp \ 440 gedf2vfp \ 441 gesf2vfp \ 442 gtdf2vfp \ 443 gtsf2vfp \ 444 ledf2vfp \ 445 lesf2vfp \ 446 ltdf2vfp \ 447 ltsf2vfp \ 448 muldf3vfp \ 449 mulsf3vfp \ 450 nedf2vfp \ 451 nesf2vfp \ 452 subdf3vfp \ 453 subsf3vfp \ 454 truncdfsf2vfp \ 455 unorddf2vfp \ 456 unordsf2vfp 457 458 CCKEXT_ARM64_FUNCTIONS := \ 459 $(CCKEXT_PROFILE_FUNCTIONS) \ 460 divdc3 \ 461 divsc3 \ 462 muldc3 \ 463 mulsc3 \ 464 udivti3 \ 465 umodti3 466 467 FUNCTIONS.cc_kext_ios.armv7 := $(CCKEXT_ARMVFP_FUNCTIONS) 468 FUNCTIONS.cc_kext_ios.armv7k := $(CCKEXT_ARMVFP_FUNCTIONS) 469 FUNCTIONS.cc_kext_ios.armv7s := $(CCKEXT_ARMVFP_FUNCTIONS) 470 FUNCTIONS.cc_kext_ios.arm64 := $(CCKEXT_ARM64_FUNCTIONS) 471 472 CCKEXT_X86_FUNCTIONS := $(CCKEXT_COMMON_FUNCTIONS) \ 473 divxc3 \ 474 fixunsxfdi \ 475 fixunsxfsi \ 476 fixxfdi \ 477 floatdixf \ 478 floatundixf \ 479 mulxc3 \ 480 powixf2 481 482 FUNCTIONS.cc_kext.i386 := $(CCKEXT_X86_FUNCTIONS) \ 483 ffssi2 \ 484 i686.get_pc_thunk.eax \ 485 i686.get_pc_thunk.ebp \ 486 i686.get_pc_thunk.ebx \ 487 i686.get_pc_thunk.ecx \ 488 i686.get_pc_thunk.edi \ 489 i686.get_pc_thunk.edx \ 490 i686.get_pc_thunk.esi 491 492 FUNCTIONS.cc_kext.x86_64 := $(CCKEXT_X86_FUNCTIONS) \ 493 absvti2 \ 494 addvti3 \ 495 ashlti3 \ 496 ashrti3 \ 497 clzti2 \ 498 cmpti2 \ 499 ctzti2 \ 500 divti3 \ 501 ffsti2 \ 502 fixdfti \ 503 fixsfti \ 504 fixunsdfti \ 505 fixunssfti \ 506 fixunsxfti \ 507 fixxfti \ 508 floattidf \ 509 floattisf \ 510 floattixf \ 511 floatuntidf \ 512 floatuntisf \ 513 floatuntixf \ 514 lshrti3 \ 515 modti3 \ 516 multi3 \ 517 mulvti3 \ 518 negti2 \ 519 negvti2 \ 520 parityti2 \ 521 popcountti2 \ 522 subvti3 \ 523 ucmpti2 \ 524 udivmodti4 \ 525 udivti3 \ 526 umodti3 527 528 FUNCTIONS.cc_kext.x86_64h := $(FUNCTIONS.cc_kext.x86_64) 529 530 # FIXME: Currently, compiler-rt is missing implementations for a number of the 531 # functions that need to go into libcc_kext.a. Filter them out for now. 532 CCKEXT_MISSING_FUNCTIONS := \ 533 cmpdf2 cmpsf2 div0 \ 534 ffssi2 \ 535 udiv_w_sdiv unorddf2 unordsf2 bswapdi2 \ 536 bswapsi2 \ 537 gcc_bcmp \ 538 do_global_dtors \ 539 i686.get_pc_thunk.eax i686.get_pc_thunk.ebp i686.get_pc_thunk.ebx \ 540 i686.get_pc_thunk.ecx i686.get_pc_thunk.edi i686.get_pc_thunk.edx \ 541 i686.get_pc_thunk.esi \ 542 aeabi_cdcmpeq aeabi_cdrcmple aeabi_cfcmpeq aeabi_cfrcmple aeabi_dcmpeq \ 543 aeabi_dcmpge aeabi_dcmpgt aeabi_dcmple aeabi_dcmplt aeabi_drsub aeabi_fcmpeq \ 544 aeabi_fcmpge aeabi_fcmpgt aeabi_fcmple aeabi_fcmplt aeabi_frsub aeabi_idivmod \ 545 aeabi_uidivmod 546 547 FUNCTIONS.cc_kext_ios.armv7 := \ 548 $(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext_ios.armv7)) 549 FUNCTIONS.cc_kext_ios.armv7k := \ 550 $(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext_ios.armv7k)) 551 FUNCTIONS.cc_kext_ios.armv7s := \ 552 $(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext_ios.armv7s)) 553 FUNCTIONS.cc_kext_ios.arm64 := \ 554 $(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext_ios.arm64)) 555 FUNCTIONS.cc_kext.i386 := \ 556 $(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.i386)) 557 FUNCTIONS.cc_kext.x86_64 := \ 558 $(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.x86_64)) 559 FUNCTIONS.cc_kext.x86_64h := \ 560 $(filter-out $(CCKEXT_MISSING_FUNCTIONS),$(FUNCTIONS.cc_kext.x86_64h)) 561 562 KERNEL_USE.cc_kext := 1 563 KERNEL_USE.cc_kext_ios := 1 564 565 VISIBILITY_HIDDEN := 1 566 567 SHARED_LIBRARY_SUFFIX := dylib 568