diff --git a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp index 4e4ea7191d320..9d1452482d3af 100644 --- a/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp @@ -11,8 +11,6 @@ // ASan versions of memcpy, memmove, and memset. //===---------------------------------------------------------------------===// -#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS - #include "asan_interceptors_memintrinsics.h" #include "asan_interceptors.h" diff --git a/compiler-rt/lib/hwasan/hwasan_interceptors.cpp b/compiler-rt/lib/hwasan/hwasan_interceptors.cpp index bffb4e092e90c..26109332a1dce 100644 --- a/compiler-rt/lib/hwasan/hwasan_interceptors.cpp +++ b/compiler-rt/lib/hwasan/hwasan_interceptors.cpp @@ -14,8 +14,6 @@ // sanitizer_common/sanitizer_common_interceptors.h //===----------------------------------------------------------------------===// -#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS - #include "hwasan.h" #include "hwasan_allocator.h" #include "hwasan_checks.h" diff --git a/compiler-rt/lib/interception/tests/CMakeLists.txt b/compiler-rt/lib/interception/tests/CMakeLists.txt index f6840e194be49..688edc3750f5f 100644 --- a/compiler-rt/lib/interception/tests/CMakeLists.txt +++ b/compiler-rt/lib/interception/tests/CMakeLists.txt @@ -17,7 +17,6 @@ set(INTERCEPTION_TEST_CFLAGS_COMMON -I${COMPILER_RT_SOURCE_DIR}/include -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/interception - -DSANITIZER_COMMON_NO_REDEFINE_BUILTINS -fno-rtti -O2 -Werror=sign-compare) diff --git a/compiler-rt/lib/memprof/memprof_interceptors_memintrinsics.cpp b/compiler-rt/lib/memprof/memprof_interceptors_memintrinsics.cpp index 56bd11614d6ac..dae2ab5dbb9bc 100644 --- a/compiler-rt/lib/memprof/memprof_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/memprof/memprof_interceptors_memintrinsics.cpp @@ -11,8 +11,6 @@ // MemProf versions of memcpy, memmove, and memset. //===---------------------------------------------------------------------===// -#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS - #include "memprof_interceptors_memintrinsics.h" #include "memprof_interceptors.h" diff --git a/compiler-rt/lib/msan/msan_interceptors.cpp b/compiler-rt/lib/msan/msan_interceptors.cpp index 6f57c33eefa97..96abc47305cad 100644 --- a/compiler-rt/lib/msan/msan_interceptors.cpp +++ b/compiler-rt/lib/msan/msan_interceptors.cpp @@ -14,8 +14,6 @@ // sanitizer_common/sanitizer_common_interceptors.h //===----------------------------------------------------------------------===// -#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS - #include "interception/interception.h" #include "msan.h" #include "msan_chained_origin_depot.h" diff --git a/compiler-rt/lib/sanitizer_common/CMakeLists.txt b/compiler-rt/lib/sanitizer_common/CMakeLists.txt index bfa59daf17b00..c4fdc7aeb4e40 100644 --- a/compiler-rt/lib/sanitizer_common/CMakeLists.txt +++ b/compiler-rt/lib/sanitizer_common/CMakeLists.txt @@ -172,7 +172,6 @@ set(SANITIZER_IMPL_HEADERS sanitizer_procmaps.h sanitizer_ptrauth.h sanitizer_quarantine.h - sanitizer_redefine_builtins.h sanitizer_report_decorator.h sanitizer_ring_buffer.h sanitizer_signal_interceptors.inc diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc index 52e489d02cda8..e6b967c48b2e1 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc @@ -9,10 +9,6 @@ // Memintrinsic function interceptors for tools like AddressSanitizer, // ThreadSanitizer, MemorySanitizer, etc. // -// These interceptors are part of the common interceptors, but separated out so -// that implementations may add them, if necessary, to a separate source file -// that should define SANITIZER_COMMON_NO_REDEFINE_BUILTINS at the top. -// // This file should be included into the tool's memintrinsic interceptor file, // which has to define its own macros: // COMMON_INTERCEPTOR_ENTER @@ -24,10 +20,6 @@ // COMMON_INTERCEPTOR_NOTHING_IS_INITIALIZED //===----------------------------------------------------------------------===// -#ifdef SANITIZER_REDEFINE_BUILTINS_H -#error "Define SANITIZER_COMMON_NO_REDEFINE_BUILTINS in .cpp file" -#endif - #include "interception/interception.h" #include "sanitizer_platform_interceptors.h" diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_common_interface.inc b/compiler-rt/lib/sanitizer_common/sanitizer_common_interface.inc index 557207fe62ac6..37efb5791d0bf 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_common_interface.inc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_common_interface.inc @@ -46,7 +46,3 @@ INTERFACE_FUNCTION(__sanitizer_purge_allocator) INTERFACE_FUNCTION(__sanitizer_print_memory_profile) INTERFACE_WEAK_FUNCTION(__sanitizer_free_hook) INTERFACE_WEAK_FUNCTION(__sanitizer_malloc_hook) -// Memintrinsic functions. -INTERFACE_FUNCTION(__sanitizer_internal_memcpy) -INTERFACE_FUNCTION(__sanitizer_internal_memmove) -INTERFACE_FUNCTION(__sanitizer_internal_memset) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h index e5dd65a8398c4..95f4760cffd74 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h @@ -13,7 +13,6 @@ #define SANITIZER_DEFS_H #include "sanitizer_platform.h" -#include "sanitizer_redefine_builtins.h" #ifndef SANITIZER_DEBUG # define SANITIZER_DEBUG 0 diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_libc.cpp b/compiler-rt/lib/sanitizer_common/sanitizer_libc.cpp index 9cbf232c6d7be..d3076f0da4891 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_libc.cpp +++ b/compiler-rt/lib/sanitizer_common/sanitizer_libc.cpp @@ -10,9 +10,6 @@ // run-time libraries. See sanitizer_libc.h for details. //===----------------------------------------------------------------------===// -// Do not redefine builtins; this file is defining the builtin replacements. -#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS - #include "sanitizer_allocator_internal.h" #include "sanitizer_common.h" #include "sanitizer_libc.h" @@ -49,10 +46,7 @@ int internal_memcmp(const void* s1, const void* s2, uptr n) { return 0; } -extern "C" { -SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memcpy(void *dest, - const void *src, - uptr n) { +void *internal_memcpy(void *dest, const void *src, uptr n) { char *d = (char*)dest; const char *s = (const char *)src; for (uptr i = 0; i < n; ++i) @@ -60,8 +54,7 @@ SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memcpy(void *dest, return dest; } -SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memmove( - void *dest, const void *src, uptr n) { +void *internal_memmove(void *dest, const void *src, uptr n) { char *d = (char*)dest; const char *s = (const char *)src; sptr i, signed_n = (sptr)n; @@ -79,8 +72,7 @@ SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memmove( return dest; } -SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memset(void *s, int c, - uptr n) { +void *internal_memset(void* s, int c, uptr n) { // Optimize for the most performance-critical case: if ((reinterpret_cast(s) % 16) == 0 && (n % 16) == 0) { u64 *p = reinterpret_cast(s); @@ -103,14 +95,6 @@ SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memset(void *s, int c, } return s; } -} // extern "C" - -void *internal_memcpy(void *dest, const void *src, uptr n) - ALIAS(__sanitizer_internal_memcpy); -void *internal_memmove(void *dest, const void *src, uptr n) - ALIAS(__sanitizer_internal_memmove); -void *internal_memset(void *s, int c, uptr n) - ALIAS(__sanitizer_internal_memset); uptr internal_strcspn(const char *s, const char *reject) { uptr i; diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h b/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h deleted file mode 100644 index 13dc7d5be3142..0000000000000 --- a/compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h +++ /dev/null @@ -1,27 +0,0 @@ -//===-- sanitizer_redefine_builtins.h ---------------------------*- C++ -*-===// -// -// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. -// See https://llvm.org/LICENSE.txt for license information. -// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception -// -//===----------------------------------------------------------------------===// -// -// Redefine builtin functions to use internal versions. This is needed where -// compiler optimizations end up producing unwanted libcalls! -// -//===----------------------------------------------------------------------===// -#ifndef SANITIZER_COMMON_NO_REDEFINE_BUILTINS -#ifndef SANITIZER_REDEFINE_BUILTINS_H -#define SANITIZER_REDEFINE_BUILTINS_H - -// The asm hack only works with GCC and Clang. -#if !defined(_MSC_VER) || defined(__clang__) - -asm("memcpy = __sanitizer_internal_memcpy"); -asm("memmove = __sanitizer_internal_memmove"); -asm("memset = __sanitizer_internal_memset"); - -#endif // !_MSC_VER || __clang__ - -#endif // SANITIZER_REDEFINE_BUILTINS_H -#endif // SANITIZER_COMMON_NO_REDEFINE_BUILTINS diff --git a/compiler-rt/lib/tsan/rtl/tsan_interceptors_memintrinsics.cpp b/compiler-rt/lib/tsan/rtl/tsan_interceptors_memintrinsics.cpp index c8b6b2ef19483..6a2a4298c217a 100644 --- a/compiler-rt/lib/tsan/rtl/tsan_interceptors_memintrinsics.cpp +++ b/compiler-rt/lib/tsan/rtl/tsan_interceptors_memintrinsics.cpp @@ -10,8 +10,6 @@ // //===----------------------------------------------------------------------===// -#define SANITIZER_COMMON_NO_REDEFINE_BUILTINS - #include "tsan_interceptors.h" #include "tsan_interface.h" diff --git a/compiler-rt/lib/ubsan_minimal/CMakeLists.txt b/compiler-rt/lib/ubsan_minimal/CMakeLists.txt index 07e96a70a49dc..504dd3b7573b9 100644 --- a/compiler-rt/lib/ubsan_minimal/CMakeLists.txt +++ b/compiler-rt/lib/ubsan_minimal/CMakeLists.txt @@ -6,9 +6,7 @@ set(UBSAN_MINIMAL_SOURCES include_directories(..) -set(UBSAN_CFLAGS - ${SANITIZER_COMMON_CFLAGS} - -DSANITIZER_COMMON_NO_REDEFINE_BUILTINS) +set(UBSAN_CFLAGS ${SANITIZER_COMMON_CFLAGS}) append_rtti_flag(OFF UBSAN_CFLAGS) set(UBSAN_LINK_FLAGS ${SANITIZER_COMMON_LINK_FLAGS}) diff --git a/compiler-rt/test/asan/TestCases/Linux/check_memcpy.c b/compiler-rt/test/asan/TestCases/Linux/check_memcpy.c deleted file mode 100644 index d5fee1628fc54..0000000000000 --- a/compiler-rt/test/asan/TestCases/Linux/check_memcpy.c +++ /dev/null @@ -1,8 +0,0 @@ -// Verify runtime doesn't contain compiler-emitted memcpy/memmove calls. -// -// REQUIRES: shared_unwind, x86_64-target-arch - -// RUN: %clang_asan -O1 %s -o %t -// RUN: llvm-objdump -d -l %t | FileCheck --implicit-check-not="{{(callq|jmpq) .*<(__interceptor_.*)?mem(cpy|set|move)>}}" %s - -int main() { return 0; } diff --git a/compiler-rt/test/msan/Linux/check_memcpy.c b/compiler-rt/test/msan/Linux/check_memcpy.c deleted file mode 100644 index 42af2d7e7d1b1..0000000000000 --- a/compiler-rt/test/msan/Linux/check_memcpy.c +++ /dev/null @@ -1,8 +0,0 @@ -// Verify runtime doesn't contain compiler-emitted memcpy/memmove calls. -// -// REQUIRES: shared_unwind, x86_64-target-arch - -// RUN: %clang_msan -O1 %s -o %t -// RUN: llvm-objdump -d -l %t | FileCheck --implicit-check-not="{{(callq|jmpq) .*<(__interceptor_.*)?mem(cpy|set|move)>}}" %s - -int main() { return 0; } diff --git a/compiler-rt/test/tsan/Linux/check_memcpy.c b/compiler-rt/test/tsan/Linux/check_memcpy.c index 21480564ff6ce..26f99612e50f5 100644 --- a/compiler-rt/test/tsan/Linux/check_memcpy.c +++ b/compiler-rt/test/tsan/Linux/check_memcpy.c @@ -5,9 +5,16 @@ // This could fail if using a static libunwind because that static libunwind // could be uninstrumented and contain memcpy/memmove calls not intercepted by // tsan. -// REQUIRES: shared_unwind, x86_64-target-arch +// REQUIRES: shared_unwind // RUN: %clang_tsan -O1 %s -o %t -// RUN: llvm-objdump -d -l %t | FileCheck --implicit-check-not="{{(callq|jmpq) .*<(__interceptor_.*)?mem(cpy|set|move)>}}" %s +// RUN: llvm-objdump -d -l %t | FileCheck %s + +int main() { + return 0; +} + +// CHECK-NOT: callq {{.*<(__interceptor_)?mem(cpy|set)>}} +// tail calls: +// CHECK-NOT: jmpq {{.*<(__interceptor_)?mem(cpy|set)>}} -int main() { return 0; }