[compiler-rt] r212699 - [ASan/Win] Don't hardcode ASan runtime version in ASan dll thunk

Alexey Samsonov vonosmas at gmail.com
Thu Jul 10 10:36:05 PDT 2014


Thanks!


On Thu, Jul 10, 2014 at 3:33 AM, Timur Iskhodzhanov <timurrrr at google.com>
wrote:

> Author: timurrrr
> Date: Thu Jul 10 05:33:48 2014
> New Revision: 212699
>
> URL: http://llvm.org/viewvc/llvm-project?rev=212699&view=rev
> Log:
> [ASan/Win] Don't hardcode ASan runtime version in ASan dll thunk
>
> Reviewed at http://reviews.llvm.org/D4459
>
> Added:
>     compiler-rt/trunk/lib/asan/asan_init_version.h
> Modified:
>     compiler-rt/trunk/lib/asan/asan_dll_thunk.cc
>     compiler-rt/trunk/lib/asan/asan_interface_internal.h
>     compiler-rt/trunk/test/asan/TestCases/Darwin/interface_symbols_darwin.c
>     compiler-rt/trunk/test/asan/TestCases/Linux/interface_symbols_linux.c
>
> Modified: compiler-rt/trunk/lib/asan/asan_dll_thunk.cc
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_dll_thunk.cc?rev=212699&r1=212698&r2=212699&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_dll_thunk.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_dll_thunk.cc Thu Jul 10 05:33:48 2014
> @@ -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
>
> Added: compiler-rt/trunk/lib/asan/asan_init_version.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_init_version.h?rev=212699&view=auto
>
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_init_version.h (added)
> +++ compiler-rt/trunk/lib/asan/asan_init_version.h Thu Jul 10 05:33:48 2014
> @@ -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
>
> Modified: compiler-rt/trunk/lib/asan/asan_interface_internal.h
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/asan/asan_interface_internal.h?rev=212699&r1=212698&r2=212699&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_interface_internal.h (original)
> +++ compiler-rt/trunk/lib/asan/asan_interface_internal.h Thu Jul 10
> 05:33:48 2014
> @@ -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 {
>
> Modified:
> compiler-rt/trunk/test/asan/TestCases/Darwin/interface_symbols_darwin.c
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Darwin/interface_symbols_darwin.c?rev=212699&r1=212698&r2=212699&view=diff
>
> ==============================================================================
> ---
> compiler-rt/trunk/test/asan/TestCases/Darwin/interface_symbols_darwin.c
> (original)
> +++
> compiler-rt/trunk/test/asan/TestCases/Darwin/interface_symbols_darwin.c Thu
> Jul 10 05:33:48 2014
> @@ -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/(.*//" \
>
> Modified:
> compiler-rt/trunk/test/asan/TestCases/Linux/interface_symbols_linux.c
> URL:
> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Linux/interface_symbols_linux.c?rev=212699&r1=212698&r2=212699&view=diff
>
> ==============================================================================
> --- compiler-rt/trunk/test/asan/TestCases/Linux/interface_symbols_linux.c
> (original)
> +++ compiler-rt/trunk/test/asan/TestCases/Linux/interface_symbols_linux.c
> Thu Jul 10 05:33:48 2014
> @@ -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/(.*//" \
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>



-- 
Alexey Samsonov
vonosmas at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20140710/dcd3a1cc/attachment.html>


More information about the llvm-commits mailing list