[compiler-rt] 26bda9e - Revert "[compiler-rt] Avoid memintrinsic calls inserted by the compiler"

Marco Elver via llvm-commits llvm-commits at lists.llvm.org
Wed May 31 03:20:38 PDT 2023


Author: Marco Elver
Date: 2023-05-31T12:20:19+02:00
New Revision: 26bda9e95a9dd84c1f01d0c5b8ebb6c2b0fd591b

URL: https://github.com/llvm/llvm-project/commit/26bda9e95a9dd84c1f01d0c5b8ebb6c2b0fd591b
DIFF: https://github.com/llvm/llvm-project/commit/26bda9e95a9dd84c1f01d0c5b8ebb6c2b0fd591b.diff

LOG: Revert "[compiler-rt] Avoid memintrinsic calls inserted by the compiler"

This reverts commit e614d5667f6c6fc6c645587cb9aee1a058285454.

Build bot failures:

| FAILED: lib/clang/17/lib/linux/libclang_rt.ubsan_minimal-i386.so
| : && /usr/bin/clang++ -fPIC -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -Wall -Wno-unused-parameter -O3 -DNDEBUG  -Wl,-z,defs -Wl,-z,nodelete   -m32 -nodefaultlibs -Wl,-z,text -nostdlib++ -shared -Wl,-soname,libclang_rt.ubsan_minimal-i386.so -o lib/clang/17/lib/linux/libclang_rt.ubsan_minimal-i386.so projects/compiler-rt/lib/ubsan_minimal/CMakeFiles/RTUbsan_minimal.i386.dir/ubsan_minimal_handlers.cpp.o  -lgcc_s  -lc && :
| /usr/bin/ld: projects/compiler-rt/lib/ubsan_minimal/CMakeFiles/RTUbsan_minimal.i386.dir/ubsan_minimal_handlers.cpp.o: in function `__ubsan_handle_type_mismatch_minimal':
| /b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm-project/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp:120: undefined reference to `__sanitizer_internal_memcpy'
| /usr/bin/ld: projects/compiler-rt/lib/ubsan_minimal/CMakeFiles/RTUbsan_minimal.i386.dir/ubsan_minimal_handlers.cpp.o: in function `__ubsan_handle_type_mismatch_minimal_abort':
| /b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm-project/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp:120: undefined reference to `__sanitizer_internal_memcpy'
| /usr/bin/ld: projects/compiler-rt/lib/ubsan_minimal/CMakeFiles/RTUbsan_minimal.i386.dir/ubsan_minimal_handlers.cpp.o: in function `__ubsan_handle_alignment_assumption_minimal':
| /b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm-project/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp:121: undefined reference to `__sanitizer_internal_memcpy'
| /usr/bin/ld: projects/compiler-rt/lib/ubsan_minimal/CMakeFiles/RTUbsan_minimal.i386.dir/ubsan_minimal_handlers.cpp.o: in function `__ubsan_handle_alignment_assumption_minimal_abort':
| /b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm-project/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp:121: undefined reference to `__sanitizer_internal_memcpy'
| /usr/bin/ld: projects/compiler-rt/lib/ubsan_minimal/CMakeFiles/RTUbsan_minimal.i386.dir/ubsan_minimal_handlers.cpp.o: in function `__ubsan_handle_add_overflow_minimal':
| /b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm-project/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp:122: undefined reference to `__sanitizer_internal_memcpy'
| /usr/bin/ld: projects/compiler-rt/lib/ubsan_minimal/CMakeFiles/RTUbsan_minimal.i386.dir/ubsan_minimal_handlers.cpp.o:/b/sanitizer-x86_64-linux-bootstrap-msan/build/llvm-project/compiler-rt/lib/ubsan_minimal/ubsan_minimal_handlers.cpp:122: more undefined references to `__sanitizer_internal_memcpy' follow

Link: https://lab.llvm.org/buildbot#builders/74/builds/19569

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/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 db6aab2538e5e..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,11 +46,7 @@ int internal_memcmp(const void* s1, const void* s2, uptr n) {
   return 0;
 }
 
-void *internal_memcpy(void *dest, const void *src, uptr n)
-    ALIAS(__sanitizer_internal_memcpy);
-SANITIZER_INTERFACE_ATTRIBUTE
-extern "C" 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)
@@ -61,11 +54,7 @@ extern "C" void *__sanitizer_internal_memcpy(void *dest, const void *src,
   return dest;
 }
 
-void *internal_memmove(void *dest, const void *src, uptr n)
-    ALIAS(__sanitizer_internal_memmove);
-SANITIZER_INTERFACE_ATTRIBUTE
-extern "C" 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;
@@ -83,10 +72,7 @@ extern "C" void *__sanitizer_internal_memmove(void *dest, const void *src,
   return dest;
 }
 
-void *internal_memset(void *s, int c, uptr n)
-    ALIAS(__sanitizer_internal_memset);
-SANITIZER_INTERFACE_ATTRIBUTE
-extern "C" 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);

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/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