summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--compiler-rt/lib/scudo/CMakeLists.txt4
-rw-r--r--compiler-rt/lib/scudo/scudo_allocator.cpp2
-rw-r--r--compiler-rt/lib/scudo/scudo_allocator.h16
-rw-r--r--compiler-rt/lib/scudo/scudo_platform.h58
-rw-r--r--compiler-rt/lib/scudo/scudo_tsd.h (renamed from compiler-rt/lib/scudo/scudo_tls.h)19
-rw-r--r--compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp (renamed from compiler-rt/lib/scudo/scudo_tls_linux.cpp)13
-rw-r--r--compiler-rt/lib/scudo/scudo_tsd_exclusive.inc (renamed from compiler-rt/lib/scudo/scudo_tls_linux.inc)15
-rw-r--r--compiler-rt/lib/scudo/scudo_tsd_shared.cpp (renamed from compiler-rt/lib/scudo/scudo_tls_android.cpp)12
-rw-r--r--compiler-rt/lib/scudo/scudo_tsd_shared.inc (renamed from compiler-rt/lib/scudo/scudo_tls_android.inc)14
9 files changed, 94 insertions, 59 deletions
diff --git a/compiler-rt/lib/scudo/CMakeLists.txt b/compiler-rt/lib/scudo/CMakeLists.txt
index 14c199fa822..253924147f6 100644
--- a/compiler-rt/lib/scudo/CMakeLists.txt
+++ b/compiler-rt/lib/scudo/CMakeLists.txt
@@ -14,8 +14,8 @@ set(SCUDO_SOURCES
scudo_interceptors.cpp
scudo_new_delete.cpp
scudo_termination.cpp
- scudo_tls_android.cpp
- scudo_tls_linux.cpp
+ scudo_tsd_exclusive.cpp
+ scudo_tsd_shared.cpp
scudo_utils.cpp)
# Enable the SSE 4.2 instruction set for scudo_crc32.cpp, if available.
diff --git a/compiler-rt/lib/scudo/scudo_allocator.cpp b/compiler-rt/lib/scudo/scudo_allocator.cpp
index 606439ea1d4..077d57747cf 100644
--- a/compiler-rt/lib/scudo/scudo_allocator.cpp
+++ b/compiler-rt/lib/scudo/scudo_allocator.cpp
@@ -17,7 +17,7 @@
#include "scudo_allocator.h"
#include "scudo_crc32.h"
#include "scudo_flags.h"
-#include "scudo_tls.h"
+#include "scudo_tsd.h"
#include "scudo_utils.h"
#include "sanitizer_common/sanitizer_allocator_checks.h"
diff --git a/compiler-rt/lib/scudo/scudo_allocator.h b/compiler-rt/lib/scudo/scudo_allocator.h
index a5f0ab004e6..2f317d24a53 100644
--- a/compiler-rt/lib/scudo/scudo_allocator.h
+++ b/compiler-rt/lib/scudo/scudo_allocator.h
@@ -14,11 +14,7 @@
#ifndef SCUDO_ALLOCATOR_H_
#define SCUDO_ALLOCATOR_H_
-#include "sanitizer_common/sanitizer_allocator.h"
-
-#if !SANITIZER_LINUX
-# error "The Scudo hardened allocator is currently only supported on Linux."
-#endif
+#include "scudo_platform.h"
namespace __scudo {
@@ -70,14 +66,6 @@ const uptr AlignedChunkHeaderSize =
#if SANITIZER_CAN_USE_ALLOCATOR64
const uptr AllocatorSpace = ~0ULL;
-# if defined(__aarch64__) && SANITIZER_ANDROID
-const uptr AllocatorSize = 0x4000000000ULL; // 256G.
-# elif defined(__aarch64__)
-const uptr AllocatorSize = 0x10000000000ULL; // 1T.
-# else
-const uptr AllocatorSize = 0x40000000000ULL; // 4T.
-# endif
-typedef DefaultSizeClassMap SizeClassMap;
struct AP64 {
static const uptr kSpaceBeg = AllocatorSpace;
static const uptr kSpaceSize = AllocatorSize;
@@ -92,14 +80,12 @@ typedef SizeClassAllocator64<AP64> PrimaryAllocator;
// Currently, the 32-bit Sanitizer allocator has not yet benefited from all the
// security improvements brought to the 64-bit one. This makes the 32-bit
// version of Scudo slightly less toughened.
-static const uptr RegionSizeLog = 20;
static const uptr NumRegions = SANITIZER_MMAP_RANGE_SIZE >> RegionSizeLog;
# if SANITIZER_WORDSIZE == 32
typedef FlatByteMap<NumRegions> ByteMap;
# elif SANITIZER_WORDSIZE == 64
typedef TwoLevelByteMap<(NumRegions >> 12), 1 << 12> ByteMap;
# endif // SANITIZER_WORDSIZE
-typedef DefaultSizeClassMap SizeClassMap;
struct AP32 {
static const uptr kSpaceBeg = 0;
static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
diff --git a/compiler-rt/lib/scudo/scudo_platform.h b/compiler-rt/lib/scudo/scudo_platform.h
new file mode 100644
index 00000000000..86ddc1a25ae
--- /dev/null
+++ b/compiler-rt/lib/scudo/scudo_platform.h
@@ -0,0 +1,58 @@
+//===-- scudo_platform.h ----------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+///
+/// Scudo platform specific definitions.
+///
+//===----------------------------------------------------------------------===//
+
+#ifndef SCUDO_PLATFORM_H_
+#define SCUDO_PLATFORM_H_
+
+#include "sanitizer_common/sanitizer_allocator.h"
+
+#if !SANITIZER_LINUX && !SANITIZER_FUCHSIA
+# error "The Scudo hardened allocator is not supported on this platform."
+#endif
+
+#if SANITIZER_ANDROID || SANITIZER_FUCHSIA
+// Android and Fuchsia use a pool of TSDs shared between threads.
+# define SCUDO_TSD_EXCLUSIVE 0
+#elif SANITIZER_LINUX && !SANITIZER_ANDROID
+// Non-Android Linux use an exclusive TSD per thread.
+# define SCUDO_TSD_EXCLUSIVE 1
+#else
+# error "No default TSD model defined for this platform."
+#endif // SANITIZER_ANDROID || SANITIZER_FUCHSIA
+
+namespace __scudo {
+
+#if SANITIZER_CAN_USE_ALLOCATOR64
+# if defined(__aarch64__) && SANITIZER_ANDROID
+const uptr AllocatorSize = 0x2000000000ULL; // 128G.
+typedef VeryCompactSizeClassMap SizeClassMap;
+# elif defined(__aarch64__)
+const uptr AllocatorSize = 0x10000000000ULL; // 1T.
+typedef CompactSizeClassMap SizeClassMap;
+# else
+const uptr AllocatorSize = 0x40000000000ULL; // 4T.
+typedef CompactSizeClassMap SizeClassMap;
+# endif
+#else
+# if SANITIZER_ANDROID
+static const uptr RegionSizeLog = 19;
+typedef VeryCompactSizeClassMap SizeClassMap;
+# else
+static const uptr RegionSizeLog = 20;
+typedef CompactSizeClassMap SizeClassMap;
+# endif
+#endif // SANITIZER_CAN_USE_ALLOCATOR64
+
+} // namespace __scudo
+
+#endif // SCUDO_PLATFORM_H_
diff --git a/compiler-rt/lib/scudo/scudo_tls.h b/compiler-rt/lib/scudo/scudo_tsd.h
index 57480c2a612..9ee89d39987 100644
--- a/compiler-rt/lib/scudo/scudo_tls.h
+++ b/compiler-rt/lib/scudo/scudo_tsd.h
@@ -1,4 +1,4 @@
-//===-- scudo_tls.h ---------------------------------------------*- C++ -*-===//
+//===-- scudo_tsd.h ---------------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,21 +7,18 @@
//
//===----------------------------------------------------------------------===//
///
-/// Scudo thread local structure definition.
+/// Scudo thread specific data definition.
/// Implementation will differ based on the thread local storage primitives
/// offered by the underlying platform.
///
//===----------------------------------------------------------------------===//
-#ifndef SCUDO_TLS_H_
-#define SCUDO_TLS_H_
+#ifndef SCUDO_TSD_H_
+#define SCUDO_TSD_H_
#include "scudo_allocator.h"
#include "scudo_utils.h"
-#include "sanitizer_common/sanitizer_linux.h"
-#include "sanitizer_common/sanitizer_platform.h"
-
namespace __scudo {
struct ALIGNED(64) ScudoTSD {
@@ -65,10 +62,10 @@ struct ALIGNED(64) ScudoTSD {
void initThread(bool MinimalInit);
-// Platform specific fastpath functions definitions.
-#include "scudo_tls_android.inc"
-#include "scudo_tls_linux.inc"
+// TSD model specific fastpath functions definitions.
+#include "scudo_tsd_exclusive.inc"
+#include "scudo_tsd_shared.inc"
} // namespace __scudo
-#endif // SCUDO_TLS_H_
+#endif // SCUDO_TSD_H_
diff --git a/compiler-rt/lib/scudo/scudo_tls_linux.cpp b/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp
index 1f51cccbcc8..eb47197344a 100644
--- a/compiler-rt/lib/scudo/scudo_tls_linux.cpp
+++ b/compiler-rt/lib/scudo/scudo_tsd_exclusive.cpp
@@ -1,4 +1,4 @@
-//===-- scudo_tls_linux.cpp -------------------------------------*- C++ -*-===//
+//===-- scudo_tsd_exclusive.cpp ---------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,16 +7,13 @@
//
//===----------------------------------------------------------------------===//
///
-/// Scudo thread local structure implementation for platforms supporting
-/// thread_local.
+/// Scudo exclusive TSD implementation.
///
//===----------------------------------------------------------------------===//
-#include "sanitizer_common/sanitizer_platform.h"
+#include "scudo_tsd.h"
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
-
-#include "scudo_tls.h"
+#if SCUDO_TSD_EXCLUSIVE
#include <pthread.h>
@@ -70,4 +67,4 @@ void initThread(bool MinimalInit) {
} // namespace __scudo
-#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
+#endif // SCUDO_TSD_EXCLUSIVE
diff --git a/compiler-rt/lib/scudo/scudo_tls_linux.inc b/compiler-rt/lib/scudo/scudo_tsd_exclusive.inc
index e0c6deba56a..567b6a1edd1 100644
--- a/compiler-rt/lib/scudo/scudo_tls_linux.inc
+++ b/compiler-rt/lib/scudo/scudo_tsd_exclusive.inc
@@ -1,4 +1,4 @@
-//===-- scudo_tls_linux.inc -------------------------------------*- C++ -*-===//
+//===-- scudo_tsd_exclusive.inc ---------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,16 +7,15 @@
//
//===----------------------------------------------------------------------===//
///
-/// Scudo thread local structure fastpath functions implementation for platforms
-/// supporting thread_local.
+/// Scudo exclusive TSD fastpath functions implementation.
///
//===----------------------------------------------------------------------===//
-#ifndef SCUDO_TLS_H_
-# error "This file must be included inside scudo_tls.h."
-#endif // SCUDO_TLS_H_
+#ifndef SCUDO_TSD_H_
+# error "This file must be included inside scudo_tsd.h."
+#endif // SCUDO_TSD_H_
-#if SANITIZER_LINUX && !SANITIZER_ANDROID
+#if SCUDO_TSD_EXCLUSIVE
enum ThreadState : u8 {
ThreadNotInitialized = 0,
@@ -44,4 +43,4 @@ ALWAYS_INLINE ScudoTSD *getTSDAndLock() {
return &TSD;
}
-#endif // SANITIZER_LINUX && !SANITIZER_ANDROID
+#endif // SCUDO_TSD_EXCLUSIVE
diff --git a/compiler-rt/lib/scudo/scudo_tls_android.cpp b/compiler-rt/lib/scudo/scudo_tsd_shared.cpp
index 695a610e9db..481635e6a59 100644
--- a/compiler-rt/lib/scudo/scudo_tls_android.cpp
+++ b/compiler-rt/lib/scudo/scudo_tsd_shared.cpp
@@ -1,4 +1,4 @@
-//===-- scudo_tls_android.cpp -----------------------------------*- C++ -*-===//
+//===-- scudo_tsd_shared.cpp ------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,15 +7,13 @@
//
//===----------------------------------------------------------------------===//
///
-/// Scudo thread local structure implementation for Android.
+/// Scudo shared TSD implementation.
///
//===----------------------------------------------------------------------===//
-#include "sanitizer_common/sanitizer_platform.h"
+#include "scudo_tsd.h"
-#if SANITIZER_LINUX && SANITIZER_ANDROID
-
-#include "scudo_tls.h"
+#if !SCUDO_TSD_EXCLUSIVE
#include <pthread.h>
@@ -95,4 +93,4 @@ ScudoTSD *getTSDAndLockSlow() {
} // namespace __scudo
-#endif // SANITIZER_LINUX && SANITIZER_ANDROID
+#endif // !SCUDO_TSD_EXCLUSIVE
diff --git a/compiler-rt/lib/scudo/scudo_tls_android.inc b/compiler-rt/lib/scudo/scudo_tsd_shared.inc
index 62855f766fa..874942bbaaa 100644
--- a/compiler-rt/lib/scudo/scudo_tls_android.inc
+++ b/compiler-rt/lib/scudo/scudo_tsd_shared.inc
@@ -1,4 +1,4 @@
-//===-- scudo_tls_android.inc -----------------------------------*- C++ -*-===//
+//===-- scudo_tsd_shared.inc ------------------------------------*- C++ -*-===//
//
// The LLVM Compiler Infrastructure
//
@@ -7,15 +7,15 @@
//
//===----------------------------------------------------------------------===//
///
-/// Scudo thread local structure fastpath functions implementation for Android.
+/// Scudo shared TSD fastpath functions implementation.
///
//===----------------------------------------------------------------------===//
-#ifndef SCUDO_TLS_H_
-# error "This file must be included inside scudo_tls.h."
-#endif // SCUDO_TLS_H_
+#ifndef SCUDO_TSD_H_
+# error "This file must be included inside scudo_tsd.h."
+#endif // SCUDO_TSD_H_
-#if SANITIZER_LINUX && SANITIZER_ANDROID
+#if !SCUDO_TSD_EXCLUSIVE
ALWAYS_INLINE void initThreadMaybe(bool MinimalInit = false) {
if (LIKELY(*get_android_tls_ptr()))
@@ -35,4 +35,4 @@ ALWAYS_INLINE ScudoTSD *getTSDAndLock() {
return getTSDAndLockSlow();
}
-#endif // SANITIZER_LINUX && SANITIZER_ANDROID
+#endif // !SCUDO_TSD_EXCLUSIVE
OpenPOWER on IntegriCloud