Revert to r305632
Change-Id: Id37311f3600464ef66b47096503b3aab2e9a336f
diff --git a/include/sanitizer/coverage_interface.h b/include/sanitizer/coverage_interface.h
index 081033c..637379d 100644
--- a/include/sanitizer/coverage_interface.h
+++ b/include/sanitizer/coverage_interface.h
@@ -22,11 +22,8 @@
// Record and dump coverage info.
void __sanitizer_cov_dump();
- // Clear collected coverage info.
- void __sanitizer_cov_reset();
-
- // Dump collected coverage info. Sorts pcs by module into individual .sancov
- // files.
+ // Dump collected coverage info. Sorts pcs by module into individual
+ // .sancov files.
void __sanitizer_dump_coverage(const uintptr_t *pcs, uintptr_t len);
#ifdef __cplusplus
diff --git a/lib/asan/scripts/asan_device_setup b/lib/asan/scripts/asan_device_setup
index 369f387..c807df3 100755
--- a/lib/asan/scripts/asan_device_setup
+++ b/lib/asan/scripts/asan_device_setup
@@ -52,7 +52,7 @@
local STORAGE=`$ADB shell mount | grep /system | cut -d ' ' -f1`
if [ "$STORAGE" != "" ]; then
echo Remounting $STORAGE at /system
- $ADB shell su -c "mount -o rw,remount $STORAGE /system"
+ $ADB shell su -c "mount -o remount,rw $STORAGE /system"
else
echo Failed to get storage device name for "/system" mount point
fi
diff --git a/lib/builtins/clear_cache.c b/lib/builtins/clear_cache.c
index 7a51c23..25570fc 100644
--- a/lib/builtins/clear_cache.c
+++ b/lib/builtins/clear_cache.c
@@ -41,7 +41,7 @@
* clear_mips_cache - Invalidates instruction cache for Mips.
*/
static void clear_mips_cache(const void* Addr, size_t Size) {
- __asm__ volatile (
+ asm volatile (
".set push\n"
".set noreorder\n"
".set noat\n"
diff --git a/lib/sanitizer_common/sanitizer_coverage_interface.inc b/lib/sanitizer_common/sanitizer_coverage_interface.inc
index 87ae9c0..d474900 100644
--- a/lib/sanitizer_common/sanitizer_coverage_interface.inc
+++ b/lib/sanitizer_common/sanitizer_coverage_interface.inc
@@ -9,7 +9,6 @@
// Sanitizer Coverage interface list.
//===----------------------------------------------------------------------===//
INTERFACE_FUNCTION(__sanitizer_cov_dump)
-INTERFACE_FUNCTION(__sanitizer_cov_reset)
INTERFACE_FUNCTION(__sanitizer_dump_coverage)
INTERFACE_FUNCTION(__sanitizer_dump_trace_pc_guard_coverage)
INTERFACE_WEAK_FUNCTION(__sancov_default_options)
diff --git a/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc b/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc
index ee3af49..2443335 100644
--- a/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc
+++ b/lib/sanitizer_common/sanitizer_coverage_libcdep_new.cc
@@ -124,17 +124,11 @@
}
void TracePcGuard(u32* guard, uptr pc) {
- u32 idx = *guard;
+ atomic_uint32_t* guard_ptr = reinterpret_cast<atomic_uint32_t*>(guard);
+ u32 idx = atomic_exchange(guard_ptr, 0, memory_order_relaxed);
if (!idx) return;
// we start indices from 1.
- atomic_uintptr_t* pc_ptr =
- reinterpret_cast<atomic_uintptr_t*>(&pc_vector[idx - 1]);
- if (atomic_load(pc_ptr, memory_order_relaxed) == 0)
- atomic_store(pc_ptr, pc, memory_order_relaxed);
- }
-
- void Reset() {
- internal_memset(&pc_vector[0], 0, sizeof(pc_vector[0]) * pc_vector.size());
+ pc_vector[idx - 1] = pc;
}
void Dump() {
@@ -186,9 +180,6 @@
SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_dump() {
__sanitizer_dump_trace_pc_guard_coverage();
}
-SANITIZER_INTERFACE_ATTRIBUTE void __sanitizer_cov_reset() {
- __sancov::pc_guard_controller.Reset();
-}
// Default empty implementations (weak). Users should redefine them.
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_cmp, void) {}
SANITIZER_INTERFACE_WEAK_DEF(void, __sanitizer_cov_trace_cmp1, void) {}
diff --git a/lib/sanitizer_common/sanitizer_linux.cc b/lib/sanitizer_common/sanitizer_linux.cc
index b269308..d31c49d 100644
--- a/lib/sanitizer_common/sanitizer_linux.cc
+++ b/lib/sanitizer_common/sanitizer_linux.cc
@@ -226,8 +226,10 @@
out->st_size = in->st_size;
out->st_blksize = in->st_blksize;
out->st_blocks = in->st_blocks;
+ out->st_atime = in->st_atime_nsec;
+ out->st_mtime = in->st_mtime_nsec;
+ out->st_ctime = in->st_ctime_nsec;
out->st_ino = in->st_ino;
-// TODO: Fix to work with bionic's macros for the time values.
}
#endif
diff --git a/lib/sanitizer_common/sanitizer_posix_libcdep.cc b/lib/sanitizer_common/sanitizer_posix_libcdep.cc
index e113fb1..5b1d536 100644
--- a/lib/sanitizer_common/sanitizer_posix_libcdep.cc
+++ b/lib/sanitizer_common/sanitizer_posix_libcdep.cc
@@ -189,7 +189,25 @@
static void MaybeInstallSigaction(int signum,
SignalHandlerType handler) {
- if (GetHandleSignalMode(signum) == kHandleSignalNo) return;
+ switch (GetHandleSignalMode(signum)) {
+ case kHandleSignalNo:
+ return;
+ case kHandleSignalYes: {
+ struct sigaction sigact;
+ internal_memset(&sigact, 0, sizeof(sigact));
+ CHECK_EQ(0, internal_sigaction(signum, nullptr, &sigact));
+ if (sigact.sa_flags & SA_SIGINFO) {
+ if (sigact.sa_sigaction) return;
+ } else {
+ if (sigact.sa_handler != SIG_DFL && sigact.sa_handler != SIG_IGN &&
+ sigact.sa_handler != SIG_ERR)
+ return;
+ }
+ break;
+ }
+ case kHandleSignalExclusive:
+ break;
+ }
struct sigaction sigact;
internal_memset(&sigact, 0, sizeof(sigact));
diff --git a/lib/ubsan/CMakeLists.txt b/lib/ubsan/CMakeLists.txt
index 98a8bb2..457a6b4 100644
--- a/lib/ubsan/CMakeLists.txt
+++ b/lib/ubsan/CMakeLists.txt
@@ -35,7 +35,6 @@
append_list_if(SANITIZER_CAN_USE_CXXABI -DUBSAN_CAN_USE_CXXABI UBSAN_CXXFLAGS)
append_list_if(COMPILER_RT_HAS_LIBDL dl UBSAN_DYNAMIC_LIBS)
-append_list_if(COMPILER_RT_HAS_LIBLOG log UBSAN_DYNAMIC_LIBS)
append_list_if(COMPILER_RT_HAS_LIBRT rt UBSAN_DYNAMIC_LIBS)
append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread UBSAN_DYNAMIC_LIBS)
@@ -130,7 +129,7 @@
add_compiler_rt_object_libraries(RTUbsan_standalone
ARCHS ${UBSAN_SUPPORTED_ARCH}
SOURCES ${UBSAN_STANDALONE_SOURCES} CFLAGS ${UBSAN_STANDALONE_CFLAGS})
-
+
# Standalone UBSan runtimes.
add_compiler_rt_runtime(clang_rt.ubsan_standalone
STATIC
@@ -141,7 +140,7 @@
RTUbsan_standalone
CFLAGS ${UBSAN_CFLAGS}
PARENT_TARGET ubsan)
-
+
add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx
STATIC
ARCHS ${UBSAN_SUPPORTED_ARCH}
@@ -155,11 +154,21 @@
OBJECT_LIBS RTSanitizerCommon
RTSanitizerCommonLibc
RTUbsan
- RTUbsan_cxx
CFLAGS ${UBSAN_CFLAGS}
LINK_LIBS ${UBSAN_DYNAMIC_LIBS}
PARENT_TARGET ubsan)
+ add_compiler_rt_runtime(clang_rt.ubsan_standalone_cxx
+ SHARED
+ ARCHS ${UBSAN_SUPPORTED_ARCH}
+ OBJECT_LIBS RTSanitizerCommon
+ RTSanitizerCommonLibc
+ RTUbsan
+ RTUbsan_cxx
+ CFLAGS ${UBSAN_CXXFLAGS}
+ LINK_LIBS ${UBSAN_DYNAMIC_LIBS}
+ PARENT_TARGET ubsan)
+
if (UNIX)
set(ARCHS_FOR_SYMBOLS ${UBSAN_SUPPORTED_ARCH})
list(REMOVE_ITEM ARCHS_FOR_SYMBOLS i386 i686)
diff --git a/test/asan/TestCases/Linux/preinstalled_signal.cc b/test/asan/TestCases/Linux/preinstalled_signal.cc
index 4d466c2..40dadf4 100644
--- a/test/asan/TestCases/Linux/preinstalled_signal.cc
+++ b/test/asan/TestCases/Linux/preinstalled_signal.cc
@@ -4,13 +4,11 @@
// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s
// RUN: %clangxx -std=c++11 -DTEST_INSTALL_SIG_HANDLER %s -o %t
-// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-HANDLER
-// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck %s
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck --check-prefix=CHECK-HANDLER %s
// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s
// RUN: %clangxx -std=c++11 -DTEST_INSTALL_SIG_ACTION %s -o %t
-// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=0 not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-ACTION
-// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck %s
+// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=1 not %run %t 2>&1 | FileCheck --check-prefix=CHECK-ACTION %s
// RUN: env LD_PRELOAD=%shared_libasan %env_asan_opts=handle_segv=2 not %run %t 2>&1 | FileCheck %s
// REQUIRES: asan-dynamic-runtime
@@ -53,22 +51,22 @@
return syscall(__NR_rt_sigaction, sig, act, oact, NSIG / 8);
}
-struct KernelSigaction pre_asan = {};
+struct KernelSigaction sigact = {};
static void Init() {
- int res = InternalSigaction(SIGSEGV, nullptr, &pre_asan);
+ int res = InternalSigaction(SIGSEGV, nullptr, &sigact);
assert(res >= 0);
- assert(pre_asan.handler == SIG_DFL || pre_asan.handler == SIG_IGN);
+ assert(sigact.handler == SIG_DFL || sigact.handler == SIG_IGN);
#if defined(TEST_INSTALL_SIG_HANDLER)
- pre_asan = {};
- pre_asan.handler = &SigHandler;
- res = InternalSigaction(SIGSEGV, &pre_asan, nullptr);
+ sigact = {};
+ sigact.handler = &SigHandler;
+ res = InternalSigaction(SIGSEGV, &sigact, nullptr);
assert(res >= 0);
#elif defined(TEST_INSTALL_SIG_ACTION)
- pre_asan = {};
- pre_asan.flags = SA_SIGINFO | SA_NODEFER;
- pre_asan.handler = (__sighandler_t)&SigAction;
- res = InternalSigaction(SIGSEGV, &pre_asan, nullptr);
+ sigact = {};
+ sigact.flags = SA_SIGINFO | SA_NODEFER;
+ sigact.handler = (__sighandler_t)&SigAction;
+ res = InternalSigaction(SIGSEGV, &sigact, nullptr);
assert(res >= 0);
#endif
}
@@ -76,21 +74,21 @@
__attribute__((section(".preinit_array"), used))
void (*__local_test_preinit)(void) = Init;
-bool ExpectUserHandler() {
+bool ShouldAsanInstallHandlers() {
#if defined(TEST_INSTALL_SIG_HANDLER) || defined(TEST_INSTALL_SIG_ACTION)
- return !strcmp(getenv("ASAN_OPTIONS"), "handle_segv=0");
+ return !strcmp(getenv("ASAN_OPTIONS"), "handle_segv=2");
#endif
- return false;
+ return true;
}
int main(int argc, char *argv[]) {
- KernelSigaction post_asan = {};
- InternalSigaction(SIGSEGV, nullptr, &post_asan);
+ KernelSigaction sigact_asan = {};
+ InternalSigaction(SIGSEGV, nullptr, &sigact_asan);
- assert(post_asan.handler != SIG_DFL);
- assert(post_asan.handler != SIG_IGN);
- assert(ExpectUserHandler() ==
- (post_asan.handler == pre_asan.handler));
+ assert(sigact_asan.handler != SIG_DFL);
+ assert(sigact_asan.handler != SIG_IGN);
+ assert(ShouldAsanInstallHandlers() ==
+ (sigact_asan.handler != sigact.handler));
raise(SIGSEGV);
printf("%s\n", handler);
diff --git a/test/asan/TestCases/Posix/coverage-reset.cc b/test/asan/TestCases/Posix/coverage-reset.cc
deleted file mode 100644
index e9639b3..0000000
--- a/test/asan/TestCases/Posix/coverage-reset.cc
+++ /dev/null
@@ -1,65 +0,0 @@
-// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard -DSHARED %s -shared -o %dynamiclib -fPIC %ld_flags_rpath_so
-// RUN: %clangxx_asan -fsanitize-coverage=func,trace-pc-guard %s %ld_flags_rpath_exe -o %t
-// RUN: rm -rf %T/coverage-reset && mkdir -p %T/coverage-reset && cd %T/coverage-reset
-// RUN: %env_asan_opts=coverage=1:verbosity=1 %run %t 2>&1 | FileCheck %s
-//
-// UNSUPPORTED: ios
-
-#include <stdio.h>
-
-#include <sanitizer/coverage_interface.h>
-
-#ifdef SHARED
-void bar1() { printf("bar1\n"); }
-void bar2() { printf("bar2\n"); }
-#else
-__attribute__((noinline)) void foo1() { printf("foo1\n"); }
-__attribute__((noinline)) void foo2() { printf("foo2\n"); }
-void bar1();
-void bar2();
-
-int main(int argc, char **argv) {
- fprintf(stderr, "RESET");
- __sanitizer_cov_reset();
- foo1();
- foo2();
- bar1();
- bar2();
- __sanitizer_cov_dump();
-// CHECK: RESET
-// CHECK: SanitizerCoverage: ./coverage-reset.cc{{.*}}.sancov: 2 PCs written
-// CHECK: SanitizerCoverage: ./libcoverage-reset.cc{{.*}}.sancov: 2 PCs written
-
- fprintf(stderr, "RESET");
- __sanitizer_cov_reset();
- foo1();
- bar1();
- __sanitizer_cov_dump();
-// CHECK: RESET
-// CHECK: SanitizerCoverage: ./coverage-reset.cc{{.*}}.sancov: 1 PCs written
-// CHECK: SanitizerCoverage: ./libcoverage-reset.cc{{.*}}.sancov: 1 PCs written
-
- fprintf(stderr, "RESET");
- __sanitizer_cov_reset();
- foo1();
- foo2();
- __sanitizer_cov_dump();
-// CHECK: RESET
-// CHECK: SanitizerCoverage: ./coverage-reset.cc{{.*}}.sancov: 2 PCs written
-
- fprintf(stderr, "RESET");
- __sanitizer_cov_reset();
- bar1();
- bar2();
- __sanitizer_cov_dump();
-// CHECK: RESET
-// CHECK: SanitizerCoverage: ./libcoverage-reset.cc{{.*}}.sancov: 2 PCs written
-
- fprintf(stderr, "RESET");
- __sanitizer_cov_reset();
-// CHECK: RESET
-
- bar2();
-// CHECK: SanitizerCoverage: ./libcoverage-reset.cc{{.*}}.sancov: 1 PCs written
-}
-#endif