Merge llvm, clang, compiler-rt, libc++, libunwind, lld, lldb and openmp
llvmorg-10.0.1-rc1-0-gf79cd71e145 (aka 10.0.1 rc1). MFC after: 3 weeks
This commit is contained in:
commit
d65cd7a57b
@ -36,6 +36,257 @@
|
|||||||
# xargs -n1 | sort | uniq -d;
|
# xargs -n1 | sort | uniq -d;
|
||||||
# done
|
# done
|
||||||
|
|
||||||
|
# 20200523: new clang import which bumps version from 10.0.0 to 10.0.1.s
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/cuda_wrappers/algorithm
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/cuda_wrappers/complex
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/cuda_wrappers/new
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include/cuda_wrappers
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/fuzzer/FuzzedDataProvider.h
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include/fuzzer
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/__clang_openmp_math.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/__clang_openmp_math_declares.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/cmath
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/math.h
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include/openmp_wrappers
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/emmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/mm_malloc.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/mmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/pmmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/smmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/tmmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/xmmintrin.h
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include/ppc_wrappers
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/profile/InstrProfData.inc
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include/profile
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/allocator_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/asan_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/common_interface_defs.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/coverage_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/dfsan_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/hwasan_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/linux_syscall_hooks.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/lsan_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/msan_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/netbsd_syscall_hooks.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/scudo_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/tsan_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/tsan_interface_atomic.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/ubsan_interface.h
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include/sanitizer
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xray/xray_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xray/xray_log_interface.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xray/xray_records.h
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include/xray
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_builtin_vars.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_cmath.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_complex_builtins.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_device_functions.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_intrinsics.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_libdevice_declares.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_math_forward_declares.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_runtime_wrapper.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__stddef_max_align_t.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__wmmintrin_aes.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/__wmmintrin_pclmul.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/adxintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/altivec.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ammintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/arm64intr.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_acle.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_cmse.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_fp16.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_mve.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_neon.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/armintr.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx2intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512bf16intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512bitalgintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512bwintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512cdintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512dqintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512erintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512fintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512ifmaintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512ifmavlintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512pfintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vbmi2intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vbmiintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vbmivlintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlbf16intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlbitalgintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlbwintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlcdintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vldqintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlvbmi2intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlvnniintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlvp2intersectintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vnniintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vp2intersectintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vpopcntdqintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vpopcntdqvlintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/avxintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/bmi2intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/bmiintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/cetintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/cldemoteintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/clflushoptintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/clwbintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/clzerointrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/cpuid.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/emmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/enqcmdintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/f16cintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/fma4intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/fmaintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/fxsrintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/gfniintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/htmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/htmxlintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ia32intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/immintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/invpcidintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/lwpintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/lzcntintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/mm3dnow.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/mm_malloc.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/mmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/module.modulemap
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/movdirintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/msa.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/mwaitxintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/nmmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/opencl-c-base.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/opencl-c.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/pconfigintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/pkuintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/pmmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/popcntintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/prfchwintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/ptwriteintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/rdseedintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/rtmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/s390intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/sgxintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/shaintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/smmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/tbmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/tmmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/vadefs.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/vaesintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/vecintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/vpclmulqdqintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/waitpkgintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/wbnoinvdintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/wmmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/x86intrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xmmintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xopintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xsavecintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xsaveintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xsaveoptintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xsavesintrin.h
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/include/xtestintrin.h
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/include
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-aarch64.so
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-arm.so
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-armhf.so
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-i386.so
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-x86_64.so
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.dd-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.dd-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-powerpc.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-powerpc64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.safestack-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.safestack-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.safestack-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-arm.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-armhf.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
|
||||||
|
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-x86_64.a
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/lib/freebsd
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0/lib
|
||||||
|
OLD_DIRS+=usr/lib/clang/10.0.0
|
||||||
|
|
||||||
# 20200515: libalias cuseeme protocol support retired
|
# 20200515: libalias cuseeme protocol support retired
|
||||||
OLD_LIBS+=lib/libalias_cuseeme.so
|
OLD_LIBS+=lib/libalias_cuseeme.so
|
||||||
OLD_FILES+=usr/lib/libalias_cuseeme.a
|
OLD_FILES+=usr/lib/libalias_cuseeme.a
|
||||||
|
6
UPDATING
6
UPDATING
@ -26,6 +26,12 @@ NOTE TO PEOPLE WHO THINK THAT FreeBSD 13.x IS SLOW:
|
|||||||
disable the most expensive debugging functionality run
|
disable the most expensive debugging functionality run
|
||||||
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
"ln -s 'abort:false,junk:false' /etc/malloc.conf".)
|
||||||
|
|
||||||
|
20200523:
|
||||||
|
Clang, llvm, lld, lldb, compiler-rt, libc++, libunwind and openmp have
|
||||||
|
been upgraded to 10.0.1. Please see the 20141231 entry below for
|
||||||
|
information about prerequisites and upgrading, if you are not already
|
||||||
|
using clang 3.5.0 or higher.
|
||||||
|
|
||||||
20200424:
|
20200424:
|
||||||
closefrom(2) has been moved under COMPAT12, and replaced in libc with a
|
closefrom(2) has been moved under COMPAT12, and replaced in libc with a
|
||||||
stub that calls close_range(2). If using a custom kernel configuration,
|
stub that calls close_range(2). If using a custom kernel configuration,
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
.clang-format
|
.clang-format
|
||||||
.clang-tidy
|
.clang-tidy
|
||||||
.git-blame-ignore-revs
|
.git-blame-ignore-revs
|
||||||
|
.github/
|
||||||
.gitignore
|
.gitignore
|
||||||
CONTRIBUTING.md
|
CONTRIBUTING.md
|
||||||
README.md
|
README.md
|
||||||
@ -264,6 +265,7 @@ lldb/.clang-format
|
|||||||
lldb/.gitignore
|
lldb/.gitignore
|
||||||
lldb/CMakeLists.txt
|
lldb/CMakeLists.txt
|
||||||
lldb/CODE_OWNERS.txt
|
lldb/CODE_OWNERS.txt
|
||||||
|
lldb/bindings/CMakeLists.txt
|
||||||
lldb/cmake/
|
lldb/cmake/
|
||||||
lldb/docs/.htaccess
|
lldb/docs/.htaccess
|
||||||
lldb/docs/CMakeLists.txt
|
lldb/docs/CMakeLists.txt
|
||||||
|
@ -856,14 +856,15 @@ class alignas(8) Decl {
|
|||||||
return getParentFunctionOrMethod() == nullptr;
|
return getParentFunctionOrMethod() == nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Returns true if this declaration lexically is inside a function.
|
/// Returns true if this declaration is lexically inside a function or inside
|
||||||
/// It recognizes non-defining declarations as well as members of local
|
/// a variable initializer. It recognizes non-defining declarations as well
|
||||||
/// classes:
|
/// as members of local classes:
|
||||||
/// \code
|
/// \code
|
||||||
/// void foo() { void bar(); }
|
/// void foo() { void bar(); }
|
||||||
/// void foo2() { class ABC { void bar(); }; }
|
/// void foo2() { class ABC { void bar(); }; }
|
||||||
|
/// inline int x = [](){ return 0; };
|
||||||
/// \endcode
|
/// \endcode
|
||||||
bool isLexicallyWithinFunctionOrMethod() const;
|
bool isInLocalScope() const;
|
||||||
|
|
||||||
/// If this decl is defined inside a function/method/block it returns
|
/// If this decl is defined inside a function/method/block it returns
|
||||||
/// the corresponding DeclContext, otherwise it returns null.
|
/// the corresponding DeclContext, otherwise it returns null.
|
||||||
|
@ -685,7 +685,7 @@ def XRayLogArgs : InheritableAttr {
|
|||||||
|
|
||||||
def PatchableFunctionEntry
|
def PatchableFunctionEntry
|
||||||
: InheritableAttr,
|
: InheritableAttr,
|
||||||
TargetSpecificAttr<TargetArch<["aarch64", "x86", "x86_64"]>> {
|
TargetSpecificAttr<TargetArch<["aarch64", "aarch64_be", "x86", "x86_64"]>> {
|
||||||
let Spellings = [GCC<"patchable_function_entry">];
|
let Spellings = [GCC<"patchable_function_entry">];
|
||||||
let Subjects = SubjectList<[Function, ObjCMethod]>;
|
let Subjects = SubjectList<[Function, ObjCMethod]>;
|
||||||
let Args = [UnsignedArgument<"Count">, DefaultIntArgument<"Offset", 0>];
|
let Args = [UnsignedArgument<"Count">, DefaultIntArgument<"Offset", 0>];
|
||||||
|
@ -332,13 +332,16 @@ void Decl::setDeclContextsImpl(DeclContext *SemaDC, DeclContext *LexicalDC,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool Decl::isLexicallyWithinFunctionOrMethod() const {
|
bool Decl::isInLocalScope() const {
|
||||||
const DeclContext *LDC = getLexicalDeclContext();
|
const DeclContext *LDC = getLexicalDeclContext();
|
||||||
while (true) {
|
while (true) {
|
||||||
if (LDC->isFunctionOrMethod())
|
if (LDC->isFunctionOrMethod())
|
||||||
return true;
|
return true;
|
||||||
if (!isa<TagDecl>(LDC))
|
if (!isa<TagDecl>(LDC))
|
||||||
return false;
|
return false;
|
||||||
|
if (const auto *CRD = dyn_cast<CXXRecordDecl>(LDC))
|
||||||
|
if (CRD->isLambda())
|
||||||
|
return true;
|
||||||
LDC = LDC->getLexicalParent();
|
LDC = LDC->getLexicalParent();
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
@ -8593,6 +8593,10 @@ bool PointerExprEvaluator::VisitBuiltinCallExpr(const CallExpr *E,
|
|||||||
static bool EvaluateArrayNewInitList(EvalInfo &Info, LValue &This,
|
static bool EvaluateArrayNewInitList(EvalInfo &Info, LValue &This,
|
||||||
APValue &Result, const InitListExpr *ILE,
|
APValue &Result, const InitListExpr *ILE,
|
||||||
QualType AllocType);
|
QualType AllocType);
|
||||||
|
static bool EvaluateArrayNewConstructExpr(EvalInfo &Info, LValue &This,
|
||||||
|
APValue &Result,
|
||||||
|
const CXXConstructExpr *CCE,
|
||||||
|
QualType AllocType);
|
||||||
|
|
||||||
bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {
|
bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {
|
||||||
if (!Info.getLangOpts().CPlusPlus2a)
|
if (!Info.getLangOpts().CPlusPlus2a)
|
||||||
@ -8642,6 +8646,7 @@ bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {
|
|||||||
|
|
||||||
const Expr *Init = E->getInitializer();
|
const Expr *Init = E->getInitializer();
|
||||||
const InitListExpr *ResizedArrayILE = nullptr;
|
const InitListExpr *ResizedArrayILE = nullptr;
|
||||||
|
const CXXConstructExpr *ResizedArrayCCE = nullptr;
|
||||||
|
|
||||||
QualType AllocType = E->getAllocatedType();
|
QualType AllocType = E->getAllocatedType();
|
||||||
if (Optional<const Expr*> ArraySize = E->getArraySize()) {
|
if (Optional<const Expr*> ArraySize = E->getArraySize()) {
|
||||||
@ -8685,7 +8690,7 @@ bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {
|
|||||||
// -- the new-initializer is a braced-init-list and the number of
|
// -- the new-initializer is a braced-init-list and the number of
|
||||||
// array elements for which initializers are provided [...]
|
// array elements for which initializers are provided [...]
|
||||||
// exceeds the number of elements to initialize
|
// exceeds the number of elements to initialize
|
||||||
if (Init) {
|
if (Init && !isa<CXXConstructExpr>(Init)) {
|
||||||
auto *CAT = Info.Ctx.getAsConstantArrayType(Init->getType());
|
auto *CAT = Info.Ctx.getAsConstantArrayType(Init->getType());
|
||||||
assert(CAT && "unexpected type for array initializer");
|
assert(CAT && "unexpected type for array initializer");
|
||||||
|
|
||||||
@ -8708,6 +8713,8 @@ bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {
|
|||||||
// special handling for this case when we initialize.
|
// special handling for this case when we initialize.
|
||||||
if (InitBound != AllocBound)
|
if (InitBound != AllocBound)
|
||||||
ResizedArrayILE = cast<InitListExpr>(Init);
|
ResizedArrayILE = cast<InitListExpr>(Init);
|
||||||
|
} else if (Init) {
|
||||||
|
ResizedArrayCCE = cast<CXXConstructExpr>(Init);
|
||||||
}
|
}
|
||||||
|
|
||||||
AllocType = Info.Ctx.getConstantArrayType(AllocType, ArrayBound, nullptr,
|
AllocType = Info.Ctx.getConstantArrayType(AllocType, ArrayBound, nullptr,
|
||||||
@ -8772,6 +8779,10 @@ bool PointerExprEvaluator::VisitCXXNewExpr(const CXXNewExpr *E) {
|
|||||||
if (!EvaluateArrayNewInitList(Info, Result, *Val, ResizedArrayILE,
|
if (!EvaluateArrayNewInitList(Info, Result, *Val, ResizedArrayILE,
|
||||||
AllocType))
|
AllocType))
|
||||||
return false;
|
return false;
|
||||||
|
} else if (ResizedArrayCCE) {
|
||||||
|
if (!EvaluateArrayNewConstructExpr(Info, Result, *Val, ResizedArrayCCE,
|
||||||
|
AllocType))
|
||||||
|
return false;
|
||||||
} else if (Init) {
|
} else if (Init) {
|
||||||
if (!EvaluateInPlace(*Val, Info, Result, Init))
|
if (!EvaluateInPlace(*Val, Info, Result, Init))
|
||||||
return false;
|
return false;
|
||||||
@ -9597,6 +9608,16 @@ static bool EvaluateArrayNewInitList(EvalInfo &Info, LValue &This,
|
|||||||
.VisitInitListExpr(ILE, AllocType);
|
.VisitInitListExpr(ILE, AllocType);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool EvaluateArrayNewConstructExpr(EvalInfo &Info, LValue &This,
|
||||||
|
APValue &Result,
|
||||||
|
const CXXConstructExpr *CCE,
|
||||||
|
QualType AllocType) {
|
||||||
|
assert(CCE->isRValue() && CCE->getType()->isArrayType() &&
|
||||||
|
"not an array rvalue");
|
||||||
|
return ArrayExprEvaluator(Info, This, Result)
|
||||||
|
.VisitCXXConstructExpr(CCE, This, &Result, AllocType);
|
||||||
|
}
|
||||||
|
|
||||||
// Return true iff the given array filler may depend on the element index.
|
// Return true iff the given array filler may depend on the element index.
|
||||||
static bool MaybeElementDependentArrayFiller(const Expr *FillerExpr) {
|
static bool MaybeElementDependentArrayFiller(const Expr *FillerExpr) {
|
||||||
// For now, just whitelist non-class value-initialization and initialization
|
// For now, just whitelist non-class value-initialization and initialization
|
||||||
|
@ -430,7 +430,7 @@ std::string RawComment::getFormattedText(const SourceManager &SourceMgr,
|
|||||||
};
|
};
|
||||||
|
|
||||||
auto DropTrailingNewLines = [](std::string &Str) {
|
auto DropTrailingNewLines = [](std::string &Str) {
|
||||||
while (Str.back() == '\n')
|
while (!Str.empty() && Str.back() == '\n')
|
||||||
Str.pop_back();
|
Str.pop_back();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1847,9 +1847,16 @@ void CodeGenModule::SetFunctionAttributes(GlobalDecl GD, llvm::Function *F,
|
|||||||
else if (const auto *SA = FD->getAttr<SectionAttr>())
|
else if (const auto *SA = FD->getAttr<SectionAttr>())
|
||||||
F->setSection(SA->getName());
|
F->setSection(SA->getName());
|
||||||
|
|
||||||
|
// If we plan on emitting this inline builtin, we can't treat it as a builtin.
|
||||||
if (FD->isInlineBuiltinDeclaration()) {
|
if (FD->isInlineBuiltinDeclaration()) {
|
||||||
F->addAttribute(llvm::AttributeList::FunctionIndex,
|
const FunctionDecl *FDBody;
|
||||||
llvm::Attribute::NoBuiltin);
|
bool HasBody = FD->hasBody(FDBody);
|
||||||
|
(void)HasBody;
|
||||||
|
assert(HasBody && "Inline builtin declarations should always have an "
|
||||||
|
"available body!");
|
||||||
|
if (shouldEmitFunction(FDBody))
|
||||||
|
F->addAttribute(llvm::AttributeList::FunctionIndex,
|
||||||
|
llvm::Attribute::NoBuiltin);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (FD->isReplaceableGlobalAllocationFunction()) {
|
if (FD->isReplaceableGlobalAllocationFunction()) {
|
||||||
|
@ -1146,6 +1146,7 @@ void Darwin::addProfileRTLibs(const ArgList &Args,
|
|||||||
addExportedSymbol(CmdArgs, "___gcov_flush");
|
addExportedSymbol(CmdArgs, "___gcov_flush");
|
||||||
addExportedSymbol(CmdArgs, "_flush_fn_list");
|
addExportedSymbol(CmdArgs, "_flush_fn_list");
|
||||||
addExportedSymbol(CmdArgs, "_writeout_fn_list");
|
addExportedSymbol(CmdArgs, "_writeout_fn_list");
|
||||||
|
addExportedSymbol(CmdArgs, "_reset_fn_list");
|
||||||
} else {
|
} else {
|
||||||
addExportedSymbol(CmdArgs, "___llvm_profile_filename");
|
addExportedSymbol(CmdArgs, "___llvm_profile_filename");
|
||||||
addExportedSymbol(CmdArgs, "___llvm_profile_raw_version");
|
addExportedSymbol(CmdArgs, "___llvm_profile_raw_version");
|
||||||
|
@ -309,7 +309,7 @@ static const char *getLDMOption(const llvm::Triple &T, const ArgList &Args) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool getPIE(const ArgList &Args, const toolchains::Linux &ToolChain) {
|
static bool getPIE(const ArgList &Args, const ToolChain &TC) {
|
||||||
if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_static) ||
|
if (Args.hasArg(options::OPT_shared) || Args.hasArg(options::OPT_static) ||
|
||||||
Args.hasArg(options::OPT_r) || Args.hasArg(options::OPT_static_pie))
|
Args.hasArg(options::OPT_r) || Args.hasArg(options::OPT_static_pie))
|
||||||
return false;
|
return false;
|
||||||
@ -317,17 +317,16 @@ static bool getPIE(const ArgList &Args, const toolchains::Linux &ToolChain) {
|
|||||||
Arg *A = Args.getLastArg(options::OPT_pie, options::OPT_no_pie,
|
Arg *A = Args.getLastArg(options::OPT_pie, options::OPT_no_pie,
|
||||||
options::OPT_nopie);
|
options::OPT_nopie);
|
||||||
if (!A)
|
if (!A)
|
||||||
return ToolChain.isPIEDefault();
|
return TC.isPIEDefault();
|
||||||
return A->getOption().matches(options::OPT_pie);
|
return A->getOption().matches(options::OPT_pie);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool getStaticPIE(const ArgList &Args,
|
static bool getStaticPIE(const ArgList &Args, const ToolChain &TC) {
|
||||||
const toolchains::Linux &ToolChain) {
|
|
||||||
bool HasStaticPIE = Args.hasArg(options::OPT_static_pie);
|
bool HasStaticPIE = Args.hasArg(options::OPT_static_pie);
|
||||||
// -no-pie is an alias for -nopie. So, handling -nopie takes care of
|
// -no-pie is an alias for -nopie. So, handling -nopie takes care of
|
||||||
// -no-pie as well.
|
// -no-pie as well.
|
||||||
if (HasStaticPIE && Args.hasArg(options::OPT_nopie)) {
|
if (HasStaticPIE && Args.hasArg(options::OPT_nopie)) {
|
||||||
const Driver &D = ToolChain.getDriver();
|
const Driver &D = TC.getDriver();
|
||||||
const llvm::opt::OptTable &Opts = D.getOpts();
|
const llvm::opt::OptTable &Opts = D.getOpts();
|
||||||
const char *StaticPIEName = Opts.getOptionName(options::OPT_static_pie);
|
const char *StaticPIEName = Opts.getOptionName(options::OPT_static_pie);
|
||||||
const char *NoPIEName = Opts.getOptionName(options::OPT_nopie);
|
const char *NoPIEName = Opts.getOptionName(options::OPT_nopie);
|
||||||
@ -346,8 +345,12 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||||||
const InputInfoList &Inputs,
|
const InputInfoList &Inputs,
|
||||||
const ArgList &Args,
|
const ArgList &Args,
|
||||||
const char *LinkingOutput) const {
|
const char *LinkingOutput) const {
|
||||||
const toolchains::Linux &ToolChain =
|
// FIXME: The Linker class constructor takes a ToolChain and not a
|
||||||
static_cast<const toolchains::Linux &>(getToolChain());
|
// Generic_ELF, so the static_cast might return a reference to a invalid
|
||||||
|
// instance (see PR45061). Ideally, the Linker constructor needs to take a
|
||||||
|
// Generic_ELF instead.
|
||||||
|
const toolchains::Generic_ELF &ToolChain =
|
||||||
|
static_cast<const toolchains::Generic_ELF &>(getToolChain());
|
||||||
const Driver &D = ToolChain.getDriver();
|
const Driver &D = ToolChain.getDriver();
|
||||||
|
|
||||||
const llvm::Triple &Triple = getToolChain().getEffectiveTriple();
|
const llvm::Triple &Triple = getToolChain().getEffectiveTriple();
|
||||||
@ -418,8 +421,7 @@ void tools::gnutools::Linker::ConstructJob(Compilation &C, const JobAction &JA,
|
|||||||
if (isAndroid)
|
if (isAndroid)
|
||||||
CmdArgs.push_back("--warn-shared-textrel");
|
CmdArgs.push_back("--warn-shared-textrel");
|
||||||
|
|
||||||
for (const auto &Opt : ToolChain.ExtraOpts)
|
ToolChain.addExtraOpts(CmdArgs);
|
||||||
CmdArgs.push_back(Opt.c_str());
|
|
||||||
|
|
||||||
CmdArgs.push_back("--eh-frame-hdr");
|
CmdArgs.push_back("--eh-frame-hdr");
|
||||||
|
|
||||||
|
@ -356,6 +356,12 @@ class LLVM_LIBRARY_VISIBILITY Generic_ELF : public Generic_GCC {
|
|||||||
void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
void addClangTargetOptions(const llvm::opt::ArgList &DriverArgs,
|
||||||
llvm::opt::ArgStringList &CC1Args,
|
llvm::opt::ArgStringList &CC1Args,
|
||||||
Action::OffloadKind DeviceOffloadKind) const override;
|
Action::OffloadKind DeviceOffloadKind) const override;
|
||||||
|
|
||||||
|
virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const {
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const {}
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace toolchains
|
} // end namespace toolchains
|
||||||
|
@ -61,8 +61,7 @@ static StringRef getOSLibDir(const llvm::Triple &Triple, const ArgList &Args) {
|
|||||||
return Triple.isArch32Bit() ? "lib" : "lib64";
|
return Triple.isArch32Bit() ? "lib" : "lib64";
|
||||||
}
|
}
|
||||||
|
|
||||||
Hurd::Hurd(const Driver &D, const llvm::Triple &Triple,
|
Hurd::Hurd(const Driver &D, const llvm::Triple &Triple, const ArgList &Args)
|
||||||
const ArgList &Args)
|
|
||||||
: Generic_ELF(D, Triple, Args) {
|
: Generic_ELF(D, Triple, Args) {
|
||||||
std::string SysRoot = computeSysRoot();
|
std::string SysRoot = computeSysRoot();
|
||||||
path_list &Paths = getFilePaths();
|
path_list &Paths = getFilePaths();
|
||||||
@ -170,3 +169,8 @@ void Hurd::AddClangSystemIncludeArgs(const ArgList &DriverArgs,
|
|||||||
|
|
||||||
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
|
addExternCSystemInclude(DriverArgs, CC1Args, SysRoot + "/usr/include");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Hurd::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const {
|
||||||
|
for (const auto &Opt : ExtraOpts)
|
||||||
|
CmdArgs.push_back(Opt.c_str());
|
||||||
|
}
|
||||||
|
@ -27,9 +27,11 @@ class LLVM_LIBRARY_VISIBILITY Hurd : public Generic_ELF {
|
|||||||
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
AddClangSystemIncludeArgs(const llvm::opt::ArgList &DriverArgs,
|
||||||
llvm::opt::ArgStringList &CC1Args) const override;
|
llvm::opt::ArgStringList &CC1Args) const override;
|
||||||
|
|
||||||
virtual std::string computeSysRoot() const;
|
std::string computeSysRoot() const;
|
||||||
|
|
||||||
virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const;
|
std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override;
|
||||||
|
|
||||||
|
void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const override;
|
||||||
|
|
||||||
std::vector<std::string> ExtraOpts;
|
std::vector<std::string> ExtraOpts;
|
||||||
|
|
||||||
|
@ -986,3 +986,8 @@ void Linux::addProfileRTLibs(const llvm::opt::ArgList &Args,
|
|||||||
Twine("-u", llvm::getInstrProfRuntimeHookVarName())));
|
Twine("-u", llvm::getInstrProfRuntimeHookVarName())));
|
||||||
ToolChain::addProfileRTLibs(Args, CmdArgs);
|
ToolChain::addProfileRTLibs(Args, CmdArgs);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Linux::addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const {
|
||||||
|
for (const auto &Opt : ExtraOpts)
|
||||||
|
CmdArgs.push_back(Opt.c_str());
|
||||||
|
}
|
||||||
|
@ -42,7 +42,9 @@ class LLVM_LIBRARY_VISIBILITY Linux : public Generic_ELF {
|
|||||||
llvm::opt::ArgStringList &CmdArgs) const override;
|
llvm::opt::ArgStringList &CmdArgs) const override;
|
||||||
virtual std::string computeSysRoot() const;
|
virtual std::string computeSysRoot() const;
|
||||||
|
|
||||||
virtual std::string getDynamicLinker(const llvm::opt::ArgList &Args) const;
|
std::string getDynamicLinker(const llvm::opt::ArgList &Args) const override;
|
||||||
|
|
||||||
|
void addExtraOpts(llvm::opt::ArgStringList &CmdArgs) const override;
|
||||||
|
|
||||||
std::vector<std::string> ExtraOpts;
|
std::vector<std::string> ExtraOpts;
|
||||||
|
|
||||||
|
@ -2176,6 +2176,10 @@ static bool isFunctionDeclarationName(const FormatToken &Current,
|
|||||||
Next = Next->Next;
|
Next = Next->Next;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
if (Next->is(TT_TemplateOpener) && Next->MatchingParen) {
|
||||||
|
Next = Next->MatchingParen;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -2705,20 +2709,40 @@ bool TokenAnnotator::spaceRequiredBetween(const AnnotatedLine &Line,
|
|||||||
tok::l_square));
|
tok::l_square));
|
||||||
if (Right.is(tok::star) && Left.is(tok::l_paren))
|
if (Right.is(tok::star) && Left.is(tok::l_paren))
|
||||||
return false;
|
return false;
|
||||||
if (Right.isOneOf(tok::star, tok::amp, tok::ampamp) &&
|
if (Right.is(tok::star) && Left.is(tok::star))
|
||||||
(Left.is(tok::identifier) || Left.isSimpleTypeSpecifier()) &&
|
return false;
|
||||||
// Space between the type and the * in:
|
if (Right.isOneOf(tok::star, tok::amp, tok::ampamp)) {
|
||||||
// operator void*()
|
const FormatToken *Previous = &Left;
|
||||||
// operator char*()
|
while (Previous && !Previous->is(tok::kw_operator)) {
|
||||||
// operator /*comment*/ const char*()
|
if (Previous->is(tok::identifier) || Previous->isSimpleTypeSpecifier()) {
|
||||||
// operator volatile /*comment*/ char*()
|
Previous = Previous->getPreviousNonComment();
|
||||||
// operator Foo*()
|
continue;
|
||||||
// dependent on PointerAlignment style.
|
}
|
||||||
Left.Previous &&
|
if (Previous->is(TT_TemplateCloser) && Previous->MatchingParen) {
|
||||||
(Left.Previous->endsSequence(tok::kw_operator) ||
|
Previous = Previous->MatchingParen->getPreviousNonComment();
|
||||||
Left.Previous->endsSequence(tok::kw_const, tok::kw_operator) ||
|
continue;
|
||||||
Left.Previous->endsSequence(tok::kw_volatile, tok::kw_operator)))
|
}
|
||||||
return (Style.PointerAlignment != FormatStyle::PAS_Left);
|
if (Previous->is(tok::coloncolon)) {
|
||||||
|
Previous = Previous->getPreviousNonComment();
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// Space between the type and the * in:
|
||||||
|
// operator void*()
|
||||||
|
// operator char*()
|
||||||
|
// operator /*comment*/ const char*()
|
||||||
|
// operator volatile /*comment*/ char*()
|
||||||
|
// operator Foo*()
|
||||||
|
// operator C<T>*()
|
||||||
|
// operator std::Foo*()
|
||||||
|
// operator C<T>::D<U>*()
|
||||||
|
// dependent on PointerAlignment style.
|
||||||
|
if (Previous && (Previous->endsSequence(tok::kw_operator) ||
|
||||||
|
Previous->endsSequence(tok::kw_const, tok::kw_operator) ||
|
||||||
|
Previous->endsSequence(tok::kw_volatile, tok::kw_operator)))
|
||||||
|
return (Style.PointerAlignment != FormatStyle::PAS_Left);
|
||||||
|
}
|
||||||
const auto SpaceRequiredForArrayInitializerLSquare =
|
const auto SpaceRequiredForArrayInitializerLSquare =
|
||||||
[](const FormatToken &LSquareTok, const FormatStyle &Style) {
|
[](const FormatToken &LSquareTok, const FormatStyle &Style) {
|
||||||
return Style.SpacesInContainerLiterals ||
|
return Style.SpacesInContainerLiterals ||
|
||||||
|
@ -2343,7 +2343,7 @@ ParmVarDecl *Sema::SubstParmVarDecl(ParmVarDecl *OldParm,
|
|||||||
UnparsedDefaultArgInstantiations[OldParm].push_back(NewParm);
|
UnparsedDefaultArgInstantiations[OldParm].push_back(NewParm);
|
||||||
} else if (Expr *Arg = OldParm->getDefaultArg()) {
|
} else if (Expr *Arg = OldParm->getDefaultArg()) {
|
||||||
FunctionDecl *OwningFunc = cast<FunctionDecl>(OldParm->getDeclContext());
|
FunctionDecl *OwningFunc = cast<FunctionDecl>(OldParm->getDeclContext());
|
||||||
if (OwningFunc->isLexicallyWithinFunctionOrMethod()) {
|
if (OwningFunc->isInLocalScope()) {
|
||||||
// Instantiate default arguments for methods of local classes (DR1484)
|
// Instantiate default arguments for methods of local classes (DR1484)
|
||||||
// and non-defining declarations.
|
// and non-defining declarations.
|
||||||
Sema::ContextRAII SavedContext(*this, OwningFunc);
|
Sema::ContextRAII SavedContext(*this, OwningFunc);
|
||||||
|
@ -4367,7 +4367,7 @@ TemplateDeclInstantiator::InitFunctionInstantiation(FunctionDecl *New,
|
|||||||
EPI.ExceptionSpec.Type != EST_None &&
|
EPI.ExceptionSpec.Type != EST_None &&
|
||||||
EPI.ExceptionSpec.Type != EST_DynamicNone &&
|
EPI.ExceptionSpec.Type != EST_DynamicNone &&
|
||||||
EPI.ExceptionSpec.Type != EST_BasicNoexcept &&
|
EPI.ExceptionSpec.Type != EST_BasicNoexcept &&
|
||||||
!Tmpl->isLexicallyWithinFunctionOrMethod()) {
|
!Tmpl->isInLocalScope()) {
|
||||||
FunctionDecl *ExceptionSpecTemplate = Tmpl;
|
FunctionDecl *ExceptionSpecTemplate = Tmpl;
|
||||||
if (EPI.ExceptionSpec.Type == EST_Uninstantiated)
|
if (EPI.ExceptionSpec.Type == EST_Uninstantiated)
|
||||||
ExceptionSpecTemplate = EPI.ExceptionSpec.SourceTemplate;
|
ExceptionSpecTemplate = EPI.ExceptionSpec.SourceTemplate;
|
||||||
|
@ -4022,50 +4022,8 @@ template<typename Derived>
|
|||||||
void TreeTransform<Derived>::InventTemplateArgumentLoc(
|
void TreeTransform<Derived>::InventTemplateArgumentLoc(
|
||||||
const TemplateArgument &Arg,
|
const TemplateArgument &Arg,
|
||||||
TemplateArgumentLoc &Output) {
|
TemplateArgumentLoc &Output) {
|
||||||
SourceLocation Loc = getDerived().getBaseLocation();
|
Output = getSema().getTrivialTemplateArgumentLoc(
|
||||||
switch (Arg.getKind()) {
|
Arg, QualType(), getDerived().getBaseLocation());
|
||||||
case TemplateArgument::Null:
|
|
||||||
llvm_unreachable("null template argument in TreeTransform");
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TemplateArgument::Type:
|
|
||||||
Output = TemplateArgumentLoc(Arg,
|
|
||||||
SemaRef.Context.getTrivialTypeSourceInfo(Arg.getAsType(), Loc));
|
|
||||||
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TemplateArgument::Template:
|
|
||||||
case TemplateArgument::TemplateExpansion: {
|
|
||||||
NestedNameSpecifierLocBuilder Builder;
|
|
||||||
TemplateName Template = Arg.getAsTemplateOrTemplatePattern();
|
|
||||||
if (DependentTemplateName *DTN = Template.getAsDependentTemplateName())
|
|
||||||
Builder.MakeTrivial(SemaRef.Context, DTN->getQualifier(), Loc);
|
|
||||||
else if (QualifiedTemplateName *QTN = Template.getAsQualifiedTemplateName())
|
|
||||||
Builder.MakeTrivial(SemaRef.Context, QTN->getQualifier(), Loc);
|
|
||||||
|
|
||||||
if (Arg.getKind() == TemplateArgument::Template)
|
|
||||||
Output = TemplateArgumentLoc(Arg,
|
|
||||||
Builder.getWithLocInContext(SemaRef.Context),
|
|
||||||
Loc);
|
|
||||||
else
|
|
||||||
Output = TemplateArgumentLoc(Arg,
|
|
||||||
Builder.getWithLocInContext(SemaRef.Context),
|
|
||||||
Loc, Loc);
|
|
||||||
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
case TemplateArgument::Expression:
|
|
||||||
Output = TemplateArgumentLoc(Arg, Arg.getAsExpr());
|
|
||||||
break;
|
|
||||||
|
|
||||||
case TemplateArgument::Declaration:
|
|
||||||
case TemplateArgument::Integral:
|
|
||||||
case TemplateArgument::Pack:
|
|
||||||
case TemplateArgument::NullPtr:
|
|
||||||
Output = TemplateArgumentLoc(Arg, TemplateArgumentLocInfo());
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template<typename Derived>
|
template<typename Derived>
|
||||||
@ -4075,12 +4033,45 @@ bool TreeTransform<Derived>::TransformTemplateArgument(
|
|||||||
const TemplateArgument &Arg = Input.getArgument();
|
const TemplateArgument &Arg = Input.getArgument();
|
||||||
switch (Arg.getKind()) {
|
switch (Arg.getKind()) {
|
||||||
case TemplateArgument::Null:
|
case TemplateArgument::Null:
|
||||||
case TemplateArgument::Integral:
|
|
||||||
case TemplateArgument::Pack:
|
case TemplateArgument::Pack:
|
||||||
case TemplateArgument::Declaration:
|
|
||||||
case TemplateArgument::NullPtr:
|
|
||||||
llvm_unreachable("Unexpected TemplateArgument");
|
llvm_unreachable("Unexpected TemplateArgument");
|
||||||
|
|
||||||
|
case TemplateArgument::Integral:
|
||||||
|
case TemplateArgument::NullPtr:
|
||||||
|
case TemplateArgument::Declaration: {
|
||||||
|
// Transform a resolved template argument straight to a resolved template
|
||||||
|
// argument. We get here when substituting into an already-substituted
|
||||||
|
// template type argument during concept satisfaction checking.
|
||||||
|
QualType T = Arg.getNonTypeTemplateArgumentType();
|
||||||
|
QualType NewT = getDerived().TransformType(T);
|
||||||
|
if (NewT.isNull())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
ValueDecl *D = Arg.getKind() == TemplateArgument::Declaration
|
||||||
|
? Arg.getAsDecl()
|
||||||
|
: nullptr;
|
||||||
|
ValueDecl *NewD = D ? cast_or_null<ValueDecl>(getDerived().TransformDecl(
|
||||||
|
getDerived().getBaseLocation(), D))
|
||||||
|
: nullptr;
|
||||||
|
if (D && !NewD)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
if (NewT == T && D == NewD)
|
||||||
|
Output = Input;
|
||||||
|
else if (Arg.getKind() == TemplateArgument::Integral)
|
||||||
|
Output = TemplateArgumentLoc(
|
||||||
|
TemplateArgument(getSema().Context, Arg.getAsIntegral(), NewT),
|
||||||
|
TemplateArgumentLocInfo());
|
||||||
|
else if (Arg.getKind() == TemplateArgument::NullPtr)
|
||||||
|
Output = TemplateArgumentLoc(TemplateArgument(NewT, /*IsNullPtr=*/true),
|
||||||
|
TemplateArgumentLocInfo());
|
||||||
|
else
|
||||||
|
Output = TemplateArgumentLoc(TemplateArgument(NewD, NewT),
|
||||||
|
TemplateArgumentLocInfo());
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
case TemplateArgument::Type: {
|
case TemplateArgument::Type: {
|
||||||
TypeSourceInfo *DI = Input.getTypeSourceInfo();
|
TypeSourceInfo *DI = Input.getTypeSourceInfo();
|
||||||
if (!DI)
|
if (!DI)
|
||||||
@ -11837,19 +11828,6 @@ TreeTransform<Derived>::TransformLambdaExpr(LambdaExpr *E) {
|
|||||||
|
|
||||||
LSI->CallOperator = NewCallOperator;
|
LSI->CallOperator = NewCallOperator;
|
||||||
|
|
||||||
for (unsigned I = 0, NumParams = NewCallOperator->getNumParams();
|
|
||||||
I != NumParams; ++I) {
|
|
||||||
auto *P = NewCallOperator->getParamDecl(I);
|
|
||||||
if (P->hasUninstantiatedDefaultArg()) {
|
|
||||||
EnterExpressionEvaluationContext Eval(
|
|
||||||
getSema(),
|
|
||||||
Sema::ExpressionEvaluationContext::PotentiallyEvaluatedIfUsed, P);
|
|
||||||
ExprResult R = getDerived().TransformExpr(
|
|
||||||
E->getCallOperator()->getParamDecl(I)->getDefaultArg());
|
|
||||||
P->setDefaultArg(R.get());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
getDerived().transformAttrs(E->getCallOperator(), NewCallOperator);
|
getDerived().transformAttrs(E->getCallOperator(), NewCallOperator);
|
||||||
getDerived().transformedLocalDecl(E->getCallOperator(), {NewCallOperator});
|
getDerived().transformedLocalDecl(E->getCallOperator(), {NewCallOperator});
|
||||||
|
|
||||||
|
@ -32,8 +32,10 @@
|
|||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include "WindowsMMap.h"
|
#include "WindowsMMap.h"
|
||||||
#else
|
#else
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
|
#include <sys/mman.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <unistd.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(__FreeBSD__) && defined(__i386__)
|
#if defined(__FreeBSD__) && defined(__i386__)
|
||||||
@ -119,6 +121,11 @@ struct fn_list writeout_fn_list;
|
|||||||
*/
|
*/
|
||||||
struct fn_list flush_fn_list;
|
struct fn_list flush_fn_list;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* A list of reset functions, shared between all dynamic objects.
|
||||||
|
*/
|
||||||
|
struct fn_list reset_fn_list;
|
||||||
|
|
||||||
static void fn_list_insert(struct fn_list* list, fn_ptr fn) {
|
static void fn_list_insert(struct fn_list* list, fn_ptr fn) {
|
||||||
struct fn_node* new_node = malloc(sizeof(struct fn_node));
|
struct fn_node* new_node = malloc(sizeof(struct fn_node));
|
||||||
new_node->fn = fn;
|
new_node->fn = fn;
|
||||||
@ -634,7 +641,46 @@ void llvm_delete_flush_function_list(void) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
COMPILER_RT_VISIBILITY
|
COMPILER_RT_VISIBILITY
|
||||||
void llvm_gcov_init(fn_ptr wfn, fn_ptr ffn) {
|
void llvm_register_reset_function(fn_ptr fn) {
|
||||||
|
fn_list_insert(&reset_fn_list, fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
COMPILER_RT_VISIBILITY
|
||||||
|
void llvm_delete_reset_function_list(void) { fn_list_remove(&reset_fn_list); }
|
||||||
|
|
||||||
|
COMPILER_RT_VISIBILITY
|
||||||
|
void llvm_reset_counters(void) {
|
||||||
|
struct fn_node *curr = reset_fn_list.head;
|
||||||
|
|
||||||
|
while (curr) {
|
||||||
|
if (curr->id == CURRENT_ID) {
|
||||||
|
curr->fn();
|
||||||
|
}
|
||||||
|
curr = curr->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#if !defined(_WIN32)
|
||||||
|
COMPILER_RT_VISIBILITY
|
||||||
|
pid_t __gcov_fork() {
|
||||||
|
pid_t parent_pid = getpid();
|
||||||
|
pid_t pid = fork();
|
||||||
|
|
||||||
|
if (pid == 0) {
|
||||||
|
pid_t child_pid = getpid();
|
||||||
|
if (child_pid != parent_pid) {
|
||||||
|
// The pid changed so we've a fork (one could have its own fork function)
|
||||||
|
// Just reset the counters for this child process
|
||||||
|
// threads.
|
||||||
|
llvm_reset_counters();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pid;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
COMPILER_RT_VISIBILITY
|
||||||
|
void llvm_gcov_init(fn_ptr wfn, fn_ptr ffn, fn_ptr rfn) {
|
||||||
static int atexit_ran = 0;
|
static int atexit_ran = 0;
|
||||||
|
|
||||||
if (wfn)
|
if (wfn)
|
||||||
@ -643,10 +689,14 @@ void llvm_gcov_init(fn_ptr wfn, fn_ptr ffn) {
|
|||||||
if (ffn)
|
if (ffn)
|
||||||
llvm_register_flush_function(ffn);
|
llvm_register_flush_function(ffn);
|
||||||
|
|
||||||
|
if (rfn)
|
||||||
|
llvm_register_reset_function(rfn);
|
||||||
|
|
||||||
if (atexit_ran == 0) {
|
if (atexit_ran == 0) {
|
||||||
atexit_ran = 1;
|
atexit_ran = 1;
|
||||||
|
|
||||||
/* Make sure we write out the data and delete the data structures. */
|
/* Make sure we write out the data and delete the data structures. */
|
||||||
|
atexit(llvm_delete_reset_function_list);
|
||||||
atexit(llvm_delete_flush_function_list);
|
atexit(llvm_delete_flush_function_list);
|
||||||
atexit(llvm_delete_writeout_function_list);
|
atexit(llvm_delete_writeout_function_list);
|
||||||
atexit(llvm_writeout_files);
|
atexit(llvm_writeout_files);
|
||||||
|
@ -28,10 +28,12 @@ void markLive(ArrayRef<Chunk *> chunks) {
|
|||||||
// as we push, so sections never appear twice in the list.
|
// as we push, so sections never appear twice in the list.
|
||||||
SmallVector<SectionChunk *, 256> worklist;
|
SmallVector<SectionChunk *, 256> worklist;
|
||||||
|
|
||||||
// COMDAT section chunks are dead by default. Add non-COMDAT chunks.
|
// COMDAT section chunks are dead by default. Add non-COMDAT chunks. Do not
|
||||||
|
// traverse DWARF sections. They are live, but they should not keep other
|
||||||
|
// sections alive.
|
||||||
for (Chunk *c : chunks)
|
for (Chunk *c : chunks)
|
||||||
if (auto *sc = dyn_cast<SectionChunk>(c))
|
if (auto *sc = dyn_cast<SectionChunk>(c))
|
||||||
if (sc->live)
|
if (sc->live && !sc->isDWARF())
|
||||||
worklist.push_back(sc);
|
worklist.push_back(sc);
|
||||||
|
|
||||||
auto enqueue = [&](SectionChunk *c) {
|
auto enqueue = [&](SectionChunk *c) {
|
||||||
|
@ -1906,8 +1906,17 @@ template <class ELFT> void LinkerDriver::link(opt::InputArgList &args) {
|
|||||||
|
|
||||||
// We do not want to emit debug sections if --strip-all
|
// We do not want to emit debug sections if --strip-all
|
||||||
// or -strip-debug are given.
|
// or -strip-debug are given.
|
||||||
return config->strip != StripPolicy::None &&
|
if (config->strip == StripPolicy::None)
|
||||||
(s->name.startswith(".debug") || s->name.startswith(".zdebug"));
|
return false;
|
||||||
|
|
||||||
|
if (isDebugSection(*s))
|
||||||
|
return true;
|
||||||
|
if (auto *isec = dyn_cast<InputSection>(s))
|
||||||
|
if (InputSectionBase *rel = isec->getRelocatedSection())
|
||||||
|
if (isDebugSection(*rel))
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
// Now that the number of partitions is fixed, save a pointer to the main
|
// Now that the number of partitions is fixed, save a pointer to the main
|
||||||
|
@ -441,8 +441,7 @@ void InputSection::copyRelocations(uint8_t *buf, ArrayRef<RelTy> rels) {
|
|||||||
// See the comment in maybeReportUndefined for PPC32 .got2 and PPC64 .toc
|
// See the comment in maybeReportUndefined for PPC32 .got2 and PPC64 .toc
|
||||||
auto *d = dyn_cast<Defined>(&sym);
|
auto *d = dyn_cast<Defined>(&sym);
|
||||||
if (!d) {
|
if (!d) {
|
||||||
if (!sec->name.startswith(".debug") &&
|
if (!isDebugSection(*sec) && sec->name != ".eh_frame" &&
|
||||||
!sec->name.startswith(".zdebug") && sec->name != ".eh_frame" &&
|
|
||||||
sec->name != ".gcc_except_table" && sec->name != ".got2" &&
|
sec->name != ".gcc_except_table" && sec->name != ".got2" &&
|
||||||
sec->name != ".toc") {
|
sec->name != ".toc") {
|
||||||
uint32_t secIdx = cast<Undefined>(sym).discardedSecIdx;
|
uint32_t secIdx = cast<Undefined>(sym).discardedSecIdx;
|
||||||
|
@ -357,6 +357,10 @@ class InputSection : public InputSectionBase {
|
|||||||
template <class ELFT> void copyShtGroup(uint8_t *buf);
|
template <class ELFT> void copyShtGroup(uint8_t *buf);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
inline bool isDebugSection(const InputSectionBase &sec) {
|
||||||
|
return sec.name.startswith(".debug") || sec.name.startswith(".zdebug");
|
||||||
|
}
|
||||||
|
|
||||||
// The list of all input sections.
|
// The list of all input sections.
|
||||||
extern std::vector<InputSectionBase *> inputSections;
|
extern std::vector<InputSectionBase *> inputSections;
|
||||||
|
|
||||||
|
@ -114,8 +114,7 @@ void OutputSection::commitSection(InputSection *isec) {
|
|||||||
flags = isec->flags;
|
flags = isec->flags;
|
||||||
} else {
|
} else {
|
||||||
// Otherwise, check if new type or flags are compatible with existing ones.
|
// Otherwise, check if new type or flags are compatible with existing ones.
|
||||||
unsigned mask = SHF_TLS | SHF_LINK_ORDER;
|
if ((flags ^ isec->flags) & SHF_TLS)
|
||||||
if ((flags & mask) != (isec->flags & mask))
|
|
||||||
error("incompatible section flags for " + name + "\n>>> " + toString(isec) +
|
error("incompatible section flags for " + name + "\n>>> " + toString(isec) +
|
||||||
": 0x" + utohexstr(isec->flags) + "\n>>> output section " + name +
|
": 0x" + utohexstr(isec->flags) + "\n>>> output section " + name +
|
||||||
": 0x" + utohexstr(flags));
|
": 0x" + utohexstr(flags));
|
||||||
@ -367,8 +366,9 @@ void OutputSection::finalize() {
|
|||||||
// all InputSections in the OutputSection have the same dependency.
|
// all InputSections in the OutputSection have the same dependency.
|
||||||
if (auto *ex = dyn_cast<ARMExidxSyntheticSection>(first))
|
if (auto *ex = dyn_cast<ARMExidxSyntheticSection>(first))
|
||||||
link = ex->getLinkOrderDep()->getParent()->sectionIndex;
|
link = ex->getLinkOrderDep()->getParent()->sectionIndex;
|
||||||
else if (auto *d = first->getLinkOrderDep())
|
else if (first->flags & SHF_LINK_ORDER)
|
||||||
link = d->getParent()->sectionIndex;
|
if (auto *d = first->getLinkOrderDep())
|
||||||
|
link = d->getParent()->sectionIndex;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (type == SHT_GROUP) {
|
if (type == SHT_GROUP) {
|
||||||
|
@ -1524,17 +1524,30 @@ template <class ELFT> void Writer<ELFT>::resolveShfLinkOrder() {
|
|||||||
// but sort must consider them all at once.
|
// but sort must consider them all at once.
|
||||||
std::vector<InputSection **> scriptSections;
|
std::vector<InputSection **> scriptSections;
|
||||||
std::vector<InputSection *> sections;
|
std::vector<InputSection *> sections;
|
||||||
|
bool started = false, stopped = false;
|
||||||
for (BaseCommand *base : sec->sectionCommands) {
|
for (BaseCommand *base : sec->sectionCommands) {
|
||||||
if (auto *isd = dyn_cast<InputSectionDescription>(base)) {
|
if (auto *isd = dyn_cast<InputSectionDescription>(base)) {
|
||||||
for (InputSection *&isec : isd->sections) {
|
for (InputSection *&isec : isd->sections) {
|
||||||
scriptSections.push_back(&isec);
|
if (!(isec->flags & SHF_LINK_ORDER)) {
|
||||||
sections.push_back(isec);
|
if (started)
|
||||||
|
stopped = true;
|
||||||
|
} else if (stopped) {
|
||||||
|
error(toString(isec) + ": SHF_LINK_ORDER sections in " + sec->name +
|
||||||
|
" are not contiguous");
|
||||||
|
} else {
|
||||||
|
started = true;
|
||||||
|
|
||||||
InputSection *link = isec->getLinkOrderDep();
|
scriptSections.push_back(&isec);
|
||||||
if (!link->getParent())
|
sections.push_back(isec);
|
||||||
error(toString(isec) + ": sh_link points to discarded section " +
|
|
||||||
toString(link));
|
InputSection *link = isec->getLinkOrderDep();
|
||||||
|
if (!link->getParent())
|
||||||
|
error(toString(isec) + ": sh_link points to discarded section " +
|
||||||
|
toString(link));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
} else if (started) {
|
||||||
|
stopped = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ class ValueLatticeElement {
|
|||||||
/// producing instruction is dead. Caution: We use this as the starting
|
/// producing instruction is dead. Caution: We use this as the starting
|
||||||
/// state in our local meet rules. In this usage, it's taken to mean
|
/// state in our local meet rules. In this usage, it's taken to mean
|
||||||
/// "nothing known yet".
|
/// "nothing known yet".
|
||||||
undefined,
|
unknown,
|
||||||
|
|
||||||
/// This Value has a specific constant value. (For constant integers,
|
/// This Value has a specific constant value. (For constant integers,
|
||||||
/// constantrange is used instead. Integer typed constantexprs can appear
|
/// constantrange is used instead. Integer typed constantexprs can appear
|
||||||
@ -45,7 +45,12 @@ class ValueLatticeElement {
|
|||||||
constantrange,
|
constantrange,
|
||||||
|
|
||||||
/// We can not precisely model the dynamic values this value might take.
|
/// We can not precisely model the dynamic values this value might take.
|
||||||
overdefined
|
overdefined,
|
||||||
|
|
||||||
|
/// This Value is an UndefValue constant or produces undef. Undefined values
|
||||||
|
/// can be merged with constants (or single element constant ranges),
|
||||||
|
/// assuming all uses of the result will be replaced.
|
||||||
|
undef
|
||||||
};
|
};
|
||||||
|
|
||||||
ValueLatticeElementTy Tag;
|
ValueLatticeElementTy Tag;
|
||||||
@ -60,14 +65,15 @@ class ValueLatticeElement {
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
// Const and Range are initialized on-demand.
|
// Const and Range are initialized on-demand.
|
||||||
ValueLatticeElement() : Tag(undefined) {}
|
ValueLatticeElement() : Tag(unknown) {}
|
||||||
|
|
||||||
/// Custom destructor to ensure Range is properly destroyed, when the object
|
/// Custom destructor to ensure Range is properly destroyed, when the object
|
||||||
/// is deallocated.
|
/// is deallocated.
|
||||||
~ValueLatticeElement() {
|
~ValueLatticeElement() {
|
||||||
switch (Tag) {
|
switch (Tag) {
|
||||||
case overdefined:
|
case overdefined:
|
||||||
case undefined:
|
case unknown:
|
||||||
|
case undef:
|
||||||
case constant:
|
case constant:
|
||||||
case notconstant:
|
case notconstant:
|
||||||
break;
|
break;
|
||||||
@ -79,7 +85,7 @@ class ValueLatticeElement {
|
|||||||
|
|
||||||
/// Custom copy constructor, to ensure Range gets initialized when
|
/// Custom copy constructor, to ensure Range gets initialized when
|
||||||
/// copying a constant range lattice element.
|
/// copying a constant range lattice element.
|
||||||
ValueLatticeElement(const ValueLatticeElement &Other) : Tag(undefined) {
|
ValueLatticeElement(const ValueLatticeElement &Other) : Tag(unknown) {
|
||||||
*this = Other;
|
*this = Other;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -109,7 +115,8 @@ class ValueLatticeElement {
|
|||||||
ConstVal = Other.ConstVal;
|
ConstVal = Other.ConstVal;
|
||||||
break;
|
break;
|
||||||
case overdefined:
|
case overdefined:
|
||||||
case undefined:
|
case unknown:
|
||||||
|
case undef:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
Tag = Other.Tag;
|
Tag = Other.Tag;
|
||||||
@ -118,14 +125,16 @@ class ValueLatticeElement {
|
|||||||
|
|
||||||
static ValueLatticeElement get(Constant *C) {
|
static ValueLatticeElement get(Constant *C) {
|
||||||
ValueLatticeElement Res;
|
ValueLatticeElement Res;
|
||||||
if (!isa<UndefValue>(C))
|
if (isa<UndefValue>(C))
|
||||||
|
Res.markUndef();
|
||||||
|
else
|
||||||
Res.markConstant(C);
|
Res.markConstant(C);
|
||||||
return Res;
|
return Res;
|
||||||
}
|
}
|
||||||
static ValueLatticeElement getNot(Constant *C) {
|
static ValueLatticeElement getNot(Constant *C) {
|
||||||
ValueLatticeElement Res;
|
ValueLatticeElement Res;
|
||||||
if (!isa<UndefValue>(C))
|
assert(!isa<UndefValue>(C) && "!= undef is not supported");
|
||||||
Res.markNotConstant(C);
|
Res.markNotConstant(C);
|
||||||
return Res;
|
return Res;
|
||||||
}
|
}
|
||||||
static ValueLatticeElement getRange(ConstantRange CR) {
|
static ValueLatticeElement getRange(ConstantRange CR) {
|
||||||
@ -139,7 +148,10 @@ class ValueLatticeElement {
|
|||||||
return Res;
|
return Res;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool isUndefined() const { return Tag == undefined; }
|
bool isUndef() const { return Tag == undef; }
|
||||||
|
bool isUnknown() const { return Tag == unknown; }
|
||||||
|
bool isUnknownOrUndef() const { return Tag == unknown || Tag == undef; }
|
||||||
|
bool isUndefined() const { return isUnknownOrUndef(); }
|
||||||
bool isConstant() const { return Tag == constant; }
|
bool isConstant() const { return Tag == constant; }
|
||||||
bool isNotConstant() const { return Tag == notconstant; }
|
bool isNotConstant() const { return Tag == notconstant; }
|
||||||
bool isConstantRange() const { return Tag == constantrange; }
|
bool isConstantRange() const { return Tag == constantrange; }
|
||||||
@ -170,89 +182,123 @@ class ValueLatticeElement {
|
|||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
bool markOverdefined() {
|
||||||
void markOverdefined() {
|
|
||||||
if (isOverdefined())
|
if (isOverdefined())
|
||||||
return;
|
return false;
|
||||||
if (isConstant() || isNotConstant())
|
if (isConstant() || isNotConstant())
|
||||||
ConstVal = nullptr;
|
ConstVal = nullptr;
|
||||||
if (isConstantRange())
|
if (isConstantRange())
|
||||||
Range.~ConstantRange();
|
Range.~ConstantRange();
|
||||||
Tag = overdefined;
|
Tag = overdefined;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void markConstant(Constant *V) {
|
bool markUndef() {
|
||||||
assert(V && "Marking constant with NULL");
|
if (isUndef())
|
||||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
|
return false;
|
||||||
markConstantRange(ConstantRange(CI->getValue()));
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
if (isa<UndefValue>(V))
|
|
||||||
return;
|
|
||||||
|
|
||||||
assert((!isConstant() || getConstant() == V) &&
|
assert(isUnknown());
|
||||||
"Marking constant with different value");
|
Tag = undef;
|
||||||
assert(isUndefined());
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool markConstant(Constant *V) {
|
||||||
|
if (isa<UndefValue>(V))
|
||||||
|
return markUndef();
|
||||||
|
|
||||||
|
if (isConstant()) {
|
||||||
|
assert(getConstant() == V && "Marking constant with different value");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
|
||||||
|
return markConstantRange(ConstantRange(CI->getValue()));
|
||||||
|
|
||||||
|
assert(isUnknown() || isUndef());
|
||||||
Tag = constant;
|
Tag = constant;
|
||||||
ConstVal = V;
|
ConstVal = V;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void markNotConstant(Constant *V) {
|
bool markNotConstant(Constant *V) {
|
||||||
assert(V && "Marking constant with NULL");
|
assert(V && "Marking constant with NULL");
|
||||||
if (ConstantInt *CI = dyn_cast<ConstantInt>(V)) {
|
if (ConstantInt *CI = dyn_cast<ConstantInt>(V))
|
||||||
markConstantRange(ConstantRange(CI->getValue() + 1, CI->getValue()));
|
return markConstantRange(
|
||||||
return;
|
ConstantRange(CI->getValue() + 1, CI->getValue()));
|
||||||
}
|
|
||||||
if (isa<UndefValue>(V))
|
|
||||||
return;
|
|
||||||
|
|
||||||
assert((!isConstant() || getConstant() != V) &&
|
if (isa<UndefValue>(V))
|
||||||
"Marking constant !constant with same value");
|
return false;
|
||||||
assert((!isNotConstant() || getNotConstant() == V) &&
|
|
||||||
"Marking !constant with different value");
|
if (isNotConstant()) {
|
||||||
assert(isUndefined() || isConstant());
|
assert(getNotConstant() == V && "Marking !constant with different value");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
assert(isUnknown());
|
||||||
Tag = notconstant;
|
Tag = notconstant;
|
||||||
ConstVal = V;
|
ConstVal = V;
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
void markConstantRange(ConstantRange NewR) {
|
/// Mark the object as constant range with \p NewR. If the object is already a
|
||||||
|
/// constant range, nothing changes if the existing range is equal to \p
|
||||||
|
/// NewR. Otherwise \p NewR must be a superset of the existing range or the
|
||||||
|
/// object must be undef.
|
||||||
|
bool markConstantRange(ConstantRange NewR) {
|
||||||
if (isConstantRange()) {
|
if (isConstantRange()) {
|
||||||
|
if (getConstantRange() == NewR)
|
||||||
|
return false;
|
||||||
|
|
||||||
if (NewR.isEmptySet())
|
if (NewR.isEmptySet())
|
||||||
markOverdefined();
|
return markOverdefined();
|
||||||
else {
|
|
||||||
Range = std::move(NewR);
|
assert(NewR.contains(getConstantRange()) &&
|
||||||
}
|
"Existing range must be a subset of NewR");
|
||||||
return;
|
Range = std::move(NewR);
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(isUndefined());
|
assert(isUnknown() || isUndef());
|
||||||
if (NewR.isEmptySet())
|
if (NewR.isEmptySet())
|
||||||
markOverdefined();
|
return markOverdefined();
|
||||||
else {
|
|
||||||
Tag = constantrange;
|
Tag = constantrange;
|
||||||
new (&Range) ConstantRange(std::move(NewR));
|
new (&Range) ConstantRange(std::move(NewR));
|
||||||
}
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
|
||||||
/// Updates this object to approximate both this object and RHS. Returns
|
/// Updates this object to approximate both this object and RHS. Returns
|
||||||
/// true if this object has been changed.
|
/// true if this object has been changed.
|
||||||
bool mergeIn(const ValueLatticeElement &RHS, const DataLayout &DL) {
|
bool mergeIn(const ValueLatticeElement &RHS, const DataLayout &DL) {
|
||||||
if (RHS.isUndefined() || isOverdefined())
|
if (RHS.isUnknown() || isOverdefined())
|
||||||
return false;
|
return false;
|
||||||
if (RHS.isOverdefined()) {
|
if (RHS.isOverdefined()) {
|
||||||
markOverdefined();
|
markOverdefined();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isUndefined()) {
|
if (isUndef()) {
|
||||||
|
assert(!RHS.isUnknown());
|
||||||
|
if (RHS.isUndef())
|
||||||
|
return false;
|
||||||
|
if (RHS.isConstant())
|
||||||
|
return markConstant(RHS.getConstant());
|
||||||
|
if (RHS.isConstantRange() && RHS.getConstantRange().isSingleElement())
|
||||||
|
return markConstantRange(RHS.getConstantRange());
|
||||||
|
return markOverdefined();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isUnknown()) {
|
||||||
|
assert(!RHS.isUnknown() && "Unknow RHS should be handled earlier");
|
||||||
*this = RHS;
|
*this = RHS;
|
||||||
return !RHS.isUndefined();
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (isConstant()) {
|
if (isConstant()) {
|
||||||
if (RHS.isConstant() && getConstant() == RHS.getConstant())
|
if (RHS.isConstant() && getConstant() == RHS.getConstant())
|
||||||
return false;
|
return false;
|
||||||
|
if (RHS.isUndef())
|
||||||
|
return false;
|
||||||
markOverdefined();
|
markOverdefined();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -265,6 +311,9 @@ class ValueLatticeElement {
|
|||||||
}
|
}
|
||||||
|
|
||||||
assert(isConstantRange() && "New ValueLattice type?");
|
assert(isConstantRange() && "New ValueLattice type?");
|
||||||
|
if (RHS.isUndef() && getConstantRange().isSingleElement())
|
||||||
|
return false;
|
||||||
|
|
||||||
if (!RHS.isConstantRange()) {
|
if (!RHS.isConstantRange()) {
|
||||||
// We can get here if we've encountered a constantexpr of integer type
|
// We can get here if we've encountered a constantexpr of integer type
|
||||||
// and merge it with a constantrange.
|
// and merge it with a constantrange.
|
||||||
@ -273,18 +322,11 @@ class ValueLatticeElement {
|
|||||||
}
|
}
|
||||||
ConstantRange NewR = getConstantRange().unionWith(RHS.getConstantRange());
|
ConstantRange NewR = getConstantRange().unionWith(RHS.getConstantRange());
|
||||||
if (NewR.isFullSet())
|
if (NewR.isFullSet())
|
||||||
markOverdefined();
|
return markOverdefined();
|
||||||
else if (NewR == getConstantRange())
|
else if (NewR == getConstantRange())
|
||||||
return false;
|
return false;
|
||||||
else
|
else
|
||||||
markConstantRange(std::move(NewR));
|
return markConstantRange(std::move(NewR));
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ConstantInt *getConstantInt() const {
|
|
||||||
assert(isConstant() && isa<ConstantInt>(getConstant()) &&
|
|
||||||
"No integer constant");
|
|
||||||
return cast<ConstantInt>(getConstant());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Compares this symbolic value with Other using Pred and returns either
|
/// Compares this symbolic value with Other using Pred and returns either
|
||||||
@ -292,7 +334,7 @@ class ValueLatticeElement {
|
|||||||
/// evaluated.
|
/// evaluated.
|
||||||
Constant *getCompare(CmpInst::Predicate Pred, Type *Ty,
|
Constant *getCompare(CmpInst::Predicate Pred, Type *Ty,
|
||||||
const ValueLatticeElement &Other) const {
|
const ValueLatticeElement &Other) const {
|
||||||
if (isUndefined() || Other.isUndefined())
|
if (isUnknownOrUndef() || Other.isUnknownOrUndef())
|
||||||
return UndefValue::get(Ty);
|
return UndefValue::get(Ty);
|
||||||
|
|
||||||
if (isConstant() && Other.isConstant())
|
if (isConstant() && Other.isConstant())
|
||||||
|
@ -71,6 +71,11 @@ class GlobalTypeTableBuilder : public TypeCollection {
|
|||||||
template <typename CreateFunc>
|
template <typename CreateFunc>
|
||||||
TypeIndex insertRecordAs(GloballyHashedType Hash, size_t RecordSize,
|
TypeIndex insertRecordAs(GloballyHashedType Hash, size_t RecordSize,
|
||||||
CreateFunc Create) {
|
CreateFunc Create) {
|
||||||
|
assert(RecordSize < UINT32_MAX && "Record too big");
|
||||||
|
assert(RecordSize % 4 == 0 &&
|
||||||
|
"RecordSize is not a multiple of 4 bytes which will cause "
|
||||||
|
"misalignment in the output TPI stream!");
|
||||||
|
|
||||||
auto Result = HashedRecords.try_emplace(Hash, nextTypeIndex());
|
auto Result = HashedRecords.try_emplace(Hash, nextTypeIndex());
|
||||||
|
|
||||||
if (LLVM_UNLIKELY(Result.second /*inserted*/ ||
|
if (LLVM_UNLIKELY(Result.second /*inserted*/ ||
|
||||||
|
@ -96,9 +96,9 @@ static ValueLatticeElement intersect(const ValueLatticeElement &A,
|
|||||||
const ValueLatticeElement &B) {
|
const ValueLatticeElement &B) {
|
||||||
// Undefined is the strongest state. It means the value is known to be along
|
// Undefined is the strongest state. It means the value is known to be along
|
||||||
// an unreachable path.
|
// an unreachable path.
|
||||||
if (A.isUndefined())
|
if (A.isUnknown())
|
||||||
return A;
|
return A;
|
||||||
if (B.isUndefined())
|
if (B.isUnknown())
|
||||||
return B;
|
return B;
|
||||||
|
|
||||||
// If we gave up for one, but got a useable fact from the other, use it.
|
// If we gave up for one, but got a useable fact from the other, use it.
|
||||||
@ -1203,7 +1203,7 @@ static ValueLatticeElement getValueFromICmpCondition(Value *Val, ICmpInst *ICI,
|
|||||||
// false SETNE.
|
// false SETNE.
|
||||||
if (isTrueDest == (Predicate == ICmpInst::ICMP_EQ))
|
if (isTrueDest == (Predicate == ICmpInst::ICMP_EQ))
|
||||||
return ValueLatticeElement::get(cast<Constant>(RHS));
|
return ValueLatticeElement::get(cast<Constant>(RHS));
|
||||||
else
|
else if (!isa<UndefValue>(RHS))
|
||||||
return ValueLatticeElement::getNot(cast<Constant>(RHS));
|
return ValueLatticeElement::getNot(cast<Constant>(RHS));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -1722,7 +1722,7 @@ ConstantRange LazyValueInfo::getConstantRange(Value *V, BasicBlock *BB,
|
|||||||
const DataLayout &DL = BB->getModule()->getDataLayout();
|
const DataLayout &DL = BB->getModule()->getDataLayout();
|
||||||
ValueLatticeElement Result =
|
ValueLatticeElement Result =
|
||||||
getImpl(PImpl, AC, &DL, DT).getValueInBlock(V, BB, CxtI);
|
getImpl(PImpl, AC, &DL, DT).getValueInBlock(V, BB, CxtI);
|
||||||
if (Result.isUndefined())
|
if (Result.isUnknown())
|
||||||
return ConstantRange::getEmpty(Width);
|
return ConstantRange::getEmpty(Width);
|
||||||
if (Result.isConstantRange())
|
if (Result.isConstantRange())
|
||||||
return Result.getConstantRange();
|
return Result.getConstantRange();
|
||||||
@ -1761,7 +1761,7 @@ ConstantRange LazyValueInfo::getConstantRangeOnEdge(Value *V,
|
|||||||
ValueLatticeElement Result =
|
ValueLatticeElement Result =
|
||||||
getImpl(PImpl, AC, &DL, DT).getValueOnEdge(V, FromBB, ToBB, CxtI);
|
getImpl(PImpl, AC, &DL, DT).getValueOnEdge(V, FromBB, ToBB, CxtI);
|
||||||
|
|
||||||
if (Result.isUndefined())
|
if (Result.isUnknown())
|
||||||
return ConstantRange::getEmpty(Width);
|
return ConstantRange::getEmpty(Width);
|
||||||
if (Result.isConstantRange())
|
if (Result.isConstantRange())
|
||||||
return Result.getConstantRange();
|
return Result.getConstantRange();
|
||||||
@ -1991,7 +1991,7 @@ void LazyValueInfoAnnotatedWriter::emitBasicBlockStartAnnot(
|
|||||||
for (auto &Arg : F->args()) {
|
for (auto &Arg : F->args()) {
|
||||||
ValueLatticeElement Result = LVIImpl->getValueInBlock(
|
ValueLatticeElement Result = LVIImpl->getValueInBlock(
|
||||||
const_cast<Argument *>(&Arg), const_cast<BasicBlock *>(BB));
|
const_cast<Argument *>(&Arg), const_cast<BasicBlock *>(BB));
|
||||||
if (Result.isUndefined())
|
if (Result.isUnknown())
|
||||||
continue;
|
continue;
|
||||||
OS << "; LatticeVal for: '" << Arg << "' is: " << Result << "\n";
|
OS << "; LatticeVal for: '" << Arg << "' is: " << Result << "\n";
|
||||||
}
|
}
|
||||||
|
@ -10,8 +10,10 @@
|
|||||||
|
|
||||||
namespace llvm {
|
namespace llvm {
|
||||||
raw_ostream &operator<<(raw_ostream &OS, const ValueLatticeElement &Val) {
|
raw_ostream &operator<<(raw_ostream &OS, const ValueLatticeElement &Val) {
|
||||||
if (Val.isUndefined())
|
if (Val.isUnknown())
|
||||||
return OS << "undefined";
|
return OS << "unknown";
|
||||||
|
if (Val.isUndef())
|
||||||
|
return OS << "undef";
|
||||||
if (Val.isOverdefined())
|
if (Val.isOverdefined())
|
||||||
return OS << "overdefined";
|
return OS << "overdefined";
|
||||||
|
|
||||||
|
@ -269,30 +269,26 @@ MachineSinking::AllUsesDominatedByBlock(unsigned Reg,
|
|||||||
// into and they are all PHI nodes. In this case, machine-sink must break
|
// into and they are all PHI nodes. In this case, machine-sink must break
|
||||||
// the critical edge first. e.g.
|
// the critical edge first. e.g.
|
||||||
//
|
//
|
||||||
// %bb.1: derived from LLVM BB %bb4.preheader
|
// %bb.1:
|
||||||
// Predecessors according to CFG: %bb.0
|
// Predecessors according to CFG: %bb.0
|
||||||
// ...
|
// ...
|
||||||
// %reg16385 = DEC64_32r %reg16437, implicit-def dead %eflags
|
// %def = DEC64_32r %x, implicit-def dead %eflags
|
||||||
// ...
|
// ...
|
||||||
// JE_4 <%bb.37>, implicit %eflags
|
// JE_4 <%bb.37>, implicit %eflags
|
||||||
// Successors according to CFG: %bb.37 %bb.2
|
// Successors according to CFG: %bb.37 %bb.2
|
||||||
//
|
//
|
||||||
// %bb.2: derived from LLVM BB %bb.nph
|
// %bb.2:
|
||||||
// Predecessors according to CFG: %bb.0 %bb.1
|
// %p = PHI %y, %bb.0, %def, %bb.1
|
||||||
// %reg16386 = PHI %reg16434, %bb.0, %reg16385, %bb.1
|
if (llvm::all_of(MRI->use_nodbg_operands(Reg), [&](MachineOperand &MO) {
|
||||||
BreakPHIEdge = true;
|
MachineInstr *UseInst = MO.getParent();
|
||||||
for (MachineOperand &MO : MRI->use_nodbg_operands(Reg)) {
|
unsigned OpNo = UseInst->getOperandNo(&MO);
|
||||||
MachineInstr *UseInst = MO.getParent();
|
MachineBasicBlock *UseBlock = UseInst->getParent();
|
||||||
unsigned OpNo = &MO - &UseInst->getOperand(0);
|
return UseBlock == MBB && UseInst->isPHI() &&
|
||||||
MachineBasicBlock *UseBlock = UseInst->getParent();
|
UseInst->getOperand(OpNo + 1).getMBB() == DefMBB;
|
||||||
if (!(UseBlock == MBB && UseInst->isPHI() &&
|
})) {
|
||||||
UseInst->getOperand(OpNo+1).getMBB() == DefMBB)) {
|
BreakPHIEdge = true;
|
||||||
BreakPHIEdge = false;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (BreakPHIEdge)
|
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
for (MachineOperand &MO : MRI->use_nodbg_operands(Reg)) {
|
for (MachineOperand &MO : MRI->use_nodbg_operands(Reg)) {
|
||||||
// Determine the block of the use.
|
// Determine the block of the use.
|
||||||
|
@ -886,6 +886,13 @@ static bool isAnyConstantBuildVector(SDValue V, bool NoOpaques = false) {
|
|||||||
ISD::isBuildVectorOfConstantFPSDNodes(V.getNode());
|
ISD::isBuildVectorOfConstantFPSDNodes(V.getNode());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Determine if this an indexed load with an opaque target constant index.
|
||||||
|
static bool canSplitIdx(LoadSDNode *LD) {
|
||||||
|
return MaySplitLoadIndex &&
|
||||||
|
(LD->getOperand(2).getOpcode() != ISD::TargetConstant ||
|
||||||
|
!cast<ConstantSDNode>(LD->getOperand(2))->isOpaque());
|
||||||
|
}
|
||||||
|
|
||||||
bool DAGCombiner::reassociationCanBreakAddressingModePattern(unsigned Opc,
|
bool DAGCombiner::reassociationCanBreakAddressingModePattern(unsigned Opc,
|
||||||
const SDLoc &DL,
|
const SDLoc &DL,
|
||||||
SDValue N0,
|
SDValue N0,
|
||||||
@ -14222,11 +14229,11 @@ SDValue DAGCombiner::ForwardStoreValueToDirectLoad(LoadSDNode *LD) {
|
|||||||
|
|
||||||
auto ReplaceLd = [&](LoadSDNode *LD, SDValue Val, SDValue Chain) -> SDValue {
|
auto ReplaceLd = [&](LoadSDNode *LD, SDValue Val, SDValue Chain) -> SDValue {
|
||||||
if (LD->isIndexed()) {
|
if (LD->isIndexed()) {
|
||||||
bool IsSub = (LD->getAddressingMode() == ISD::PRE_DEC ||
|
// Cannot handle opaque target constants and we must respect the user's
|
||||||
LD->getAddressingMode() == ISD::POST_DEC);
|
// request not to split indexes from loads.
|
||||||
unsigned Opc = IsSub ? ISD::SUB : ISD::ADD;
|
if (!canSplitIdx(LD))
|
||||||
SDValue Idx = DAG.getNode(Opc, SDLoc(LD), LD->getOperand(1).getValueType(),
|
return SDValue();
|
||||||
LD->getOperand(1), LD->getOperand(2));
|
SDValue Idx = SplitIndexingFromLoad(LD);
|
||||||
SDValue Ops[] = {Val, Idx, Chain};
|
SDValue Ops[] = {Val, Idx, Chain};
|
||||||
return CombineTo(LD, Ops, 3);
|
return CombineTo(LD, Ops, 3);
|
||||||
}
|
}
|
||||||
@ -14322,14 +14329,12 @@ SDValue DAGCombiner::visitLOAD(SDNode *N) {
|
|||||||
// the indexing into an add/sub directly (that TargetConstant may not be
|
// the indexing into an add/sub directly (that TargetConstant may not be
|
||||||
// valid for a different type of node, and we cannot convert an opaque
|
// valid for a different type of node, and we cannot convert an opaque
|
||||||
// target constant into a regular constant).
|
// target constant into a regular constant).
|
||||||
bool HasOTCInc = LD->getOperand(2).getOpcode() == ISD::TargetConstant &&
|
bool CanSplitIdx = canSplitIdx(LD);
|
||||||
cast<ConstantSDNode>(LD->getOperand(2))->isOpaque();
|
|
||||||
|
|
||||||
if (!N->hasAnyUseOfValue(0) &&
|
if (!N->hasAnyUseOfValue(0) && (CanSplitIdx || !N->hasAnyUseOfValue(1))) {
|
||||||
((MaySplitLoadIndex && !HasOTCInc) || !N->hasAnyUseOfValue(1))) {
|
|
||||||
SDValue Undef = DAG.getUNDEF(N->getValueType(0));
|
SDValue Undef = DAG.getUNDEF(N->getValueType(0));
|
||||||
SDValue Index;
|
SDValue Index;
|
||||||
if (N->hasAnyUseOfValue(1) && MaySplitLoadIndex && !HasOTCInc) {
|
if (N->hasAnyUseOfValue(1) && CanSplitIdx) {
|
||||||
Index = SplitIndexingFromLoad(LD);
|
Index = SplitIndexingFromLoad(LD);
|
||||||
// Try to fold the base pointer arithmetic into subsequent loads and
|
// Try to fold the base pointer arithmetic into subsequent loads and
|
||||||
// stores.
|
// stores.
|
||||||
|
@ -225,6 +225,21 @@ static bool isRegUsedByPhiNodes(unsigned DefReg,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static bool isTerminatingEHLabel(MachineBasicBlock *MBB, MachineInstr &MI) {
|
||||||
|
// Ignore non-EH labels.
|
||||||
|
if (!MI.isEHLabel())
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// Any EH label outside a landing pad must be for an invoke. Consider it a
|
||||||
|
// terminator.
|
||||||
|
if (!MBB->isEHPad())
|
||||||
|
return true;
|
||||||
|
|
||||||
|
// If this is a landingpad, the first non-phi instruction will be an EH_LABEL.
|
||||||
|
// Don't consider that label to be a terminator.
|
||||||
|
return MI.getIterator() != MBB->getFirstNonPHI();
|
||||||
|
}
|
||||||
|
|
||||||
/// Build a map of instruction orders. Return the first terminator and its
|
/// Build a map of instruction orders. Return the first terminator and its
|
||||||
/// order. Consider EH_LABEL instructions to be terminators as well, since local
|
/// order. Consider EH_LABEL instructions to be terminators as well, since local
|
||||||
/// values for phis after invokes must be materialized before the call.
|
/// values for phis after invokes must be materialized before the call.
|
||||||
@ -233,7 +248,7 @@ void FastISel::InstOrderMap::initialize(
|
|||||||
unsigned Order = 0;
|
unsigned Order = 0;
|
||||||
for (MachineInstr &I : *MBB) {
|
for (MachineInstr &I : *MBB) {
|
||||||
if (!FirstTerminator &&
|
if (!FirstTerminator &&
|
||||||
(I.isTerminator() || (I.isEHLabel() && &I != &MBB->front()))) {
|
(I.isTerminator() || isTerminatingEHLabel(MBB, I))) {
|
||||||
FirstTerminator = &I;
|
FirstTerminator = &I;
|
||||||
FirstTerminatorOrder = Order;
|
FirstTerminatorOrder = Order;
|
||||||
}
|
}
|
||||||
|
@ -90,7 +90,9 @@ static inline ArrayRef<uint8_t> stabilize(BumpPtrAllocator &Alloc,
|
|||||||
TypeIndex MergingTypeTableBuilder::insertRecordAs(hash_code Hash,
|
TypeIndex MergingTypeTableBuilder::insertRecordAs(hash_code Hash,
|
||||||
ArrayRef<uint8_t> &Record) {
|
ArrayRef<uint8_t> &Record) {
|
||||||
assert(Record.size() < UINT32_MAX && "Record too big");
|
assert(Record.size() < UINT32_MAX && "Record too big");
|
||||||
assert(Record.size() % 4 == 0 && "Record is not aligned to 4 bytes!");
|
assert(Record.size() % 4 == 0 &&
|
||||||
|
"The type record size is not a multiple of 4 bytes which will cause "
|
||||||
|
"misalignment in the output TPI stream!");
|
||||||
|
|
||||||
LocallyHashedType WeakHash{Hash, Record};
|
LocallyHashedType WeakHash{Hash, Record};
|
||||||
auto Result = HashedRecords.try_emplace(WeakHash, nextTypeIndex());
|
auto Result = HashedRecords.try_emplace(WeakHash, nextTypeIndex());
|
||||||
|
@ -360,16 +360,18 @@ Error TypeStreamMerger::remapType(const CVType &Type) {
|
|||||||
[this, Type](MutableArrayRef<uint8_t> Storage) -> ArrayRef<uint8_t> {
|
[this, Type](MutableArrayRef<uint8_t> Storage) -> ArrayRef<uint8_t> {
|
||||||
return remapIndices(Type, Storage);
|
return remapIndices(Type, Storage);
|
||||||
};
|
};
|
||||||
|
unsigned AlignedSize = alignTo(Type.RecordData.size(), 4);
|
||||||
|
|
||||||
if (LLVM_LIKELY(UseGlobalHashes)) {
|
if (LLVM_LIKELY(UseGlobalHashes)) {
|
||||||
GlobalTypeTableBuilder &Dest =
|
GlobalTypeTableBuilder &Dest =
|
||||||
isIdRecord(Type.kind()) ? *DestGlobalIdStream : *DestGlobalTypeStream;
|
isIdRecord(Type.kind()) ? *DestGlobalIdStream : *DestGlobalTypeStream;
|
||||||
GloballyHashedType H = GlobalHashes[CurIndex.toArrayIndex()];
|
GloballyHashedType H = GlobalHashes[CurIndex.toArrayIndex()];
|
||||||
DestIdx = Dest.insertRecordAs(H, Type.RecordData.size(), DoSerialize);
|
DestIdx = Dest.insertRecordAs(H, AlignedSize, DoSerialize);
|
||||||
} else {
|
} else {
|
||||||
MergingTypeTableBuilder &Dest =
|
MergingTypeTableBuilder &Dest =
|
||||||
isIdRecord(Type.kind()) ? *DestIdStream : *DestTypeStream;
|
isIdRecord(Type.kind()) ? *DestIdStream : *DestTypeStream;
|
||||||
|
|
||||||
RemapStorage.resize(Type.RecordData.size());
|
RemapStorage.resize(AlignedSize);
|
||||||
ArrayRef<uint8_t> Result = DoSerialize(RemapStorage);
|
ArrayRef<uint8_t> Result = DoSerialize(RemapStorage);
|
||||||
if (!Result.empty())
|
if (!Result.empty())
|
||||||
DestIdx = Dest.insertRecordBytes(Result);
|
DestIdx = Dest.insertRecordBytes(Result);
|
||||||
@ -386,9 +388,15 @@ Error TypeStreamMerger::remapType(const CVType &Type) {
|
|||||||
ArrayRef<uint8_t>
|
ArrayRef<uint8_t>
|
||||||
TypeStreamMerger::remapIndices(const CVType &OriginalType,
|
TypeStreamMerger::remapIndices(const CVType &OriginalType,
|
||||||
MutableArrayRef<uint8_t> Storage) {
|
MutableArrayRef<uint8_t> Storage) {
|
||||||
|
unsigned Align = OriginalType.RecordData.size() & 3;
|
||||||
|
unsigned AlignedSize = alignTo(OriginalType.RecordData.size(), 4);
|
||||||
|
assert(Storage.size() == AlignedSize &&
|
||||||
|
"The storage buffer size is not a multiple of 4 bytes which will "
|
||||||
|
"cause misalignment in the output TPI stream!");
|
||||||
|
|
||||||
SmallVector<TiReference, 4> Refs;
|
SmallVector<TiReference, 4> Refs;
|
||||||
discoverTypeIndices(OriginalType.RecordData, Refs);
|
discoverTypeIndices(OriginalType.RecordData, Refs);
|
||||||
if (Refs.empty())
|
if (Refs.empty() && Align == 0)
|
||||||
return OriginalType.RecordData;
|
return OriginalType.RecordData;
|
||||||
|
|
||||||
::memcpy(Storage.data(), OriginalType.RecordData.data(),
|
::memcpy(Storage.data(), OriginalType.RecordData.data(),
|
||||||
@ -408,6 +416,16 @@ TypeStreamMerger::remapIndices(const CVType &OriginalType,
|
|||||||
return {};
|
return {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (Align > 0) {
|
||||||
|
RecordPrefix *StorageHeader =
|
||||||
|
reinterpret_cast<RecordPrefix *>(Storage.data());
|
||||||
|
StorageHeader->RecordLen += 4 - Align;
|
||||||
|
|
||||||
|
DestContent = Storage.data() + OriginalType.RecordData.size();
|
||||||
|
for (; Align < 4; ++Align)
|
||||||
|
*DestContent++ = LF_PAD4 - Align;
|
||||||
|
}
|
||||||
return Storage;
|
return Storage;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -44,6 +44,9 @@ void TpiStreamBuilder::setVersionHeader(PdbRaw_TpiVer Version) {
|
|||||||
void TpiStreamBuilder::addTypeRecord(ArrayRef<uint8_t> Record,
|
void TpiStreamBuilder::addTypeRecord(ArrayRef<uint8_t> Record,
|
||||||
Optional<uint32_t> Hash) {
|
Optional<uint32_t> Hash) {
|
||||||
// If we just crossed an 8KB threshold, add a type index offset.
|
// If we just crossed an 8KB threshold, add a type index offset.
|
||||||
|
assert(((Record.size() & 3) == 0) &&
|
||||||
|
"The type record's size is not a multiple of 4 bytes which will "
|
||||||
|
"cause misalignment in the output TPI stream!");
|
||||||
size_t NewSize = TypeRecordBytes + Record.size();
|
size_t NewSize = TypeRecordBytes + Record.size();
|
||||||
constexpr size_t EightKB = 8 * 1024;
|
constexpr size_t EightKB = 8 * 1024;
|
||||||
if (NewSize / EightKB > TypeRecordBytes / EightKB || TypeRecords.empty()) {
|
if (NewSize / EightKB > TypeRecordBytes / EightKB || TypeRecords.empty()) {
|
||||||
@ -153,8 +156,11 @@ Error TpiStreamBuilder::commit(const msf::MSFLayout &Layout,
|
|||||||
return EC;
|
return EC;
|
||||||
|
|
||||||
for (auto Rec : TypeRecords) {
|
for (auto Rec : TypeRecords) {
|
||||||
assert(!Rec.empty()); // An empty record will not write anything, but it
|
assert(!Rec.empty() && "Attempting to write an empty type record shifts "
|
||||||
// would shift all offsets from here on.
|
"all offsets in the TPI stream!");
|
||||||
|
assert(((Rec.size() & 3) == 0) &&
|
||||||
|
"The type record's size is not a multiple of 4 bytes which will "
|
||||||
|
"cause misalignment in the output TPI stream!");
|
||||||
if (auto EC = Writer.writeBytes(Rec))
|
if (auto EC = Writer.writeBytes(Rec))
|
||||||
return EC;
|
return EC;
|
||||||
}
|
}
|
||||||
|
@ -761,7 +761,6 @@ void MCObjectFileInfo::initWasmMCObjectFileInfo(const Triple &T) {
|
|||||||
Ctx->getWasmSection(".debug_ranges", SectionKind::getMetadata());
|
Ctx->getWasmSection(".debug_ranges", SectionKind::getMetadata());
|
||||||
DwarfMacinfoSection =
|
DwarfMacinfoSection =
|
||||||
Ctx->getWasmSection(".debug_macinfo", SectionKind::getMetadata());
|
Ctx->getWasmSection(".debug_macinfo", SectionKind::getMetadata());
|
||||||
DwarfAddrSection = Ctx->getWasmSection(".debug_addr", SectionKind::getMetadata());
|
|
||||||
DwarfCUIndexSection = Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
|
DwarfCUIndexSection = Ctx->getWasmSection(".debug_cu_index", SectionKind::getMetadata());
|
||||||
DwarfTUIndexSection = Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
|
DwarfTUIndexSection = Ctx->getWasmSection(".debug_tu_index", SectionKind::getMetadata());
|
||||||
DwarfInfoSection =
|
DwarfInfoSection =
|
||||||
@ -770,6 +769,17 @@ void MCObjectFileInfo::initWasmMCObjectFileInfo(const Triple &T) {
|
|||||||
DwarfPubNamesSection = Ctx->getWasmSection(".debug_pubnames", SectionKind::getMetadata());
|
DwarfPubNamesSection = Ctx->getWasmSection(".debug_pubnames", SectionKind::getMetadata());
|
||||||
DwarfPubTypesSection = Ctx->getWasmSection(".debug_pubtypes", SectionKind::getMetadata());
|
DwarfPubTypesSection = Ctx->getWasmSection(".debug_pubtypes", SectionKind::getMetadata());
|
||||||
|
|
||||||
|
DwarfDebugNamesSection =
|
||||||
|
Ctx->getWasmSection(".debug_names", SectionKind::getMetadata());
|
||||||
|
DwarfStrOffSection =
|
||||||
|
Ctx->getWasmSection(".debug_str_offsets", SectionKind::getMetadata());
|
||||||
|
DwarfAddrSection =
|
||||||
|
Ctx->getWasmSection(".debug_addr", SectionKind::getMetadata());
|
||||||
|
DwarfRnglistsSection =
|
||||||
|
Ctx->getWasmSection(".debug_rnglists", SectionKind::getMetadata());
|
||||||
|
DwarfLoclistsSection =
|
||||||
|
Ctx->getWasmSection(".debug_loclists", SectionKind::getMetadata());
|
||||||
|
|
||||||
// Wasm use data section for LSDA.
|
// Wasm use data section for LSDA.
|
||||||
// TODO Consider putting each function's exception table in a separate
|
// TODO Consider putting each function's exception table in a separate
|
||||||
// section, as in -function-sections, to facilitate lld's --gc-section.
|
// section, as in -function-sections, to facilitate lld's --gc-section.
|
||||||
|
@ -116,11 +116,22 @@ void BPFMISimplifyPatchable::checkADDrr(MachineRegisterInfo *MRI,
|
|||||||
else
|
else
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// It must be a form of %1 = *(type *)(%2 + 0) or *(type *)(%2 + 0) = %1.
|
// It must be a form of %2 = *(type *)(%1 + 0) or *(type *)(%1 + 0) = %2.
|
||||||
const MachineOperand &ImmOp = DefInst->getOperand(2);
|
const MachineOperand &ImmOp = DefInst->getOperand(2);
|
||||||
if (!ImmOp.isImm() || ImmOp.getImm() != 0)
|
if (!ImmOp.isImm() || ImmOp.getImm() != 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
// Reject the form:
|
||||||
|
// %1 = ADD_rr %2, %3
|
||||||
|
// *(type *)(%2 + 0) = %1
|
||||||
|
if (Opcode == BPF::STB || Opcode == BPF::STH || Opcode == BPF::STW ||
|
||||||
|
Opcode == BPF::STD || Opcode == BPF::STB32 || Opcode == BPF::STH32 ||
|
||||||
|
Opcode == BPF::STW32) {
|
||||||
|
const MachineOperand &Opnd = DefInst->getOperand(0);
|
||||||
|
if (Opnd.isReg() && Opnd.getReg() == I->getReg())
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
BuildMI(*DefInst->getParent(), *DefInst, DefInst->getDebugLoc(), TII->get(COREOp))
|
BuildMI(*DefInst->getParent(), *DefInst, DefInst->getDebugLoc(), TII->get(COREOp))
|
||||||
.add(DefInst->getOperand(0)).addImm(Opcode).add(*BaseOp)
|
.add(DefInst->getOperand(0)).addImm(Opcode).add(*BaseOp)
|
||||||
.addGlobalAddress(GVal);
|
.addGlobalAddress(GVal);
|
||||||
|
@ -7720,15 +7720,17 @@ void PPCTargetLowering::LowerFP_TO_INTForReuse(SDValue Op, ReuseLoadInfo &RLI,
|
|||||||
|
|
||||||
// Emit a store to the stack slot.
|
// Emit a store to the stack slot.
|
||||||
SDValue Chain;
|
SDValue Chain;
|
||||||
|
unsigned Alignment = DAG.getEVTAlignment(Tmp.getValueType());
|
||||||
if (i32Stack) {
|
if (i32Stack) {
|
||||||
MachineFunction &MF = DAG.getMachineFunction();
|
MachineFunction &MF = DAG.getMachineFunction();
|
||||||
|
Alignment = 4;
|
||||||
MachineMemOperand *MMO =
|
MachineMemOperand *MMO =
|
||||||
MF.getMachineMemOperand(MPI, MachineMemOperand::MOStore, 4, 4);
|
MF.getMachineMemOperand(MPI, MachineMemOperand::MOStore, 4, Alignment);
|
||||||
SDValue Ops[] = { DAG.getEntryNode(), Tmp, FIPtr };
|
SDValue Ops[] = { DAG.getEntryNode(), Tmp, FIPtr };
|
||||||
Chain = DAG.getMemIntrinsicNode(PPCISD::STFIWX, dl,
|
Chain = DAG.getMemIntrinsicNode(PPCISD::STFIWX, dl,
|
||||||
DAG.getVTList(MVT::Other), Ops, MVT::i32, MMO);
|
DAG.getVTList(MVT::Other), Ops, MVT::i32, MMO);
|
||||||
} else
|
} else
|
||||||
Chain = DAG.getStore(DAG.getEntryNode(), dl, Tmp, FIPtr, MPI);
|
Chain = DAG.getStore(DAG.getEntryNode(), dl, Tmp, FIPtr, MPI, Alignment);
|
||||||
|
|
||||||
// Result is a load from the stack slot. If loading 4 bytes, make sure to
|
// Result is a load from the stack slot. If loading 4 bytes, make sure to
|
||||||
// add in a bias on big endian.
|
// add in a bias on big endian.
|
||||||
@ -7741,6 +7743,7 @@ void PPCTargetLowering::LowerFP_TO_INTForReuse(SDValue Op, ReuseLoadInfo &RLI,
|
|||||||
RLI.Chain = Chain;
|
RLI.Chain = Chain;
|
||||||
RLI.Ptr = FIPtr;
|
RLI.Ptr = FIPtr;
|
||||||
RLI.MPI = MPI;
|
RLI.MPI = MPI;
|
||||||
|
RLI.Alignment = Alignment;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Custom lowers floating point to integer conversions to use
|
/// Custom lowers floating point to integer conversions to use
|
||||||
@ -13589,7 +13592,7 @@ SDValue PPCTargetLowering::combineStoreFPToInt(SDNode *N,
|
|||||||
(Op1VT == MVT::i32 || Op1VT == MVT::i64 ||
|
(Op1VT == MVT::i32 || Op1VT == MVT::i64 ||
|
||||||
(Subtarget.hasP9Vector() && (Op1VT == MVT::i16 || Op1VT == MVT::i8)));
|
(Subtarget.hasP9Vector() && (Op1VT == MVT::i16 || Op1VT == MVT::i8)));
|
||||||
|
|
||||||
if (ResVT == MVT::ppcf128 || !Subtarget.hasP8Altivec() ||
|
if (ResVT == MVT::ppcf128 || !Subtarget.hasP8Vector() ||
|
||||||
cast<StoreSDNode>(N)->isTruncatingStore() || !ValidTypeForStoreFltAsInt)
|
cast<StoreSDNode>(N)->isTruncatingStore() || !ValidTypeForStoreFltAsInt)
|
||||||
return SDValue();
|
return SDValue();
|
||||||
|
|
||||||
|
@ -33998,6 +33998,7 @@ static SDValue combineX86ShufflesConstants(ArrayRef<SDValue> Ops,
|
|||||||
return SDValue();
|
return SDValue();
|
||||||
|
|
||||||
// Shuffle the constant bits according to the mask.
|
// Shuffle the constant bits according to the mask.
|
||||||
|
SDLoc DL(Root);
|
||||||
APInt UndefElts(NumMaskElts, 0);
|
APInt UndefElts(NumMaskElts, 0);
|
||||||
APInt ZeroElts(NumMaskElts, 0);
|
APInt ZeroElts(NumMaskElts, 0);
|
||||||
APInt ConstantElts(NumMaskElts, 0);
|
APInt ConstantElts(NumMaskElts, 0);
|
||||||
@ -34035,6 +34036,10 @@ static SDValue combineX86ShufflesConstants(ArrayRef<SDValue> Ops,
|
|||||||
}
|
}
|
||||||
assert((UndefElts | ZeroElts | ConstantElts).isAllOnesValue());
|
assert((UndefElts | ZeroElts | ConstantElts).isAllOnesValue());
|
||||||
|
|
||||||
|
// Attempt to create a zero vector.
|
||||||
|
if ((UndefElts | ZeroElts).isAllOnesValue())
|
||||||
|
return getZeroVector(Root.getSimpleValueType(), Subtarget, DAG, DL);
|
||||||
|
|
||||||
// Create the constant data.
|
// Create the constant data.
|
||||||
MVT MaskSVT;
|
MVT MaskSVT;
|
||||||
if (VT.isFloatingPoint() && (MaskSizeInBits == 32 || MaskSizeInBits == 64))
|
if (VT.isFloatingPoint() && (MaskSizeInBits == 32 || MaskSizeInBits == 64))
|
||||||
@ -34043,8 +34048,9 @@ static SDValue combineX86ShufflesConstants(ArrayRef<SDValue> Ops,
|
|||||||
MaskSVT = MVT::getIntegerVT(MaskSizeInBits);
|
MaskSVT = MVT::getIntegerVT(MaskSizeInBits);
|
||||||
|
|
||||||
MVT MaskVT = MVT::getVectorVT(MaskSVT, NumMaskElts);
|
MVT MaskVT = MVT::getVectorVT(MaskSVT, NumMaskElts);
|
||||||
|
if (!DAG.getTargetLoweringInfo().isTypeLegal(MaskVT))
|
||||||
|
return SDValue();
|
||||||
|
|
||||||
SDLoc DL(Root);
|
|
||||||
SDValue CstOp = getConstVector(ConstantBitData, UndefElts, MaskVT, DAG, DL);
|
SDValue CstOp = getConstVector(ConstantBitData, UndefElts, MaskVT, DAG, DL);
|
||||||
return DAG.getBitcast(VT, CstOp);
|
return DAG.getBitcast(VT, CstOp);
|
||||||
}
|
}
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "X86.h"
|
#include "X86.h"
|
||||||
#include "X86InstrInfo.h"
|
#include "X86InstrInfo.h"
|
||||||
#include "X86Subtarget.h"
|
#include "X86Subtarget.h"
|
||||||
|
#include "X86TargetMachine.h"
|
||||||
#include "llvm/ADT/Statistic.h"
|
#include "llvm/ADT/Statistic.h"
|
||||||
#include "llvm/CodeGen/MachineFunctionPass.h"
|
#include "llvm/CodeGen/MachineFunctionPass.h"
|
||||||
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
#include "llvm/CodeGen/MachineInstrBuilder.h"
|
||||||
@ -102,7 +103,16 @@ bool X86IndirectBranchTrackingPass::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
// Check that the cf-protection-branch is enabled.
|
// Check that the cf-protection-branch is enabled.
|
||||||
Metadata *isCFProtectionSupported =
|
Metadata *isCFProtectionSupported =
|
||||||
MF.getMMI().getModule()->getModuleFlag("cf-protection-branch");
|
MF.getMMI().getModule()->getModuleFlag("cf-protection-branch");
|
||||||
if (!isCFProtectionSupported && !IndirectBranchTracking)
|
// NB: We need to enable IBT in jitted code if JIT compiler is CET
|
||||||
|
// enabled.
|
||||||
|
const X86TargetMachine *TM =
|
||||||
|
static_cast<const X86TargetMachine *>(&MF.getTarget());
|
||||||
|
#ifdef __CET__
|
||||||
|
bool isJITwithCET = TM->isJIT();
|
||||||
|
#else
|
||||||
|
bool isJITwithCET = false;
|
||||||
|
#endif
|
||||||
|
if (!isCFProtectionSupported && !IndirectBranchTracking && !isJITwithCET)
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// True if the current MF was changed and false otherwise.
|
// True if the current MF was changed and false otherwise.
|
||||||
@ -111,10 +121,11 @@ bool X86IndirectBranchTrackingPass::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
TII = SubTarget.getInstrInfo();
|
TII = SubTarget.getInstrInfo();
|
||||||
EndbrOpcode = SubTarget.is64Bit() ? X86::ENDBR64 : X86::ENDBR32;
|
EndbrOpcode = SubTarget.is64Bit() ? X86::ENDBR64 : X86::ENDBR32;
|
||||||
|
|
||||||
// Non-internal function or function whose address was taken, can be
|
// Large code model, non-internal function or function whose address
|
||||||
// accessed through indirect calls. Mark the first BB with ENDBR instruction
|
// was taken, can be accessed through indirect calls. Mark the first
|
||||||
// unless nocf_check attribute is used.
|
// BB with ENDBR instruction unless nocf_check attribute is used.
|
||||||
if ((MF.getFunction().hasAddressTaken() ||
|
if ((TM->getCodeModel() == CodeModel::Large ||
|
||||||
|
MF.getFunction().hasAddressTaken() ||
|
||||||
!MF.getFunction().hasLocalLinkage()) &&
|
!MF.getFunction().hasLocalLinkage()) &&
|
||||||
!MF.getFunction().doesNoCfCheck()) {
|
!MF.getFunction().doesNoCfCheck()) {
|
||||||
auto MBB = MF.begin();
|
auto MBB = MF.begin();
|
||||||
@ -127,11 +138,18 @@ bool X86IndirectBranchTrackingPass::runOnMachineFunction(MachineFunction &MF) {
|
|||||||
if (MBB.hasAddressTaken())
|
if (MBB.hasAddressTaken())
|
||||||
Changed |= addENDBR(MBB, MBB.begin());
|
Changed |= addENDBR(MBB, MBB.begin());
|
||||||
|
|
||||||
|
// Exception handle may indirectly jump to catch pad, So we should add
|
||||||
|
// ENDBR before catch pad instructions.
|
||||||
|
bool EHPadIBTNeeded = MBB.isEHPad();
|
||||||
|
|
||||||
for (MachineBasicBlock::iterator I = MBB.begin(); I != MBB.end(); ++I) {
|
for (MachineBasicBlock::iterator I = MBB.begin(); I != MBB.end(); ++I) {
|
||||||
if (!I->isCall())
|
if (I->isCall() && IsCallReturnTwice(I->getOperand(0)))
|
||||||
continue;
|
|
||||||
if (IsCallReturnTwice(I->getOperand(0)))
|
|
||||||
Changed |= addENDBR(MBB, std::next(I));
|
Changed |= addENDBR(MBB, std::next(I));
|
||||||
|
|
||||||
|
if (EHPadIBTNeeded && I->isEHLabel()) {
|
||||||
|
Changed |= addENDBR(MBB, std::next(I));
|
||||||
|
EHPadIBTNeeded = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return Changed;
|
return Changed;
|
||||||
|
@ -222,7 +222,7 @@ X86TargetMachine::X86TargetMachine(const Target &T, const Triple &TT,
|
|||||||
getEffectiveRelocModel(TT, JIT, RM),
|
getEffectiveRelocModel(TT, JIT, RM),
|
||||||
getEffectiveX86CodeModel(CM, JIT, TT.getArch() == Triple::x86_64),
|
getEffectiveX86CodeModel(CM, JIT, TT.getArch() == Triple::x86_64),
|
||||||
OL),
|
OL),
|
||||||
TLOF(createTLOF(getTargetTriple())) {
|
TLOF(createTLOF(getTargetTriple())), IsJIT(JIT) {
|
||||||
// On PS4, the "return address" of a 'noreturn' call must still be within
|
// On PS4, the "return address" of a 'noreturn' call must still be within
|
||||||
// the calling function, and TrapUnreachable is an easy way to get that.
|
// the calling function, and TrapUnreachable is an easy way to get that.
|
||||||
if (TT.isPS4() || TT.isOSBinFormatMachO()) {
|
if (TT.isPS4() || TT.isOSBinFormatMachO()) {
|
||||||
|
@ -30,6 +30,8 @@ class TargetTransformInfo;
|
|||||||
class X86TargetMachine final : public LLVMTargetMachine {
|
class X86TargetMachine final : public LLVMTargetMachine {
|
||||||
std::unique_ptr<TargetLoweringObjectFile> TLOF;
|
std::unique_ptr<TargetLoweringObjectFile> TLOF;
|
||||||
mutable StringMap<std::unique_ptr<X86Subtarget>> SubtargetMap;
|
mutable StringMap<std::unique_ptr<X86Subtarget>> SubtargetMap;
|
||||||
|
// True if this is used in JIT.
|
||||||
|
bool IsJIT;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
X86TargetMachine(const Target &T, const Triple &TT, StringRef CPU,
|
X86TargetMachine(const Target &T, const Triple &TT, StringRef CPU,
|
||||||
@ -52,6 +54,8 @@ class X86TargetMachine final : public LLVMTargetMachine {
|
|||||||
TargetLoweringObjectFile *getObjFileLowering() const override {
|
TargetLoweringObjectFile *getObjFileLowering() const override {
|
||||||
return TLOF.get();
|
return TLOF.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool isJIT() const { return IsJIT; }
|
||||||
};
|
};
|
||||||
|
|
||||||
} // end namespace llvm
|
} // end namespace llvm
|
||||||
|
@ -1155,7 +1155,10 @@ static void simplifySuspendPoints(coro::Shape &Shape) {
|
|||||||
if (N == 0)
|
if (N == 0)
|
||||||
return;
|
return;
|
||||||
while (true) {
|
while (true) {
|
||||||
if (simplifySuspendPoint(cast<CoroSuspendInst>(S[I]), Shape.CoroBegin)) {
|
auto SI = cast<CoroSuspendInst>(S[I]);
|
||||||
|
// Leave final.suspend to handleFinalSuspend since it is undefined behavior
|
||||||
|
// to resume a coroutine suspended at the final suspend point.
|
||||||
|
if (!SI->isFinal() && simplifySuspendPoint(SI, Shape.CoroBegin)) {
|
||||||
if (--N == I)
|
if (--N == I)
|
||||||
break;
|
break;
|
||||||
std::swap(S[I], S[N]);
|
std::swap(S[I], S[N]);
|
||||||
|
@ -450,14 +450,19 @@ static bool CanDoGlobalSRA(GlobalVariable *GV) {
|
|||||||
/// Copy over the debug info for a variable to its SRA replacements.
|
/// Copy over the debug info for a variable to its SRA replacements.
|
||||||
static void transferSRADebugInfo(GlobalVariable *GV, GlobalVariable *NGV,
|
static void transferSRADebugInfo(GlobalVariable *GV, GlobalVariable *NGV,
|
||||||
uint64_t FragmentOffsetInBits,
|
uint64_t FragmentOffsetInBits,
|
||||||
uint64_t FragmentSizeInBits,
|
uint64_t FragmentSizeInBits) {
|
||||||
unsigned NumElements) {
|
|
||||||
SmallVector<DIGlobalVariableExpression *, 1> GVs;
|
SmallVector<DIGlobalVariableExpression *, 1> GVs;
|
||||||
GV->getDebugInfo(GVs);
|
GV->getDebugInfo(GVs);
|
||||||
for (auto *GVE : GVs) {
|
for (auto *GVE : GVs) {
|
||||||
DIVariable *Var = GVE->getVariable();
|
DIVariable *Var = GVE->getVariable();
|
||||||
|
Optional<uint64_t> VarSize = Var->getSizeInBits();
|
||||||
|
|
||||||
DIExpression *Expr = GVE->getExpression();
|
DIExpression *Expr = GVE->getExpression();
|
||||||
if (NumElements > 1) {
|
// If the FragmentSize is smaller than the variable,
|
||||||
|
// emit a fragment expression.
|
||||||
|
// If the variable size is unknown a fragment must be
|
||||||
|
// emitted to be safe.
|
||||||
|
if (!VarSize || FragmentSizeInBits < *VarSize) {
|
||||||
if (auto E = DIExpression::createFragmentExpression(
|
if (auto E = DIExpression::createFragmentExpression(
|
||||||
Expr, FragmentOffsetInBits, FragmentSizeInBits))
|
Expr, FragmentOffsetInBits, FragmentSizeInBits))
|
||||||
Expr = *E;
|
Expr = *E;
|
||||||
@ -539,8 +544,7 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const DataLayout &DL) {
|
|||||||
// Copy over the debug info for the variable.
|
// Copy over the debug info for the variable.
|
||||||
uint64_t Size = DL.getTypeAllocSizeInBits(NGV->getValueType());
|
uint64_t Size = DL.getTypeAllocSizeInBits(NGV->getValueType());
|
||||||
uint64_t FragmentOffsetInBits = Layout.getElementOffsetInBits(ElementIdx);
|
uint64_t FragmentOffsetInBits = Layout.getElementOffsetInBits(ElementIdx);
|
||||||
transferSRADebugInfo(GV, NGV, FragmentOffsetInBits, Size,
|
transferSRADebugInfo(GV, NGV, FragmentOffsetInBits, Size);
|
||||||
STy->getNumElements());
|
|
||||||
} else if (SequentialType *STy = dyn_cast<SequentialType>(Ty)) {
|
} else if (SequentialType *STy = dyn_cast<SequentialType>(Ty)) {
|
||||||
uint64_t EltSize = DL.getTypeAllocSize(ElTy);
|
uint64_t EltSize = DL.getTypeAllocSize(ElTy);
|
||||||
Align EltAlign(DL.getABITypeAlignment(ElTy));
|
Align EltAlign(DL.getABITypeAlignment(ElTy));
|
||||||
@ -553,7 +557,7 @@ static GlobalVariable *SRAGlobal(GlobalVariable *GV, const DataLayout &DL) {
|
|||||||
if (NewAlign > EltAlign)
|
if (NewAlign > EltAlign)
|
||||||
NGV->setAlignment(NewAlign);
|
NGV->setAlignment(NewAlign);
|
||||||
transferSRADebugInfo(GV, NGV, FragmentSizeInBits * ElementIdx,
|
transferSRADebugInfo(GV, NGV, FragmentSizeInBits * ElementIdx,
|
||||||
FragmentSizeInBits, STy->getNumElements());
|
FragmentSizeInBits);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -115,7 +115,8 @@ class GCOVProfiler {
|
|||||||
// list.
|
// list.
|
||||||
Function *
|
Function *
|
||||||
insertCounterWriteout(ArrayRef<std::pair<GlobalVariable *, MDNode *>>);
|
insertCounterWriteout(ArrayRef<std::pair<GlobalVariable *, MDNode *>>);
|
||||||
Function *insertFlush(ArrayRef<std::pair<GlobalVariable *, MDNode *>>);
|
Function *insertReset(ArrayRef<std::pair<GlobalVariable *, MDNode *>>);
|
||||||
|
Function *insertFlush(Function *ResetF);
|
||||||
|
|
||||||
void AddFlushBeforeForkAndExec();
|
void AddFlushBeforeForkAndExec();
|
||||||
|
|
||||||
@ -630,35 +631,76 @@ static bool shouldKeepInEntry(BasicBlock::iterator It) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void GCOVProfiler::AddFlushBeforeForkAndExec() {
|
void GCOVProfiler::AddFlushBeforeForkAndExec() {
|
||||||
SmallVector<Instruction *, 2> ForkAndExecs;
|
SmallVector<CallInst *, 2> Forks;
|
||||||
|
SmallVector<CallInst *, 2> Execs;
|
||||||
for (auto &F : M->functions()) {
|
for (auto &F : M->functions()) {
|
||||||
auto *TLI = &GetTLI(F);
|
auto *TLI = &GetTLI(F);
|
||||||
for (auto &I : instructions(F)) {
|
for (auto &I : instructions(F)) {
|
||||||
if (CallInst *CI = dyn_cast<CallInst>(&I)) {
|
if (CallInst *CI = dyn_cast<CallInst>(&I)) {
|
||||||
if (Function *Callee = CI->getCalledFunction()) {
|
if (Function *Callee = CI->getCalledFunction()) {
|
||||||
LibFunc LF;
|
LibFunc LF;
|
||||||
if (TLI->getLibFunc(*Callee, LF) &&
|
if (TLI->getLibFunc(*Callee, LF)) {
|
||||||
(LF == LibFunc_fork || LF == LibFunc_execl ||
|
if (LF == LibFunc_fork) {
|
||||||
LF == LibFunc_execle || LF == LibFunc_execlp ||
|
#if !defined(_WIN32)
|
||||||
LF == LibFunc_execv || LF == LibFunc_execvp ||
|
Forks.push_back(CI);
|
||||||
LF == LibFunc_execve || LF == LibFunc_execvpe ||
|
#endif
|
||||||
LF == LibFunc_execvP)) {
|
} else if (LF == LibFunc_execl || LF == LibFunc_execle ||
|
||||||
ForkAndExecs.push_back(&I);
|
LF == LibFunc_execlp || LF == LibFunc_execv ||
|
||||||
|
LF == LibFunc_execvp || LF == LibFunc_execve ||
|
||||||
|
LF == LibFunc_execvpe || LF == LibFunc_execvP) {
|
||||||
|
Execs.push_back(CI);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// We need to split the block after the fork/exec call
|
for (auto F : Forks) {
|
||||||
// because else the counters for the lines after will be
|
IRBuilder<> Builder(F);
|
||||||
// the same as before the call.
|
BasicBlock *Parent = F->getParent();
|
||||||
for (auto I : ForkAndExecs) {
|
auto NextInst = ++F->getIterator();
|
||||||
IRBuilder<> Builder(I);
|
|
||||||
|
// We've a fork so just reset the counters in the child process
|
||||||
|
FunctionType *FTy = FunctionType::get(Builder.getInt32Ty(), {}, false);
|
||||||
|
FunctionCallee GCOVFork = M->getOrInsertFunction("__gcov_fork", FTy);
|
||||||
|
F->setCalledFunction(GCOVFork);
|
||||||
|
|
||||||
|
// We split just after the fork to have a counter for the lines after
|
||||||
|
// Anyway there's a bug:
|
||||||
|
// void foo() { fork(); }
|
||||||
|
// void bar() { foo(); blah(); }
|
||||||
|
// then "blah();" will be called 2 times but showed as 1
|
||||||
|
// because "blah()" belongs to the same block as "foo();"
|
||||||
|
Parent->splitBasicBlock(NextInst);
|
||||||
|
|
||||||
|
// back() is a br instruction with a debug location
|
||||||
|
// equals to the one from NextAfterFork
|
||||||
|
// So to avoid to have two debug locs on two blocks just change it
|
||||||
|
DebugLoc Loc = F->getDebugLoc();
|
||||||
|
Parent->back().setDebugLoc(Loc);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (auto E : Execs) {
|
||||||
|
IRBuilder<> Builder(E);
|
||||||
|
BasicBlock *Parent = E->getParent();
|
||||||
|
auto NextInst = ++E->getIterator();
|
||||||
|
|
||||||
|
// Since the process is replaced by a new one we need to write out gcdas
|
||||||
|
// No need to reset the counters since they'll be lost after the exec**
|
||||||
FunctionType *FTy = FunctionType::get(Builder.getVoidTy(), {}, false);
|
FunctionType *FTy = FunctionType::get(Builder.getVoidTy(), {}, false);
|
||||||
FunctionCallee GCOVFlush = M->getOrInsertFunction("__gcov_flush", FTy);
|
FunctionCallee WriteoutF =
|
||||||
Builder.CreateCall(GCOVFlush);
|
M->getOrInsertFunction("llvm_writeout_files", FTy);
|
||||||
I->getParent()->splitBasicBlock(I);
|
Builder.CreateCall(WriteoutF);
|
||||||
|
|
||||||
|
DebugLoc Loc = E->getDebugLoc();
|
||||||
|
Builder.SetInsertPoint(&*NextInst);
|
||||||
|
// If the exec** fails we must reset the counters since they've been
|
||||||
|
// dumped
|
||||||
|
FunctionCallee ResetF = M->getOrInsertFunction("llvm_reset_counters", FTy);
|
||||||
|
Builder.CreateCall(ResetF)->setDebugLoc(Loc);
|
||||||
|
Parent->splitBasicBlock(NextInst);
|
||||||
|
Parent->back().setDebugLoc(Loc);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -850,7 +892,8 @@ bool GCOVProfiler::emitProfileArcs() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Function *WriteoutF = insertCounterWriteout(CountersBySP);
|
Function *WriteoutF = insertCounterWriteout(CountersBySP);
|
||||||
Function *FlushF = insertFlush(CountersBySP);
|
Function *ResetF = insertReset(CountersBySP);
|
||||||
|
Function *FlushF = insertFlush(ResetF);
|
||||||
|
|
||||||
// Create a small bit of code that registers the "__llvm_gcov_writeout" to
|
// Create a small bit of code that registers the "__llvm_gcov_writeout" to
|
||||||
// be executed at exit and the "__llvm_gcov_flush" function to be executed
|
// be executed at exit and the "__llvm_gcov_flush" function to be executed
|
||||||
@ -868,16 +911,14 @@ bool GCOVProfiler::emitProfileArcs() {
|
|||||||
IRBuilder<> Builder(BB);
|
IRBuilder<> Builder(BB);
|
||||||
|
|
||||||
FTy = FunctionType::get(Type::getVoidTy(*Ctx), false);
|
FTy = FunctionType::get(Type::getVoidTy(*Ctx), false);
|
||||||
Type *Params[] = {
|
Type *Params[] = {PointerType::get(FTy, 0), PointerType::get(FTy, 0),
|
||||||
PointerType::get(FTy, 0),
|
PointerType::get(FTy, 0)};
|
||||||
PointerType::get(FTy, 0)
|
|
||||||
};
|
|
||||||
FTy = FunctionType::get(Builder.getVoidTy(), Params, false);
|
FTy = FunctionType::get(Builder.getVoidTy(), Params, false);
|
||||||
|
|
||||||
// Initialize the environment and register the local writeout and flush
|
// Initialize the environment and register the local writeout, flush and
|
||||||
// functions.
|
// reset functions.
|
||||||
FunctionCallee GCOVInit = M->getOrInsertFunction("llvm_gcov_init", FTy);
|
FunctionCallee GCOVInit = M->getOrInsertFunction("llvm_gcov_init", FTy);
|
||||||
Builder.CreateCall(GCOVInit, {WriteoutF, FlushF});
|
Builder.CreateCall(GCOVInit, {WriteoutF, FlushF, ResetF});
|
||||||
Builder.CreateRetVoid();
|
Builder.CreateRetVoid();
|
||||||
|
|
||||||
appendToGlobalCtors(*M, F, 0);
|
appendToGlobalCtors(*M, F, 0);
|
||||||
@ -1190,8 +1231,43 @@ Function *GCOVProfiler::insertCounterWriteout(
|
|||||||
return WriteoutF;
|
return WriteoutF;
|
||||||
}
|
}
|
||||||
|
|
||||||
Function *GCOVProfiler::
|
Function *GCOVProfiler::insertReset(
|
||||||
insertFlush(ArrayRef<std::pair<GlobalVariable*, MDNode*> > CountersBySP) {
|
ArrayRef<std::pair<GlobalVariable *, MDNode *>> CountersBySP) {
|
||||||
|
FunctionType *FTy = FunctionType::get(Type::getVoidTy(*Ctx), false);
|
||||||
|
Function *ResetF = M->getFunction("__llvm_gcov_reset");
|
||||||
|
if (!ResetF)
|
||||||
|
ResetF = Function::Create(FTy, GlobalValue::InternalLinkage,
|
||||||
|
"__llvm_gcov_reset", M);
|
||||||
|
else
|
||||||
|
ResetF->setLinkage(GlobalValue::InternalLinkage);
|
||||||
|
ResetF->setUnnamedAddr(GlobalValue::UnnamedAddr::Global);
|
||||||
|
ResetF->addFnAttr(Attribute::NoInline);
|
||||||
|
if (Options.NoRedZone)
|
||||||
|
ResetF->addFnAttr(Attribute::NoRedZone);
|
||||||
|
|
||||||
|
BasicBlock *Entry = BasicBlock::Create(*Ctx, "entry", ResetF);
|
||||||
|
IRBuilder<> Builder(Entry);
|
||||||
|
|
||||||
|
// Zero out the counters.
|
||||||
|
for (const auto &I : CountersBySP) {
|
||||||
|
GlobalVariable *GV = I.first;
|
||||||
|
Constant *Null = Constant::getNullValue(GV->getValueType());
|
||||||
|
Builder.CreateStore(Null, GV);
|
||||||
|
}
|
||||||
|
|
||||||
|
Type *RetTy = ResetF->getReturnType();
|
||||||
|
if (RetTy->isVoidTy())
|
||||||
|
Builder.CreateRetVoid();
|
||||||
|
else if (RetTy->isIntegerTy())
|
||||||
|
// Used if __llvm_gcov_reset was implicitly declared.
|
||||||
|
Builder.CreateRet(ConstantInt::get(RetTy, 0));
|
||||||
|
else
|
||||||
|
report_fatal_error("invalid return type for __llvm_gcov_reset");
|
||||||
|
|
||||||
|
return ResetF;
|
||||||
|
}
|
||||||
|
|
||||||
|
Function *GCOVProfiler::insertFlush(Function *ResetF) {
|
||||||
FunctionType *FTy = FunctionType::get(Type::getVoidTy(*Ctx), false);
|
FunctionType *FTy = FunctionType::get(Type::getVoidTy(*Ctx), false);
|
||||||
Function *FlushF = M->getFunction("__llvm_gcov_flush");
|
Function *FlushF = M->getFunction("__llvm_gcov_flush");
|
||||||
if (!FlushF)
|
if (!FlushF)
|
||||||
@ -1212,16 +1288,10 @@ insertFlush(ArrayRef<std::pair<GlobalVariable*, MDNode*> > CountersBySP) {
|
|||||||
|
|
||||||
IRBuilder<> Builder(Entry);
|
IRBuilder<> Builder(Entry);
|
||||||
Builder.CreateCall(WriteoutF, {});
|
Builder.CreateCall(WriteoutF, {});
|
||||||
|
Builder.CreateCall(ResetF, {});
|
||||||
// Zero out the counters.
|
|
||||||
for (const auto &I : CountersBySP) {
|
|
||||||
GlobalVariable *GV = I.first;
|
|
||||||
Constant *Null = Constant::getNullValue(GV->getValueType());
|
|
||||||
Builder.CreateStore(Null, GV);
|
|
||||||
}
|
|
||||||
|
|
||||||
Type *RetTy = FlushF->getReturnType();
|
Type *RetTy = FlushF->getReturnType();
|
||||||
if (RetTy == Type::getVoidTy(*Ctx))
|
if (RetTy->isVoidTy())
|
||||||
Builder.CreateRetVoid();
|
Builder.CreateRetVoid();
|
||||||
else if (RetTy->isIntegerTy())
|
else if (RetTy->isIntegerTy())
|
||||||
// Used if __llvm_gcov_flush was implicitly declared.
|
// Used if __llvm_gcov_flush was implicitly declared.
|
||||||
|
@ -104,6 +104,21 @@ static bool mergeEmptyReturnBlocks(Function &F) {
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Skip merging if this would result in a CallBr instruction with a
|
||||||
|
// duplicate destination. FIXME: See note in CodeGenPrepare.cpp.
|
||||||
|
bool SkipCallBr = false;
|
||||||
|
for (pred_iterator PI = pred_begin(&BB), E = pred_end(&BB);
|
||||||
|
PI != E && !SkipCallBr; ++PI) {
|
||||||
|
if (auto *CBI = dyn_cast<CallBrInst>((*PI)->getTerminator()))
|
||||||
|
for (unsigned i = 0, e = CBI->getNumSuccessors(); i != e; ++i)
|
||||||
|
if (RetBlock == CBI->getSuccessor(i)) {
|
||||||
|
SkipCallBr = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (SkipCallBr)
|
||||||
|
continue;
|
||||||
|
|
||||||
// Otherwise, we found a duplicate return block. Merge the two.
|
// Otherwise, we found a duplicate return block. Merge the two.
|
||||||
Changed = true;
|
Changed = true;
|
||||||
|
|
||||||
|
@ -2254,27 +2254,28 @@ Error BinaryWriter::finalize() {
|
|||||||
OrderedSegments.erase(End, std::end(OrderedSegments));
|
OrderedSegments.erase(End, std::end(OrderedSegments));
|
||||||
|
|
||||||
// Compute the section LMA based on its sh_offset and the containing segment's
|
// Compute the section LMA based on its sh_offset and the containing segment's
|
||||||
// p_offset and p_paddr. Also compute the minimum LMA of all sections as
|
// p_offset and p_paddr. Also compute the minimum LMA of all non-empty
|
||||||
// MinAddr. In the output, the contents between address 0 and MinAddr will be
|
// sections as MinAddr. In the output, the contents between address 0 and
|
||||||
// skipped.
|
// MinAddr will be skipped.
|
||||||
uint64_t MinAddr = UINT64_MAX;
|
uint64_t MinAddr = UINT64_MAX;
|
||||||
for (SectionBase &Sec : Obj.allocSections()) {
|
for (SectionBase &Sec : Obj.allocSections()) {
|
||||||
if (Sec.ParentSegment != nullptr)
|
if (Sec.ParentSegment != nullptr)
|
||||||
Sec.Addr =
|
Sec.Addr =
|
||||||
Sec.Offset - Sec.ParentSegment->Offset + Sec.ParentSegment->PAddr;
|
Sec.Offset - Sec.ParentSegment->Offset + Sec.ParentSegment->PAddr;
|
||||||
MinAddr = std::min(MinAddr, Sec.Addr);
|
if (Sec.Size > 0)
|
||||||
|
MinAddr = std::min(MinAddr, Sec.Addr);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Now that every section has been laid out we just need to compute the total
|
// Now that every section has been laid out we just need to compute the total
|
||||||
// file size. This might not be the same as the offset returned by
|
// file size. This might not be the same as the offset returned by
|
||||||
// layoutSections, because we want to truncate the last segment to the end of
|
// layoutSections, because we want to truncate the last segment to the end of
|
||||||
// its last section, to match GNU objcopy's behaviour.
|
// its last non-empty section, to match GNU objcopy's behaviour.
|
||||||
TotalSize = 0;
|
TotalSize = 0;
|
||||||
for (SectionBase &Sec : Obj.allocSections()) {
|
for (SectionBase &Sec : Obj.allocSections())
|
||||||
Sec.Offset = Sec.Addr - MinAddr;
|
if (Sec.Type != SHT_NOBITS && Sec.Size > 0) {
|
||||||
if (Sec.Type != SHT_NOBITS)
|
Sec.Offset = Sec.Addr - MinAddr;
|
||||||
TotalSize = std::max(TotalSize, Sec.Offset + Sec.Size);
|
TotalSize = std::max(TotalSize, Sec.Offset + Sec.Size);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Error E = Buf.allocate(TotalSize))
|
if (Error E = Buf.allocate(TotalSize))
|
||||||
return E;
|
return E;
|
||||||
|
@ -322,11 +322,25 @@ enum class ToolType { Objcopy, Strip, InstallNameTool };
|
|||||||
int main(int argc, char **argv) {
|
int main(int argc, char **argv) {
|
||||||
InitLLVM X(argc, argv);
|
InitLLVM X(argc, argv);
|
||||||
ToolName = argv[0];
|
ToolName = argv[0];
|
||||||
ToolType Tool = StringSwitch<ToolType>(sys::path::stem(ToolName))
|
|
||||||
.EndsWith("strip", ToolType::Strip)
|
StringRef Stem = sys::path::stem(ToolName);
|
||||||
.EndsWith("install-name-tool", ToolType::InstallNameTool)
|
auto Is = [=](StringRef Tool) {
|
||||||
.EndsWith("install_name_tool", ToolType::InstallNameTool)
|
// We need to recognize the following filenames:
|
||||||
.Default(ToolType::Objcopy);
|
//
|
||||||
|
// llvm-objcopy -> objcopy
|
||||||
|
// strip-10.exe -> strip
|
||||||
|
// powerpc64-unknown-freebsd13-objcopy -> objcopy
|
||||||
|
// llvm-install-name-tool -> install-name-tool
|
||||||
|
auto I = Stem.rfind_lower(Tool);
|
||||||
|
return I != StringRef::npos &&
|
||||||
|
(I + Tool.size() == Stem.size() || !isAlnum(Stem[I + Tool.size()]));
|
||||||
|
};
|
||||||
|
ToolType Tool = ToolType::Objcopy;
|
||||||
|
if (Is("strip"))
|
||||||
|
Tool = ToolType::Strip;
|
||||||
|
else if (Is("install-name-tool") || Is("install_name_tool"))
|
||||||
|
Tool = ToolType::InstallNameTool;
|
||||||
|
|
||||||
// Expand response files.
|
// Expand response files.
|
||||||
// TODO: Move these lines, which are copied from lib/Support/CommandLine.cpp,
|
// TODO: Move these lines, which are copied from lib/Support/CommandLine.cpp,
|
||||||
// into a separate function in the CommandLine library and call that function
|
// into a separate function in the CommandLine library and call that function
|
||||||
|
@ -31,7 +31,7 @@
|
|||||||
..
|
..
|
||||||
lib
|
lib
|
||||||
clang
|
clang
|
||||||
10.0.0
|
10.0.1
|
||||||
lib
|
lib
|
||||||
freebsd
|
freebsd
|
||||||
..
|
..
|
||||||
|
@ -37,7 +37,7 @@
|
|||||||
aout
|
aout
|
||||||
..
|
..
|
||||||
clang
|
clang
|
||||||
10.0.0
|
10.0.1
|
||||||
include
|
include
|
||||||
cuda_wrappers
|
cuda_wrappers
|
||||||
..
|
..
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
.PATH: ${CLANG_SRCS}/lib/Headers
|
.PATH: ${CLANG_SRCS}/lib/Headers
|
||||||
|
|
||||||
INCSGROUPS= INCS CUDA OMP PPC
|
INCSGROUPS= INCS CUDA OMP PPC
|
||||||
INCSDIR= ${LIBDIR}/clang/10.0.0/include
|
INCSDIR= ${LIBDIR}/clang/10.0.1/include
|
||||||
CUDADIR= ${INCSDIR}/cuda_wrappers
|
CUDADIR= ${INCSDIR}/cuda_wrappers
|
||||||
OMPDIR= ${INCSDIR}/openmp_wrappers
|
OMPDIR= ${INCSDIR}/openmp_wrappers
|
||||||
PPCDIR= ${INCSDIR}/ppc_wrappers
|
PPCDIR= ${INCSDIR}/ppc_wrappers
|
||||||
|
@ -1,14 +1,14 @@
|
|||||||
// $FreeBSD$
|
// $FreeBSD$
|
||||||
|
|
||||||
#define LLVM_REVISION "llvmorg-10.0.0-0-gd32170dbd5b"
|
#define LLVM_REVISION "llvmorg-10.0.1-rc1-0-gf79cd71e145"
|
||||||
#define LLVM_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
#define LLVM_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||||
|
|
||||||
#define CLANG_REVISION "llvmorg-10.0.0-0-gd32170dbd5b"
|
#define CLANG_REVISION "llvmorg-10.0.1-rc1-0-gf79cd71e145"
|
||||||
#define CLANG_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
#define CLANG_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||||
|
|
||||||
// <Upstream revision at import>-<Local identifier in __FreeBSD_version style>
|
// <Upstream revision at import>-<Local identifier in __FreeBSD_version style>
|
||||||
#define LLD_REVISION "llvmorg-10.0.0-0-gd32170dbd5b-1300007"
|
#define LLD_REVISION "llvmorg-10.0.1-rc1-0-gf79cd71e145-1300007"
|
||||||
#define LLD_REPOSITORY "FreeBSD"
|
#define LLD_REPOSITORY "FreeBSD"
|
||||||
|
|
||||||
#define LLDB_REVISION "llvmorg-10.0.0-0-gd32170dbd5b"
|
#define LLDB_REVISION "llvmorg-10.0.1-rc1-0-gf79cd71e145"
|
||||||
#define LLDB_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
#define LLDB_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
/* $FreeBSD$ */
|
/* $FreeBSD$ */
|
||||||
|
|
||||||
#define CLANG_VERSION 10.0.0
|
#define CLANG_VERSION 10.0.1
|
||||||
#define CLANG_VERSION_STRING "10.0.0"
|
#define CLANG_VERSION_STRING "10.0.1"
|
||||||
#define CLANG_VERSION_MAJOR 10
|
#define CLANG_VERSION_MAJOR 10
|
||||||
#define CLANG_VERSION_MINOR 0
|
#define CLANG_VERSION_MINOR 0
|
||||||
#define CLANG_VERSION_PATCHLEVEL 0
|
#define CLANG_VERSION_PATCHLEVEL 1
|
||||||
|
|
||||||
#define CLANG_VENDOR "FreeBSD "
|
#define CLANG_VENDOR "FreeBSD "
|
||||||
|
@ -62,7 +62,7 @@
|
|||||||
#define CLANG_HAVE_RLIMITS 1
|
#define CLANG_HAVE_RLIMITS 1
|
||||||
|
|
||||||
/* The LLVM product name and version */
|
/* The LLVM product name and version */
|
||||||
#define BACKEND_PACKAGE_STRING "LLVM 10.0.0git"
|
#define BACKEND_PACKAGE_STRING "LLVM 10.0.1"
|
||||||
|
|
||||||
/* Linker version detected at compile time. */
|
/* Linker version detected at compile time. */
|
||||||
/* #undef HOST_LINK_VERSION */
|
/* #undef HOST_LINK_VERSION */
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
// $FreeBSD$
|
// $FreeBSD$
|
||||||
|
|
||||||
#define LLD_VERSION 10.0.0
|
#define LLD_VERSION 10.0.1
|
||||||
#define LLD_VERSION_STRING "10.0.0"
|
#define LLD_VERSION_STRING "10.0.1"
|
||||||
#define LLD_VERSION_MAJOR 10
|
#define LLD_VERSION_MAJOR 10
|
||||||
#define LLD_VERSION_MINOR 0
|
#define LLD_VERSION_MINOR 0
|
||||||
|
@ -110,6 +110,9 @@
|
|||||||
/* Define to 1 if you have the `pthread_setname_np' function. */
|
/* Define to 1 if you have the `pthread_setname_np' function. */
|
||||||
/* #undef HAVE_PTHREAD_SETNAME_NP */
|
/* #undef HAVE_PTHREAD_SETNAME_NP */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the `z' library (-lz). */
|
||||||
|
#define HAVE_LIBZ 1
|
||||||
|
|
||||||
/* Define to 1 if you have the <link.h> header file. */
|
/* Define to 1 if you have the <link.h> header file. */
|
||||||
#define HAVE_LINK_H 1
|
#define HAVE_LINK_H 1
|
||||||
|
|
||||||
@ -224,6 +227,9 @@
|
|||||||
/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
|
/* Define to 1 if you have the <valgrind/valgrind.h> header file. */
|
||||||
/* #undef HAVE_VALGRIND_VALGRIND_H */
|
/* #undef HAVE_VALGRIND_VALGRIND_H */
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <zlib.h> header file. */
|
||||||
|
#define HAVE_ZLIB_H 1
|
||||||
|
|
||||||
/* Have host's _alloca */
|
/* Have host's _alloca */
|
||||||
/* #undef HAVE__ALLOCA */
|
/* #undef HAVE__ALLOCA */
|
||||||
|
|
||||||
@ -316,10 +322,10 @@
|
|||||||
#define PACKAGE_NAME "LLVM"
|
#define PACKAGE_NAME "LLVM"
|
||||||
|
|
||||||
/* Define to the full name and version of this package. */
|
/* Define to the full name and version of this package. */
|
||||||
#define PACKAGE_STRING "LLVM 10.0.0git"
|
#define PACKAGE_STRING "LLVM 10.0.1"
|
||||||
|
|
||||||
/* Define to the version of this package. */
|
/* Define to the version of this package. */
|
||||||
#define PACKAGE_VERSION "10.0.0git"
|
#define PACKAGE_VERSION "10.0.1"
|
||||||
|
|
||||||
/* Define to the vendor of this package. */
|
/* Define to the vendor of this package. */
|
||||||
/* #undef PACKAGE_VENDOR */
|
/* #undef PACKAGE_VENDOR */
|
||||||
|
@ -70,10 +70,10 @@
|
|||||||
#define LLVM_VERSION_MINOR 0
|
#define LLVM_VERSION_MINOR 0
|
||||||
|
|
||||||
/* Patch version of the LLVM API */
|
/* Patch version of the LLVM API */
|
||||||
#define LLVM_VERSION_PATCH 0
|
#define LLVM_VERSION_PATCH 1
|
||||||
|
|
||||||
/* LLVM version string */
|
/* LLVM version string */
|
||||||
#define LLVM_VERSION_STRING "10.0.0git"
|
#define LLVM_VERSION_STRING "10.0.1"
|
||||||
|
|
||||||
/* Whether LLVM records statistics for use with GetStatistics(),
|
/* Whether LLVM records statistics for use with GetStatistics(),
|
||||||
* PrintStatistics() or PrintStatisticsJSON()
|
* PrintStatistics() or PrintStatisticsJSON()
|
||||||
|
@ -1,3 +1,3 @@
|
|||||||
/* $FreeBSD$ */
|
/* $FreeBSD$ */
|
||||||
#define LLVM_REVISION "llvmorg-10.0.0-0-gd32170dbd5b"
|
#define LLVM_REVISION "llvmorg-10.0.1-rc1-0-gf79cd71e145"
|
||||||
#define LLVM_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
#define LLVM_REPOSITORY "git@github.com:llvm/llvm-project.git"
|
||||||
|
@ -14,7 +14,7 @@ CRTSRC= ${SRCTOP}/contrib/llvm-project/compiler-rt
|
|||||||
|
|
||||||
.PATH: ${CRTSRC}/lib
|
.PATH: ${CRTSRC}/lib
|
||||||
|
|
||||||
CLANGDIR= /usr/lib/clang/10.0.0
|
CLANGDIR= /usr/lib/clang/10.0.1
|
||||||
LIBDIR= ${CLANGDIR}/lib/freebsd
|
LIBDIR= ${CLANGDIR}/lib/freebsd
|
||||||
SHLIBDIR= ${LIBDIR}
|
SHLIBDIR= ${LIBDIR}
|
||||||
|
|
||||||
|
@ -60,7 +60,7 @@
|
|||||||
* in the range 5 to 9.
|
* in the range 5 to 9.
|
||||||
*/
|
*/
|
||||||
#undef __FreeBSD_version
|
#undef __FreeBSD_version
|
||||||
#define __FreeBSD_version 1300095 /* Master, propagated to newvers */
|
#define __FreeBSD_version 1300096 /* Master, propagated to newvers */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
|
* __FreeBSD_kernel__ indicates that this system uses the kernel of FreeBSD,
|
||||||
|
@ -1405,273 +1405,273 @@ OLD_FILES+=usr/bin/llvm-objdump
|
|||||||
OLD_FILES+=usr/bin/llvm-ranlib
|
OLD_FILES+=usr/bin/llvm-ranlib
|
||||||
OLD_FILES+=usr/bin/llvm-symbolizer
|
OLD_FILES+=usr/bin/llvm-symbolizer
|
||||||
OLD_FILES+=usr/bin/llvm-tblgen
|
OLD_FILES+=usr/bin/llvm-tblgen
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/cuda_wrappers/algorithm
|
OLD_FILES+=usr/lib/clang/10.0.1/include/cuda_wrappers/algorithm
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/cuda_wrappers/complex
|
OLD_FILES+=usr/lib/clang/10.0.1/include/cuda_wrappers/complex
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/cuda_wrappers/new
|
OLD_FILES+=usr/lib/clang/10.0.1/include/cuda_wrappers/new
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include/cuda_wrappers
|
OLD_DIRS+=usr/lib/clang/10.0.1/include/cuda_wrappers
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/fuzzer/FuzzedDataProvider.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/fuzzer/FuzzedDataProvider.h
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include/fuzzer
|
OLD_DIRS+=usr/lib/clang/10.0.1/include/fuzzer
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/__clang_openmp_math.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/openmp_wrappers/__clang_openmp_math.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/__clang_openmp_math_declares.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/openmp_wrappers/__clang_openmp_math_declares.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/cmath
|
OLD_FILES+=usr/lib/clang/10.0.1/include/openmp_wrappers/cmath
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/openmp_wrappers/math.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/openmp_wrappers/math.h
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include/openmp_wrappers
|
OLD_DIRS+=usr/lib/clang/10.0.1/include/openmp_wrappers
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/emmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ppc_wrappers/emmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/mm_malloc.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ppc_wrappers/mm_malloc.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/mmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ppc_wrappers/mmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/pmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ppc_wrappers/pmmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/smmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ppc_wrappers/smmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/tmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ppc_wrappers/tmmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ppc_wrappers/xmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ppc_wrappers/xmmintrin.h
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include/ppc_wrappers
|
OLD_DIRS+=usr/lib/clang/10.0.1/include/ppc_wrappers
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/profile/InstrProfData.inc
|
OLD_FILES+=usr/lib/clang/10.0.1/include/profile/InstrProfData.inc
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include/profile
|
OLD_DIRS+=usr/lib/clang/10.0.1/include/profile
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/allocator_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/allocator_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/asan_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/asan_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/common_interface_defs.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/common_interface_defs.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/coverage_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/coverage_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/dfsan_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/dfsan_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/hwasan_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/hwasan_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/linux_syscall_hooks.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/linux_syscall_hooks.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/lsan_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/lsan_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/msan_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/msan_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/netbsd_syscall_hooks.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/netbsd_syscall_hooks.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/scudo_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/scudo_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/tsan_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/tsan_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/tsan_interface_atomic.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/tsan_interface_atomic.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sanitizer/ubsan_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sanitizer/ubsan_interface.h
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include/sanitizer
|
OLD_DIRS+=usr/lib/clang/10.0.1/include/sanitizer
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xray/xray_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xray/xray_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xray/xray_log_interface.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xray/xray_log_interface.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xray/xray_records.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xray/xray_records.h
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include/xray
|
OLD_DIRS+=usr/lib/clang/10.0.1/include/xray
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_builtin_vars.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_builtin_vars.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_cmath.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_cmath.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_complex_builtins.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_complex_builtins.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_device_functions.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_device_functions.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_intrinsics.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_intrinsics.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_libdevice_declares.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_libdevice_declares.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_math_forward_declares.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_math_forward_declares.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__clang_cuda_runtime_wrapper.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__clang_cuda_runtime_wrapper.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__stddef_max_align_t.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__stddef_max_align_t.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__wmmintrin_aes.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__wmmintrin_aes.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/__wmmintrin_pclmul.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/__wmmintrin_pclmul.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/adxintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/adxintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/altivec.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/altivec.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ammintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ammintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/arm64intr.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/arm64intr.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_acle.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/arm_acle.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_cmse.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/arm_cmse.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_fp16.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/arm_fp16.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_mve.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/arm_mve.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/arm_neon.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/arm_neon.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/armintr.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/armintr.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx2intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx2intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512bf16intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512bf16intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512bitalgintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512bitalgintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512bwintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512bwintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512cdintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512cdintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512dqintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512dqintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512erintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512erintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512fintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512fintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512ifmaintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512ifmaintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512ifmavlintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512ifmavlintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512pfintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512pfintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vbmi2intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vbmi2intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vbmiintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vbmiintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vbmivlintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vbmivlintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlbf16intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlbf16intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlbitalgintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlbitalgintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlbwintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlbwintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlcdintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlcdintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vldqintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vldqintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlvbmi2intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlvbmi2intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlvnniintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlvnniintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vlvp2intersectintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vlvp2intersectintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vnniintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vnniintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vp2intersectintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vp2intersectintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vpopcntdqintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vpopcntdqintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avx512vpopcntdqvlintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avx512vpopcntdqvlintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/avxintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/avxintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/bmi2intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/bmi2intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/bmiintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/bmiintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/cetintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/cetintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/cldemoteintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/cldemoteintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/clflushoptintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/clflushoptintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/clwbintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/clwbintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/clzerointrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/clzerointrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/cpuid.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/cpuid.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/emmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/emmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/enqcmdintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/enqcmdintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/f16cintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/f16cintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/float.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/float.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/fma4intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/fma4intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/fmaintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/fmaintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/fxsrintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/fxsrintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/gfniintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/gfniintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/htmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/htmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/htmxlintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/htmxlintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ia32intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ia32intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/immintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/immintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/inttypes.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/inttypes.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/invpcidintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/invpcidintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/iso646.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/iso646.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/limits.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/limits.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/lwpintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/lwpintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/lzcntintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/lzcntintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/mm3dnow.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/mm3dnow.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/mm_malloc.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/mm_malloc.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/mmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/mmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/module.modulemap
|
OLD_FILES+=usr/lib/clang/10.0.1/include/module.modulemap
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/movdirintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/movdirintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/msa.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/msa.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/mwaitxintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/mwaitxintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/nmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/nmmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/omp-tools.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/omp-tools.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/omp.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/omp.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ompt.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ompt.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/opencl-c-base.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/opencl-c-base.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/opencl-c.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/opencl-c.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/pconfigintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/pconfigintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/pkuintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/pkuintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/pmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/pmmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/popcntintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/popcntintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/prfchwintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/prfchwintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/ptwriteintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/ptwriteintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/rdseedintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/rdseedintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/rtmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/rtmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/s390intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/s390intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/sgxintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/sgxintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/shaintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/shaintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/smmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/smmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/stdalign.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/stdalign.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/stdarg.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/stdarg.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/stdatomic.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/stdatomic.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/stdbool.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/stdbool.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/stddef.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/stddef.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/stdint.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/stdint.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/stdnoreturn.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/stdnoreturn.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/tbmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/tbmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/tgmath.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/tgmath.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/tmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/tmmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/unwind.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/unwind.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/vadefs.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/vadefs.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/vaesintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/vaesintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/varargs.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/varargs.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/vecintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/vecintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/vpclmulqdqintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/vpclmulqdqintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/waitpkgintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/waitpkgintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/wbnoinvdintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/wbnoinvdintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/wmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/wmmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/x86intrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/x86intrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xmmintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xmmintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xopintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xopintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xsavecintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xsavecintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xsaveintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xsaveintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xsaveoptintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xsaveoptintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xsavesintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xsavesintrin.h
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/include/xtestintrin.h
|
OLD_FILES+=usr/lib/clang/10.0.1/include/xtestintrin.h
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/include
|
OLD_DIRS+=usr/lib/clang/10.0.1/include
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-aarch64.so
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-aarch64.so
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-arm.so
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-arm.so
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-armhf.so
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-armhf.so
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-i386.so
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-i386.so
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-preinit-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-preinit-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-preinit-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-preinit-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-preinit-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan-x86_64.so
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan-x86_64.so
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan_cxx-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan_cxx-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan_cxx-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan_cxx-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.asan_cxx-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi_diag-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi_diag-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi_diag-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi_diag-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.cfi_diag-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.dd-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.dd-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.dd-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.dd-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.fuzzer-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.fuzzer-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.fuzzer_no_main-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.fuzzer_no_main-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.msan-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.msan-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.msan_cxx-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.msan_cxx-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.profile-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.profile-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.profile-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.profile-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-powerpc.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.profile-powerpc.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-powerpc64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.profile-powerpc64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.profile-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.profile-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.safestack-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.safestack-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.safestack-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.safestack-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.safestack-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.safestack-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats_client-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats_client-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats_client-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats_client-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.stats_client-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.stats_client-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.tsan-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.tsan-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.tsan_cxx-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.tsan_cxx-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_minimal-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_minimal-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_minimal-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_minimal-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_minimal-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-i386.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.ubsan_standalone_cxx-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-basic-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-basic-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-basic-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-basic-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-basic-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-fdr-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-fdr-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-fdr-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-fdr-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-profiling-aarch64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-arm.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-profiling-arm.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-armhf.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-profiling-armhf.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-profiling-x86_64.a
|
||||||
OLD_FILES+=usr/lib/clang/10.0.0/lib/freebsd/libclang_rt.xray-x86_64.a
|
OLD_FILES+=usr/lib/clang/10.0.1/lib/freebsd/libclang_rt.xray-x86_64.a
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/lib/freebsd
|
OLD_DIRS+=usr/lib/clang/10.0.1/lib/freebsd
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0/lib
|
OLD_DIRS+=usr/lib/clang/10.0.1/lib
|
||||||
OLD_DIRS+=usr/lib/clang/10.0.0
|
OLD_DIRS+=usr/lib/clang/10.0.1
|
||||||
OLD_DIRS+=usr/lib/clang
|
OLD_DIRS+=usr/lib/clang
|
||||||
OLD_FILES+=usr/share/doc/llvm/clang/LICENSE.TXT
|
OLD_FILES+=usr/share/doc/llvm/clang/LICENSE.TXT
|
||||||
OLD_DIRS+=usr/share/doc/llvm/clang
|
OLD_DIRS+=usr/share/doc/llvm/clang
|
||||||
|
Loading…
Reference in New Issue
Block a user