Skip to content
This repository has been archived by the owner on Mar 28, 2020. It is now read-only.

Commit

Permalink
[asan] Enable -asan-use-private-alias on Darwin/Mach-O, add test for …
Browse files Browse the repository at this point in the history
…ODR false positive with LTO (compiler-rt part)

The '-asan-use-private-alias’ option (disabled by default) option is currently only enabled for Linux and ELF, but it also works on Darwin and Mach-O. This option also fixes a known problem with LTO on Darwin (google/sanitizers#647). This patch enables the support for Darwin (but still keeps it off by default) and adds the LTO test case.

Differential Revision: https://reviews.llvm.org/D24292



git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@281472 91177308-0d34-0410-b5e6-96231b3b80d8
  • Loading branch information
kubamracek committed Nov 7, 2016
1 parent a34ebce commit c888cad
Show file tree
Hide file tree
Showing 3 changed files with 44 additions and 1 deletion.
41 changes: 41 additions & 0 deletions test/asan/TestCases/Darwin/odr-lto.cc
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
// Check that -asan-use-private-alias and use_odr_indicator=1 silence the false
// positive ODR violation on Darwin with LTO.

// REQUIRES: lto

// RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto
// RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto
// RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto
// RUN: not %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-ODR

// RUN: %clangxx_asan -DPART=0 -c %s -o %t-1.o -flto -mllvm -asan-use-private-alias
// RUN: %clangxx_asan -DPART=1 -c %s -o %t-2.o -flto -mllvm -asan-use-private-alias
// RUN: %clangxx_asan %t-1.o %t-2.o -o %t -flto
// RUN: %env_asan_opts=use_odr_indicator=1 %run %t 2>&1 | FileCheck %s --check-prefix=CHECK-NO-ODR

#include <stdio.h>
#include <stdlib.h>
void putstest();

#if PART == 1

int main()
{
fputs("test\n", stderr);
putstest();
fprintf(stderr, "Done.\n");
return 0;
}

#else // PART == 1

void putstest()
{
fputs("test\n", stderr);
}

#endif // PART == 1

// CHECK-ODR: ERROR: AddressSanitizer: odr-violation
// CHECK-NO-ODR-NOT: ERROR: AddressSanitizer: odr-violation
// CHECK-NO-ODR: Done.
3 changes: 3 additions & 0 deletions test/lit.common.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -178,6 +178,9 @@ elif config.host_os == 'Windows' and is_windows_lto_supported():
else:
config.lto_supported = False

if config.lto_supported:
config.available_features.add('lto')

# Ask llvm-config about assertion mode.
try:
llvm_config_cmd = subprocess.Popen(
Expand Down
1 change: 0 additions & 1 deletion test/safestack/lit.cfg
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,6 @@ config.substitutions.append( ("%clang_nosafestack ", config.clang + " -O0 -fno-s
config.substitutions.append( ("%clang_safestack ", config.clang + " -O0 -fsanitize=safe-stack ") )

if config.lto_supported:
config.available_features.add('lto')
config.substitutions.append((r"%clang_lto_safestack ", ' '.join(config.lto_launch + [config.clang] + config.lto_flags + ['-flto -fsanitize=safe-stack '])))

# SafeStack tests are currently supported on Linux, FreeBSD and Darwin only.
Expand Down

0 comments on commit c888cad

Please sign in to comment.