From 9e4580c8ee94d3763542e100669c5b9e7cec1da5 Mon Sep 17 00:00:00 2001 From: Timur Iskhodzhanov Date: Tue, 15 Jul 2014 08:16:04 +0000 Subject: [PATCH] [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 llvm-svn: 213053 --- compiler-rt/lib/asan/CMakeLists.txt | 2 +- compiler-rt/lib/asan/asan_init_version.h | 11 +++-------- compiler-rt/lib/asan/asan_interface_internal.h | 6 ++++++ compiler-rt/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/compiler-rt/lib/asan/CMakeLists.txt b/compiler-rt/lib/asan/CMakeLists.txt index 69c0cd8..b23a7a2 100644 --- a/compiler-rt/lib/asan/CMakeLists.txt +++ b/compiler-rt/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/compiler-rt/lib/asan/asan_init_version.h b/compiler-rt/lib/asan/asan_init_version.h index 88eb80f..77aea81 100644 --- a/compiler-rt/lib/asan/asan_init_version.h +++ b/compiler-rt/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/compiler-rt/lib/asan/asan_interface_internal.h b/compiler-rt/lib/asan/asan_interface_internal.h index 32629ea..4d3d8bb 100644 --- a/compiler-rt/lib/asan/asan_interface_internal.h +++ b/compiler-rt/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/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h b/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h index 8832da0..c8985b49 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_internal_defs.h +++ b/compiler-rt/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/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c b/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c index e513954..92a1c4d 100644 --- a/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c +++ b/compiler-rt/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/compiler-rt/test/asan/TestCases/Linux/interface_symbols_linux.c b/compiler-rt/test/asan/TestCases/Linux/interface_symbols_linux.c index 72416f1..4743717 100644 --- a/compiler-rt/test/asan/TestCases/Linux/interface_symbols_linux.c +++ b/compiler-rt/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/(.*//" \ -- 2.7.4