Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
63 changes: 32 additions & 31 deletions compiler-rt/lib/bsan/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ include_directories(..)
include_directories(${BSAN_RT_HEADER_DIR})

set(BSAN_SOURCES
bsan_internal.cpp
bsan_interceptors.cpp
bsan.cpp
)
Expand All @@ -13,8 +14,9 @@ set(BSAN_PREINIT_SOURCES

SET(BSAN_HEADERS
bsan.h
bsan_internal.h
bsan_interceptors.h
bsanrt.h
bsan_rt.h
)

set(BSAN_DEPS)
Expand All @@ -23,33 +25,20 @@ set(BSAN_CFLAGS
${COMPILER_RT_COMMON_CFLAGS}
${COMPILER_RT_CXX_CFLAGS}
-DSANITIZER_COMMON_NO_REDEFINE_BUILTINS)
set(BSAN_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS})

set(BSAN_LINK_FLAGS ${COMPILER_RT_COMMON_LINK_FLAGS} ${SANITIZER_COMMON_LINK_FLAGS})
set(BSAN_LINK_LIBS
bsan_rt
${COMPILER_RT_UNWINDER_LINK_LIBS}
${COMPILER_RT_CXX_LINK_LIBS})

if(APPLE)
add_compiler_rt_object_libraries(RTBsan
OS ${SANITIZER_COMMON_SUPPORTED_OS}
ARCHS ${BSAN_SUPPORTED_ARCH}
SOURCES ${BSAN_SOURCES}
ADDITIONAL_HEADERS ${BSAN_HEADERS}
CFLAGS ${BSAN_CFLAGS}
DEPS ${BSAN_DEPS})
else()
add_compiler_rt_object_libraries(RTBsan
ARCHS ${BSAN_SUPPORTED_ARCH}
SOURCES ${BSAN_SOURCES}
ADDITIONAL_HEADERS ${BSAN_HEADERS}
CFLAGS ${BSAN_CFLAGS}
DEPS ${BSAN_DEPS})
add_compiler_rt_object_libraries(RTBsan_preinit
ARCHS ${BSAN_SUPPORTED_ARCH}
SOURCES ${BSAN_PREINIT_SOURCES}
ADDITIONAL_HEADERS ${BSAN_HEADERS}
CFLAGS ${BSAN_CFLAGS})
endif()
${COMPILER_RT_CXX_LINK_LIBS}
${SANITIZER_COMMON_LINK_LIBS}
${SANITIZER_CXX_ABI_LIBRARIES})

append_list_if(COMPILER_RT_HAS_LIBDL dl BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBRT rt BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBM m BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBLOG log BSAN_LINK_LIBS)

