[compiler-rt] 8e728ad - Revert "[compiler-rt] Avoid memintrinsic calls inserted by the compiler"
Marco Elver via llvm-commits
llvm-commits at lists.llvm.org
Wed May 31 08:59:25 PDT 2023
Author: Marco Elver
Date: 2023-05-31T17:59:11+02:00
New Revision: 8e728adcfedd97fbc3759b5533d0cbada6b68aa6
URL: https://github.com/llvm/llvm-project/commit/8e728adcfedd97fbc3759b5533d0cbada6b68aa6
DIFF: https://github.com/llvm/llvm-project/commit/8e728adcfedd97fbc3759b5533d0cbada6b68aa6.diff
LOG: Revert "[compiler-rt] Avoid memintrinsic calls inserted by the compiler"
This reverts commit 4369de7af46605522bf7dbe3bc31d00b0eb4bee6.
Fails on Mac OS with "sanitizer_libc.cpp:109:5: error: aliases are not
supported on darwin".
Added:
Modified:
compiler-rt/lib/asan/asan_interceptors_memintrinsics.cpp
compiler-rt/lib/hwasan/hwasan_interceptors.cpp
compiler-rt/lib/interception/tests/CMakeLists.txt
compiler-rt/lib/memprof/memprof_interceptors_memintrinsics.cpp
compiler-rt/lib/msan/msan_interceptors.cpp
compiler-rt/lib/sanitizer_common/CMakeLists.txt
compiler-rt/lib/sanitizer_common/sanitizer_common_interceptors_memintrinsics.inc
compiler-rt/lib/sanitizer_common/sanitizer_common_interface.inc
compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h
compiler-rt/lib/sanitizer_common/sanitizer_libc.cpp
compiler-rt/lib/tsan/rtl/tsan_interceptors_memintrinsics.cpp
compiler-rt/lib/ubsan_minimal/CMakeLists.txt
compiler-rt/test/tsan/Linux/check_memcpy.c
Removed:
compiler-rt/lib/sanitizer_common/sanitizer_redefine_builtins.h
compiler-rt/test/asan/TestCases/Linux/check_memcpy.c
compiler-rt/test/msan/Linux/check_memcpy.c
################################################################################
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<uptr>(s) % 16) == 0 && (n % 16) == 0) {
u64 *p = reinterpret_cast<u64*>(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; }
More information about the llvm-commits
mailing list