mirror of
https://github.com/carbon-language/carbon-lang.git
synced 2026-10-06 09:06:21 +01:00
[LSan] Enable for SystemZ
Summary: Add runtime support, adjust the tests and enable LSan. Reviewers: vitalybuka, eugenis, uweigand, jonpa Reviewed By: uweigand Subscribers: mgorny, cfe-commits, #sanitizers Tags: #clang, #sanitizers Differential Revision: https://reviews.llvm.org/D78644
This commit is contained in:
@@ -840,6 +840,7 @@ SanitizerMask Linux::getSupportedSanitizers() const {
|
||||
getTriple().getArch() == llvm::Triple::thumb ||
|
||||
getTriple().getArch() == llvm::Triple::armeb ||
|
||||
getTriple().getArch() == llvm::Triple::thumbeb;
|
||||
const bool IsSystemZ = getTriple().getArch() == llvm::Triple::systemz;
|
||||
SanitizerMask Res = ToolChain::getSupportedSanitizers();
|
||||
Res |= SanitizerKind::Address;
|
||||
Res |= SanitizerKind::PointerCompare;
|
||||
@@ -852,7 +853,8 @@ SanitizerMask Linux::getSupportedSanitizers() const {
|
||||
Res |= SanitizerKind::SafeStack;
|
||||
if (IsX86_64 || IsMIPS64 || IsAArch64)
|
||||
Res |= SanitizerKind::DataFlow;
|
||||
if (IsX86_64 || IsMIPS64 || IsAArch64 || IsX86 || IsArmArch || IsPowerPC64)
|
||||
if (IsX86_64 || IsMIPS64 || IsAArch64 || IsX86 || IsArmArch || IsPowerPC64 ||
|
||||
IsSystemZ)
|
||||
Res |= SanitizerKind::Leak;
|
||||
if (IsX86_64 || IsMIPS64 || IsAArch64 || IsPowerPC64)
|
||||
Res |= SanitizerKind::Thread;
|
||||
|
||||
@@ -303,7 +303,7 @@ set(ALL_GWP_ASAN_SUPPORTED_ARCH ${X86} ${X86_64})
|
||||
if(APPLE)
|
||||
set(ALL_LSAN_SUPPORTED_ARCH ${X86} ${X86_64} ${MIPS64} ${ARM64})
|
||||
else()
|
||||
set(ALL_LSAN_SUPPORTED_ARCH ${X86} ${X86_64} ${MIPS64} ${ARM64} ${ARM32} ${PPC64})
|
||||
set(ALL_LSAN_SUPPORTED_ARCH ${X86} ${X86_64} ${MIPS64} ${ARM64} ${ARM32} ${PPC64} ${S390X})
|
||||
endif()
|
||||
set(ALL_MSAN_SUPPORTED_ARCH ${X86_64} ${MIPS64} ${ARM64} ${PPC64} ${S390X})
|
||||
set(ALL_HWASAN_SUPPORTED_ARCH ${X86_64} ${ARM64})
|
||||
|
||||
@@ -65,13 +65,16 @@ struct AP32 {
|
||||
template <typename AddressSpaceView>
|
||||
using PrimaryAllocatorASVT = SizeClassAllocator32<AP32<AddressSpaceView>>;
|
||||
using PrimaryAllocator = PrimaryAllocatorASVT<LocalAddressSpaceView>;
|
||||
#elif defined(__x86_64__) || defined(__powerpc64__)
|
||||
#elif defined(__x86_64__) || defined(__powerpc64__) || defined(__s390x__)
|
||||
# if SANITIZER_FUCHSIA
|
||||
const uptr kAllocatorSpace = ~(uptr)0;
|
||||
const uptr kAllocatorSize = 0x40000000000ULL; // 4T.
|
||||
# elif defined(__powerpc64__)
|
||||
const uptr kAllocatorSpace = 0xa0000000000ULL;
|
||||
const uptr kAllocatorSize = 0x20000000000ULL; // 2T.
|
||||
#elif defined(__s390x__)
|
||||
const uptr kAllocatorSpace = 0x40000000000ULL;
|
||||
const uptr kAllocatorSize = 0x40000000000ULL; // 4T.
|
||||
# else
|
||||
const uptr kAllocatorSpace = 0x600000000000ULL;
|
||||
const uptr kAllocatorSize = 0x40000000000ULL; // 4T.
|
||||
|
||||
@@ -29,10 +29,10 @@
|
||||
// To enable LeakSanitizer on a new architecture, one needs to implement the
|
||||
// internal_clone function as well as (probably) adjust the TLS machinery for
|
||||
// the new architecture inside the sanitizer library.
|
||||
#if (SANITIZER_LINUX && !SANITIZER_ANDROID || SANITIZER_MAC) && \
|
||||
(SANITIZER_WORDSIZE == 64) && \
|
||||
#if (SANITIZER_LINUX && !SANITIZER_ANDROID || SANITIZER_MAC) && \
|
||||
(SANITIZER_WORDSIZE == 64) && \
|
||||
(defined(__x86_64__) || defined(__mips64) || defined(__aarch64__) || \
|
||||
defined(__powerpc64__))
|
||||
defined(__powerpc64__) || defined(__s390x__))
|
||||
#define CAN_SANITIZE_LEAKS 1
|
||||
#elif defined(__i386__) && \
|
||||
(SANITIZER_LINUX && !SANITIZER_ANDROID || SANITIZER_MAC)
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
// RUN: %env_lsan_opts=$LSAN_BASE":exitcode=0" %run %t 2>&1 | FileCheck --check-prefix=CHECK-sanity %s
|
||||
//
|
||||
// x86 passes parameters through stack that may lead to false negatives
|
||||
// UNSUPPORTED: x86,powerpc64,arm
|
||||
// The same applies to s390x register save areas.
|
||||
// UNSUPPORTED: x86,powerpc64,arm,s390x
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
@@ -43,6 +43,10 @@ void *registers_thread_func(void *arg) {
|
||||
:
|
||||
: "r" (p)
|
||||
);
|
||||
#elif defined(__s390x__)
|
||||
asm("lgr %%r10, %0"
|
||||
:
|
||||
: "r"(p));
|
||||
#else
|
||||
#error "Test is not supported on this architecture."
|
||||
#endif
|
||||
|
||||
@@ -69,8 +69,8 @@ config.substitutions.append( ("%clangxx ", build_invocation(clang_cxxflags)) )
|
||||
config.substitutions.append( ("%clang_lsan ", build_invocation(clang_lsan_cflags)) )
|
||||
config.substitutions.append( ("%clangxx_lsan ", build_invocation(clang_lsan_cxxflags)) )
|
||||
|
||||
# LeakSanitizer tests are currently supported on x86-64 Linux, PowerPC64 Linux, arm Linux, mips64 Linux, and x86_64 Darwin.
|
||||
supported_linux = config.host_os == 'Linux' and config.host_arch in ['x86_64', 'ppc64', 'ppc64le', 'mips64', 'arm', 'armhf', 'armv7l']
|
||||
# LeakSanitizer tests are currently supported on x86-64 Linux, PowerPC64 Linux, arm Linux, mips64 Linux, s390x Linux and x86_64 Darwin.
|
||||
supported_linux = config.host_os is 'Linux' and config.host_arch in ['x86_64', 'ppc64', 'ppc64le', 'mips64', 'arm', 'armhf', 'armv7l', 's390x']
|
||||
supported_darwin = config.host_os == 'Darwin' and config.target_arch in ['x86_64']
|
||||
supported_netbsd = config.host_os == 'NetBSD' and config.target_arch in ['x86_64', 'i386']
|
||||
if not (supported_linux or supported_darwin or supported_netbsd):
|
||||
|
||||
@@ -7,7 +7,8 @@ void print_address(const char *str, int n, ...) {
|
||||
va_start(ap, n);
|
||||
while (n--) {
|
||||
void *p = va_arg(ap, void *);
|
||||
#if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__)
|
||||
#if defined(__x86_64__) || defined(__aarch64__) || defined(__powerpc64__) || \
|
||||
defined(__s390x__)
|
||||
// On FreeBSD, the %p conversion specifier works as 0x%x and thus does not
|
||||
// match to the format used in the diagnotic message.
|
||||
fprintf(stderr, "0x%012lx ", (unsigned long) p);
|
||||
|
||||
Reference in New Issue
Block a user