diff options
Diffstat (limited to 'compiler-rt')
| -rw-r--r-- | compiler-rt/lib/esan/esan.cpp | 3 | ||||
| -rw-r--r-- | compiler-rt/lib/esan/esan_interceptors.cpp | 6 | ||||
| -rw-r--r-- | compiler-rt/lib/esan/working_set.cpp | 5 | ||||
| -rw-r--r-- | compiler-rt/lib/esan/working_set.h | 1 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/CMakeLists.txt | 16 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_linux.cc | 26 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_linux.h | 4 | ||||
| -rw-r--r-- | compiler-rt/lib/sanitizer_common/sanitizer_linux_x86_64.S | 25 | ||||
| -rw-r--r-- | compiler-rt/test/esan/TestCases/workingset-early-fault.c | 33 | 
9 files changed, 2 insertions, 117 deletions
| diff --git a/compiler-rt/lib/esan/esan.cpp b/compiler-rt/lib/esan/esan.cpp index e6d6aff3184..e7399e219e6 100644 --- a/compiler-rt/lib/esan/esan.cpp +++ b/compiler-rt/lib/esan/esan.cpp @@ -197,9 +197,6 @@ void initializeLibrary(ToolType Tool) {    }    initializeShadow(); -  if (__esan_which_tool == ESAN_WorkingSet) -    initializeShadowWorkingSet(); -    initializeInterceptors();    if (__esan_which_tool == ESAN_CacheFrag) { diff --git a/compiler-rt/lib/esan/esan_interceptors.cpp b/compiler-rt/lib/esan/esan_interceptors.cpp index 7aefeb6646e..5d4edb51d99 100644 --- a/compiler-rt/lib/esan/esan_interceptors.cpp +++ b/compiler-rt/lib/esan/esan_interceptors.cpp @@ -17,7 +17,6 @@  #include "interception/interception.h"  #include "sanitizer_common/sanitizer_common.h"  #include "sanitizer_common/sanitizer_libc.h" -#include "sanitizer_common/sanitizer_linux.h"  #include "sanitizer_common/sanitizer_stacktrace.h"  using namespace __esan; // NOLINT @@ -398,11 +397,6 @@ INTERCEPTOR(int, sigaction, int signum, const struct sigaction *act,  // This is required to properly use internal_sigaction.  namespace __sanitizer {  int real_sigaction(int signum, const void *act, void *oldact) { -  if (REAL(sigaction) == nullptr) { -    // With an instrumented allocator, this is called during interceptor init -    // and we need a raw syscall solution. -    return internal_sigaction_syscall(signum, act, oldact); -  }    return REAL(sigaction)(signum, (const struct sigaction *)act,                           (struct sigaction *)oldact);  } diff --git a/compiler-rt/lib/esan/working_set.cpp b/compiler-rt/lib/esan/working_set.cpp index 622fd29e846..9e7520f492e 100644 --- a/compiler-rt/lib/esan/working_set.cpp +++ b/compiler-rt/lib/esan/working_set.cpp @@ -182,13 +182,10 @@ static void takeSample(void *Arg) {    }  } -// Initialization that must be done before any instrumented code is executed. -void initializeShadowWorkingSet() { +void initializeWorkingSet() {    CHECK(getFlags()->cache_line_size == CacheLineSize);    registerMemoryFaultHandler(); -} -void initializeWorkingSet() {    if (getFlags()->record_snapshots) {      for (u32 i = 0; i < NumFreq; ++i)        SizePerFreq[i].initialize(CircularBufferSizes[i]); diff --git a/compiler-rt/lib/esan/working_set.h b/compiler-rt/lib/esan/working_set.h index 034dfe6d991..3750a480a11 100644 --- a/compiler-rt/lib/esan/working_set.h +++ b/compiler-rt/lib/esan/working_set.h @@ -21,7 +21,6 @@  namespace __esan {  void initializeWorkingSet(); -void initializeShadowWorkingSet();  int finalizeWorkingSet();  void processRangeAccessWorkingSet(uptr PC, uptr Addr, SIZE_T Size,                                    bool IsWrite); diff --git a/compiler-rt/lib/sanitizer_common/CMakeLists.txt b/compiler-rt/lib/sanitizer_common/CMakeLists.txt index 9b9ba4b56c4..c59ca591bb4 100644 --- a/compiler-rt/lib/sanitizer_common/CMakeLists.txt +++ b/compiler-rt/lib/sanitizer_common/CMakeLists.txt @@ -34,11 +34,6 @@ set(SANITIZER_SOURCES_NOTERMINATION    sanitizer_thread_registry.cc    sanitizer_win.cc) -if(NOT APPLE) -  list(APPEND SANITIZER_SOURCES_NOTERMINATION -    sanitizer_linux_x86_64.S) -endif() -  set(SANITIZER_SOURCES    ${SANITIZER_SOURCES_NOTERMINATION} sanitizer_termination.cc) @@ -138,17 +133,6 @@ append_list_if(SANITIZER_LIMIT_FRAME_SIZE -Wframe-larger-than=570  append_list_if(COMPILER_RT_HAS_WGLOBAL_CONSTRUCTORS_FLAG -Wglobal-constructors                 SANITIZER_CFLAGS) -if (LLVM_ENABLE_PEDANTIC AND NOT APPLE) -  # With -pedantic, our .S files raise warnings about empty macro arguments -  # from __USER_LABEL_PREFIX__ being an empty arg to GLUE().  Unfortunately, -  # there is no simple way to test for an empty define, nor to disable just -  # that warning or to disable -pedantic.  There is also no simple way to -  # remove -pedantic from just this file (we'd have to remove from -  # CMAKE_C*_FLAGS and re-add as a source property to all the non-.S files). -  set_source_files_properties(sanitizer_linux_x86_64.S -    PROPERTIES COMPILE_FLAGS "-w") -endif () -  if(APPLE)    set(OS_OPTION OS ${SANITIZER_COMMON_SUPPORTED_OS})  endif() diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc index 90c3fe8d3d5..75e21a6078b 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc @@ -99,12 +99,6 @@ const int FUTEX_WAKE = 1;  # define SANITIZER_LINUX_USES_64BIT_SYSCALLS 0  #endif -#if defined(__x86_64__) -extern "C" { -extern void internal_sigreturn(); -} -#endif -  namespace __sanitizer {  #if SANITIZER_LINUX && defined(__x86_64__) @@ -622,8 +616,7 @@ int internal_fork() {  #if SANITIZER_LINUX  #define SA_RESTORER 0x04000000 -// Doesn't set sa_restorer if the caller did not set it, so use with caution -//(see below). +// Doesn't set sa_restorer, use with caution (see below).  int internal_sigaction_norestorer(int signum, const void *act, void *oldact) {    __sanitizer_kernel_sigaction_t k_act, k_oldact;    internal_memset(&k_act, 0, sizeof(__sanitizer_kernel_sigaction_t)); @@ -667,23 +660,6 @@ int internal_sigaction_norestorer(int signum, const void *act, void *oldact) {    }    return result;  } - -// Invokes sigaction via a raw syscall with a restorer, but does not support -// all platforms yet. -// We disable for Go simply because we have not yet added to buildgo.sh. -#if defined(__x86_64__) && !SANITIZER_GO -int internal_sigaction_syscall(int signum, const void *act, void *oldact) { -  __sanitizer_sigaction u_adjust; -  internal_memcpy(&u_adjust, act, sizeof(u_adjust)); -#if !SANITIZER_ANDROID || !SANITIZER_MIPS32 -    if (u_adjust.sa_restorer == nullptr) { -      u_adjust.sa_restorer = internal_sigreturn; -    } -#endif -    return internal_sigaction_norestorer(signum, (const void *)&u_adjust, -                                         oldact); -} -#endif // defined(__x86_64__) && !SANITIZER_GO  #endif  // SANITIZER_LINUX  uptr internal_sigprocmask(int how, __sanitizer_sigset_t *set, diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux.h b/compiler-rt/lib/sanitizer_common/sanitizer_linux.h index 526fa4426e3..beb43568ad0 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_linux.h @@ -42,10 +42,6 @@ uptr internal_prctl(int option, uptr arg2, uptr arg3, uptr arg4, uptr arg5);  // (like the process-wide error reporting SEGV handler) must use  // internal_sigaction instead.  int internal_sigaction_norestorer(int signum, const void *act, void *oldact); -#if defined(__x86_64__) && !SANITIZER_GO -// Uses a raw system call to avoid interceptors. -int internal_sigaction_syscall(int signum, const void *act, void *oldact); -#endif  void internal_sigdelset(__sanitizer_sigset_t *set, int signum);  #if defined(__x86_64__) || defined(__mips__) || defined(__aarch64__) \    || defined(__powerpc64__) || defined(__s390__) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_linux_x86_64.S b/compiler-rt/lib/sanitizer_common/sanitizer_linux_x86_64.S deleted file mode 100644 index 8ff909542b6..00000000000 --- a/compiler-rt/lib/sanitizer_common/sanitizer_linux_x86_64.S +++ /dev/null @@ -1,25 +0,0 @@ -// This file is dual licensed under the MIT and the University of Illinois Open -// Source Licenses. See LICENSE.TXT for details. - -// Avoid being marked as needing an executable stack: -#if defined(__linux__) && defined(__ELF__) -.section .note.GNU-stack,"",%progbits -#endif - -// Further contents are x86_64-only: -#if defined(__linux__) && defined(__x86_64__) - -#include "../builtins/assembly.h" - -// If the "naked" function attribute were supported for x86 we could -// do this via inline asm. -.text -.balign 4 -DEFINE_COMPILERRT_FUNCTION(internal_sigreturn) -        mov           $0xf,             %eax    // 0xf == SYS_rt_sigreturn -        mov           %rcx,             %r10 -        syscall -        ret                                     // Won't normally reach here. -END_COMPILERRT_FUNCTION(internal_sigreturn) - -#endif // defined(__linux__) && defined(__x86_64__) diff --git a/compiler-rt/test/esan/TestCases/workingset-early-fault.c b/compiler-rt/test/esan/TestCases/workingset-early-fault.c deleted file mode 100644 index 1c420c368ca..00000000000 --- a/compiler-rt/test/esan/TestCases/workingset-early-fault.c +++ /dev/null @@ -1,33 +0,0 @@ -// Test shadow faults during esan initialization as well as -// faults during dlsym's calloc during interceptor init. -// -// RUN: %clang_esan_wset %s -o %t -// RUN: %run %t 2>&1 | FileCheck %s - -#include <stdio.h> -#include <stdlib.h> -#include <string.h> - -// Our goal is to emulate an instrumented allocator, whose calloc -// invoked from dlsym will trigger shadow faults, to test an -// early shadow fault during esan interceptor init. -// We do this by replacing calloc: -void *calloc(size_t size, size_t n) { -  // Unfortunately we can't print anything to make the test -  // ensure we got here b/c the sanitizer interceptors can't -  // handle that during interceptor init. - -  // Ensure we trigger a shadow write fault: -  int x[16]; -  x[0] = size; -  // Now just emulate calloc. -  void *res = malloc(size*n); -  memset(res, 0, size*n); -  return res; -} - -int main(int argc, char **argv) { -  printf("all done\n"); -  return 0; -} -// CHECK: all done | 

