[compiler-rt] r298159 - [asan] Fix dead stripping of globals on Linux (compiler-rt)
Yung, Douglas via llvm-commits
llvm-commits at lists.llvm.org
Fri Mar 17 17:03:21 PDT 2017
Hi Evgeniy,
Your change here seems to be breaking our internal linux bot when trying to run cmake.
Command: cmake -G Ninja -DLLVM_ENABLE_ASSERTIONS=ON -DLLVM_INCLUDE_EXAMPLES=OFF -DLLVM_ENABLE_TIMESTAMPS=OFF -DLLVM_VERSION_SUFFIX= -DLLVM_BUILD_RUNTIME=ON -DLLVM_LIT_ARGS=--verbose --no-progress-bar --xunit-xml-output=xunit.xml -DCMAKE_BUILD_TYPE=Release -DLLVM_TOOL_LLD_BUILD=OFF ../llvm
CMake output:
...
CMake Error at cmake/modules/AddLLVM.cmake:1174 (add_dependencies):
The dependency target "lld" of target "check-all" does not exist.
Call Stack (most recent call first):
CMakeLists.txt:900 (add_lit_target)
CMake Error at cmake/modules/AddLLVM.cmake:1174 (add_dependencies):
The dependency target "lld" of target "check-asan-dynamic" does not exist.
Call Stack (most recent call first):
cmake/modules/AddLLVM.cmake:1195 (add_lit_target)
projects/compiler-rt/test/asan/CMakeLists.txt:101 (add_lit_testsuite)
CMake Error at cmake/modules/AddLLVM.cmake:1174 (add_dependencies):
The dependency target "lld" of target "check-asan" does not exist.
Call Stack (most recent call first):
cmake/modules/AddLLVM.cmake:1195 (add_lit_target)
projects/compiler-rt/test/asan/CMakeLists.txt:89 (add_lit_testsuite)
I don't know if it makes a difference, but we do have the LLD sources in our tree, however we are not building them at this time. Could that be what is happening here?
Douglas Yung
> -----Original Message-----
> From: llvm-commits [mailto:llvm-commits-bounces at lists.llvm.org] On Behalf Of
> Evgeniy Stepanov via llvm-commits
> Sent: Friday, March 17, 2017 15:18
> To: llvm-commits at lists.llvm.org
> Subject: [compiler-rt] r298159 - [asan] Fix dead stripping of globals on Linux
> (compiler-rt)
>
> Author: eugenis
> Date: Fri Mar 17 17:17:38 2017
> New Revision: 298159
>
> URL: http://llvm.org/viewvc/llvm-project?rev=298159&view=rev
> Log:
> [asan] Fix dead stripping of globals on Linux (compiler-rt)
>
> Runtime support for the new instrumentation of globals based on !associated,
> and a bunch of tests.
>
> Differential Revision: https://reviews.llvm.org/D30120
>
> Added:
> compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-bfd.cc
> compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-lld.cc
> compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections-lld.cc
> Modified:
> compiler-rt/trunk/lib/asan/asan_globals.cc
> compiler-rt/trunk/lib/asan/asan_interface.inc
> compiler-rt/trunk/lib/asan/asan_interface_internal.h
> compiler-rt/trunk/test/asan/CMakeLists.txt
> compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections.cc
>
> Modified: compiler-rt/trunk/lib/asan/asan_globals.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-
> rt/trunk/lib/asan/asan_globals.cc?rev=298159&r1=298158&r2=298159&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_globals.cc (original)
> +++ compiler-rt/trunk/lib/asan/asan_globals.cc Fri Mar 17 17:17:38 2017
> @@ -332,6 +332,26 @@ void __asan_unregister_image_globals(upt
> *flag = 0;
> }
>
> +void __asan_register_elf_globals(uptr *flag, void *start, void *stop) {
> + if (*flag) return;
> + if (!start) return;
> + CHECK_EQ(0, ((uptr)stop - (uptr)start) % sizeof(__asan_global));
> + __asan_global *globals_start = (__asan_global*)start;
> + __asan_global *globals_stop = (__asan_global*)stop;
> + __asan_register_globals(globals_start, globals_stop - globals_start);
> + *flag = 1;
> +}
> +
> +void __asan_unregister_elf_globals(uptr *flag, void *start, void *stop)
> +{
> + if (!*flag) return;
> + if (!start) return;
> + CHECK_EQ(0, ((uptr)stop - (uptr)start) % sizeof(__asan_global));
> + __asan_global *globals_start = (__asan_global*)start;
> + __asan_global *globals_stop = (__asan_global*)stop;
> + __asan_unregister_globals(globals_start, globals_stop -
> +globals_start);
> + *flag = 0;
> +}
> +
> // Register an array of globals.
> void __asan_register_globals(__asan_global *globals, uptr n) {
> if (!flags()->report_globals) return;
>
> Modified: compiler-rt/trunk/lib/asan/asan_interface.inc
> URL: http://llvm.org/viewvc/llvm-project/compiler-
> rt/trunk/lib/asan/asan_interface.inc?rev=298159&r1=298158&r2=298159&view=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_interface.inc (original)
> +++ compiler-rt/trunk/lib/asan/asan_interface.inc Fri Mar 17 17:17:38
> +++ 2017
> @@ -64,6 +64,7 @@ INTERFACE_FUNCTION(__asan_poison_stack_m
> INTERFACE_FUNCTION(__asan_print_accumulated_stats)
> INTERFACE_FUNCTION(__asan_region_is_poisoned)
> INTERFACE_FUNCTION(__asan_register_globals)
> +INTERFACE_FUNCTION(__asan_register_elf_globals)
> INTERFACE_FUNCTION(__asan_register_image_globals)
> INTERFACE_FUNCTION(__asan_report_error)
> INTERFACE_FUNCTION(__asan_report_exp_load1)
> @@ -149,6 +150,7 @@ INTERFACE_FUNCTION(__asan_unpoison_intra
> INTERFACE_FUNCTION(__asan_unpoison_memory_region)
> INTERFACE_FUNCTION(__asan_unpoison_stack_memory)
> INTERFACE_FUNCTION(__asan_unregister_globals)
> +INTERFACE_FUNCTION(__asan_unregister_elf_globals)
> INTERFACE_FUNCTION(__asan_unregister_image_globals)
> INTERFACE_FUNCTION(__asan_version_mismatch_check_v8)
> INTERFACE_FUNCTION(__sanitizer_finish_switch_fiber)
>
> 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=298159&r1=298158&r2=298159&vie
> w=diff
> ==============================================================================
> --- compiler-rt/trunk/lib/asan/asan_interface_internal.h (original)
> +++ compiler-rt/trunk/lib/asan/asan_interface_internal.h Fri Mar 17
> +++ 17:17:38 2017
> @@ -67,6 +67,11 @@ extern "C" {
> SANITIZER_INTERFACE_ATTRIBUTE
> void __asan_unregister_image_globals(uptr *flag);
>
> + SANITIZER_INTERFACE_ATTRIBUTE
> + void __asan_register_elf_globals(uptr *flag, void *start, void
> + *stop); SANITIZER_INTERFACE_ATTRIBUTE void
> + __asan_unregister_elf_globals(uptr *flag, void *start, void *stop);
> +
> // These two functions should be called by the instrumented code.
> // 'globals' is an array of structures describing 'n' globals.
> SANITIZER_INTERFACE_ATTRIBUTE
>
> Modified: compiler-rt/trunk/test/asan/CMakeLists.txt
> URL: http://llvm.org/viewvc/llvm-project/compiler-
> rt/trunk/test/asan/CMakeLists.txt?rev=298159&r1=298158&r2=298159&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/asan/CMakeLists.txt (original)
> +++ compiler-rt/trunk/test/asan/CMakeLists.txt Fri Mar 17 17:17:38 2017
> @@ -16,7 +16,7 @@ endmacro()
> set(ASAN_TEST_DEPS ${SANITIZER_COMMON_LIT_TEST_DEPS})
> if(NOT COMPILER_RT_STANDALONE_BUILD)
> list(APPEND ASAN_TEST_DEPS asan)
> - if(WIN32 AND COMPILER_RT_HAS_LLD_SOURCES)
> + if(NOT APPLE AND COMPILER_RT_HAS_LLD_SOURCES)
> list(APPEND ASAN_TEST_DEPS
> lld
> )
>
> Added: compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-bfd.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-
> rt/trunk/test/asan/TestCases/Linux/global-overflow-bfd.cc?rev=298159&view=auto
> ==============================================================================
> --- compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-bfd.cc (added)
> +++ compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-bfd.cc
> +++ Fri Mar 17 17:17:38 2017
> @@ -0,0 +1,18 @@
> +// Test that gc-sections-friendly instrumentation of globals does not
> +introduce // false negatives with the BFD linker.
> +// RUN: %clangxx_asan -fuse-ld=bfd -Wl,-gc-sections -ffunction-sections
> +-fdata-sections -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s
> +
> +#include <string.h>
> +int main(int argc, char **argv) {
> + static char XXX[10];
> + static char YYY[10];
> + static char ZZZ[10];
> + memset(XXX, 0, 10);
> + memset(YYY, 0, 10);
> + memset(ZZZ, 0, 10);
> + int res = YYY[argc * 10]; // BOOOM
> + // CHECK: {{READ of size 1 at}}
> + // CHECK: {{located 0 bytes to the right of global variable}}
> + res += XXX[argc] + ZZZ[argc];
> + return res;
> +}
>
> Added: compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-lld.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-
> rt/trunk/test/asan/TestCases/Linux/global-overflow-lld.cc?rev=298159&view=auto
> ==============================================================================
> --- compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-lld.cc (added)
> +++ compiler-rt/trunk/test/asan/TestCases/Linux/global-overflow-lld.cc
> +++ Fri Mar 17 17:17:38 2017
> @@ -0,0 +1,19 @@
> +// Test that gc-sections-friendly instrumentation of globals does not
> +introduce // false negatives with the LLD linker.
> +// RUN: %clangxx_asan -fuse-ld=lld -Wl,-gc-sections -ffunction-sections
> +-fdata-sections -O0 %s -o %t && not %run %t 2>&1 | FileCheck %s //
> +REQUIRES: lld
> +
> +#include <string.h>
> +int main(int argc, char **argv) {
> + static char XXX[10];
> + static char YYY[10];
> + static char ZZZ[10];
> + memset(XXX, 0, 10);
> + memset(YYY, 0, 10);
> + memset(ZZZ, 0, 10);
> + int res = YYY[argc * 10]; // BOOOM
> + // CHECK: {{READ of size 1 at}}
> + // CHECK: {{located 0 bytes to the right of global variable}}
> + res += XXX[argc] + ZZZ[argc];
> + return res;
> +}
>
> Added: compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections-lld.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-
> rt/trunk/test/asan/TestCases/Linux/globals-gc-sections-
> lld.cc?rev=298159&view=auto
> ==============================================================================
> --- compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections-lld.cc
> (added)
> +++ compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections-lld.
> +++ cc Fri Mar 17 17:17:38 2017
> @@ -0,0 +1,15 @@
> +// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -fuse-ld=lld
> +-ffunction-sections -fdata-sections -mllvm -asan-globals=0 // RUN:
> +%clangxx_asan %s -o %t -Wl,--gc-sections -fuse-ld=lld
> +-ffunction-sections -fdata-sections -mllvm -asan-globals=1
> +
> +// https://code.google.com/p/address-sanitizer/issues/detail?id=260
> +// REQUIRES: lld
> +
> +int undefined();
> +
> +// On i386 clang adds --export-dynamic when linking with ASan, which
> +adds all // non-hidden globals to GC roots.
> +__attribute__((visibility("hidden"))) int (*unused)() = undefined;
> +
> +int main() {
> + return 0;
> +}
>
> Modified: compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections.cc
> URL: http://llvm.org/viewvc/llvm-project/compiler-
> rt/trunk/test/asan/TestCases/Linux/globals-gc-
> sections.cc?rev=298159&r1=298158&r2=298159&view=diff
> ==============================================================================
> --- compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections.cc
> (original)
> +++ compiler-rt/trunk/test/asan/TestCases/Linux/globals-gc-sections.cc
> +++ Fri Mar 17 17:17:38 2017
> @@ -1,12 +1,18 @@
> -// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -ffunction-sections -mllvm -
> asan-globals=0 -// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -ffunction-
> sections -mllvm -asan-globals=1
> +// RUN: %clangxx_asan %s -o %t -Wl,--gc-sections -fuse-ld=bfd
> +-ffunction-sections -fdata-sections -mllvm -asan-globals=0 // RUN:
> +%clangxx_asan %s -o %t -Wl,--gc-sections -fuse-ld=bfd
> +-ffunction-sections -fdata-sections -mllvm -asan-globals=1
>
> // https://code.google.com/p/address-sanitizer/issues/detail?id=260
> -// XFAIL: *
>
> int undefined();
>
> -int (*unused)() = undefined;
> +// bug in ld.bfd: with multiple "asan_globals" sections,
> +__start_asan_globals is // treated as a strong GC reference to the
> +first such section. As a result, the // first (for some definition of the
> word) global is never gc-ed.
> +int first_unused = 42;
> +
> +// On i386 clang adds --export-dynamic when linking with ASan, which
> +adds all // non-hidden globals to GC roots.
> +__attribute__((visibility("hidden"))) int (*unused)() = undefined;
>
> int main() {
> return 0;
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
More information about the llvm-commits
mailing list