Date: Sat, 14 Jan 2017 22:16:01 +0000 (UTC) From: Dimitry Andric <dim@FreeBSD.org> To: src-committers@freebsd.org, svn-src-projects@freebsd.org Subject: svn commit: r312198 - in projects/clang400-import/contrib/compiler-rt/lib: asan builtins/arm sancov sanitizer_common scudo tsan/rtl xray Message-ID: <201701142216.v0EMG1JW093019@repo.freebsd.org>
next in thread | raw e-mail | index | archive | help
Author: dim Date: Sat Jan 14 22:16:01 2017 New Revision: 312198 URL: https://svnweb.freebsd.org/changeset/base/312198 Log: Merge compiler-rt release_40 branch r292009. Added: projects/clang400-import/contrib/compiler-rt/lib/sancov/ - copied from r312197, vendor/compiler-rt/dist/lib/sancov/ projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_crc32.cpp - copied unchanged from r312197, vendor/compiler-rt/dist/lib/scudo/scudo_crc32.cpp projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_crc32.h - copied unchanged from r312197, vendor/compiler-rt/dist/lib/scudo/scudo_crc32.h Modified: projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation.cc projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation_flags.inc projects/clang400-import/contrib/compiler-rt/lib/asan/asan_allocator.cc projects/clang400-import/contrib/compiler-rt/lib/asan/asan_flags.cc projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/adddf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/addsf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/comparesf2.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divdf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divsf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqdf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqsf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/extendsfdf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixdfsivfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixsfsivfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunsdfsivfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunssfsivfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsidfvfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsisfvfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssidfvfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssisfvfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gedf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gesf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtdf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtsf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ledf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/lesf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltdf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltsf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/muldf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/mulsf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nedf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negdf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negsf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nesf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subdf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subsf3vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/truncdfsf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unorddf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unordsf2vfp.S projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.h projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.cc projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.h projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_quarantine.h projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_utils.cpp projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_utils.h projects/clang400-import/contrib/compiler-rt/lib/tsan/rtl/tsan_flags.inc projects/clang400-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.cc projects/clang400-import/contrib/compiler-rt/lib/tsan/rtl/tsan_interceptors.h projects/clang400-import/contrib/compiler-rt/lib/xray/xray_AArch64.cc Directory Properties: projects/clang400-import/contrib/compiler-rt/ (props changed) Modified: projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation.cc ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation.cc Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation.cc Sat Jan 14 22:16:01 2017 (r312198) @@ -77,12 +77,13 @@ static struct AsanDeactivatedFlags { void Print() { Report( - "quarantine_size_mb %d, max_redzone %d, poison_heap %d, " - "malloc_context_size %d, alloc_dealloc_mismatch %d, " - "allocator_may_return_null %d, coverage %d, coverage_dir %s, " - "allocator_release_to_os_interval_ms %d\n", - allocator_options.quarantine_size_mb, allocator_options.max_redzone, - poison_heap, malloc_context_size, + "quarantine_size_mb %d, thread_local_quarantine_size_kb %d, " + "max_redzone %d, poison_heap %d, malloc_context_size %d, " + "alloc_dealloc_mismatch %d, allocator_may_return_null %d, coverage %d, " + "coverage_dir %s, allocator_release_to_os_interval_ms %d\n", + allocator_options.quarantine_size_mb, + allocator_options.thread_local_quarantine_size_kb, + allocator_options.max_redzone, poison_heap, malloc_context_size, allocator_options.alloc_dealloc_mismatch, allocator_options.may_return_null, coverage, coverage_dir, allocator_options.release_to_os_interval_ms); @@ -109,6 +110,7 @@ void AsanDeactivate() { AllocatorOptions disabled = asan_deactivated_flags.allocator_options; disabled.quarantine_size_mb = 0; + disabled.thread_local_quarantine_size_kb = 0; disabled.min_redzone = 16; // Redzone must be at least 16 bytes long. disabled.max_redzone = 16; disabled.alloc_dealloc_mismatch = false; Modified: projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation_flags.inc ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation_flags.inc Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/asan/asan_activation_flags.inc Sat Jan 14 22:16:01 2017 (r312198) @@ -24,6 +24,7 @@ ASAN_ACTIVATION_FLAG(int, redzone) ASAN_ACTIVATION_FLAG(int, max_redzone) ASAN_ACTIVATION_FLAG(int, quarantine_size_mb) +ASAN_ACTIVATION_FLAG(int, thread_local_quarantine_size_kb) ASAN_ACTIVATION_FLAG(bool, alloc_dealloc_mismatch) ASAN_ACTIVATION_FLAG(bool, poison_heap) Modified: projects/clang400-import/contrib/compiler-rt/lib/asan/asan_allocator.cc ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/asan/asan_allocator.cc Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/asan/asan_allocator.cc Sat Jan 14 22:16:01 2017 (r312198) @@ -269,24 +269,24 @@ struct Allocator { } void RePoisonChunk(uptr chunk) { - // This could a user-facing chunk (with redzones), or some internal + // This could be a user-facing chunk (with redzones), or some internal // housekeeping chunk, like TransferBatch. Start by assuming the former. AsanChunk *ac = GetAsanChunk((void *)chunk); uptr allocated_size = allocator.GetActuallyAllocatedSize((void *)ac); uptr beg = ac->Beg(); uptr end = ac->Beg() + ac->UsedSize(true); uptr chunk_end = chunk + allocated_size; - if (chunk < beg && beg < end && end <= chunk_end) { - // Looks like a valid AsanChunk. Or maybe not. Be conservative and only - // poison the redzones. + if (chunk < beg && beg < end && end <= chunk_end && + ac->chunk_state == CHUNK_ALLOCATED) { + // Looks like a valid AsanChunk in use, poison redzones only. PoisonShadow(chunk, beg - chunk, kAsanHeapLeftRedzoneMagic); uptr end_aligned_down = RoundDownTo(end, SHADOW_GRANULARITY); FastPoisonShadowPartialRightRedzone( end_aligned_down, end - end_aligned_down, chunk_end - end_aligned_down, kAsanHeapLeftRedzoneMagic); } else { - // This can not be an AsanChunk. Poison everything. It may be reused as - // AsanChunk later. + // This is either not an AsanChunk or freed or quarantined AsanChunk. + // In either case, poison everything. PoisonShadow(chunk, allocated_size, kAsanHeapLeftRedzoneMagic); } } Modified: projects/clang400-import/contrib/compiler-rt/lib/asan/asan_flags.cc ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/asan/asan_flags.cc Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/asan/asan_flags.cc Sat Jan 14 22:16:01 2017 (r312198) @@ -169,6 +169,11 @@ void InitializeFlags() { (ASAN_LOW_MEMORY) ? 1 << 6 : FIRST_32_SECOND_64(1 << 8, 1 << 10); f->thread_local_quarantine_size_kb = kDefaultThreadLocalQuarantineSizeKb; } + if (f->thread_local_quarantine_size_kb == 0 && f->quarantine_size_mb > 0) { + Report("%s: thread_local_quarantine_size_kb can be set to 0 only when " + "quarantine_size_mb is set to 0\n", SanitizerToolName); + Die(); + } if (!f->replace_str && common_flags()->intercept_strlen) { Report("WARNING: strlen interceptor is enabled even though replace_str=0. " "Use intercept_strlen=0 to disable it."); Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/adddf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/adddf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/adddf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,10 +18,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__adddf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vadd.f64 d0, d0, d1 +#else vmov d6, r0, r1 // move first param from r0/r1 pair into d6 vmov d7, r2, r3 // move second param from r2/r3 pair into d7 vadd.f64 d6, d6, d7 vmov r0, r1, d6 // move result back to r0/r1 pair +#endif bx lr END_COMPILERRT_FUNCTION(__adddf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/addsf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/addsf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/addsf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,10 +18,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__addsf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vadd.f32 s0, s0, s1 +#else vmov s14, r0 // move first param from r0 into float register vmov s15, r1 // move second param from r1 into float register vadd.f32 s14, s14, s15 vmov r0, s14 // move result back to r0 +#endif bx lr END_COMPILERRT_FUNCTION(__addsf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/comparesf2.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/comparesf2.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/comparesf2.S Sat Jan 14 22:16:01 2017 (r312198) @@ -43,8 +43,14 @@ .thumb #endif -.p2align 2 +@ int __eqsf2(float a, float b) + + .p2align 2 DEFINE_COMPILERRT_FUNCTION(__eqsf2) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmov r0, s0 + vmov r1, s1 +#endif // Make copies of a and b with the sign bit shifted off the top. These will // be used to detect zeros and NaNs. #if __ARM_ARCH_ISA_THUMB == 1 @@ -166,16 +172,23 @@ LOCAL_LABEL(CHECK_NAN): JMP(lr) #endif END_COMPILERRT_FUNCTION(__eqsf2) + DEFINE_COMPILERRT_FUNCTION_ALIAS(__lesf2, __eqsf2) DEFINE_COMPILERRT_FUNCTION_ALIAS(__ltsf2, __eqsf2) DEFINE_COMPILERRT_FUNCTION_ALIAS(__nesf2, __eqsf2) -.p2align 2 +@ int __gtsf2(float a, float b) + + .p2align 2 DEFINE_COMPILERRT_FUNCTION(__gtsf2) // Identical to the preceding except in that we return -1 for NaN values. // Given that the two paths share so much code, one might be tempted to // unify them; however, the extra code needed to do so makes the code size // to performance tradeoff very hard to justify for such small functions. +#if defined(COMPILER_RT_ARMHF_TARGET) + vmov r0, s0 + vmov r1, s1 +#endif #if __ARM_ARCH_ISA_THUMB == 1 push {r6, lr} lsls r2, r0, #1 @@ -215,6 +228,8 @@ LOCAL_LABEL(CHECK_NAN_2): 6: pop {r6, pc} #else + mov r2, r0, lsl #1 + mov r3, r1, lsl #1 orrs r12, r2, r3, lsr #1 it ne eorsne r12, r0, r1 @@ -233,10 +248,17 @@ LOCAL_LABEL(CHECK_NAN_2): JMP(lr) #endif END_COMPILERRT_FUNCTION(__gtsf2) + DEFINE_COMPILERRT_FUNCTION_ALIAS(__gesf2, __gtsf2) -.p2align 2 +@ int __unordsf2(float a, float b) + + .p2align 2 DEFINE_COMPILERRT_FUNCTION(__unordsf2) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmov r0, s0 + vmov r1, s1 +#endif // Return 1 for NaN values, 0 otherwise. lsls r2, r0, #1 lsls r3, r1, #1 @@ -260,7 +282,15 @@ DEFINE_COMPILERRT_FUNCTION(__unordsf2) JMP(lr) END_COMPILERRT_FUNCTION(__unordsf2) +#if defined(COMPILER_RT_ARMHF_TARGET) +DEFINE_COMPILERRT_FUNCTION(__aeabi_fcmpum): + vmov s0, r0 + vmov s1, r1 + b SYMBOL_NAME(__unordsf2) +END_COMPILERRT_FUNCTION(__aeabi_fcmpum) +#else DEFINE_AEABI_FUNCTION_ALIAS(__aeabi_fcmpun, __unordsf2) +#endif NO_EXEC_STACK_DIRECTIVE Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divdf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divdf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divdf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,10 +18,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__divdf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vdiv.f64 d0, d0, d1 +#else vmov d6, r0, r1 // move first param from r0/r1 pair into d6 vmov d7, r2, r3 // move second param from r2/r3 pair into d7 - vdiv.f64 d5, d6, d7 + vdiv.f64 d5, d6, d7 vmov r0, r1, d5 // move result back to r0/r1 pair +#endif bx lr END_COMPILERRT_FUNCTION(__divdf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divsf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divsf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/divsf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,10 +18,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__divsf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vdiv.f32 s0, s0, s1 +#else vmov s14, r0 // move first param from r0 into float register vmov s15, r1 // move second param from r1 into float register vdiv.f32 s13, s14, s15 vmov r0, s13 // move result back to r0 +#endif bx lr END_COMPILERRT_FUNCTION(__divsf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqdf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqdf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqdf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__eqdf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f64 d0, d1 +#else vmov d6, r0, r1 // load r0/r1 pair in double register vmov d7, r2, r3 // load r2/r3 pair in double register vcmp.f64 d6, d7 +#endif vmrs apsr_nzcv, fpscr moveq r0, #1 // set result register to 1 if equal movne r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqsf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqsf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/eqsf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__eqsf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f32 s0, s1 +#else vmov s14, r0 // move from GPR 0 to float register vmov s15, r1 // move from GPR 1 to float register vcmp.f32 s14, s15 +#endif vmrs apsr_nzcv, fpscr moveq r0, #1 // set result register to 1 if equal movne r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/extendsfdf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/extendsfdf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/extendsfdf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__extendsfdf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcvt.f64.f32 d0, s0 +#else vmov s15, r0 // load float register from R0 vcvt.f64.f32 d7, s15 // convert single to double vmov r0, r1, d7 // return result in r0/r1 pair +#endif bx lr END_COMPILERRT_FUNCTION(__extendsfdf2vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixdfsivfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixdfsivfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixdfsivfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__fixdfsivfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcvt.s32.f64 s0, d0 + vmov r0, s0 +#else vmov d7, r0, r1 // load double register from R0/R1 vcvt.s32.f64 s15, d7 // convert double to 32-bit int into s15 vmov r0, s15 // move s15 to result register +#endif bx lr END_COMPILERRT_FUNCTION(__fixdfsivfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixsfsivfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixsfsivfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixsfsivfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__fixsfsivfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcvt.s32.f32 s0, s0 + vmov r0, s0 +#else vmov s15, r0 // load float register from R0 vcvt.s32.f32 s15, s15 // convert single to 32-bit int into s15 vmov r0, s15 // move s15 to result register +#endif bx lr END_COMPILERRT_FUNCTION(__fixsfsivfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunsdfsivfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunsdfsivfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunsdfsivfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -20,9 +20,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__fixunsdfsivfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcvt.u32.f64 s0, d0 + vmov r0, s0 +#else vmov d7, r0, r1 // load double register from R0/R1 vcvt.u32.f64 s15, d7 // convert double to 32-bit int into s15 vmov r0, s15 // move s15 to result register +#endif bx lr END_COMPILERRT_FUNCTION(__fixunsdfsivfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunssfsivfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunssfsivfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/fixunssfsivfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -20,9 +20,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__fixunssfsivfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcvt.u32.f32 s0, s0 + vmov r0, s0 +#else vmov s15, r0 // load float register from R0 vcvt.u32.f32 s15, s15 // convert single to 32-bit unsigned into s15 vmov r0, s15 // move s15 to result register +#endif bx lr END_COMPILERRT_FUNCTION(__fixunssfsivfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsidfvfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsidfvfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsidfvfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__floatsidfvfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmov s0, r0 + vcvt.f64.s32 d0, s0 +#else vmov s15, r0 // move int to float register s15 vcvt.f64.s32 d7, s15 // convert 32-bit int in s15 to double in d7 vmov r0, r1, d7 // move d7 to result register pair r0/r1 +#endif bx lr END_COMPILERRT_FUNCTION(__floatsidfvfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsisfvfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsisfvfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatsisfvfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__floatsisfvfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmov s0, r0 + vcvt.f32.s32 s0, s0 +#else vmov s15, r0 // move int to float register s15 vcvt.f32.s32 s15, s15 // convert 32-bit int in s15 to float in s15 vmov r0, s15 // move s15 to result register +#endif bx lr END_COMPILERRT_FUNCTION(__floatsisfvfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssidfvfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssidfvfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssidfvfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__floatunssidfvfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmov s0, r0 + vcvt.f64.u32 d0, s0 +#else vmov s15, r0 // move int to float register s15 vcvt.f64.u32 d7, s15 // convert 32-bit int in s15 to double in d7 vmov r0, r1, d7 // move d7 to result register pair r0/r1 +#endif bx lr END_COMPILERRT_FUNCTION(__floatunssidfvfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssisfvfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssisfvfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/floatunssisfvfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__floatunssisfvfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmov s0, r0 + vcvt.f32.u32 s0, s0 +#else vmov s15, r0 // move int to float register s15 vcvt.f32.u32 s15, s15 // convert 32-bit int in s15 to float in s15 vmov r0, s15 // move s15 to result register +#endif bx lr END_COMPILERRT_FUNCTION(__floatunssisfvfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gedf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gedf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gedf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__gedf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f64 d0, d1 +#else vmov d6, r0, r1 // load r0/r1 pair in double register vmov d7, r2, r3 // load r2/r3 pair in double register vcmp.f64 d6, d7 +#endif vmrs apsr_nzcv, fpscr movge r0, #1 // set result register to 1 if greater than or equal movlt r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gesf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gesf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gesf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__gesf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f32 s0, s1 +#else vmov s14, r0 // move from GPR 0 to float register vmov s15, r1 // move from GPR 1 to float register vcmp.f32 s14, s15 +#endif vmrs apsr_nzcv, fpscr movge r0, #1 // set result register to 1 if greater than or equal movlt r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtdf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtdf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtdf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__gtdf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f64 d0, d1 +#else vmov d6, r0, r1 // load r0/r1 pair in double register vmov d7, r2, r3 // load r2/r3 pair in double register vcmp.f64 d6, d7 +#endif vmrs apsr_nzcv, fpscr movgt r0, #1 // set result register to 1 if equal movle r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtsf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtsf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/gtsf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__gtsf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f32 s0, s1 +#else vmov s14, r0 // move from GPR 0 to float register vmov s15, r1 // move from GPR 1 to float register vcmp.f32 s14, s15 +#endif vmrs apsr_nzcv, fpscr movgt r0, #1 // set result register to 1 if equal movle r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ledf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ledf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ledf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__ledf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f64 d0, d1 +#else vmov d6, r0, r1 // load r0/r1 pair in double register vmov d7, r2, r3 // load r2/r3 pair in double register vcmp.f64 d6, d7 +#endif vmrs apsr_nzcv, fpscr movls r0, #1 // set result register to 1 if equal movhi r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/lesf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/lesf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/lesf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__lesf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f32 s0, s1 +#else vmov s14, r0 // move from GPR 0 to float register vmov s15, r1 // move from GPR 1 to float register vcmp.f32 s14, s15 +#endif vmrs apsr_nzcv, fpscr movls r0, #1 // set result register to 1 if equal movhi r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltdf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltdf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltdf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__ltdf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f64 d0, d1 +#else vmov d6, r0, r1 // load r0/r1 pair in double register vmov d7, r2, r3 // load r2/r3 pair in double register vcmp.f64 d6, d7 +#endif vmrs apsr_nzcv, fpscr movmi r0, #1 // set result register to 1 if equal movpl r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltsf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltsf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/ltsf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__ltsf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f32 s0, s1 +#else vmov s14, r0 // move from GPR 0 to float register vmov s15, r1 // move from GPR 1 to float register vcmp.f32 s14, s15 +#endif vmrs apsr_nzcv, fpscr movmi r0, #1 // set result register to 1 if equal movpl r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/muldf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/muldf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/muldf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,10 +18,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__muldf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmul.f64 d0, d0, d1 +#else vmov d6, r0, r1 // move first param from r0/r1 pair into d6 vmov d7, r2, r3 // move second param from r2/r3 pair into d7 - vmul.f64 d6, d6, d7 + vmul.f64 d6, d6, d7 vmov r0, r1, d6 // move result back to r0/r1 pair +#endif bx lr END_COMPILERRT_FUNCTION(__muldf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/mulsf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/mulsf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/mulsf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,9 +18,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__mulsf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vmul.f32 s0, s0, s1 +#else vmov s14, r0 // move first param from r0 into float register vmov s15, r1 // move second param from r1 into float register vmul.f32 s13, s14, s15 +#endif vmov r0, s13 // move result back to r0 bx lr END_COMPILERRT_FUNCTION(__mulsf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nedf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nedf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nedf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__nedf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f64 d0, d1 +#else vmov d6, r0, r1 // load r0/r1 pair in double register vmov d7, r2, r3 // load r2/r3 pair in double register vcmp.f64 d6, d7 +#endif vmrs apsr_nzcv, fpscr movne r0, #1 // set result register to 0 if unequal moveq r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negdf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negdf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negdf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,7 +18,11 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__negdf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vneg.f64 d0, d0 +#else eor r1, r1, #-2147483648 // flip sign bit on double in r0/r1 pair +#endif bx lr END_COMPILERRT_FUNCTION(__negdf2vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negsf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negsf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/negsf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,7 +18,11 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__negsf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vneg.f32 s0, s0 +#else eor r0, r0, #-2147483648 // flip sign bit on float in r0 +#endif bx lr END_COMPILERRT_FUNCTION(__negsf2vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nesf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nesf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/nesf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__nesf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f32 s0, s1 +#else vmov s14, r0 // move from GPR 0 to float register vmov s15, r1 // move from GPR 1 to float register vcmp.f32 s14, s15 +#endif vmrs apsr_nzcv, fpscr movne r0, #1 // set result register to 1 if unequal moveq r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subdf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subdf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subdf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -18,10 +18,14 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__subdf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vsub.f64 d0, d0, d1 +#else vmov d6, r0, r1 // move first param from r0/r1 pair into d6 vmov d7, r2, r3 // move second param from r2/r3 pair into d7 vsub.f64 d6, d6, d7 vmov r0, r1, d6 // move result back to r0/r1 pair +#endif bx lr END_COMPILERRT_FUNCTION(__subdf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subsf3vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subsf3vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/subsf3vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -12,17 +12,21 @@ // // extern float __subsf3vfp(float a, float b); // -// Returns the difference between two single precision floating point numbers +// Returns the difference between two single precision floating point numbers // using the Darwin calling convention where single arguments are passsed // like 32-bit ints. // .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__subsf3vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vsub.f32 s0, s0, s1 +#elsee vmov s14, r0 // move first param from r0 into float register vmov s15, r1 // move second param from r1 into float register vsub.f32 s14, s14, s15 vmov r0, s14 // move result back to r0 +#endif bx lr END_COMPILERRT_FUNCTION(__subsf3vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/truncdfsf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/truncdfsf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/truncdfsf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__truncdfsf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcvt.f32.f64 s0, d0 +#else vmov d7, r0, r1 // load double from r0/r1 pair vcvt.f32.f64 s15, d7 // convert double to single (trucate precision) vmov r0, s15 // return result in r0 +#endif bx lr END_COMPILERRT_FUNCTION(__truncdfsf2vfp) Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unorddf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unorddf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unorddf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__unorddf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f64 d0, d1 +#else vmov d6, r0, r1 // load r0/r1 pair in double register vmov d7, r2, r3 // load r2/r3 pair in double register - vcmp.f64 d6, d7 + vcmp.f64 d6, d7 +#endif vmrs apsr_nzcv, fpscr movvs r0, #1 // set result register to 1 if "overflow" (any NaNs) movvc r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unordsf2vfp.S ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unordsf2vfp.S Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/builtins/arm/unordsf2vfp.S Sat Jan 14 22:16:01 2017 (r312198) @@ -19,9 +19,13 @@ .syntax unified .p2align 2 DEFINE_COMPILERRT_FUNCTION(__unordsf2vfp) +#if defined(COMPILER_RT_ARMHF_TARGET) + vcmp.f32 s0, s1 +#else vmov s14, r0 // move from GPR 0 to float register vmov s15, r1 // move from GPR 1 to float register vcmp.f32 s14, s15 +#endif vmrs apsr_nzcv, fpscr movvs r0, #1 // set result register to 1 if "overflow" (any NaNs) movvc r0, #0 Modified: projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.h ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.h Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_common.h Sat Jan 14 22:16:01 2017 (r312198) @@ -690,6 +690,7 @@ inline const char *ModuleArchToString(Mo return "arm64"; } CHECK(0 && "Invalid module arch"); + return ""; } const uptr kModuleUUIDSize = 16; Modified: projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_coverage_libcdep.cc Sat Jan 14 22:16:01 2017 (r312198) @@ -954,7 +954,9 @@ SANITIZER_INTERFACE_ATTRIBUTE void __san } SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump() { coverage_data.DumpAll(); +#if SANITIZER_LINUX __sanitizer_dump_trace_pc_guard_coverage(); +#endif } SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_module_init(s32 *guards, uptr npcs, u8 *counters, Modified: projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.cc ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.cc Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.cc Sat Jan 14 22:16:01 2017 (r312198) @@ -78,10 +78,12 @@ void LibIgnore::OnLibraryLoaded(const ch lib->templ, mod.full_name()); lib->loaded = true; lib->name = internal_strdup(mod.full_name()); - const uptr idx = atomic_load(&loaded_count_, memory_order_relaxed); - code_ranges_[idx].begin = range.beg; - code_ranges_[idx].end = range.end; - atomic_store(&loaded_count_, idx + 1, memory_order_release); + const uptr idx = + atomic_load(&ignored_ranges_count_, memory_order_relaxed); + CHECK_LT(idx, kMaxLibs); + ignored_code_ranges_[idx].begin = range.beg; + ignored_code_ranges_[idx].end = range.end; + atomic_store(&ignored_ranges_count_, idx + 1, memory_order_release); break; } } @@ -92,6 +94,29 @@ void LibIgnore::OnLibraryLoaded(const ch Die(); } } + + // Track instrumented ranges. + if (track_instrumented_libs_) { + for (const auto &mod : modules) { + if (!mod.instrumented()) + continue; + for (const auto &range : mod.ranges()) { + if (!range.executable) + continue; + if (IsPcInstrumented(range.beg) && IsPcInstrumented(range.end - 1)) + continue; + VReport(1, "Adding instrumented range %p-%p from library '%s'\n", + range.beg, range.end, mod.full_name()); + const uptr idx = + atomic_load(&instrumented_ranges_count_, memory_order_relaxed); + CHECK_LT(idx, kMaxLibs); + instrumented_code_ranges_[idx].begin = range.beg; + instrumented_code_ranges_[idx].end = range.end; + atomic_store(&instrumented_ranges_count_, idx + 1, + memory_order_release); + } + } + } } void LibIgnore::OnLibraryUnloaded() { Modified: projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.h ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.h Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_libignore.h Sat Jan 14 22:16:01 2017 (r312198) @@ -30,6 +30,9 @@ class LibIgnore { // Must be called during initialization. void AddIgnoredLibrary(const char *name_templ); + void IgnoreNoninstrumentedModules(bool enable) { + track_instrumented_libs_ = enable; + } // Must be called after a new dynamic library is loaded. void OnLibraryLoaded(const char *name); @@ -37,8 +40,14 @@ class LibIgnore { // Must be called after a dynamic library is unloaded. void OnLibraryUnloaded(); - // Checks whether the provided PC belongs to one of the ignored libraries. - bool IsIgnored(uptr pc) const; + // Checks whether the provided PC belongs to one of the ignored libraries or + // the PC should be ignored because it belongs to an non-instrumented module + // (when ignore_noninstrumented_modules=1). Also returns true via + // "pc_in_ignored_lib" if the PC is in an ignored library, false otherwise. + bool IsIgnored(uptr pc, bool *pc_in_ignored_lib) const; + + // Checks whether the provided PC belongs to an instrumented module. + bool IsPcInstrumented(uptr pc) const; private: struct Lib { @@ -53,26 +62,48 @@ class LibIgnore { uptr end; }; + inline bool IsInRange(uptr pc, const LibCodeRange &range) const { + return (pc >= range.begin && pc < range.end); + } + static const uptr kMaxLibs = 128; // Hot part: - atomic_uintptr_t loaded_count_; - LibCodeRange code_ranges_[kMaxLibs]; + atomic_uintptr_t ignored_ranges_count_; + LibCodeRange ignored_code_ranges_[kMaxLibs]; + + atomic_uintptr_t instrumented_ranges_count_; + LibCodeRange instrumented_code_ranges_[kMaxLibs]; // Cold part: BlockingMutex mutex_; uptr count_; Lib libs_[kMaxLibs]; + bool track_instrumented_libs_; // Disallow copying of LibIgnore objects. LibIgnore(const LibIgnore&); // not implemented void operator = (const LibIgnore&); // not implemented }; -inline bool LibIgnore::IsIgnored(uptr pc) const { - const uptr n = atomic_load(&loaded_count_, memory_order_acquire); +inline bool LibIgnore::IsIgnored(uptr pc, bool *pc_in_ignored_lib) const { + const uptr n = atomic_load(&ignored_ranges_count_, memory_order_acquire); + for (uptr i = 0; i < n; i++) { + if (IsInRange(pc, ignored_code_ranges_[i])) { + *pc_in_ignored_lib = true; + return true; + } + } + *pc_in_ignored_lib = false; + if (track_instrumented_libs_ && !IsPcInstrumented(pc)) + return true; + return false; +} + +inline bool LibIgnore::IsPcInstrumented(uptr pc) const { + const uptr n = atomic_load(&instrumented_ranges_count_, memory_order_acquire); for (uptr i = 0; i < n; i++) { - if (pc >= code_ranges_[i].begin && pc < code_ranges_[i].end) + if (IsInRange(pc, instrumented_code_ranges_[i])) return true; } return false; Modified: projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_platform_limits_posix.h Sat Jan 14 22:16:01 2017 (r312198) @@ -639,9 +639,12 @@ namespace __sanitizer { #ifndef __mips__ #if defined(__sparc__) #if __GLIBC_PREREQ (2, 20) - // On sparc glibc 2.19 and earlier sa_flags was unsigned long, and - // __glibc_reserved0 didn't exist. + // On sparc glibc 2.19 and earlier sa_flags was unsigned long. +#if defined(__arch64__) + // To maintain ABI compatibility on sparc64 when switching to an int, + // __glibc_reserved0 was added. int __glibc_reserved0; +#endif int sa_flags; #else unsigned long sa_flags; Modified: projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_quarantine.h ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_quarantine.h Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/sanitizer_common/sanitizer_quarantine.h Sat Jan 14 22:16:01 2017 (r312198) @@ -49,18 +49,31 @@ class Quarantine { } void Init(uptr size, uptr cache_size) { - atomic_store(&max_size_, size, memory_order_release); + // Thread local quarantine size can be zero only when global quarantine size + // is zero (it allows us to perform just one atomic read per Put() call). + CHECK((size == 0 && cache_size == 0) || cache_size != 0); + + atomic_store(&max_size_, size, memory_order_relaxed); atomic_store(&min_size_, size / 10 * 9, - memory_order_release); // 90% of max size. - max_cache_size_ = cache_size; + memory_order_relaxed); // 90% of max size. + atomic_store(&max_cache_size_, cache_size, memory_order_relaxed); } - uptr GetSize() const { return atomic_load(&max_size_, memory_order_acquire); } - uptr GetCacheSize() const { return max_cache_size_; } + uptr GetSize() const { return atomic_load(&max_size_, memory_order_relaxed); } + uptr GetCacheSize() const { + return atomic_load(&max_cache_size_, memory_order_relaxed); + } void Put(Cache *c, Callback cb, Node *ptr, uptr size) { - c->Enqueue(cb, ptr, size); - if (c->Size() > max_cache_size_) + uptr cache_size = GetCacheSize(); + if (cache_size) { + c->Enqueue(cb, ptr, size); + } else { + // cache_size == 0 only when size == 0 (see Init). + cb.Recycle(ptr); + } + // Check cache size anyway to accommodate for runtime cache_size change. + if (c->Size() > cache_size) Drain(c, cb); } @@ -83,7 +96,7 @@ class Quarantine { char pad0_[kCacheLineSize]; atomic_uintptr_t max_size_; atomic_uintptr_t min_size_; - uptr max_cache_size_; + atomic_uintptr_t max_cache_size_; char pad1_[kCacheLineSize]; SpinMutex cache_mutex_; SpinMutex recycle_mutex_; @@ -92,7 +105,7 @@ class Quarantine { void NOINLINE Recycle(Callback cb) { Cache tmp; - uptr min_size = atomic_load(&min_size_, memory_order_acquire); + uptr min_size = atomic_load(&min_size_, memory_order_relaxed); { SpinMutexLock l(&cache_mutex_); while (cache_.Size() > min_size) { @@ -205,6 +218,7 @@ class QuarantineCache { return b; } }; + } // namespace __sanitizer #endif // SANITIZER_QUARANTINE_H Modified: projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp ============================================================================== --- projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp Sat Jan 14 22:12:13 2017 (r312197) +++ projects/clang400-import/contrib/compiler-rt/lib/scudo/scudo_allocator.cpp Sat Jan 14 22:16:01 2017 (r312198) @@ -15,6 +15,7 @@ //===----------------------------------------------------------------------===// #include "scudo_allocator.h" +#include "scudo_crc32.h" #include "scudo_utils.h" #include "sanitizer_common/sanitizer_allocator_interface.h" @@ -25,22 +26,6 @@ #include <cstring> -// Hardware CRC32 is supported at compilation via the following: -// - for i386 & x86_64: -msse4.2 -// - for ARM & AArch64: -march=armv8-a+crc -// An additional check must be performed at runtime as well to make sure the -// emitted instructions are valid on the target host. -#if defined(__SSE4_2__) || defined(__ARM_FEATURE_CRC32) -# ifdef __SSE4_2__ -# include <smmintrin.h> *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201701142216.v0EMG1JW093019>