set(BSAN_COMMON_RUNTIME_OBJECT_LIBS
RTInterception
Expand All @@ -58,11 +47,22 @@ set(BSAN_COMMON_RUNTIME_OBJECT_LIBS
RTSanitizerCommonCoverage
RTSanitizerCommonSymbolizer)

append_list_if(COMPILER_RT_HAS_LIBDL dl BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBRT rt BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBM m BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBPTHREAD pthread BSAN_LINK_LIBS)
append_list_if(COMPILER_RT_HAS_LIBLOG log BSAN_LINK_LIBS)
add_compiler_rt_object_libraries(RTBsan
OS ${SANITIZER_COMMON_SUPPORTED_OS}
ARCHS ${BSAN_SUPPORTED_ARCH}
SOURCES ${BSAN_SOURCES}
ADDITIONAL_HEADERS ${BSAN_HEADERS}
CFLAGS ${BSAN_CFLAGS}
DEPS ${BSAN_DEPS})

if(NOT APPLE)
add_compiler_rt_object_libraries(RTBsan_preinit
OS ${SANITIZER_COMMON_SUPPORTED_OS}
ARCHS ${BSAN_SUPPORTED_ARCH}
SOURCES ${BSAN_PREINIT_SOURCES}
ADDITIONAL_HEADERS ${BSAN_HEADERS}
CFLAGS ${BSAN_CFLAGS})
endif()

add_compiler_rt_component(bsan)

Expand All @@ -77,8 +77,9 @@ if (APPLE)
ARCHS ${BSAN_SUPPORTED_ARCH}
OBJECT_LIBS RTBsan
${BSAN_COMMON_RUNTIME_OBJECT_LIBS}
LINK_FLAGS ${BSAN_LINK_FLAGS}
CFLAGS ${BSAN_CFLAGS}
LINK_LIBS ${BSAN_LINK_LIBS}
LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
PARENT_TARGET bsan)
else()
add_compiler_rt_runtime(clang_rt.bsan
Expand Down
97 changes: 59 additions & 38 deletions compiler-rt/lib/bsan/bsan.cpp
Original file line number Diff line number Diff line change
@@ -1,60 +1,81 @@
#include "bsan.h"
#include "bsan_interceptors.h"
#include "bsan_internal.h"
#include "bsan_rt.h"
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_stacktrace.h"
#include <stdlib.h>
#include <sys/mman.h>

using namespace bsan_rt;
using namespace __sanitizer;
using namespace __bsan;
using namespace bsan_rt;

namespace __bsan {
bool bsan_initialized = false;
bool bsan_init_is_running = false;
bool bsan_deinit_is_running = false;
BsanAllocator gBsanAlloc;
} // namespace __bsan
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_shadow_copy(uptr dst_ptr, uptr src_ptr, uptr access_size) {
BsanShadowCopy(dst_ptr, src_ptr, access_size);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_shadow_clear(uptr ptr, uptr access_size) {
BsanShadowClear(ptr, access_size);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_preinit() {}
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_preinit() {
BsanInitFromRtl();
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_init() {
CHECK(!bsan_init_is_running);
if (bsan_initialized)
return;
bsan_init_is_running = true;
InitializeInterceptors();
gBsanAlloc.malloc = REAL(malloc);
gBsanAlloc.free = REAL(free);
gBsanAlloc.mmap = mmap;
gBsanAlloc.munmap = munmap;
bsan_init(gBsanAlloc);
bsan_initialized = true;
bsan_init_is_running = false;
BsanInitFromRtl();
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_deinit() {
BsanDeinitFromRtl();
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_push_frame() {
BsanPushFrame();
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_func_entry() {}
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_pop_frame() {
BsanPopFrame();
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_retag(Provenance *ptr, u8 retag_kind, u8 place_kind) {
BsanRetag(ptr, retag_kind, place_kind);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_store_prov(Provenance *prov, uptr addr) {
BsanStoreProv(prov, addr);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_func_exit() {}
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_load_prov(Provenance *prov,
uptr addr) {
return BsanLoadProv(prov, addr);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_alloc(Provenance *prov,
uptr size) {
BsanAlloc(prov, size);
}
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_alloc_stack(Provenance *prov, uptr size) {
BsanAllocStack(prov, size);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE usize __bsan_retag(void *ptr,
u8 retag_kind,
u8 place_kind) {
return bsan_retag(ptr, retag_kind, place_kind);
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_dealloc(Provenance *prov) {
return BsanDealloc(prov);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_write(void *ptr,
u64 access_size) {
bsan_write(ptr, access_size);
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_expose_tag(Provenance const *prov) {
BsanExposeTag(prov);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_read(void *ptr,
u64 access_size) {
bsan_read(ptr, access_size);
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_read(Provenance const *prov, uptr ptr, uptr access_size) {
BsanRead(prov, ptr, access_size);
}

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_expose_tag(void *ptr) {
bsan_expose_tag(ptr);
extern "C" SANITIZER_INTERFACE_ATTRIBUTE void
__bsan_write(Provenance const *prov, uptr ptr, uptr access_size) {
BsanWrite(prov, ptr, access_size);
}
9 changes: 4 additions & 5 deletions compiler-rt/lib/bsan/bsan.h
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,16 @@
#include "bsan_rt.h"
#include "interception/interception.h"
#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_internal_defs.h"
#include "sanitizer_common/sanitizer_libc.h"
#include "sanitizer_common/sanitizer_platform.h"
#include "sanitizer_common/sanitizer_platform_interceptors.h"
#include "sanitizer_common/sanitizer_internal_defs.h"

using __sanitizer::uptr;

namespace __bsan {
extern bsan_rt::BsanAllocator gBsanAlloc;
extern bool bsan_initialized;
extern bool bsan_init_is_running;
void InitializeInterceptors();
extern const bsan_rt::BsanAllocHooks gBsanAllocHooks;
extern const bsan_rt::BsanHooks gBsanHooks;
} // namespace __bsan

extern "C" SANITIZER_INTERFACE_ATTRIBUTE void __bsan_preinit();
Expand Down
Loading