diff --git a/clang/test/CodeGen/cheri/fuzzer.c b/clang/test/CodeGen/cheri/fuzzer.c index d7eeecd929d23..229693e7708ad 100644 --- a/clang/test/CodeGen/cheri/fuzzer.c +++ b/clang/test/CodeGen/cheri/fuzzer.c @@ -30,10 +30,10 @@ extern int fail2(void); // These should all be in AS200: // PURECAP: @__sancov_lowest_stack = external thread_local(initialexec) addrspace(200) global i64 -// PURECAP: @__sancov_gen_ = private addrspace(200) global [1 x i8] zeroinitializer, section "__sancov_cntrs", comdat($main), align 1{{$}} -// PURECAP: @__sancov_gen_.1 = private addrspace(200) constant [2 x i64] [i64 ptrtoint (ptr addrspace(200) @main to i64), i64 1], section "__sancov_pcs", comdat($main), align 8{{$}} -// PURECAP: @__sancov_gen_.2 = private addrspace(200) global [4 x i8] zeroinitializer, section "__sancov_cntrs", comdat($func2), align 1{{$}} -// PURECAP: @__sancov_gen_.3 = private addrspace(200) constant [8 x i64] [ +// PURECAP: @__sancov_gen_.[[UID:.*]] = private addrspace(200) global [1 x i8] zeroinitializer, section "__sancov_cntrs", comdat($main), align 1{{$}} +// PURECAP: @__sancov_gen_.[[UID]].1 = private addrspace(200) constant [2 x i64] [i64 ptrtoint (ptr addrspace(200) @main to i64), i64 1], section "__sancov_pcs", comdat($main), align 8{{$}} +// PURECAP: @__sancov_gen_.[[UID]].2 = private addrspace(200) global [4 x i8] zeroinitializer, section "__sancov_cntrs", comdat($func2), align 1{{$}} +// PURECAP: @__sancov_gen_.[[UID]].3 = private addrspace(200) constant [8 x i64] [ // PURECAP-SAME: i64 ptrtoint (ptr addrspace(200) @func2 to i64), i64 1, // PURECAP-SAME: i64 ptrtoint (ptr addrspace(200) blockaddress(@func2, %if.then) to i64), i64 0, // PURECAP-SAME: i64 ptrtoint (ptr addrspace(200) blockaddress(@func2, %if.then2) to i64), i64 0, @@ -44,7 +44,7 @@ extern int fail2(void); // PURECAP: @llvm.global_ctors = appending addrspace(200) global [1 x { i32, ptr addrspace(200), ptr addrspace(200) }] [{ i32, ptr addrspace(200), ptr addrspace(200) } { i32 2, ptr addrspace(200) @sancov.module_ctor_8bit_counters, ptr addrspace(200) @sancov.module_ctor_8bit_counters }] // PURECAP: @__start___sancov_pcs = extern_weak hidden addrspace(200) global i64 // PURECAP: @__stop___sancov_pcs = extern_weak hidden addrspace(200) global i64 -// PURECAP: @llvm.compiler.used = appending addrspace(200) global [4 x ptr] [ptr addrspacecast (ptr addrspace(200) @__sancov_gen_ to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.1 to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.2 to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.3 to ptr)], section "llvm.metadata" +// PURECAP: @llvm.compiler.used = appending addrspace(200) global [4 x ptr] [ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.[[UID]] to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.[[UID]].1 to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.[[UID]].2 to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.[[UID]].3 to ptr)], section "llvm.metadata" // UTC_ARGS: --enable @@ -65,9 +65,9 @@ extern int fail2(void); // PURECAP-SAME: () addrspace(200) #[[ATTR0:[0-9]+]] comdat { // PURECAP-NEXT: entry: // PURECAP-NEXT: [[FOO:%.*]] = alloca [10 x i8], align 1, addrspace(200) -// PURECAP-NEXT: [[TMP0:%.*]] = load i8, ptr addrspace(200) @__sancov_gen_, align 1, !nosanitize !5 +// PURECAP-NEXT: [[TMP0:%.*]] = load i8, ptr addrspace(200) @__sancov_gen_.[[UID]], align 1, !nosanitize !5 // PURECAP-NEXT: [[TMP1:%.*]] = add i8 [[TMP0]], 1 -// PURECAP-NEXT: store i8 [[TMP1]], ptr addrspace(200) @__sancov_gen_, align 1, !nosanitize !5 +// PURECAP-NEXT: store i8 [[TMP1]], ptr addrspace(200) @__sancov_gen_.[[UID]], align 1, !nosanitize !5 // PURECAP-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [10 x i8], ptr addrspace(200) [[FOO]], i64 0, i64 0 // PURECAP-NEXT: [[CALL:%.*]] = call ptr addrspace(200) @gets(ptr addrspace(200) noundef [[ARRAYDECAY]]) #[[ATTR3:[0-9]+]] // PURECAP-NEXT: [[ARRAYDECAY1:%.*]] = getelementptr inbounds [10 x i8], ptr addrspace(200) [[FOO]], i64 0, i64 0 @@ -131,18 +131,18 @@ int main(void) { // PURECAP-NEXT: entry: // PURECAP-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(200) // PURECAP-NEXT: [[I_ADDR:%.*]] = alloca i32, align 4, addrspace(200) -// PURECAP-NEXT: [[TMP0:%.*]] = load i8, ptr addrspace(200) @__sancov_gen_.2, align 1, !nosanitize !5 +// PURECAP-NEXT: [[TMP0:%.*]] = load i8, ptr addrspace(200) @__sancov_gen_.[[UID]].2, align 1, !nosanitize !5 // PURECAP-NEXT: [[TMP1:%.*]] = add i8 [[TMP0]], 1 -// PURECAP-NEXT: store i8 [[TMP1]], ptr addrspace(200) @__sancov_gen_.2, align 1, !nosanitize !5 +// PURECAP-NEXT: store i8 [[TMP1]], ptr addrspace(200) @__sancov_gen_.[[UID]].2, align 1, !nosanitize !5 // PURECAP-NEXT: store i32 [[I]], ptr addrspace(200) [[I_ADDR]], align 4 // PURECAP-NEXT: [[TMP2:%.*]] = load i32, ptr addrspace(200) [[I_ADDR]], align 4 // PURECAP-NEXT: call void @__sanitizer_cov_trace_const_cmp4(i32 100, i32 [[TMP2]]) // PURECAP-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP2]], 100 // PURECAP-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]] // PURECAP: if.then: -// PURECAP-NEXT: [[TMP3:%.*]] = load i8, ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.2, i64 0, i64 1), align 1, !nosanitize !5 +// PURECAP-NEXT: [[TMP3:%.*]] = load i8, ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.[[UID]].2, i64 0, i64 1), align 1, !nosanitize !5 // PURECAP-NEXT: [[TMP4:%.*]] = add i8 [[TMP3]], 1 -// PURECAP-NEXT: store i8 [[TMP4]], ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.2, i64 0, i64 1), align 1, !nosanitize !5 +// PURECAP-NEXT: store i8 [[TMP4]], ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.[[UID]].2, i64 0, i64 1), align 1, !nosanitize !5 // PURECAP-NEXT: [[CALL:%.*]] = call signext i32 @fail1() #[[ATTR3]] // PURECAP-NEXT: store i32 [[CALL]], ptr addrspace(200) [[RETVAL]], align 4 // PURECAP-NEXT: br label [[RETURN:%.*]] @@ -152,18 +152,18 @@ int main(void) { // PURECAP-NEXT: [[CMP1:%.*]] = icmp slt i32 [[TMP5]], 200 // PURECAP-NEXT: br i1 [[CMP1]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]] // PURECAP: if.then2: -// PURECAP-NEXT: [[TMP6:%.*]] = load i8, ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.2, i64 0, i64 2), align 1, !nosanitize !5 +// PURECAP-NEXT: [[TMP6:%.*]] = load i8, ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.[[UID]].2, i64 0, i64 2), align 1, !nosanitize !5 // PURECAP-NEXT: [[TMP7:%.*]] = add i8 [[TMP6]], 1 -// PURECAP-NEXT: store i8 [[TMP7]], ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.2, i64 0, i64 2), align 1, !nosanitize !5 +// PURECAP-NEXT: store i8 [[TMP7]], ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.[[UID]].2, i64 0, i64 2), align 1, !nosanitize !5 // PURECAP-NEXT: [[CALL3:%.*]] = call signext i32 @fail2() #[[ATTR3]] // PURECAP-NEXT: store i32 [[CALL3]], ptr addrspace(200) [[RETVAL]], align 4 // PURECAP-NEXT: br label [[RETURN]] // PURECAP: if.end: // PURECAP-NEXT: br label [[IF_END4:%.*]] // PURECAP: if.end4: -// PURECAP-NEXT: [[TMP8:%.*]] = load i8, ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.2, i64 0, i64 3), align 1, !nosanitize !5 +// PURECAP-NEXT: [[TMP8:%.*]] = load i8, ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.[[UID]].2, i64 0, i64 3), align 1, !nosanitize !5 // PURECAP-NEXT: [[TMP9:%.*]] = add i8 [[TMP8]], 1 -// PURECAP-NEXT: store i8 [[TMP9]], ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.2, i64 0, i64 3), align 1, !nosanitize !5 +// PURECAP-NEXT: store i8 [[TMP9]], ptr addrspace(200) getelementptr inbounds ([4 x i8], ptr addrspace(200) @__sancov_gen_.[[UID]].2, i64 0, i64 3), align 1, !nosanitize !5 // PURECAP-NEXT: [[TMP10:%.*]] = load i32, ptr addrspace(200) [[I_ADDR]], align 4 // PURECAP-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP10]], 1 // PURECAP-NEXT: store i32 [[ADD]], ptr addrspace(200) [[RETVAL]], align 4 diff --git a/clang/test/CodeGen/cheri/trace-pc-guard.c b/clang/test/CodeGen/cheri/trace-pc-guard.c index c2cccf5a766c4..93a92081ac769 100644 --- a/clang/test/CodeGen/cheri/trace-pc-guard.c +++ b/clang/test/CodeGen/cheri/trace-pc-guard.c @@ -26,12 +26,12 @@ extern int fail2(void); // These should all be in AS200: // PURECAP: @__sancov_lowest_stack = external thread_local(initialexec) addrspace(200) global i64 -// PURECAP: @__sancov_gen_ = private addrspace(200) global [1 x i32] zeroinitializer, section "__sancov_guards", comdat($main), align 4{{$}} -// PURECAP: @__sancov_gen_.1 = private addrspace(200) global [4 x i32] zeroinitializer, section "__sancov_guards", comdat($func2), align 4{{$}} +// PURECAP: @__sancov_gen_.[[UID:.*]] = private addrspace(200) global [1 x i32] zeroinitializer, section "__sancov_guards", comdat($main), align 4{{$}} +// PURECAP: @__sancov_gen_.[[UID]].1 = private addrspace(200) global [4 x i32] zeroinitializer, section "__sancov_guards", comdat($func2), align 4{{$}} // PURECAP: @__start___sancov_guards = extern_weak hidden addrspace(200) global i32 // PURECAP: @__stop___sancov_guards = extern_weak hidden addrspace(200) global i32 // PURECAP: @llvm.global_ctors = appending addrspace(200) global [1 x { i32, ptr addrspace(200), ptr addrspace(200) }] [{ i32, ptr addrspace(200), ptr addrspace(200) } { i32 2, ptr addrspace(200) @sancov.module_ctor_trace_pc_guard, ptr addrspace(200) @sancov.module_ctor_trace_pc_guard }] -// PURECAP: @llvm.compiler.used = appending addrspace(200) global [2 x ptr] [ptr addrspacecast (ptr addrspace(200) @__sancov_gen_ to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.1 to ptr)], section "llvm.metadata" +// PURECAP: @llvm.compiler.used = appending addrspace(200) global [2 x ptr] [ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.[[UID]] to ptr), ptr addrspacecast (ptr addrspace(200) @__sancov_gen_.[[UID]].1 to ptr)], section "llvm.metadata" // UTC_ARGS: --enable @@ -50,7 +50,7 @@ extern int fail2(void); // PURECAP-SAME: () addrspace(200) #[[ATTR0:[0-9]+]] comdat { // PURECAP-NEXT: entry: // PURECAP-NEXT: [[FOO:%.*]] = alloca [10 x i8], align 1, addrspace(200) -// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) @__sancov_gen_) #[[ATTR3:[0-9]+]] +// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) @__sancov_gen_.[[UID]]) #[[ATTR3:[0-9]+]] // PURECAP-NEXT: [[ARRAYDECAY:%.*]] = getelementptr inbounds [10 x i8], ptr addrspace(200) [[FOO]], i64 0, i64 0 // PURECAP-NEXT: [[CALL:%.*]] = call ptr addrspace(200) @gets(ptr addrspace(200) noundef [[ARRAYDECAY]]) // PURECAP-NEXT: [[ARRAYDECAY1:%.*]] = getelementptr inbounds [10 x i8], ptr addrspace(200) [[FOO]], i64 0, i64 0 @@ -58,7 +58,7 @@ extern int fail2(void); // PURECAP-NEXT: ret i32 0 // int main(void) { - // FIXME: i32* getelementptr inbounds ([1 x i32], [1 x i32]* @__sancov_gen_, i32 0, i32 0) + // FIXME: i32* getelementptr inbounds ([1 x i32], [1 x i32]* @__sancov_gen_.[[UID]], i32 0, i32 0) char foo[10]; gets(foo); puts(foo); @@ -105,13 +105,13 @@ int main(void) { // PURECAP-NEXT: entry: // PURECAP-NEXT: [[RETVAL:%.*]] = alloca i32, align 4, addrspace(200) // PURECAP-NEXT: [[I_ADDR:%.*]] = alloca i32, align 4, addrspace(200) -// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) @__sancov_gen_.1) #[[ATTR3]] +// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) @__sancov_gen_.[[UID]].1) #[[ATTR3]] // PURECAP-NEXT: store i32 [[I]], ptr addrspace(200) [[I_ADDR]], align 4 // PURECAP-NEXT: [[TMP0:%.*]] = load i32, ptr addrspace(200) [[I_ADDR]], align 4 // PURECAP-NEXT: [[CMP:%.*]] = icmp slt i32 [[TMP0]], 100 // PURECAP-NEXT: br i1 [[CMP]], label [[IF_THEN:%.*]], label [[IF_ELSE:%.*]] // PURECAP: if.then: -// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) getelementptr inbounds ([4 x i32], ptr addrspace(200) @__sancov_gen_.1, i32 0, i64 1)) #[[ATTR3]] +// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) getelementptr inbounds ([4 x i32], ptr addrspace(200) @__sancov_gen_.[[UID]].1, i32 0, i64 1)) #[[ATTR3]] // PURECAP-NEXT: [[CALL:%.*]] = call signext i32 @fail1() // PURECAP-NEXT: store i32 [[CALL]], ptr addrspace(200) [[RETVAL]], align 4 // PURECAP-NEXT: br label [[RETURN:%.*]] @@ -120,14 +120,14 @@ int main(void) { // PURECAP-NEXT: [[CMP1:%.*]] = icmp slt i32 [[TMP1]], 200 // PURECAP-NEXT: br i1 [[CMP1]], label [[IF_THEN2:%.*]], label [[IF_END:%.*]] // PURECAP: if.then2: -// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) getelementptr inbounds ([4 x i32], ptr addrspace(200) @__sancov_gen_.1, i32 0, i64 2)) #[[ATTR3]] +// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) getelementptr inbounds ([4 x i32], ptr addrspace(200) @__sancov_gen_.[[UID]].1, i32 0, i64 2)) #[[ATTR3]] // PURECAP-NEXT: [[CALL3:%.*]] = call signext i32 @fail2() // PURECAP-NEXT: store i32 [[CALL3]], ptr addrspace(200) [[RETVAL]], align 4 // PURECAP-NEXT: br label [[RETURN]] // PURECAP: if.end: // PURECAP-NEXT: br label [[IF_END4:%.*]] // PURECAP: if.end4: -// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) getelementptr inbounds ([4 x i32], ptr addrspace(200) @__sancov_gen_.1, i32 0, i64 3)) #[[ATTR3]] +// PURECAP-NEXT: call void @__sanitizer_cov_trace_pc_guard(ptr addrspace(200) getelementptr inbounds ([4 x i32], ptr addrspace(200) @__sancov_gen_.[[UID]].1, i32 0, i64 3)) #[[ATTR3]] // PURECAP-NEXT: [[TMP2:%.*]] = load i32, ptr addrspace(200) [[I_ADDR]], align 4 // PURECAP-NEXT: [[ADD:%.*]] = add nsw i32 [[TMP2]], 1 // PURECAP-NEXT: store i32 [[ADD]], ptr addrspace(200) [[RETVAL]], align 4 diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp index caad5fdad2833..ddcb67f6ffeb9 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator.cpp @@ -84,7 +84,8 @@ static void NORETURN ReportInternalAllocatorOutOfMemory(uptr requested_size) { Die(); } -void *InternalAlloc(uptr size, InternalAllocatorCache *cache, usize alignment) { +void *InternalAlloc(usize size, InternalAllocatorCache *cache, + usize alignment) { void *p = RawInternalAlloc(size, cache, alignment); if (UNLIKELY(!p)) ReportInternalAllocatorOutOfMemory(size); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp index 447f8e0970f28..e442cd4b10228 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common.cpp @@ -308,7 +308,7 @@ usize ReadBinaryNameCached(/*out*/char *buf, usize buf_len) { return name_len; } -uptr ReadBinaryDir(/*out*/ char *buf, uptr buf_len) { +usize ReadBinaryDir(/*out*/ char *buf, usize buf_len) { ReadBinaryNameCached(buf, buf_len); const char *exec_name_pos = StripModuleName(buf); uptr name_len = exec_name_pos - buf; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_libc.h b/compiler-rt/lib/sanitizer_common/sanitizer_libc.h index 9444bcb02fe95..260bf7316e3c9 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_libc.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_libc.h @@ -29,11 +29,11 @@ extern "C" { // In normal runtime code, use the __sanitizer::internal_X() aliases instead. SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memcpy(void *dest, const void *src, - uptr n); + usize n); SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memmove( - void *dest, const void *src, uptr n); + void *dest, const void *src, usize n); SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memset(void *s, int c, - uptr n); + usize n); } // extern "C" // String functions diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp index bae7a022dd557..aafd569b63ce7 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cpp @@ -233,11 +233,11 @@ uptr internal_mremap(void *old_address, usize old_size, usize new_size, int flag } #endif -int internal_mprotect(void *addr, uptr length, int prot) { +int internal_mprotect(void *addr, usize length, int prot) { return internal_syscall(SYSCALL(mprotect), (uptr)addr, length, prot); } -int internal_madvise(uptr addr, uptr length, int advice) { +int internal_madvise(uptr addr, usize length, int advice) { return internal_syscall(SYSCALL(madvise), addr, length, advice); } @@ -480,7 +480,7 @@ usize internal_dup2(int oldfd, int newfd) { #endif } -usize internal_readlink(const char *path, char *buf, uptr bufsize) { +usize internal_readlink(const char *path, char *buf, usize bufsize) { # if SANITIZER_LINUX return internal_syscall(SYSCALL(readlinkat), AT_FDCWD, (uptr)path, (uptr)buf, bufsize); @@ -1172,8 +1172,8 @@ usize GetPageSize() { } #endif // !SANITIZER_ANDROID -uptr ReadBinaryName(/*out*/char *buf, uptr buf_len) { -#if SANITIZER_SOLARIS +usize ReadBinaryName(/*out*/ char *buf, usize buf_len) { +# if SANITIZER_SOLARIS const char *default_module_name = getexecname(); CHECK_NE(default_module_name, NULL); return internal_snprintf(buf, buf_len, "%s", default_module_name); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h index c740778b6228f..8cfc66d5c0a18 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_platform_interceptors.h @@ -498,7 +498,8 @@ #define SANITIZER_INTERCEPT_WCSLEN 1 #define SANITIZER_INTERCEPT_WCSCAT SI_POSIX #define SANITIZER_INTERCEPT_WCSDUP SI_POSIX -#define SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION (!SI_WINDOWS && SI_NOT_FUCHSIA) +#define SANITIZER_INTERCEPT_SIGNAL_AND_SIGACTION \ + (!SI_WINDOWS && SI_NOT_FUCHSIA && !SANITIZER_RISCV64) #define SANITIZER_INTERCEPT_BSD_SIGNAL SI_ANDROID #define SANITIZER_INTERCEPT_ACCT (SI_NETBSD || SI_FREEBSD) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp index 3e4e7dec19310..258f8e4b8ba5a 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_procmaps_bsd.cpp @@ -40,7 +40,7 @@ namespace __sanitizer { #if SANITIZER_FREEBSD -void GetMemoryProfile(fill_profile_f cb, uptr *stats) { +void GetMemoryProfile(fill_profile_f cb, usize *stats) { const int Mib[] = { CTL_KERN, KERN_PROC, @@ -49,11 +49,12 @@ void GetMemoryProfile(fill_profile_f cb, uptr *stats) { }; struct kinfo_proc InfoProc; - uptr Len = sizeof(InfoProc); - CHECK_EQ(internal_sysctl(Mib, ARRAY_SIZE(Mib), nullptr, (uptr *)&InfoProc, &Len, 0), 0); + usize Len = sizeof(InfoProc); + CHECK_EQ(internal_sysctl(Mib, ARRAY_SIZE(Mib), &InfoProc, &Len, nullptr, 0), + 0); cb(0, InfoProc.ki_rssize * GetPageSizeCached(), false, stats); } -#endif +# endif void ReadProcMaps(ProcSelfMapsBuff *proc_maps) { const int Mib[] = { diff --git a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp index 8341d01fece35..9c92ede93f85a 100644 --- a/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp +++ b/llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp @@ -15,6 +15,7 @@ #include "llvm/Transforms/Instrumentation/SanitizerCoverage.h" #include "llvm/ADT/ArrayRef.h" #include "llvm/ADT/SmallVector.h" +#include "llvm/ADT/StringExtras.h" #include "llvm/Analysis/GlobalsModRef.h" #include "llvm/Analysis/PostDominators.h" #include "llvm/IR/Constant.h" @@ -30,6 +31,7 @@ #include "llvm/IR/Module.h" #include "llvm/IR/Type.h" #include "llvm/Support/CommandLine.h" +#include "llvm/Support/Process.h" #include "llvm/Support/SpecialCaseList.h" #include "llvm/Support/VirtualFileSystem.h" #include "llvm/TargetParser/Triple.h" @@ -390,6 +392,11 @@ bool ModuleSanitizerCoverage::instrumentModule( DL = &M.getDataLayout(); CurModule = &M; CurModuleUniqueId = getUniqueModuleId(CurModule); + if (CurModuleUniqueId.empty()) { + CurModuleUniqueId = "clangPidTime_" + + llvm::itostr(sys::Process::getProcessId()) + "_" + + llvm::itostr(time(nullptr)); + } TargetTriple = Triple(M.getTargetTriple()); FunctionGuardArray = nullptr; Function8bitCounterArray = nullptr; @@ -724,7 +731,10 @@ GlobalVariable *ModuleSanitizerCoverage::CreateFunctionLocalArrayInSection( ArrayType *ArrayTy = ArrayType::get(Ty, NumElements); auto Array = new GlobalVariable( *CurModule, ArrayTy, false, GlobalVariable::PrivateLinkage, - Constant::getNullValue(ArrayTy), "__sancov_gen_"); + Constant::getNullValue(ArrayTy), + DL->getGlobalsAddressSpace() == 200 + ? Twine("__sancov_gen_") + Twine(CurModuleUniqueId) + : "__sancov_gen_"); if (TargetTriple.supportsCOMDAT() && (TargetTriple.isOSBinFormatELF() || !F.isInterposable())) @@ -862,7 +872,10 @@ void ModuleSanitizerCoverage::InjectTraceForSwitch( GlobalVariable *GV = new GlobalVariable( *CurModule, ArrayOfInt64Ty, false, GlobalVariable::InternalLinkage, ConstantArray::get(ArrayOfInt64Ty, Initializers), - "__sancov_gen_cov_switch_values"); + DL->getGlobalsAddressSpace() == 200 + ? Twine("__sancov_gen_cov_switch_values") + + Twine(CurModuleUniqueId) + : "__sancov_gen_cov_switch_values"); IRB.CreateCall(SanCovTraceSwitchFunction, {Cond, IRB.CreatePointerCast(GV, GlobalsInt64PtrTy)}); }