From f3d3ffdce51a40fabb996d5e58f45ba6f5a3e7f5 Mon Sep 17 00:00:00 2001 From: Timur Iskhodzhanov Date: Tue, 15 Jul 2014 08:16:04 +0000 Subject: [ASan] Only define macros in asan_init_version.h, move the __asan_init declaration back to asan_interface_internal.h This fixes the issues we've uncovered after landing r212815. Reviewed at http://reviews.llvm.org/D4500 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@213053 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/asan/CMakeLists.txt | 2 +- lib/asan/asan_init_version.h | 11 +++-------- lib/asan/asan_interface_internal.h | 6 ++++++ lib/sanitizer_common/sanitizer_internal_defs.h | 6 +----- test/asan/TestCases/Darwin/interface_symbols_darwin.c | 2 +- test/asan/TestCases/Linux/interface_symbols_linux.c | 2 +- 6 files changed, 13 insertions(+), 16 deletions(-) diff --git a/lib/asan/CMakeLists.txt b/lib/asan/CMakeLists.txt index 69c0cd8c2..b23a7a2e5 100644 --- a/lib/asan/CMakeLists.txt +++ b/lib/asan/CMakeLists.txt @@ -179,7 +179,7 @@ else() add_compiler_rt_runtime(clang_rt.asan_dll_thunk-${arch} ${arch} STATIC SOURCES asan_dll_thunk.cc $ - CFLAGS ${ASAN_CFLAGS} -DASAN_DLL_THUNK -DSANITIZER_DLL_THUNK + CFLAGS ${ASAN_CFLAGS} -DASAN_DLL_THUNK DEFS ${ASAN_COMMON_DEFINITIONS}) add_dependencies(asan clang_rt.asan_dll_thunk-${arch}) endif() diff --git a/lib/asan/asan_init_version.h b/lib/asan/asan_init_version.h index 88eb80fed..77aea81bd 100644 --- a/lib/asan/asan_init_version.h +++ b/lib/asan/asan_init_version.h @@ -15,21 +15,16 @@ #ifndef ASAN_INIT_VERSION_H #define ASAN_INIT_VERSION_H -#include "sanitizer_common/sanitizer_internal_defs.h" - 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. - // Every time the ASan ABI changes we also change the version number in this - // name. Objects build with incompatible ASan ABI version - // will not link with run-time. + // Every time the ASan ABI changes we also change the version number in the + // __asan_init function name. Objects built with incompatible ASan ABI + // versions will not link with run-time. // Changes between ABI versions: // v1=>v2: added 'module_name' to __asan_global // v2=>v3: stack frame description (created by the compiler) // contains the function PC as the 3-rd field (see // DescribeAddressIfStack). // v3=>v4: added '__asan_global_source_location' to __asan_global. - SANITIZER_INTERFACE_ATTRIBUTE void __asan_init_v4(); #define __asan_init __asan_init_v4 #define __asan_init_name "__asan_init_v4" } diff --git a/lib/asan/asan_interface_internal.h b/lib/asan/asan_interface_internal.h index 32629ea31..4d3d8bb4d 100644 --- a/lib/asan/asan_interface_internal.h +++ b/lib/asan/asan_interface_internal.h @@ -22,6 +22,12 @@ using __sanitizer::uptr; 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. + // Please note that __asan_init is a macro that is replaced with + // __asan_init_vXXX at compile-time. + SANITIZER_INTERFACE_ATTRIBUTE void __asan_init(); + // This structure is used to describe the source location of a place where // global was defined. struct __asan_global_source_location { diff --git a/lib/sanitizer_common/sanitizer_internal_defs.h b/lib/sanitizer_common/sanitizer_internal_defs.h index 8832da069..c8985b49e 100644 --- a/lib/sanitizer_common/sanitizer_internal_defs.h +++ b/lib/sanitizer_common/sanitizer_internal_defs.h @@ -17,11 +17,7 @@ // Only use SANITIZER_*ATTRIBUTE* before the function return type! #if SANITIZER_WINDOWS -# if defined(SANITIZER_DLL_THUNK) -# define SANITIZER_INTERFACE_ATTRIBUTE -# else -# define SANITIZER_INTERFACE_ATTRIBUTE __declspec(dllexport) -# endif +# define SANITIZER_INTERFACE_ATTRIBUTE __declspec(dllexport) // FIXME find out what we need on Windows, if anything. # define SANITIZER_WEAK_ATTRIBUTE #elif defined(SANITIZER_GO) diff --git a/test/asan/TestCases/Darwin/interface_symbols_darwin.c b/test/asan/TestCases/Darwin/interface_symbols_darwin.c index e513954c9..92a1c4d3e 100644 --- a/test/asan/TestCases/Darwin/interface_symbols_darwin.c +++ b/test/asan/TestCases/Darwin/interface_symbols_darwin.c @@ -10,13 +10,13 @@ // RUN: sed "s/.dylib.*/.dylib/"` \ // RUN: | grep " T " | sed "s/.* T //" \ // RUN: | grep "__asan_" | sed "s/___asan_/__asan_/" \ +// RUN: | sed "s/__asan_init_v[0-9]\+/__asan_init/" \ // RUN: | grep -v "__asan_malloc_hook" \ // RUN: | grep -v "__asan_free_hook" \ // RUN: | grep -v "__asan_default_options" \ // RUN: | grep -v "__asan_on_error" > %t.symbols // RUN: cat %p/../../../../lib/asan/asan_interface_internal.h \ -// RUN: %p/../../../../lib/asan/asan_init_version.h \ // RUN: | sed "s/\/\/.*//" | sed "s/typedef.*//" \ // RUN: | grep -v "OPTIONAL" \ // RUN: | grep "__asan_.*(" | sed "s/.* __asan_/__asan_/;s/(.*//" \ diff --git a/test/asan/TestCases/Linux/interface_symbols_linux.c b/test/asan/TestCases/Linux/interface_symbols_linux.c index 72416f17f..474371731 100644 --- a/test/asan/TestCases/Linux/interface_symbols_linux.c +++ b/test/asan/TestCases/Linux/interface_symbols_linux.c @@ -3,13 +3,13 @@ // RUN: %clang_asan -O2 %s -o %t.exe // RUN: nm -D %t.exe | grep " T " | sed "s/.* T //" \ // RUN: | grep "__asan_" | sed "s/___asan_/__asan_/" \ +// RUN: | sed "s/__asan_init_v[0-9]\+/__asan_init/" \ // RUN: | grep -v "__asan_malloc_hook" \ // RUN: | grep -v "__asan_free_hook" \ // RUN: | grep -v "__asan_default_options" \ // RUN: | grep -v "__asan_stack_" \ // RUN: | grep -v "__asan_on_error" > %t.symbols // RUN: cat %p/../../../../lib/asan/asan_interface_internal.h \ -// RUN: %p/../../../../lib/asan/asan_init_version.h \ // RUN: | sed "s/\/\/.*//" | sed "s/typedef.*//" \ // RUN: | grep -v "OPTIONAL" \ // RUN: | grep "__asan_.*(" | sed "s/.* __asan_/__asan_/;s/(.*//" \ -- cgit v1.2.1