[compiler-rt] 8e54794 - Revert "[compiler-rt] Avoid memintrinsic calls inserted by the compiler"
Marco Elver via llvm-commits
llvm-commits at lists.llvm.org
Fri Jun 2 07:38:37 PDT 2023
Author: Marco Elver
Date: 2023-06-02T16:37:38+02:00
New Revision: 8e547948670b143e74a69002b5617b5656ac61cb
URL: https://github.com/llvm/llvm-project/commit/8e547948670b143e74a69002b5617b5656ac61cb
DIFF: https://github.com/llvm/llvm-project/commit/8e547948670b143e74a69002b5617b5656ac61cb.diff
LOG: Revert "[compiler-rt] Avoid memintrinsic calls inserted by the compiler"
This reverts commit fc011a72881cdddc95bfa61f3f38916c29b7e362.
This reverts commit 4ad6a0c9a409b19b950a6a2a90d5405cea2e9b89.
This reverts commit 4b1eb4cf0e8eff5f68410720167b4986da597010.
Still causes Windows build bots to fail.
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/sanitizer_common/sanitizer_libc.h
compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt
compiler-rt/lib/tsan/rtl/tsan_interceptors_memintrinsics.cpp
compiler-rt/lib/ubsan_minimal/CMakeLists.txt
compiler-rt/test/tsan/Linux/check_memcpy.c
llvm/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn
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 4a6fa5e8dbacb..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,7 +95,6 @@ SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memset(void *s, int c,
}
return s;
}
-} // extern "C"
uptr internal_strcspn(const char *s, const char *reject) {
uptr i;
diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_libc.h b/compiler-rt/lib/sanitizer_common/sanitizer_libc.h
index e881db2079086..39a212665d0ae 100644
--- a/compiler-rt/lib/sanitizer_common/sanitizer_libc.h
+++ b/compiler-rt/lib/sanitizer_common/sanitizer_libc.h
@@ -24,33 +24,15 @@ namespace __sanitizer {
// internal_X() is a custom implementation of X() for use in RTL.
-extern "C" {
-// These are used as builtin replacements; see sanitizer_redefine_builtins.h.
-// 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);
-SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memmove(
- void *dest, const void *src, uptr n);
-SANITIZER_INTERFACE_ATTRIBUTE void *__sanitizer_internal_memset(void *s, int c,
- uptr n);
-} // extern "C"
-
// String functions
s64 internal_atoll(const char *nptr);
void *internal_memchr(const void *s, int c, uptr n);
void *internal_memrchr(const void *s, int c, uptr n);
int internal_memcmp(const void* s1, const void* s2, uptr n);
-ALWAYS_INLINE void *internal_memcpy(void *dest, const void *src, uptr n) {
- return __sanitizer_internal_memcpy(dest, src, n);
-}
-ALWAYS_INLINE void *internal_memmove(void *dest, const void *src, uptr n) {
- return __sanitizer_internal_memmove(dest, src, n);
-}
+void *internal_memcpy(void *dest, const void *src, uptr n);
+void *internal_memmove(void *dest, const void *src, uptr n);
// Should not be used in performance-critical places.
-ALWAYS_INLINE void *internal_memset(void *s, int c, uptr n) {
- return __sanitizer_internal_memset(s, c, n);
-}
+void *internal_memset(void *s, int c, uptr n);
char* internal_strchr(const char *s, int c);
char *internal_strchrnul(const char *s, int c);
int internal_strcmp(const char *s1, const char *s2);
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/sanitizer_common/tests/CMakeLists.txt b/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt
index 2b853722603dc..40aa8e703b6c7 100644
--- a/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt
+++ b/compiler-rt/lib/sanitizer_common/tests/CMakeLists.txt
@@ -69,7 +69,6 @@ set(SANITIZER_TEST_CFLAGS_COMMON
-I${COMPILER_RT_SOURCE_DIR}/include
-I${COMPILER_RT_SOURCE_DIR}/lib
-I${COMPILER_RT_SOURCE_DIR}/lib/sanitizer_common
- -DSANITIZER_COMMON_NO_REDEFINE_BUILTINS
-fno-rtti
-O2
-Werror=sign-compare
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; }
diff --git a/llvm/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn b/llvm/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn
index 174cbc5841e04..03492849fd5cc 100644
--- a/llvm/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn
+++ b/llvm/utils/gn/secondary/compiler-rt/lib/sanitizer_common/BUILD.gn
@@ -113,7 +113,6 @@ source_set("sources") {
"sanitizer_procmaps_solaris.cpp",
"sanitizer_ptrauth.h",
"sanitizer_quarantine.h",
- "sanitizer_redefine_builtins.h",
"sanitizer_report_decorator.h",
"sanitizer_ring_buffer.h",
"sanitizer_solaris.cpp",
More information about the llvm-commits
mailing list