summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTimur Iskhodzhanov <timurrrr@google.com>2014-07-10 10:33:48 +0000
committerTimur Iskhodzhanov <timurrrr@google.com>2014-07-10 10:33:48 +0000
commit3eb1f4bb9096d26132f3e524ca3908fcc90b22f8 (patch)
treea18a03049e331174153c808cc91fe3e2c7394465
parent3b9a93498bd67a92e669da0ee11f6af2ac32f85e (diff)
downloadbcm5719-llvm-3eb1f4bb9096d26132f3e524ca3908fcc90b22f8.tar.gz
bcm5719-llvm-3eb1f4bb9096d26132f3e524ca3908fcc90b22f8.zip
[ASan/Win] Don't hardcode ASan runtime version in ASan dll thunk
Reviewed at http://reviews.llvm.org/D4459 llvm-svn: 212699
-rw-r--r--compiler-rt/lib/asan/asan_dll_thunk.cc9
-rw-r--r--compiler-rt/lib/asan/asan_init_version.h37
-rw-r--r--compiler-rt/lib/asan/asan_interface_internal.h16
-rw-r--r--compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c1
-rw-r--r--compiler-rt/test/asan/TestCases/Linux/interface_symbols_linux.c1
5 files changed, 46 insertions, 18 deletions
diff --git a/compiler-rt/lib/asan/asan_dll_thunk.cc b/compiler-rt/lib/asan/asan_dll_thunk.cc
index 7b6ccc6a645..a3fbb27b36e 100644
--- a/compiler-rt/lib/asan/asan_dll_thunk.cc
+++ b/compiler-rt/lib/asan/asan_dll_thunk.cc
@@ -20,6 +20,7 @@
// Using #ifdef rather than relying on Makefiles etc.
// simplifies the build procedure.
#ifdef ASAN_DLL_THUNK
+#include "asan_init_version.h"
#include "sanitizer_common/sanitizer_interception.h"
// ---------- Function interception helper functions and macros ----------- {{{1
@@ -203,13 +204,13 @@ extern "C" {
// Manually wrap __asan_init as we need to initialize
// __asan_option_detect_stack_use_after_return afterwards.
- void __asan_init_v4() {
+ void __asan_init() {
typedef void (*fntype)();
static fntype fn = 0;
- // __asan_init_v4 is expected to be called by only one thread.
+ // __asan_init is expected to be called by only one thread.
if (fn) return;
- fn = (fntype)getRealProcAddressOrDie("__asan_init_v4");
+ fn = (fntype)getRealProcAddressOrDie(__asan_init_name);
fn();
__asan_option_detect_stack_use_after_return =
(__asan_should_detect_stack_use_after_return() != 0);
@@ -339,7 +340,7 @@ void InterceptHooks() {
// In DLLs, the callbacks are expected to return 0,
// otherwise CRT initialization fails.
static int call_asan_init() {
- __asan_init_v4();
+ __asan_init();
return 0;
}
#pragma section(".CRT$XIB", long, read) // NOLINT
diff --git a/compiler-rt/lib/asan/asan_init_version.h b/compiler-rt/lib/asan/asan_init_version.h
new file mode 100644
index 00000000000..88eb80fedcc
--- /dev/null
+++ b/compiler-rt/lib/asan/asan_init_version.h
@@ -0,0 +1,37 @@
+//===-- asan_init_version.h -------------------------------------*- C++ -*-===//
+//
+// The LLVM Compiler Infrastructure
+//
+// This file is distributed under the University of Illinois Open Source
+// License. See LICENSE.TXT for details.
+//
+//===----------------------------------------------------------------------===//
+//
+// This file is a part of AddressSanitizer, an address sanity checker.
+//
+// This header defines a versioned __asan_init function to be called at the
+// startup of the instrumented program.
+//===----------------------------------------------------------------------===//
+#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.
+ // 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"
+}
+
+#endif // ASAN_INIT_VERSION_H
diff --git a/compiler-rt/lib/asan/asan_interface_internal.h b/compiler-rt/lib/asan/asan_interface_internal.h
index 9395341704d..32629ea3126 100644
--- a/compiler-rt/lib/asan/asan_interface_internal.h
+++ b/compiler-rt/lib/asan/asan_interface_internal.h
@@ -17,23 +17,11 @@
#include "sanitizer_common/sanitizer_internal_defs.h"
+#include "asan_init_version.h"
+
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.
- // 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.
- // 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
-
// 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/test/asan/TestCases/Darwin/interface_symbols_darwin.c b/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c
index ea3e796ea3b..e513954c941 100644
--- a/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c
+++ b/compiler-rt/test/asan/TestCases/Darwin/interface_symbols_darwin.c
@@ -16,6 +16,7 @@
// 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 d496d95a4f1..72416f17fbf 100644
--- a/compiler-rt/test/asan/TestCases/Linux/interface_symbols_linux.c
+++ b/compiler-rt/test/asan/TestCases/Linux/interface_symbols_linux.c
@@ -9,6 +9,7 @@
// 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/(.*//" \
OpenPOWER on IntegriCloud