forked from OSchip/llvm-project
Define SANITIZER_INTERFACE_ATTRIBUTE on Windows and fix all the places where SANITIZER_INTERFACE_ATTRIBUTE or SANITIZER_ATTRIBUTE_WEAK are used
llvm-svn: 188261
This commit is contained in:
parent
cdaffa45d4
commit
eee13914e2
|
@ -102,10 +102,13 @@ struct AsanThreadLocalMallocStorage {
|
|||
void CommitBack();
|
||||
};
|
||||
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void *asan_memalign(uptr alignment, uptr size, StackTrace *stack,
|
||||
AllocType alloc_type);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void asan_free(void *ptr, StackTrace *stack, AllocType alloc_type);
|
||||
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void *asan_malloc(uptr size, StackTrace *stack);
|
||||
void *asan_calloc(uptr nmemb, uptr size, StackTrace *stack);
|
||||
void *asan_realloc(void *p, uptr size, StackTrace *stack);
|
||||
|
@ -114,6 +117,7 @@ void *asan_pvalloc(uptr size, StackTrace *stack);
|
|||
|
||||
int asan_posix_memalign(void **memptr, uptr alignment, uptr size,
|
||||
StackTrace *stack);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uptr asan_malloc_usable_size(void *ptr, StackTrace *stack);
|
||||
|
||||
uptr asan_mz_size(const void *ptr);
|
||||
|
|
|
@ -812,12 +812,12 @@ uptr __asan_get_allocated_size(const void *p) {
|
|||
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
// Provide default (no-op) implementation of malloc hooks.
|
||||
extern "C" {
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
void __asan_malloc_hook(void *ptr, uptr size) {
|
||||
(void)ptr;
|
||||
(void)size;
|
||||
}
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
void __asan_free_hook(void *ptr) {
|
||||
(void)ptr;
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ extern "C" {
|
|||
// v2=>v3: stack frame description (created by the compiler)
|
||||
// contains the function PC as the 3-rd field (see
|
||||
// DescribeAddressIfStack).
|
||||
void __asan_init_v3() SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __asan_init_v3();
|
||||
#define __asan_init __asan_init_v3
|
||||
|
||||
// This structure describes an instrumented global variable.
|
||||
|
@ -46,96 +46,90 @@ extern "C" {
|
|||
|
||||
// These two functions should be called by the instrumented code.
|
||||
// 'globals' is an array of structures describing 'n' globals.
|
||||
void __asan_register_globals(__asan_global *globals, uptr n)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_unregister_globals(__asan_global *globals, uptr n)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_register_globals(__asan_global *globals, uptr n);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_unregister_globals(__asan_global *globals, uptr n);
|
||||
|
||||
// These two functions should be called before and after dynamic initializers
|
||||
// of a single module run, respectively.
|
||||
void __asan_before_dynamic_init(const char *module_name)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_after_dynamic_init()
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_before_dynamic_init(const char *module_name);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_after_dynamic_init();
|
||||
|
||||
// These two functions are used by the instrumented code in the
|
||||
// use-after-return mode. __asan_stack_malloc allocates size bytes of
|
||||
// fake stack and __asan_stack_free poisons it. real_stack is a pointer to
|
||||
// the real stack region.
|
||||
uptr __asan_stack_malloc(uptr size, uptr real_stack)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_stack_free(uptr ptr, uptr size, uptr real_stack)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uptr __asan_stack_malloc(uptr size, uptr real_stack);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_stack_free(uptr ptr, uptr size, uptr real_stack);
|
||||
|
||||
// These two functions are used by instrumented code in the
|
||||
// use-after-scope mode. They mark memory for local variables as
|
||||
// unaddressable when they leave scope and addressable before the
|
||||
// function exits.
|
||||
void __asan_poison_stack_memory(uptr addr, uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_unpoison_stack_memory(uptr addr, uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_poison_stack_memory(uptr addr, uptr size);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_unpoison_stack_memory(uptr addr, uptr size);
|
||||
|
||||
// Performs cleanup before a NoReturn function. Must be called before things
|
||||
// like _exit and execl to avoid false positives on stack.
|
||||
void __asan_handle_no_return() SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __asan_handle_no_return();
|
||||
|
||||
void __asan_poison_memory_region(void const volatile *addr, uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_unpoison_memory_region(void const volatile *addr, uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_poison_memory_region(void const volatile *addr, uptr size);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_unpoison_memory_region(void const volatile *addr, uptr size);
|
||||
|
||||
bool __asan_address_is_poisoned(void const volatile *addr)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
bool __asan_address_is_poisoned(void const volatile *addr);
|
||||
|
||||
uptr __asan_region_is_poisoned(uptr beg, uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uptr __asan_region_is_poisoned(uptr beg, uptr size);
|
||||
|
||||
void __asan_describe_address(uptr addr)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_describe_address(uptr addr);
|
||||
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_report_error(uptr pc, uptr bp, uptr sp,
|
||||
uptr addr, bool is_write, uptr access_size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
uptr addr, bool is_write, uptr access_size);
|
||||
|
||||
int __asan_set_error_exit_code(int exit_code)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_set_death_callback(void (*callback)(void))
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_set_error_report_callback(void (*callback)(const char*))
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
int __asan_set_error_exit_code(int exit_code);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_set_death_callback(void (*callback)(void));
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __asan_set_error_report_callback(void (*callback)(const char*));
|
||||
|
||||
/* OPTIONAL */ void __asan_on_error()
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ void __asan_on_error();
|
||||
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ bool __asan_symbolize(const void *pc, char *out_buffer,
|
||||
int out_size)
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
int out_size);
|
||||
|
||||
uptr __asan_get_estimated_allocated_size(uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
bool __asan_get_ownership(const void *p)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
uptr __asan_get_allocated_size(const void *p)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
uptr __asan_get_current_allocated_bytes()
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
uptr __asan_get_heap_size()
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
uptr __asan_get_free_bytes()
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
uptr __asan_get_unmapped_bytes()
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __asan_print_accumulated_stats()
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uptr __asan_get_estimated_allocated_size(uptr size);
|
||||
|
||||
/* OPTIONAL */ const char* __asan_default_options()
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE bool __asan_get_ownership(const void *p);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_get_allocated_size(const void *p);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_get_current_allocated_bytes();
|
||||
SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_get_heap_size();
|
||||
SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_get_free_bytes();
|
||||
SANITIZER_INTERFACE_ATTRIBUTE uptr __asan_get_unmapped_bytes();
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __asan_print_accumulated_stats();
|
||||
|
||||
/* OPTIONAL */ void __asan_malloc_hook(void *ptr, uptr size)
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
/* OPTIONAL */ void __asan_free_hook(void *ptr)
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ const char* __asan_default_options();
|
||||
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ void __asan_malloc_hook(void *ptr, uptr size);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ void __asan_free_hook(void *ptr);
|
||||
} // extern "C"
|
||||
|
||||
#endif // ASAN_INTERFACE_INTERNAL_H
|
||||
|
|
|
@ -759,6 +759,6 @@ void __asan_describe_address(uptr addr) {
|
|||
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
// Provide default implementation of __asan_on_error that does nothing
|
||||
// and may be overriden by user.
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE NOINLINE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE NOINLINE
|
||||
void __asan_on_error() {}
|
||||
#endif
|
||||
|
|
|
@ -395,7 +395,7 @@ using namespace __asan; // NOLINT
|
|||
|
||||
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
extern "C" {
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
const char* __asan_default_options() { return ""; }
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
@ -37,7 +37,7 @@ void PrintStack(StackTrace *stack) {
|
|||
// and may be overriden by user if he wants to use his own symbolization.
|
||||
// ASan on Windows has its own implementation of this.
|
||||
#if !SANITIZER_WINDOWS && !SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE NOINLINE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE NOINLINE
|
||||
bool __asan_symbolize(const void *pc, char *out_buffer, int out_size) {
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -556,7 +556,7 @@ void __lsan_do_leak_check() {
|
|||
}
|
||||
|
||||
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
int __lsan_is_turned_off() {
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -166,10 +166,11 @@ class LsanMetadata {
|
|||
} // namespace __lsan
|
||||
|
||||
extern "C" {
|
||||
int __lsan_is_turned_off() SANITIZER_WEAK_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
const char *__lsan_default_suppressions() SANITIZER_WEAK_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
int __lsan_is_turned_off();
|
||||
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
const char *__lsan_default_suppressions();
|
||||
} // extern "C"
|
||||
|
||||
#endif // LSAN_COMMON_H
|
||||
|
|
|
@ -501,7 +501,7 @@ void __sanitizer_unaligned_store64(uu64 *p, u64 x) {
|
|||
|
||||
#if !SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
extern "C" {
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
const char* __msan_default_options() { return ""; }
|
||||
} // extern "C"
|
||||
#endif
|
||||
|
|
|
@ -88,7 +88,7 @@ void __msan_set_keep_going(int keep_going);
|
|||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
int __msan_set_poison_in_malloc(int do_poison);
|
||||
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ const char* __msan_default_options();
|
||||
|
||||
// For testing.
|
||||
|
@ -163,10 +163,10 @@ uptr __msan_get_free_bytes();
|
|||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uptr __msan_get_unmapped_bytes();
|
||||
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ void __msan_malloc_hook(void *ptr, uptr size);
|
||||
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
/* OPTIONAL */ void __msan_free_hook(void *ptr);
|
||||
} // extern "C"
|
||||
|
||||
|
|
|
@ -153,7 +153,7 @@ void SortArray(uptr *array, uptr size);
|
|||
// Exit
|
||||
void NORETURN Abort();
|
||||
void NORETURN Die();
|
||||
void NORETURN SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void NORETURN
|
||||
CheckFailed(const char *file, int line, const char *cond, u64 v1, u64 v2);
|
||||
|
||||
// Set the name of the current thread to 'name', return true on succees.
|
||||
|
|
|
@ -15,9 +15,10 @@
|
|||
|
||||
#include "sanitizer_platform.h"
|
||||
|
||||
// Only use SANITIZER_*ATTRIBUTE* before the function return type!
|
||||
#if SANITIZER_WINDOWS
|
||||
// FIXME find out what we need on Windows. __declspec(dllexport) ?
|
||||
# define SANITIZER_INTERFACE_ATTRIBUTE
|
||||
# define SANITIZER_INTERFACE_ATTRIBUTE __declspec(dllexport)
|
||||
// FIXME find out what we need on Windows, if anything.
|
||||
# define SANITIZER_WEAK_ATTRIBUTE
|
||||
#elif defined(SANITIZER_GO)
|
||||
# define SANITIZER_INTERFACE_ATTRIBUTE
|
||||
|
@ -82,25 +83,25 @@ typedef u64 OFF64_T;
|
|||
|
||||
extern "C" {
|
||||
// Tell the tools to write their reports to "path.<pid>" instead of stderr.
|
||||
void __sanitizer_set_report_path(const char *path)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __sanitizer_set_report_path(const char *path);
|
||||
|
||||
// Tell the tools to write their reports to given file descriptor instead of
|
||||
// stderr.
|
||||
void __sanitizer_set_report_fd(int fd)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __sanitizer_set_report_fd(int fd);
|
||||
|
||||
// Notify the tools that the sandbox is going to be turned on. The reserved
|
||||
// parameter will be used in the future to hold a structure with functions
|
||||
// that the tools may call to bypass the sandbox.
|
||||
void __sanitizer_sandbox_on_notify(void *reserved)
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
void __sanitizer_sandbox_on_notify(void *reserved);
|
||||
|
||||
// This function is called by the tool when it has just finished reporting
|
||||
// an error. 'error_summary' is a one-line string that summarizes
|
||||
// the error message. This function can be overridden by the client.
|
||||
void __sanitizer_report_error_summary(const char *error_summary)
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
void __sanitizer_report_error_summary(const char *error_summary);
|
||||
} // extern "C"
|
||||
|
||||
|
||||
|
|
|
@ -250,7 +250,7 @@ const char *GetEnv(const char *name) {
|
|||
}
|
||||
|
||||
extern "C" {
|
||||
extern void *__libc_stack_end SANITIZER_WEAK_ATTRIBUTE;
|
||||
SANITIZER_WEAK_ATTRIBUTE extern void *__libc_stack_end;
|
||||
}
|
||||
|
||||
#if !SANITIZER_GO
|
||||
|
|
|
@ -197,7 +197,7 @@ void SetPrintfAndReportCallback(void (*callback)(const char *)) {
|
|||
|
||||
#if SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
// Can be overriden in frontend.
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
void OnPrint(const char *str);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -60,8 +60,10 @@ struct StackTrace {
|
|||
static uptr GetCurrentPc();
|
||||
static uptr GetPreviousInstructionPc(uptr pc);
|
||||
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
static uptr CompressStack(StackTrace *stack,
|
||||
u32 *compressed, uptr size);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
static void UncompressStack(StackTrace *stack,
|
||||
u32 *compressed, uptr size);
|
||||
};
|
||||
|
|
|
@ -43,7 +43,7 @@ struct AddressInfo {
|
|||
internal_memset(this, 0, sizeof(AddressInfo));
|
||||
}
|
||||
// Deletes all strings and sets all fields to zero.
|
||||
void Clear() SANITIZER_WEAK_ATTRIBUTE;
|
||||
SANITIZER_WEAK_ATTRIBUTE void Clear();
|
||||
|
||||
void FillAddressAndModuleInfo(uptr addr, const char *mod_name,
|
||||
uptr mod_offset) {
|
||||
|
@ -66,8 +66,8 @@ struct DataInfo {
|
|||
// for a given address (in all inlined functions). Returns the number
|
||||
// of descriptions actually filled.
|
||||
// This function should NOT be called from two threads simultaneously.
|
||||
uptr SymbolizeCode(uptr address, AddressInfo *frames, uptr max_frames)
|
||||
SANITIZER_WEAK_ATTRIBUTE;
|
||||
SANITIZER_WEAK_ATTRIBUTE
|
||||
uptr SymbolizeCode(uptr address, AddressInfo *frames, uptr max_frames);
|
||||
bool SymbolizeData(uptr address, DataInfo *info);
|
||||
|
||||
bool IsSymbolizerAvailable();
|
||||
|
|
|
@ -22,9 +22,9 @@
|
|||
// because we do not require a C++ ABI library to be linked to a program
|
||||
// using sanitizers; if it's not present, we'll just use the mangled name.
|
||||
namespace __cxxabiv1 {
|
||||
SANITIZER_WEAK_ATTRIBUTE
|
||||
extern "C" char *__cxa_demangle(const char *mangled, char *buffer,
|
||||
size_t *length, int *status)
|
||||
SANITIZER_WEAK_ATTRIBUTE;
|
||||
size_t *length, int *status);
|
||||
}
|
||||
|
||||
const char *__sanitizer::DemangleCXXABI(const char *name) {
|
||||
|
|
|
@ -182,15 +182,15 @@ static LowLevelAllocator symbolizer_allocator; // Linker initialized.
|
|||
|
||||
#if SANITIZER_SUPPORTS_WEAK_HOOKS
|
||||
extern "C" {
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
bool __sanitizer_symbolize_code(const char *ModuleName, u64 ModuleOffset,
|
||||
char *Buffer, int MaxLength);
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
bool __sanitizer_symbolize_data(const char *ModuleName, u64 ModuleOffset,
|
||||
char *Buffer, int MaxLength);
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
void __sanitizer_symbolize_flush();
|
||||
SANITIZER_WEAK_ATTRIBUTE SANITIZER_INTERFACE_ATTRIBUTE
|
||||
SANITIZER_INTERFACE_ATTRIBUTE SANITIZER_WEAK_ATTRIBUTE
|
||||
int __sanitizer_symbolize_demangle(const char *Name, char *Buffer,
|
||||
int MaxLength);
|
||||
} // extern "C"
|
||||
|
|
|
@ -368,29 +368,29 @@ extern "C" void __tsan_setjmp(uptr sp, uptr mangled_sp) {
|
|||
}
|
||||
|
||||
// Not called. Merely to satisfy TSAN_INTERCEPT().
|
||||
extern "C" int __interceptor_setjmp(void *env)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
extern "C" int __interceptor_setjmp(void *env);
|
||||
extern "C" int __interceptor_setjmp(void *env) {
|
||||
CHECK(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int __interceptor__setjmp(void *env)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
extern "C" int __interceptor__setjmp(void *env);
|
||||
extern "C" int __interceptor__setjmp(void *env) {
|
||||
CHECK(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int __interceptor_sigsetjmp(void *env)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
extern "C" int __interceptor_sigsetjmp(void *env);
|
||||
extern "C" int __interceptor_sigsetjmp(void *env) {
|
||||
CHECK(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
extern "C" int __interceptor___sigsetjmp(void *env)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
extern "C" int __interceptor___sigsetjmp(void *env);
|
||||
extern "C" int __interceptor___sigsetjmp(void *env) {
|
||||
CHECK(0);
|
||||
return 0;
|
||||
|
@ -502,26 +502,26 @@ TSAN_INTERCEPTOR(uptr, malloc_usable_size, void *p) {
|
|||
invoke_malloc_hook(p, size); \
|
||||
return p;
|
||||
|
||||
void *operator new(__sanitizer::uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void *operator new(__sanitizer::uptr size);
|
||||
void *operator new(__sanitizer::uptr size) {
|
||||
OPERATOR_NEW_BODY(_Znwm);
|
||||
}
|
||||
|
||||
void *operator new[](__sanitizer::uptr size)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void *operator new[](__sanitizer::uptr size);
|
||||
void *operator new[](__sanitizer::uptr size) {
|
||||
OPERATOR_NEW_BODY(_Znam);
|
||||
}
|
||||
|
||||
void *operator new(__sanitizer::uptr size, std::nothrow_t const&)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void *operator new(__sanitizer::uptr size, std::nothrow_t const&);
|
||||
void *operator new(__sanitizer::uptr size, std::nothrow_t const&) {
|
||||
OPERATOR_NEW_BODY(_ZnwmRKSt9nothrow_t);
|
||||
}
|
||||
|
||||
void *operator new[](__sanitizer::uptr size, std::nothrow_t const&)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void *operator new[](__sanitizer::uptr size, std::nothrow_t const&);
|
||||
void *operator new[](__sanitizer::uptr size, std::nothrow_t const&) {
|
||||
OPERATOR_NEW_BODY(_ZnamRKSt9nothrow_t);
|
||||
}
|
||||
|
@ -534,26 +534,26 @@ void *operator new[](__sanitizer::uptr size, std::nothrow_t const&) {
|
|||
SCOPED_INTERCEPTOR_RAW(mangled_name, ptr); \
|
||||
user_free(thr, pc, ptr);
|
||||
|
||||
void operator delete(void *ptr)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void operator delete(void *ptr);
|
||||
void operator delete(void *ptr) {
|
||||
OPERATOR_DELETE_BODY(_ZdlPv);
|
||||
}
|
||||
|
||||
void operator delete[](void *ptr)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void operator delete[](void *ptr);
|
||||
void operator delete[](void *ptr) {
|
||||
OPERATOR_DELETE_BODY(_ZdlPvRKSt9nothrow_t);
|
||||
}
|
||||
|
||||
void operator delete(void *ptr, std::nothrow_t const&)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void operator delete(void *ptr, std::nothrow_t const&);
|
||||
void operator delete(void *ptr, std::nothrow_t const&) {
|
||||
OPERATOR_DELETE_BODY(_ZdaPv);
|
||||
}
|
||||
|
||||
void operator delete[](void *ptr, std::nothrow_t const&)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void operator delete[](void *ptr, std::nothrow_t const&);
|
||||
void operator delete[](void *ptr, std::nothrow_t const&) {
|
||||
OPERATOR_DELETE_BODY(_ZdaPvRKSt9nothrow_t);
|
||||
}
|
||||
|
|
|
@ -69,18 +69,24 @@ void __tsan_unaligned_write8(uu64 *addr, u64 v) {
|
|||
}
|
||||
|
||||
extern "C" {
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uint16_t __sanitizer_unaligned_load16(void *addr)
|
||||
ALIAS("__tsan_unaligned_read2") SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
ALIAS("__tsan_unaligned_read2");
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uint32_t __sanitizer_unaligned_load32(void *addr)
|
||||
ALIAS("__tsan_unaligned_read4") SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
ALIAS("__tsan_unaligned_read4");
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
uint64_t __sanitizer_unaligned_load64(void *addr)
|
||||
ALIAS("__tsan_unaligned_read8") SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
ALIAS("__tsan_unaligned_read8");
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __sanitizer_unaligned_store16(void *addr, uint16_t v)
|
||||
ALIAS("__tsan_unaligned_write2") SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
ALIAS("__tsan_unaligned_write2");
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __sanitizer_unaligned_store32(void *addr, uint32_t v)
|
||||
ALIAS("__tsan_unaligned_write4") SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
ALIAS("__tsan_unaligned_write4");
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __sanitizer_unaligned_store64(void *addr, uint64_t v)
|
||||
ALIAS("__tsan_unaligned_write8") SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
ALIAS("__tsan_unaligned_write8");
|
||||
}
|
||||
|
||||
void __tsan_acquire(void *addr) {
|
||||
|
|
|
@ -27,38 +27,38 @@ extern "C" {
|
|||
|
||||
// This function should be called at the very beginning of the process,
|
||||
// before any instrumented code is executed and before any call to malloc.
|
||||
void __tsan_init() SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_init();
|
||||
|
||||
void __tsan_read1(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_read2(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_read4(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_read8(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_read16(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_read1(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_read2(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_read4(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_read8(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_read16(void *addr);
|
||||
|
||||
void __tsan_write1(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_write2(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_write4(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_write8(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_write16(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_write1(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_write2(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_write4(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_write8(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_write16(void *addr);
|
||||
|
||||
u16 __tsan_unaligned_read2(const uu16 *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
u32 __tsan_unaligned_read4(const uu32 *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
u64 __tsan_unaligned_read8(const uu64 *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_unaligned_write2(uu16 *addr, u16 v) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_unaligned_write4(uu32 *addr, u32 v) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_unaligned_write8(uu64 *addr, u64 v) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE u16 __tsan_unaligned_read2(const uu16 *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE u32 __tsan_unaligned_read4(const uu32 *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE u64 __tsan_unaligned_read8(const uu64 *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_unaligned_write2(uu16 *addr, u16 v);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_unaligned_write4(uu32 *addr, u32 v);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_unaligned_write8(uu64 *addr, u64 v);
|
||||
|
||||
void __tsan_vptr_read(void **vptr_p) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_vptr_update(void **vptr_p, void *new_val)
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_vptr_read(void **vptr_p);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __tsan_vptr_update(void **vptr_p, void *new_val);
|
||||
|
||||
void __tsan_func_entry(void *call_pc) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_func_exit() SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_func_entry(void *call_pc);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_func_exit();
|
||||
|
||||
void __tsan_read_range(void *addr, unsigned long size) // NOLINT
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_write_range(void *addr, unsigned long size) // NOLINT
|
||||
SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __tsan_read_range(void *addr, unsigned long size); // NOLINT
|
||||
SANITIZER_INTERFACE_ATTRIBUTE
|
||||
void __tsan_write_range(void *addr, unsigned long size); // NOLINT
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
|
@ -23,8 +23,8 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
void __tsan_acquire(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
void __tsan_release(void *addr) SANITIZER_INTERFACE_ATTRIBUTE;
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_acquire(void *addr);
|
||||
SANITIZER_INTERFACE_ATTRIBUTE void __tsan_release(void *addr);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} // extern "C"
|
||||
|
|
Loading…
Reference in New Issue