[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