[llvm] r335681 - Revert "[asan] Instrument comdat globals on COFF targets"

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 20 14:00:04 PDT 2018


How can I reproduce the problem?

On Tue, Jun 26, 2018 at 3:48 PM Evgeniy Stepanov via llvm-commits <
llvm-commits at lists.llvm.org> wrote:

> Author: eugenis
> Date: Tue Jun 26 15:43:48 2018
> New Revision: 335681
>
> URL: http://llvm.org/viewvc/llvm-project?rev=335681&view=rev
> Log:
> Revert "[asan] Instrument comdat globals on COFF targets"
>
> Causes false positive ODR violation reports on __llvm_profile_raw_version.
>
> Removed:
>     llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll
> Modified:
>     llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp?rev=335681&r1=335680&r2=335681&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp
> (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/AddressSanitizer.cpp Tue Jun
> 26 15:43:48 2018
> @@ -1653,6 +1653,14 @@ bool AddressSanitizerModule::ShouldInstr
>    if (!Ty->isSized()) return false;
>    if (!G->hasInitializer()) return false;
>    if (GlobalWasGeneratedByCompiler(G)) return false; // Our own globals.
> +  // Touch only those globals that will not be defined in other modules.
> +  // Don't handle ODR linkage types and COMDATs since other modules may
> be built
> +  // without ASan.
> +  if (G->getLinkage() != GlobalVariable::ExternalLinkage &&
> +      G->getLinkage() != GlobalVariable::PrivateLinkage &&
> +      G->getLinkage() != GlobalVariable::InternalLinkage)
> +    return false;
> +  if (G->hasComdat()) return false;
>    // Two problems with thread-locals:
>    //   - The address of the main thread's copy can't be computed at
> link-time.
>    //   - Need to poison all copies, not just the main thread's one.
> @@ -1660,38 +1668,6 @@ bool AddressSanitizerModule::ShouldInstr
>    // For now, just ignore this Global if the alignment is large.
>    if (G->getAlignment() > MinRedzoneSizeForGlobal()) return false;
>
> -  // If we know this global is defined only in this module (external or
> static),
> -  // we can instrument it.
> -  if (G->getLinkage() != GlobalVariable::ExternalLinkage &&
> -      G->getLinkage() != GlobalVariable::PrivateLinkage &&
> -      G->getLinkage() != GlobalVariable::InternalLinkage) {
> -    // For targets that support comdats, we can instrument ODR globals in
> -    // comdats. We simply add our global metadata to the group and hope
> that an
> -    // instrumented global is selected.
> -    // FIXME: This should work on ELF, enable it there too.
> -    if (!TargetTriple.isOSBinFormatCOFF())
> -      return false;
> -    if (G->getLinkage() != GlobalVariable::WeakODRLinkage &&
> -        G->getLinkage() != GlobalVariable::LinkOnceODRLinkage)
> -      return false;
> -    if (!G->hasComdat())
> -      return false;
> -  }
> -
> -  // If a comdat is present, it must have a selection kind that implies
> ODR
> -  // semantics: no duplicates, any, or exact match.
> -  if (Comdat *C = G->getComdat()) {
> -    switch (C->getSelectionKind()) {
> -    case Comdat::Any:
> -    case Comdat::ExactMatch:
> -    case Comdat::NoDuplicates:
> -      break;
> -    case Comdat::Largest:
> -    case Comdat::SameSize:
> -      return false;
> -    }
> -  }
> -
>    if (G->hasSection()) {
>      StringRef Section = G->getSection();
>
> @@ -2145,7 +2121,6 @@ bool AddressSanitizerModule::InstrumentG
>          new GlobalVariable(M, NewTy, G->isConstant(), Linkage,
> NewInitializer,
>                             "", G, G->getThreadLocalMode());
>      NewGlobal->copyAttributesFrom(G);
> -    NewGlobal->setComdat(G->getComdat());
>      NewGlobal->setAlignment(MinRZ);
>
>      // Move null-terminated C strings to "__asan_cstring" section on
> Darwin.
>
> Removed:
> llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll?rev=335680&view=auto
>
> ==============================================================================
> --- llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll
> (original)
> +++ llvm/trunk/test/Instrumentation/AddressSanitizer/win-string-literal.ll
> (removed)
> @@ -1,46 +0,0 @@
> -; RUN: opt < %s -asan -asan-module -S | FileCheck %s
> -
> -; Generated like so:
> -; $ clang -S -emit-llvm -Xclang -disable-llvm-passes -fsanitize=address
> -O1 t.cpp -o t.ll
> -; const char *getstr() { return "asdf"; }
> -
> -; CHECK: $"??_C at _04JIHMPGLA@asdf?$AA@" = comdat any
> -
> -; CHECK: @"??_C at _04JIHMPGLA@asdf?$AA@" =
> -; CHECK-SAME: linkonce_odr dso_local unnamed_addr constant { [5 x i8],
> [59 x i8] }
> -; CHECK-SAME: { [5 x i8] c"asdf\00", [59 x i8] zeroinitializer }, comdat,
> align 32
> -
> -; CHECK: @"__asan_global_??_C at _04JIHMPGLA@asdf?$AA@" =
> -; CHECK-SAME: private global { i64, i64, i64, i64, i64, i64, i64, i64 }
> -; CHECK-SAME: { i64 ptrtoint ({ [5 x i8], [59 x i8] }* @"??_C@
> _04JIHMPGLA at asdf?$AA@" to i64),
> -; CHECK-SAME:   i64 5, i64 64, i64 ptrtoint ([17 x i8]* @__asan_gen_.1 to
> i64),
> -; CHECK-SAME:   i64 ptrtoint ([8 x i8]* @__asan_gen_ to i64), i64 0,
> -; CHECK-SAME:   i64 ptrtoint ({ [6 x i8]*, i32, i32 }* @__asan_gen_.3 to
> i64), i64 0 },
> -; CHECK-SAME:   section ".ASAN$GL", comdat($"??_C at _04JIHMPGLA@asdf?$AA@"),
> align 64
> -
> -; ModuleID = 't.cpp'
> -source_filename = "t.cpp"
> -target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
> -target triple = "x86_64-pc-windows-msvc19.13.26131"
> -
> -$"??_C at _04JIHMPGLA@asdf?$AA@" = comdat any
> -
> -@"??_C at _04JIHMPGLA@asdf?$AA@" = linkonce_odr dso_local unnamed_addr
> constant [5 x i8] c"asdf\00", comdat, align 1
> -
> -; Function Attrs: nounwind sanitize_address uwtable
> -define dso_local i8* @"?getstr@@YAPEBDXZ"() #0 {
> -entry:
> -  ret i8* getelementptr inbounds ([5 x i8], [5 x i8]* @"??_C@
> _04JIHMPGLA at asdf?$AA@", i32 0, i32 0)
> -}
> -
> -attributes #0 = { nounwind sanitize_address uwtable }
> -
> -!llvm.asan.globals = !{!0}
> -!llvm.module.flags = !{!2, !3}
> -!llvm.ident = !{!4}
> -
> -!0 = !{[5 x i8]* @"??_C at _04JIHMPGLA@asdf?$AA@", !1, !"<string literal>",
> i1 false, i1 false}
> -!1 = !{!"t.cpp", i32 1, i32 31}
> -!2 = !{i32 1, !"wchar_size", i32 2}
> -!3 = !{i32 7, !"PIC Level", i32 2}
> -!4 = !{!"clang version 7.0.0 "}
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at lists.llvm.org
> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20180820/b19185d2/attachment.html>


More information about the llvm-commits mailing list