[compiler-rt] NFC: Fix trivial typo
Reviewed By: xgupta Differential Revision: https://reviews.llvm.org/D77457
This commit is contained in:
parent
d6ca91ea42
commit
a1e7e401d2
|
@ -74,7 +74,7 @@ function(try_compile_only output)
|
||||||
|
|
||||||
# Strip quotes from the compile command, as the compiler is not expecting
|
# Strip quotes from the compile command, as the compiler is not expecting
|
||||||
# quoted arguments (see discussion on D62063 for when this can come up). If
|
# quoted arguments (see discussion on D62063 for when this can come up). If
|
||||||
# the quotes were there for arugments with spaces in them, the quotes were
|
# the quotes were there for arguments with spaces in them, the quotes were
|
||||||
# not going to help since the string gets split on spaces below.
|
# not going to help since the string gets split on spaces below.
|
||||||
string(REPLACE "\"" "" test_compile_command "${test_compile_command}")
|
string(REPLACE "\"" "" test_compile_command "${test_compile_command}")
|
||||||
|
|
||||||
|
|
|
@ -462,7 +462,7 @@ if(APPLE)
|
||||||
endforeach()
|
endforeach()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Explictly disable unsupported Sanitizer configurations.
|
# Explicitly disable unsupported Sanitizer configurations.
|
||||||
list(REMOVE_ITEM FUZZER_SUPPORTED_OS "watchos")
|
list(REMOVE_ITEM FUZZER_SUPPORTED_OS "watchos")
|
||||||
list(REMOVE_ITEM FUZZER_SUPPORTED_OS "watchossim")
|
list(REMOVE_ITEM FUZZER_SUPPORTED_OS "watchossim")
|
||||||
|
|
||||||
|
|
|
@ -316,7 +316,7 @@ void *__asan_addr_is_in_fake_stack(void *fake_stack, void *addr, void **beg,
|
||||||
void __asan_handle_no_return(void);
|
void __asan_handle_no_return(void);
|
||||||
|
|
||||||
/// Update allocation stack trace for the given allocation to the current stack
|
/// Update allocation stack trace for the given allocation to the current stack
|
||||||
/// trace. Returns 1 if successfull, 0 if not.
|
/// trace. Returns 1 if successful, 0 if not.
|
||||||
int __asan_update_allocation_context(void* addr);
|
int __asan_update_allocation_context(void* addr);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
|
@ -28,7 +28,7 @@ typedef struct {
|
||||||
// Enable sandbox support in sanitizer coverage.
|
// Enable sandbox support in sanitizer coverage.
|
||||||
int coverage_sandboxed;
|
int coverage_sandboxed;
|
||||||
// File descriptor to write coverage data to. If -1 is passed, a file will
|
// File descriptor to write coverage data to. If -1 is passed, a file will
|
||||||
// be pre-opened by __sanitizer_sandobx_on_notify(). This field has no
|
// be pre-opened by __sanitizer_sandbox_on_notify(). This field has no
|
||||||
// effect if coverage_sandboxed == 0.
|
// effect if coverage_sandboxed == 0.
|
||||||
intptr_t coverage_fd;
|
intptr_t coverage_fd;
|
||||||
// If non-zero, split the coverage data into well-formed blocks. This is
|
// If non-zero, split the coverage data into well-formed blocks. This is
|
||||||
|
|
|
@ -581,7 +581,7 @@ INTERCEPTOR(int, atexit, void (*func)()) {
|
||||||
#if CAN_SANITIZE_LEAKS
|
#if CAN_SANITIZE_LEAKS
|
||||||
__lsan::ScopedInterceptorDisabler disabler;
|
__lsan::ScopedInterceptorDisabler disabler;
|
||||||
#endif
|
#endif
|
||||||
// Avoid calling real atexit as it is unrechable on at least on Linux.
|
// Avoid calling real atexit as it is unreachable on at least on Linux.
|
||||||
int res = REAL(__cxa_atexit)((void (*)(void *a))func, nullptr, nullptr);
|
int res = REAL(__cxa_atexit)((void (*)(void *a))func, nullptr, nullptr);
|
||||||
REAL(__cxa_atexit)(AtCxaAtexit, nullptr, nullptr);
|
REAL(__cxa_atexit)(AtCxaAtexit, nullptr, nullptr);
|
||||||
return res;
|
return res;
|
||||||
|
|
|
@ -155,7 +155,7 @@ class ScopedInErrorReport {
|
||||||
DumpProcessMap();
|
DumpProcessMap();
|
||||||
|
|
||||||
// Copy the message buffer so that we could start logging without holding a
|
// Copy the message buffer so that we could start logging without holding a
|
||||||
// lock that gets aquired during printing.
|
// lock that gets acquired during printing.
|
||||||
InternalMmapVector<char> buffer_copy(kErrorMessageBufferSize);
|
InternalMmapVector<char> buffer_copy(kErrorMessageBufferSize);
|
||||||
{
|
{
|
||||||
Lock l(&error_message_buf_mutex);
|
Lock l(&error_message_buf_mutex);
|
||||||
|
|
|
@ -90,7 +90,7 @@ TEST(AddressSanitizerInterface, GetCurrentAllocatedBytesTest) {
|
||||||
TEST(AddressSanitizerInterface, GetHeapSizeTest) {
|
TEST(AddressSanitizerInterface, GetHeapSizeTest) {
|
||||||
// ASan allocator does not keep huge chunks in free list, but unmaps them.
|
// ASan allocator does not keep huge chunks in free list, but unmaps them.
|
||||||
// The chunk should be greater than the quarantine size,
|
// The chunk should be greater than the quarantine size,
|
||||||
// otherwise it will be stuck in quarantine instead of being unmaped.
|
// otherwise it will be stuck in quarantine instead of being unmapped.
|
||||||
static const size_t kLargeMallocSize = (1 << 28) + 1; // 256M
|
static const size_t kLargeMallocSize = (1 << 28) + 1; // 256M
|
||||||
free(Ident(malloc(kLargeMallocSize))); // Drain quarantine.
|
free(Ident(malloc(kLargeMallocSize))); // Drain quarantine.
|
||||||
size_t old_heap_size = __sanitizer_get_heap_size();
|
size_t old_heap_size = __sanitizer_get_heap_size();
|
||||||
|
|
|
@ -271,8 +271,8 @@ switchu8
|
||||||
|
|
||||||
// There is no C interface to the *_vfp_d8_d15_regs functions. There are
|
// There is no C interface to the *_vfp_d8_d15_regs functions. There are
|
||||||
// called in the prolog and epilog of Thumb1 functions. When the C++ ABI use
|
// called in the prolog and epilog of Thumb1 functions. When the C++ ABI use
|
||||||
// SJLJ for exceptions, each function with a catch clause or destuctors needs
|
// SJLJ for exceptions, each function with a catch clause or destructors needs
|
||||||
// to save and restore all registers in it prolog and epliog. But there is
|
// to save and restore all registers in it prolog and epilog. But there is
|
||||||
// no way to access vector and high float registers from thumb1 code, so the
|
// no way to access vector and high float registers from thumb1 code, so the
|
||||||
// compiler must add call outs to these helper functions in the prolog and
|
// compiler must add call outs to these helper functions in the prolog and
|
||||||
// epilog.
|
// epilog.
|
||||||
|
@ -311,9 +311,9 @@ double __floatsidfvfp(int a); // Appears to convert from
|
||||||
float __floatsisfvfp(int a); // Appears to convert from
|
float __floatsisfvfp(int a); // Appears to convert from
|
||||||
// int to float.
|
// int to float.
|
||||||
double __floatunssidfvfp(unsigned int a); // Appears to convert from
|
double __floatunssidfvfp(unsigned int a); // Appears to convert from
|
||||||
// unisgned int to double.
|
// unsigned int to double.
|
||||||
float __floatunssisfvfp(unsigned int a); // Appears to convert from
|
float __floatunssisfvfp(unsigned int a); // Appears to convert from
|
||||||
// unisgned int to float.
|
// unsigned int to float.
|
||||||
int __gedf2vfp(double a, double b); // Appears to return __gedf2
|
int __gedf2vfp(double a, double b); // Appears to return __gedf2
|
||||||
// (a >= b)
|
// (a >= b)
|
||||||
int __gesf2vfp(float a, float b); // Appears to return __gesf2
|
int __gesf2vfp(float a, float b); // Appears to return __gesf2
|
||||||
|
|
|
@ -11,9 +11,9 @@
|
||||||
//
|
//
|
||||||
// extern float __truncdfsf2vfp(double a);
|
// extern float __truncdfsf2vfp(double a);
|
||||||
//
|
//
|
||||||
// Converts double precision float to signle precision result.
|
// Converts double precision float to single precision result.
|
||||||
// Uses Darwin calling convention where a double precision parameter is
|
// Uses Darwin calling convention where a double precision parameter is
|
||||||
// passed in a R0/R1 pair and a signle precision result is returned in R0.
|
// passed in a R0/R1 pair and a single precision result is returned in R0.
|
||||||
//
|
//
|
||||||
.syntax unified
|
.syntax unified
|
||||||
.p2align 2
|
.p2align 2
|
||||||
|
|
|
@ -150,7 +150,7 @@ static void win_error(DWORD last_err, const char *hint) {
|
||||||
NULL, last_err, 0, (LPSTR)&buffer, 1, NULL)) {
|
NULL, last_err, 0, (LPSTR)&buffer, 1, NULL)) {
|
||||||
fprintf(stderr, "Windows error: %s\n", buffer);
|
fprintf(stderr, "Windows error: %s\n", buffer);
|
||||||
} else {
|
} else {
|
||||||
fprintf(stderr, "Unkown Windows error: %s\n", hint);
|
fprintf(stderr, "Unknown Windows error: %s\n", hint);
|
||||||
}
|
}
|
||||||
LocalFree(buffer);
|
LocalFree(buffer);
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
// mmmm mmmm mmmm
|
// mmmm mmmm mmmm
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__clang__)
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
// MSVC throws a warning about 'unitialized variable use' here,
|
// MSVC throws a warning about 'uninitialized variable use' here,
|
||||||
// disable it for builds that warn-as-error
|
// disable it for builds that warn-as-error
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable : 4700)
|
#pragma warning(disable : 4700)
|
||||||
|
|
|
@ -26,7 +26,7 @@
|
||||||
// mmmm mmmm mmmm
|
// mmmm mmmm mmmm
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__clang__)
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
// MSVC throws a warning about 'unitialized variable use' here,
|
// MSVC throws a warning about 'uninitialized variable use' here,
|
||||||
// disable it for builds that warn-as-error
|
// disable it for builds that warn-as-error
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable : 4700)
|
#pragma warning(disable : 4700)
|
||||||
|
|
|
@ -25,7 +25,7 @@
|
||||||
// mmmm mmmm mmmm
|
// mmmm mmmm mmmm
|
||||||
|
|
||||||
#if defined(_MSC_VER) && !defined(__clang__)
|
#if defined(_MSC_VER) && !defined(__clang__)
|
||||||
// MSVC throws a warning about 'unitialized variable use' here,
|
// MSVC throws a warning about 'uninitialized variable use' here,
|
||||||
// disable it for builds that warn-as-error
|
// disable it for builds that warn-as-error
|
||||||
#pragma warning(push)
|
#pragma warning(push)
|
||||||
#pragma warning(disable : 4700)
|
#pragma warning(disable : 4700)
|
||||||
|
|
|
@ -269,7 +269,7 @@ fun:strrchr=custom
|
||||||
fun:strstr=custom
|
fun:strstr=custom
|
||||||
|
|
||||||
# Functions which take action based on global state, such as running a callback
|
# Functions which take action based on global state, such as running a callback
|
||||||
# set by a sepperate function.
|
# set by a separate function.
|
||||||
fun:write=custom
|
fun:write=custom
|
||||||
|
|
||||||
# Functions that take a callback (wrap the callback manually).
|
# Functions that take a callback (wrap the callback manually).
|
||||||
|
|
|
@ -77,7 +77,7 @@ endif()
|
||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# Silence warnings by turning off exceptions in MSVC headers and avoid an
|
# Silence warnings by turning off exceptions in MSVC headers and avoid an
|
||||||
# error by unecessarily defining thread_local when it isn't even used on
|
# error by unnecessarily defining thread_local when it isn't even used on
|
||||||
# Windows.
|
# Windows.
|
||||||
list(APPEND LIBFUZZER_CFLAGS -D_HAS_EXCEPTIONS=0)
|
list(APPEND LIBFUZZER_CFLAGS -D_HAS_EXCEPTIONS=0)
|
||||||
else()
|
else()
|
||||||
|
|
|
@ -37,7 +37,7 @@ bool BlockCoverage::AppendCoverage(const std::string &S) {
|
||||||
// Coverage lines have this form:
|
// Coverage lines have this form:
|
||||||
// CN X Y Z T
|
// CN X Y Z T
|
||||||
// where N is the number of the function, T is the total number of instrumented
|
// where N is the number of the function, T is the total number of instrumented
|
||||||
// BBs, and X,Y,Z, if present, are the indecies of covered BB.
|
// BBs, and X,Y,Z, if present, are the indices of covered BB.
|
||||||
// BB #0, which is the entry block, is not explicitly listed.
|
// BB #0, which is the entry block, is not explicitly listed.
|
||||||
bool BlockCoverage::AppendCoverage(std::istream &IN) {
|
bool BlockCoverage::AppendCoverage(std::istream &IN) {
|
||||||
std::string L;
|
std::string L;
|
||||||
|
|
|
@ -358,7 +358,7 @@ void FuzzWithFork(Random &Rand, const FuzzingOptions &Options,
|
||||||
|
|
||||||
Env.RunOneMergeJob(Job.get());
|
Env.RunOneMergeJob(Job.get());
|
||||||
|
|
||||||
// Continue if our crash is one of the ignorred ones.
|
// Continue if our crash is one of the ignored ones.
|
||||||
if (Options.IgnoreTimeouts && ExitCode == Options.TimeoutExitCode)
|
if (Options.IgnoreTimeouts && ExitCode == Options.TimeoutExitCode)
|
||||||
Env.NumTimeouts++;
|
Env.NumTimeouts++;
|
||||||
else if (Options.IgnoreOOMs && ExitCode == Options.OOMExitCode)
|
else if (Options.IgnoreOOMs && ExitCode == Options.OOMExitCode)
|
||||||
|
|
|
@ -378,7 +378,7 @@ void CrashResistantMerge(const std::vector<std::string> &Args,
|
||||||
}
|
}
|
||||||
auto ExitCode = ExecuteCommand(Cmd);
|
auto ExitCode = ExecuteCommand(Cmd);
|
||||||
if (!ExitCode) {
|
if (!ExitCode) {
|
||||||
VPrintf(V, "MERGE-OUTER: succesfull in %zd attempt(s)\n", Attempt);
|
VPrintf(V, "MERGE-OUTER: successful in %zd attempt(s)\n", Attempt);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -398,7 +398,7 @@ static size_t InternalStrnlen(const char *S, size_t MaxLen) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Finds min of (strlen(S1), strlen(S2)).
|
// Finds min of (strlen(S1), strlen(S2)).
|
||||||
// Needed bacause one of these strings may actually be non-zero terminated.
|
// Needed because one of these strings may actually be non-zero terminated.
|
||||||
static size_t InternalStrnlen2(const char *S1, const char *S2) {
|
static size_t InternalStrnlen2(const char *S1, const char *S2) {
|
||||||
size_t Len = 0;
|
size_t Len = 0;
|
||||||
for (; S1[Len] && S2[Len]; Len++) {}
|
for (; S1[Len] && S2[Len]; Len++) {}
|
||||||
|
|
|
@ -56,7 +56,7 @@
|
||||||
// tramp: jmp QWORD [addr]
|
// tramp: jmp QWORD [addr]
|
||||||
// addr: .bytes <hook>
|
// addr: .bytes <hook>
|
||||||
//
|
//
|
||||||
// Note: <real> is equilavent to <label>.
|
// Note: <real> is equivalent to <label>.
|
||||||
//
|
//
|
||||||
// 3) HotPatch
|
// 3) HotPatch
|
||||||
//
|
//
|
||||||
|
|
|
@ -121,7 +121,7 @@ const MappingDesc kMemoryLayout[] = {
|
||||||
// The mappings below are used only for 48-bits VMA.
|
// The mappings below are used only for 48-bits VMA.
|
||||||
// TODO(unknown): 48-bit mapping ony covers the usual PIE, non-PIE
|
// TODO(unknown): 48-bit mapping ony covers the usual PIE, non-PIE
|
||||||
// segments and some more segments totalizing 262144GB of VMA (which cover
|
// segments and some more segments totalizing 262144GB of VMA (which cover
|
||||||
// only 0.32% of all 48-bit VMA). Memory avaliability can be increase by
|
// only 0.32% of all 48-bit VMA). Memory availability can be increase by
|
||||||
// adding multiple application segments like 39 and 42 mapping.
|
// adding multiple application segments like 39 and 42 mapping.
|
||||||
{0x0040000000000ULL, 0x0041000000000ULL, MappingDesc::INVALID, "invalid"},
|
{0x0040000000000ULL, 0x0041000000000ULL, MappingDesc::INVALID, "invalid"},
|
||||||
{0x0041000000000ULL, 0x0042000000000ULL, MappingDesc::APP, "app-10"},
|
{0x0041000000000ULL, 0x0042000000000ULL, MappingDesc::APP, "app-10"},
|
||||||
|
@ -219,7 +219,7 @@ const MappingDesc kMemoryLayout[] = {
|
||||||
#elif SANITIZER_NETBSD || (SANITIZER_LINUX && SANITIZER_WORDSIZE == 64)
|
#elif SANITIZER_NETBSD || (SANITIZER_LINUX && SANITIZER_WORDSIZE == 64)
|
||||||
|
|
||||||
#ifdef MSAN_LINUX_X86_64_OLD_MAPPING
|
#ifdef MSAN_LINUX_X86_64_OLD_MAPPING
|
||||||
// Requries PIE binary and ASLR enabled.
|
// Requires PIE binary and ASLR enabled.
|
||||||
// Main thread stack and DSOs at 0x7f0000000000 (sometimes 0x7e0000000000).
|
// Main thread stack and DSOs at 0x7f0000000000 (sometimes 0x7e0000000000).
|
||||||
// Heap at 0x600000000000.
|
// Heap at 0x600000000000.
|
||||||
const MappingDesc kMemoryLayout[] = {
|
const MappingDesc kMemoryLayout[] = {
|
||||||
|
|
|
@ -1144,7 +1144,7 @@ INTERCEPTOR(int, __cxa_atexit, void (*func)(void *), void *arg,
|
||||||
|
|
||||||
// Unpoison argument shadow for C++ module destructors.
|
// Unpoison argument shadow for C++ module destructors.
|
||||||
INTERCEPTOR(int, atexit, void (*func)()) {
|
INTERCEPTOR(int, atexit, void (*func)()) {
|
||||||
// Avoid calling real atexit as it is unrechable on at least on Linux.
|
// Avoid calling real atexit as it is unreachable on at least on Linux.
|
||||||
if (msan_init_is_running)
|
if (msan_init_is_running)
|
||||||
return REAL(__cxa_atexit)((void (*)(void *a))func, 0, 0);
|
return REAL(__cxa_atexit)((void (*)(void *a))func, 0, 0);
|
||||||
return setup_at_exit_wrapper((void(*)())func, 0, 0);
|
return setup_at_exit_wrapper((void(*)())func, 0, 0);
|
||||||
|
|
|
@ -31,7 +31,7 @@ SANITIZER_INTERFACE_ATTRIBUTE
|
||||||
void __msan_warning();
|
void __msan_warning();
|
||||||
|
|
||||||
// Print a warning and die.
|
// Print a warning and die.
|
||||||
// Intrumentation inserts calls to this function when building in "fast" mode
|
// Instrumentation inserts calls to this function when building in "fast" mode
|
||||||
// (i.e. -mllvm -msan-keep-going)
|
// (i.e. -mllvm -msan-keep-going)
|
||||||
SANITIZER_INTERFACE_ATTRIBUTE __attribute__((noreturn))
|
SANITIZER_INTERFACE_ATTRIBUTE __attribute__((noreturn))
|
||||||
void __msan_warning_noreturn();
|
void __msan_warning_noreturn();
|
||||||
|
|
|
@ -150,7 +150,7 @@ int __llvm_profile_write_file(void);
|
||||||
int __llvm_orderfile_write_file(void);
|
int __llvm_orderfile_write_file(void);
|
||||||
/*!
|
/*!
|
||||||
* \brief this is a wrapper interface to \c __llvm_profile_write_file.
|
* \brief this is a wrapper interface to \c __llvm_profile_write_file.
|
||||||
* After this interface is invoked, a arleady dumped flag will be set
|
* After this interface is invoked, an already dumped flag will be set
|
||||||
* so that profile won't be dumped again during program exit.
|
* so that profile won't be dumped again during program exit.
|
||||||
* Invocation of interface __llvm_profile_reset_counters will clear
|
* Invocation of interface __llvm_profile_reset_counters will clear
|
||||||
* the flag. This interface is designed to be used to collect profile
|
* the flag. This interface is designed to be used to collect profile
|
||||||
|
|
|
@ -145,8 +145,8 @@ typedef struct VPDataReaderType {
|
||||||
uint32_t N);
|
uint32_t N);
|
||||||
} VPDataReaderType;
|
} VPDataReaderType;
|
||||||
|
|
||||||
/* Write profile data to destinitation. If SkipNameDataWrite is set to 1,
|
/* Write profile data to destination. If SkipNameDataWrite is set to 1,
|
||||||
the name data is already in destintation, we just skip over it. */
|
the name data is already in destination, we just skip over it. */
|
||||||
int lprofWriteData(ProfDataWriter *Writer, VPDataReaderType *VPDataReader,
|
int lprofWriteData(ProfDataWriter *Writer, VPDataReaderType *VPDataReader,
|
||||||
int SkipNameDataWrite);
|
int SkipNameDataWrite);
|
||||||
int lprofWriteDataImpl(ProfDataWriter *Writer,
|
int lprofWriteDataImpl(ProfDataWriter *Writer,
|
||||||
|
|
|
@ -253,7 +253,7 @@ __llvm_profile_instrument_memop(uint64_t TargetValue, void *Data,
|
||||||
/*
|
/*
|
||||||
* A wrapper struct that represents value profile runtime data.
|
* A wrapper struct that represents value profile runtime data.
|
||||||
* Like InstrProfRecord class which is used by profiling host tools,
|
* Like InstrProfRecord class which is used by profiling host tools,
|
||||||
* ValueProfRuntimeRecord also implements the abstract intefaces defined in
|
* ValueProfRuntimeRecord also implements the abstract interfaces defined in
|
||||||
* ValueProfRecordClosure so that the runtime data can be serialized using
|
* ValueProfRecordClosure so that the runtime data can be serialized using
|
||||||
* shared C implementation.
|
* shared C implementation.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -32,7 +32,7 @@ static uint32_t VPDataArraySize = sizeof(VPDataArray) / sizeof(*VPDataArray);
|
||||||
COMPILER_RT_VISIBILITY uint8_t *DynamicBufferIOBuffer = 0;
|
COMPILER_RT_VISIBILITY uint8_t *DynamicBufferIOBuffer = 0;
|
||||||
COMPILER_RT_VISIBILITY uint32_t VPBufferSize = 0;
|
COMPILER_RT_VISIBILITY uint32_t VPBufferSize = 0;
|
||||||
|
|
||||||
/* The buffer writer is reponsponsible in keeping writer state
|
/* The buffer writer is responsible in keeping writer state
|
||||||
* across the call.
|
* across the call.
|
||||||
*/
|
*/
|
||||||
COMPILER_RT_VISIBILITY uint32_t lprofBufferWriter(ProfDataWriter *This,
|
COMPILER_RT_VISIBILITY uint32_t lprofBufferWriter(ProfDataWriter *This,
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SANCOV_FLAG(bool, symbolize, true,
|
SANCOV_FLAG(bool, symbolize, true,
|
||||||
"If set, converage information will be symbolized by sancov tool "
|
"If set, coverage information will be symbolized by sancov tool "
|
||||||
"after dumping.")
|
"after dumping.")
|
||||||
|
|
||||||
SANCOV_FLAG(bool, help, false, "Print flags help.")
|
SANCOV_FLAG(bool, help, false, "Print flags help.")
|
||||||
|
|
|
@ -625,7 +625,7 @@ class SizeClassAllocator64 {
|
||||||
|
|
||||||
static const uptr kRegionSize = kSpaceSize / kNumClassesRounded;
|
static const uptr kRegionSize = kSpaceSize / kNumClassesRounded;
|
||||||
// FreeArray is the array of free-d chunks (stored as 4-byte offsets).
|
// FreeArray is the array of free-d chunks (stored as 4-byte offsets).
|
||||||
// In the worst case it may reguire kRegionSize/SizeClassMap::kMinSize
|
// In the worst case it may require kRegionSize/SizeClassMap::kMinSize
|
||||||
// elements, but in reality this will not happen. For simplicity we
|
// elements, but in reality this will not happen. For simplicity we
|
||||||
// dedicate 1/8 of the region's virtual space to FreeArray.
|
// dedicate 1/8 of the region's virtual space to FreeArray.
|
||||||
static const uptr kFreeArraySize = kRegionSize / 8;
|
static const uptr kFreeArraySize = kRegionSize / 8;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// Various support for assemebler.
|
// Various support for assembler.
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,7 @@ namespace __sanitizer {
|
||||||
|
|
||||||
// MIPS32 does not support atomics > 4 bytes. To address this lack of
|
// MIPS32 does not support atomics > 4 bytes. To address this lack of
|
||||||
// functionality, the sanitizer library provides helper methods which use an
|
// functionality, the sanitizer library provides helper methods which use an
|
||||||
// internal spin lock mechanism to emulate atomic oprations when the size is
|
// internal spin lock mechanism to emulate atomic operations when the size is
|
||||||
// 8 bytes.
|
// 8 bytes.
|
||||||
static void __spin_lock(volatile int *lock) {
|
static void __spin_lock(volatile int *lock) {
|
||||||
while (__sync_lock_test_and_set(lock, 1))
|
while (__sync_lock_test_and_set(lock, 1))
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
// instantiated with the `LocalAddressSpaceView` type. This type is used to
|
// instantiated with the `LocalAddressSpaceView` type. This type is used to
|
||||||
// load any pointers in instance methods. This implementation is effectively
|
// load any pointers in instance methods. This implementation is effectively
|
||||||
// a no-op. When an object is to be used in an out-of-process manner it is
|
// a no-op. When an object is to be used in an out-of-process manner it is
|
||||||
// instansiated with the `RemoteAddressSpaceView` type.
|
// instantiated with the `RemoteAddressSpaceView` type.
|
||||||
//
|
//
|
||||||
// By making `AddressSpaceView` a template parameter of an object, it can
|
// By making `AddressSpaceView` a template parameter of an object, it can
|
||||||
// change its implementation at compile time which has no run time overhead.
|
// change its implementation at compile time which has no run time overhead.
|
||||||
|
|
|
@ -65,7 +65,7 @@ void BufferedStackTrace::Init(const uptr *pcs, uptr cnt, uptr extra_top_pc) {
|
||||||
top_frame_bp = 0;
|
top_frame_bp = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Sparc implemention is in its own file.
|
// Sparc implementation is in its own file.
|
||||||
#if !defined(__sparc__)
|
#if !defined(__sparc__)
|
||||||
|
|
||||||
// In GCC on ARM bp points to saved lr, not fp, so we should check the next
|
// In GCC on ARM bp points to saved lr, not fp, so we should check the next
|
||||||
|
|
|
@ -9,7 +9,7 @@
|
||||||
// This file is shared between AddressSanitizer and ThreadSanitizer
|
// This file is shared between AddressSanitizer and ThreadSanitizer
|
||||||
// run-time libraries.
|
// run-time libraries.
|
||||||
//
|
//
|
||||||
// Implemention of fast stack unwinding for Sparc.
|
// Implementation of fast stack unwinding for Sparc.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
||||||
#if defined(__sparc__)
|
#if defined(__sparc__)
|
||||||
|
|
|
@ -21,7 +21,7 @@ namespace __sanitizer {
|
||||||
|
|
||||||
// Parsing helpers, 'str' is searched for delimiter(s) and a string or uptr
|
// Parsing helpers, 'str' is searched for delimiter(s) and a string or uptr
|
||||||
// is extracted. When extracting a string, a newly allocated (using
|
// is extracted. When extracting a string, a newly allocated (using
|
||||||
// InternalAlloc) and null-terminataed buffer is returned. They return a pointer
|
// InternalAlloc) and null-terminated buffer is returned. They return a pointer
|
||||||
// to the next characted after the found delimiter.
|
// to the next characted after the found delimiter.
|
||||||
const char *ExtractToken(const char *str, const char *delims, char **result);
|
const char *ExtractToken(const char *str, const char *delims, char **result);
|
||||||
const char *ExtractInt(const char *str, const char *delims, int *result);
|
const char *ExtractInt(const char *str, const char *delims, int *result);
|
||||||
|
|
|
@ -30,7 +30,7 @@ if(ANDROID)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# The minimal Scudo runtime does not inlude the UBSan runtime.
|
# The minimal Scudo runtime does not include the UBSan runtime.
|
||||||
set(SCUDO_MINIMAL_OBJECT_LIBS
|
set(SCUDO_MINIMAL_OBJECT_LIBS
|
||||||
RTSanitizerCommonNoTermination
|
RTSanitizerCommonNoTermination
|
||||||
RTSanitizerCommonLibc
|
RTSanitizerCommonLibc
|
||||||
|
|
|
@ -72,9 +72,9 @@
|
||||||
// clk_ - variable size vector clock, low kClkBits hold timestamp,
|
// clk_ - variable size vector clock, low kClkBits hold timestamp,
|
||||||
// the remaining bits hold "acquired" flag (the actual value is thread's
|
// the remaining bits hold "acquired" flag (the actual value is thread's
|
||||||
// reused counter);
|
// reused counter);
|
||||||
// if acquried == thr->reused_, then the respective thread has already
|
// if acquired == thr->reused_, then the respective thread has already
|
||||||
// acquired this clock (except possibly for dirty elements).
|
// acquired this clock (except possibly for dirty elements).
|
||||||
// dirty_ - holds up to two indeces in the vector clock that other threads
|
// dirty_ - holds up to two indices in the vector clock that other threads
|
||||||
// need to acquire regardless of "acquired" flag value;
|
// need to acquire regardless of "acquired" flag value;
|
||||||
// release_store_tid_ - denotes that the clock state is a result of
|
// release_store_tid_ - denotes that the clock state is a result of
|
||||||
// release-store operation by the thread with release_store_tid_ index.
|
// release-store operation by the thread with release_store_tid_ index.
|
||||||
|
@ -272,7 +272,7 @@ void ThreadClock::ReleaseStore(ClockCache *c, SyncClock *dst) {
|
||||||
// we could update the existing clock and cache it, or replace it with the
|
// we could update the existing clock and cache it, or replace it with the
|
||||||
// currently cached clock and release the old one. And for a shared
|
// currently cached clock and release the old one. And for a shared
|
||||||
// existing clock, we could replace it with the currently cached;
|
// existing clock, we could replace it with the currently cached;
|
||||||
// or unshare, update and cache. But, for simplicity, we currnetly reuse
|
// or unshare, update and cache. But, for simplicity, we currently reuse
|
||||||
// cached clock only when the target clock is empty.
|
// cached clock only when the target clock is empty.
|
||||||
dst->tab_ = ctx->clock_alloc.Map(cached_idx_);
|
dst->tab_ = ctx->clock_alloc.Map(cached_idx_);
|
||||||
dst->tab_idx_ = cached_idx_;
|
dst->tab_idx_ = cached_idx_;
|
||||||
|
@ -285,7 +285,7 @@ void ThreadClock::ReleaseStore(ClockCache *c, SyncClock *dst) {
|
||||||
dst->dirty_[0].epoch = clk_[tid_];
|
dst->dirty_[0].epoch = clk_[tid_];
|
||||||
dst->release_store_tid_ = tid_;
|
dst->release_store_tid_ = tid_;
|
||||||
dst->release_store_reused_ = reused_;
|
dst->release_store_reused_ = reused_;
|
||||||
// Rememeber that we don't need to acquire it in future.
|
// Remember that we don't need to acquire it in future.
|
||||||
dst->elem(tid_).reused = reused_;
|
dst->elem(tid_).reused = reused_;
|
||||||
// Grab a reference.
|
// Grab a reference.
|
||||||
atomic_fetch_add(ref_ptr(dst->tab_), 1, memory_order_relaxed);
|
atomic_fetch_add(ref_ptr(dst->tab_), 1, memory_order_relaxed);
|
||||||
|
@ -316,7 +316,7 @@ void ThreadClock::ReleaseStore(ClockCache *c, SyncClock *dst) {
|
||||||
for (uptr i = 0; i < kDirtyTids; i++) dst->dirty_[i].set_tid(kInvalidTid);
|
for (uptr i = 0; i < kDirtyTids; i++) dst->dirty_[i].set_tid(kInvalidTid);
|
||||||
dst->release_store_tid_ = tid_;
|
dst->release_store_tid_ = tid_;
|
||||||
dst->release_store_reused_ = reused_;
|
dst->release_store_reused_ = reused_;
|
||||||
// Rememeber that we don't need to acquire it in future.
|
// Remember that we don't need to acquire it in future.
|
||||||
dst->elem(tid_).reused = reused_;
|
dst->elem(tid_).reused = reused_;
|
||||||
|
|
||||||
// If the resulting clock is cachable, cache it for future release operations.
|
// If the resulting clock is cachable, cache it for future release operations.
|
||||||
|
|
|
@ -213,7 +213,7 @@ class ThreadClock {
|
||||||
// We reuse it for subsequent store-release operations without intervening
|
// We reuse it for subsequent store-release operations without intervening
|
||||||
// acquire operations. Since it is shared (and thus constant), clock value
|
// acquire operations. Since it is shared (and thus constant), clock value
|
||||||
// for the current thread is then stored in dirty entries in the SyncClock.
|
// for the current thread is then stored in dirty entries in the SyncClock.
|
||||||
// We host a refernece to the table while it is cached here.
|
// We host a reference to the table while it is cached here.
|
||||||
u32 cached_idx_;
|
u32 cached_idx_;
|
||||||
u16 cached_size_;
|
u16 cached_size_;
|
||||||
u16 cached_blocks_;
|
u16 cached_blocks_;
|
||||||
|
|
|
@ -405,8 +405,8 @@ TSAN_INTERCEPTOR(int, swapcontext, ucontext_t *oucp, const ucontext_t *ucp) {
|
||||||
{
|
{
|
||||||
SCOPED_INTERCEPTOR_RAW(swapcontext, oucp, ucp);
|
SCOPED_INTERCEPTOR_RAW(swapcontext, oucp, ucp);
|
||||||
}
|
}
|
||||||
// Bacause of swapcontext() semantics we have no option but to copy its
|
// Because of swapcontext() semantics we have no option but to copy its
|
||||||
// impementation here
|
// implementation here
|
||||||
if (!oucp || !ucp) {
|
if (!oucp || !ucp) {
|
||||||
errno = EINVAL;
|
errno = EINVAL;
|
||||||
return -1;
|
return -1;
|
||||||
|
|
|
@ -1961,7 +1961,7 @@ static void CallUserSignalHandler(ThreadState *thr, bool sync, bool acquire,
|
||||||
Acquire(thr, 0, (uptr)&sigactions[sig]);
|
Acquire(thr, 0, (uptr)&sigactions[sig]);
|
||||||
// Signals are generally asynchronous, so if we receive a signals when
|
// Signals are generally asynchronous, so if we receive a signals when
|
||||||
// ignores are enabled we should disable ignores. This is critical for sync
|
// ignores are enabled we should disable ignores. This is critical for sync
|
||||||
// and interceptors, because otherwise we can miss syncronization and report
|
// and interceptors, because otherwise we can miss synchronization and report
|
||||||
// false races.
|
// false races.
|
||||||
int ignore_reads_and_writes = thr->ignore_reads_and_writes;
|
int ignore_reads_and_writes = thr->ignore_reads_and_writes;
|
||||||
int ignore_interceptors = thr->ignore_interceptors;
|
int ignore_interceptors = thr->ignore_interceptors;
|
||||||
|
|
|
@ -332,7 +332,7 @@ int ExtractResolvFDs(void *state, int *fds, int nfd) {
|
||||||
}
|
}
|
||||||
|
|
||||||
// Extract file descriptors passed via UNIX domain sockets.
|
// Extract file descriptors passed via UNIX domain sockets.
|
||||||
// This is requried to properly handle "open" of these fds.
|
// This is required to properly handle "open" of these fds.
|
||||||
// see 'man recvmsg' and 'man 3 cmsg'.
|
// see 'man recvmsg' and 'man 3 cmsg'.
|
||||||
int ExtractRecvmsgFDs(void *msgp, int *fds, int nfd) {
|
int ExtractRecvmsgFDs(void *msgp, int *fds, int nfd) {
|
||||||
int res = 0;
|
int res = 0;
|
||||||
|
|
|
@ -285,7 +285,7 @@ void MapShadow(uptr addr, uptr size) {
|
||||||
"meta shadow"))
|
"meta shadow"))
|
||||||
Die();
|
Die();
|
||||||
} else {
|
} else {
|
||||||
// Mapping continous heap.
|
// Mapping continuous heap.
|
||||||
// Windows wants 64K alignment.
|
// Windows wants 64K alignment.
|
||||||
meta_begin = RoundDownTo(meta_begin, 64 << 10);
|
meta_begin = RoundDownTo(meta_begin, 64 << 10);
|
||||||
meta_end = RoundUpTo(meta_end, 64 << 10);
|
meta_end = RoundUpTo(meta_end, 64 << 10);
|
||||||
|
|
|
@ -280,8 +280,8 @@ TEST(FunctionCallTrieTest, MergeInto) {
|
||||||
|
|
||||||
// We use a different allocator here to make sure that we're able to transfer
|
// We use a different allocator here to make sure that we're able to transfer
|
||||||
// data into a FunctionCallTrie which uses a different allocator. This
|
// data into a FunctionCallTrie which uses a different allocator. This
|
||||||
// reflects the inteded usage scenario for when we're collecting profiles that
|
// reflects the intended usage scenario for when we're collecting profiles
|
||||||
// aggregate across threads.
|
// that aggregate across threads.
|
||||||
auto B = FunctionCallTrie::InitAllocators();
|
auto B = FunctionCallTrie::InitAllocators();
|
||||||
FunctionCallTrie Merged(B);
|
FunctionCallTrie Merged(B);
|
||||||
|
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// This file is a part of XRay, a dynamic runtime instruementation system.
|
// This file is a part of XRay, a dynamic runtime instrumentation system.
|
||||||
//
|
//
|
||||||
// XRay Basic Mode runtime flags.
|
// XRay Basic Mode runtime flags.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// This file is a part of XRay, a dynamic runtime instruementation system.
|
// This file is a part of XRay, a dynamic runtime instrumentation system.
|
||||||
//
|
//
|
||||||
// Defines the interface for a buffer queue implementation.
|
// Defines the interface for a buffer queue implementation.
|
||||||
//
|
//
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
//
|
//
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
//
|
//
|
||||||
// This file is a part of XRay, a dynamic runtime instruementation system.
|
// This file is a part of XRay, a dynamic runtime instrumentation system.
|
||||||
//
|
//
|
||||||
// XRay runtime flags.
|
// XRay runtime flags.
|
||||||
//===----------------------------------------------------------------------===//
|
//===----------------------------------------------------------------------===//
|
||||||
|
|
|
@ -360,7 +360,7 @@ XRayPatchingStatus mprotectAndPatchFunction(int32_t FuncId,
|
||||||
return XRayPatchingStatus::FAILED;
|
return XRayPatchingStatus::FAILED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Here we compute the minumum sled and maximum sled associated with a
|
// Here we compute the minimum sled and maximum sled associated with a
|
||||||
// particular function ID.
|
// particular function ID.
|
||||||
auto SledRange = InstrMap.SledsIndex ? InstrMap.SledsIndex[FuncId - 1]
|
auto SledRange = InstrMap.SledsIndex ? InstrMap.SledsIndex[FuncId - 1]
|
||||||
: findFunctionSleds(FuncId, InstrMap);
|
: findFunctionSleds(FuncId, InstrMap);
|
||||||
|
|
|
@ -402,7 +402,7 @@ profilingLoggingInit(size_t, size_t, void *Options,
|
||||||
return XRayLogInitStatus::XRAY_LOG_UNINITIALIZED;
|
return XRayLogInitStatus::XRAY_LOG_UNINITIALIZED;
|
||||||
}
|
}
|
||||||
|
|
||||||
// If we've succeded, set the global pointer to the initialised storage.
|
// If we've succeeded, set the global pointer to the initialised storage.
|
||||||
BQ = reinterpret_cast<BufferQueue *>(&BufferQueueStorage);
|
BQ = reinterpret_cast<BufferQueue *>(&BufferQueueStorage);
|
||||||
} else {
|
} else {
|
||||||
BQ->finalize();
|
BQ->finalize();
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
|
|
||||||
// CONFIG rdar://6639533
|
// CONFIG rdar://6639533
|
||||||
|
|
||||||
// The compiler is prefetching x->forwarding before evaluting code that recomputes forwarding and so the value goes to a place that is never seen again.
|
// The compiler is prefetching x->forwarding before evaluating code that recomputes forwarding and so the value goes to a place that is never seen again.
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
// Check that we detect malloc/delete mismatch only if the approptiate flag
|
// Check that we detect malloc/delete mismatch only if the appropriate flag
|
||||||
// is set.
|
// is set.
|
||||||
|
|
||||||
// RUN: %clangxx_asan -g %s -o %t 2>&1
|
// RUN: %clangxx_asan -g %s -o %t 2>&1
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
//
|
//
|
||||||
// Get the list of ASan wrappers imported by the DLL RTL:
|
// Get the list of ASan wrappers imported by the DLL RTL:
|
||||||
// [BEWARE: be really careful with the sed commands, as this test can be run
|
// [BEWARE: be really careful with the sed commands, as this test can be run
|
||||||
// from different environemnts with different shells and seds]
|
// from different environments with different shells and seds]
|
||||||
// RUN: grep INTERCEPT_LIBRARY_FUNCTION %p/../../../../lib/asan/asan_win_dll_thunk.cpp \
|
// RUN: grep INTERCEPT_LIBRARY_FUNCTION %p/../../../../lib/asan/asan_win_dll_thunk.cpp \
|
||||||
// RUN: | grep -v define | sed -e s/.*(/__asan_wrap_/ -e s/).*// \
|
// RUN: | grep -v define | sed -e s/.*(/__asan_wrap_/ -e s/).*// \
|
||||||
// RUN: > %t.imports1
|
// RUN: > %t.imports1
|
||||||
|
|
|
@ -13,7 +13,7 @@
|
||||||
// RUN: | sed -e s/@.*// > %t.exports
|
// RUN: | sed -e s/@.*// > %t.exports
|
||||||
//
|
//
|
||||||
// [BEWARE: be really careful with the sed commands, as this test can be run
|
// [BEWARE: be really careful with the sed commands, as this test can be run
|
||||||
// from different environemnts with different shells and seds]
|
// from different environments with different shells and seds]
|
||||||
//
|
//
|
||||||
// RUN: grep -e "INTERFACE_FUNCTION" \
|
// RUN: grep -e "INTERFACE_FUNCTION" \
|
||||||
// RUN: %p/../../../../lib/asan/asan_interface.inc \
|
// RUN: %p/../../../../lib/asan/asan_interface.inc \
|
||||||
|
|
|
@ -40,7 +40,7 @@ void TestContainer(size_t capacity) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Don't forget to unpoison the whole thing before destroing/reallocating.
|
// Don't forget to unpoison the whole thing before destroying/reallocating.
|
||||||
__sanitizer_annotate_contiguous_container(beg, end, mid, end);
|
__sanitizer_annotate_contiguous_container(beg, end, mid, end);
|
||||||
for (size_t idx = 0; idx < capacity; idx++)
|
for (size_t idx = 0; idx < capacity; idx++)
|
||||||
assert(!__asan_address_is_poisoned(beg + idx));
|
assert(!__asan_address_is_poisoned(beg + idx));
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
// "x", "y", "z" are dynamically initialized globals.
|
// "x", "y", "z" are dynamically initialized globals.
|
||||||
// Value of "x" depends on "y", value of "y" depends on "z".
|
// Value of "x" depends on "y", value of "y" depends on "z".
|
||||||
// "x" and "z" are defined in this TU, "y" is defined in another one.
|
// "x" and "z" are defined in this TU, "y" is defined in another one.
|
||||||
// Thus we shoud stably report initialization order fiasco independently of
|
// Thus we should stably report initialization order fiasco independently of
|
||||||
// the translation unit order.
|
// the translation unit order.
|
||||||
|
|
||||||
int initZ() {
|
int initZ() {
|
||||||
|
|
|
@ -24,7 +24,7 @@ static int func2() { return 2; }
|
||||||
|
|
||||||
void __attribute__((noinline))
|
void __attribute__((noinline))
|
||||||
memcpy_f(void *dst, const void *src, size_t n) {
|
memcpy_f(void *dst, const void *src, size_t n) {
|
||||||
// ARM and MIPS nartually align functions, but use the LSB for ISA selection
|
// ARM and MIPS naturally align functions, but use the LSB for ISA selection
|
||||||
// (THUMB, MIPS16/uMIPS respectively). Ensure that the ISA bit is ignored in
|
// (THUMB, MIPS16/uMIPS respectively). Ensure that the ISA bit is ignored in
|
||||||
// the memcpy
|
// the memcpy
|
||||||
#if defined(__arm__) || defined(__mips__)
|
#if defined(__arm__) || defined(__mips__)
|
||||||
|
|
|
@ -16,7 +16,7 @@ static int func2() { return 2; }
|
||||||
|
|
||||||
void *__attribute__((noinline))
|
void *__attribute__((noinline))
|
||||||
memcpy_f(void *dst, const void *src, size_t n) {
|
memcpy_f(void *dst, const void *src, size_t n) {
|
||||||
// ARM and MIPS nartually align functions, but use the LSB for ISA selection
|
// ARM and MIPS naturally align functions, but use the LSB for ISA selection
|
||||||
// (THUMB, MIPS16/uMIPS respectively). Ensure that the ISA bit is ignored in
|
// (THUMB, MIPS16/uMIPS respectively). Ensure that the ISA bit is ignored in
|
||||||
// the memcpy
|
// the memcpy
|
||||||
#if defined(__arm__) || defined(__mips__)
|
#if defined(__arm__) || defined(__mips__)
|
||||||
|
|
|
@ -138,7 +138,7 @@ static inline int compareResultD(double result,
|
||||||
|
|
||||||
#if __LDBL_MANT_DIG__ == 113
|
#if __LDBL_MANT_DIG__ == 113
|
||||||
// return 0 if equal
|
// return 0 if equal
|
||||||
// use two 64-bit integers intead of one 128-bit integer
|
// use two 64-bit integers instead of one 128-bit integer
|
||||||
// because 128-bit integer constant can't be assigned directly
|
// because 128-bit integer constant can't be assigned directly
|
||||||
static inline int compareResultLD(long double result,
|
static inline int compareResultLD(long double result,
|
||||||
uint64_t expectedHi,
|
uint64_t expectedHi,
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
|
||||||
// Simple test for a cutom crossover.
|
// Simple test for a custom crossover.
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
// See https://llvm.org/LICENSE.txt for license information.
|
// See https://llvm.org/LICENSE.txt for license information.
|
||||||
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
||||||
|
|
||||||
// Simple test for a cutom mutator.
|
// Simple test for a custom mutator.
|
||||||
#include <assert.h>
|
#include <assert.h>
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
#include <cstdint>
|
#include <cstdint>
|
||||||
|
|
|
@ -52,7 +52,7 @@ RUN: rm %t/T1/*
|
||||||
RUN: cp %t/T0/* %t/T1/
|
RUN: cp %t/T0/* %t/T1/
|
||||||
RUN: echo 'FUZZER' > %t/T2/FUZZER
|
RUN: echo 'FUZZER' > %t/T2/FUZZER
|
||||||
RUN: %run %t-FullCoverageSetTest -merge=1 %t/T1 %t/T2 2>&1 | FileCheck %s --check-prefix=MERGE_WITH_CRASH
|
RUN: %run %t-FullCoverageSetTest -merge=1 %t/T1 %t/T2 2>&1 | FileCheck %s --check-prefix=MERGE_WITH_CRASH
|
||||||
MERGE_WITH_CRASH: MERGE-OUTER: succesfull in 2 attempt(s)
|
MERGE_WITH_CRASH: MERGE-OUTER: successful in 2 attempt(s)
|
||||||
MERGE_WITH_CRASH: MERGE-OUTER: 3 new files
|
MERGE_WITH_CRASH: MERGE-OUTER: 3 new files
|
||||||
|
|
||||||
# Check that we actually limit the size with max_len
|
# Check that we actually limit the size with max_len
|
||||||
|
@ -61,5 +61,5 @@ RUN: echo 'FUZZER' > %t/T2/FUZZER
|
||||||
RUN: %run %t-FullCoverageSetTest -merge=1 %t/T1 %t/T2 -max_len=5 2>&1 | FileCheck %s --check-prefix=MERGE_LEN5
|
RUN: %run %t-FullCoverageSetTest -merge=1 %t/T1 %t/T2 -max_len=5 2>&1 | FileCheck %s --check-prefix=MERGE_LEN5
|
||||||
RUN: not grep FUZZER %t/T1/*
|
RUN: not grep FUZZER %t/T1/*
|
||||||
RUN: grep FUZZE %t/T1/*
|
RUN: grep FUZZE %t/T1/*
|
||||||
MERGE_LEN5: MERGE-OUTER: succesfull in 1 attempt(s)
|
MERGE_LEN5: MERGE-OUTER: successful in 1 attempt(s)
|
||||||
|
|
||||||
|
|
|
@ -620,7 +620,7 @@ for postfix in ["2", "1", ""]:
|
||||||
config.substitutions.append( ("%xdynamiclib_filename" + postfix, 'lib%xdynamiclib_namespec{}.so'.format(postfix)) )
|
config.substitutions.append( ("%xdynamiclib_filename" + postfix, 'lib%xdynamiclib_namespec{}.so'.format(postfix)) )
|
||||||
config.substitutions.append( ("%xdynamiclib_namespec", '%basename_t.dynamic') )
|
config.substitutions.append( ("%xdynamiclib_namespec", '%basename_t.dynamic') )
|
||||||
|
|
||||||
# Provide a substituion that can be used to tell Clang to use a static libstdc++.
|
# Provide a substitution that can be used to tell Clang to use a static libstdc++.
|
||||||
# The substitution expands to nothing on non Linux platforms.
|
# The substitution expands to nothing on non Linux platforms.
|
||||||
# FIXME: This should check the target OS, not the host OS.
|
# FIXME: This should check the target OS, not the host OS.
|
||||||
if config.host_os == 'Linux':
|
if config.host_os == 'Linux':
|
||||||
|
|
|
@ -27,7 +27,7 @@
|
||||||
#define NO_OVERFLOW(x) assert(__msan_test_shadow(&x, sizeof(x)) == 0)
|
#define NO_OVERFLOW(x) assert(__msan_test_shadow(&x, sizeof(x)) == 0)
|
||||||
|
|
||||||
#if defined(__x86_64__)
|
#if defined(__x86_64__)
|
||||||
// In x86_64, if argument is partially outside tls, it is considered completly
|
// In x86_64, if argument is partially outside tls, it is considered completely
|
||||||
// unpoisoned
|
// unpoisoned
|
||||||
#define PARTIAL_OVERFLOW(x) OVERFLOW(x)
|
#define PARTIAL_OVERFLOW(x) OVERFLOW(x)
|
||||||
#else
|
#else
|
||||||
|
|
|
@ -84,7 +84,7 @@ foreach(tool ${SUPPORTED_TOOLS})
|
||||||
configure_lit_site_cfg(
|
configure_lit_site_cfg(
|
||||||
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
|
${CMAKE_CURRENT_SOURCE_DIR}/lit.site.cfg.py.in
|
||||||
${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
|
${CMAKE_CURRENT_BINARY_DIR}/${CONFIG_NAME}/lit.site.cfg.py)
|
||||||
# FIXME(dliew): LSan i386 on Darwin is completly broken right now.
|
# FIXME(dliew): LSan i386 on Darwin is completely broken right now.
|
||||||
# so don't run the tests by default.
|
# so don't run the tests by default.
|
||||||
if (NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin" AND
|
if (NOT (CMAKE_SYSTEM_NAME MATCHES "Darwin" AND
|
||||||
${tool} STREQUAL "lsan" AND
|
${tool} STREQUAL "lsan" AND
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
|
|
||||||
// Check that all new/delete variants are defined and work with supported
|
// Check that all new/delete variants are defined and work with supported
|
||||||
// sanitizers. Sanitizer-specific failure modes tests are supposed to go to
|
// sanitizers. Sanitizer-specific failure modes tests are supposed to go to
|
||||||
// the particular sanitizier's test suites.
|
// the particular sanitizer's test suites.
|
||||||
|
|
||||||
#include <cstddef>
|
#include <cstddef>
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
// RUN: %clangxx_tsan -O1 --std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s
|
// RUN: %clangxx_tsan -O1 --std=c++11 %s -o %t && %run %t 2>&1 | FileCheck %s
|
||||||
#include "custom_mutex.h"
|
#include "custom_mutex.h"
|
||||||
|
|
||||||
// Test that custom annoations provide normal mutex synchronization
|
// Test that custom annotations provide normal mutex synchronization
|
||||||
// (no race reports for properly protected critical sections).
|
// (no race reports for properly protected critical sections).
|
||||||
|
|
||||||
Mutex mu(true, 0);
|
Mutex mu(true, 0);
|
||||||
|
|
|
@ -53,5 +53,5 @@ int main() {
|
||||||
|
|
||||||
// CHECK: WARNING: ThreadSanitizer: data race
|
// CHECK: WARNING: ThreadSanitizer: data race
|
||||||
// CHECK: #100 foo
|
// CHECK: #100 foo
|
||||||
// We must output suffucuently large stack (at least 100 frames)
|
// We must output sufficiently large stack (at least 100 frames)
|
||||||
|
|
||||||
|
|
|
@ -17,7 +17,7 @@ void *Thread(void *x) {
|
||||||
char buf;
|
char buf;
|
||||||
int n = read(fd, &buf, 1);
|
int n = read(fd, &buf, 1);
|
||||||
if (n != 1) {
|
if (n != 1) {
|
||||||
// This read can "legitimately" fail regadless of the fact that glibc claims
|
// This read can "legitimately" fail regardless of the fact that glibc claims
|
||||||
// that "there is no instant in the middle of calling dup2 at which new is
|
// that "there is no instant in the middle of calling dup2 at which new is
|
||||||
// closed and not yet a duplicate of old". Strace of the failing runs
|
// closed and not yet a duplicate of old". Strace of the failing runs
|
||||||
// looks as follows:
|
// looks as follows:
|
||||||
|
|
|
@ -22,7 +22,7 @@
|
||||||
#===------------------------------------------------------------------------===#
|
#===------------------------------------------------------------------------===#
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
# harcode the script name
|
# hardcode the script name
|
||||||
script_name = "generate_netbsd_ioctls.awk"
|
script_name = "generate_netbsd_ioctls.awk"
|
||||||
outputinc = "../lib/sanitizer_common/sanitizer_interceptors_ioctl_netbsd.inc"
|
outputinc = "../lib/sanitizer_common/sanitizer_interceptors_ioctl_netbsd.inc"
|
||||||
|
|
||||||
|
|
|
@ -24,7 +24,7 @@
|
||||||
#===------------------------------------------------------------------------===#
|
#===------------------------------------------------------------------------===#
|
||||||
|
|
||||||
BEGIN {
|
BEGIN {
|
||||||
# harcode the script name
|
# hardcode the script name
|
||||||
script_name = "generate_netbsd_syscalls.awk"
|
script_name = "generate_netbsd_syscalls.awk"
|
||||||
outputh = "../include/sanitizer/netbsd_syscall_hooks.h"
|
outputh = "../include/sanitizer/netbsd_syscall_hooks.h"
|
||||||
outputinc = "../lib/sanitizer_common/sanitizer_syscalls_netbsd.inc"
|
outputinc = "../lib/sanitizer_common/sanitizer_syscalls_netbsd.inc"
|
||||||
|
|
Loading…
Reference in New Issue