[PATCH] D66826: [ASan] Make insertion of version mismatch guard configurable

Filipe Cabecinhas via llvm-commits llvm-commits at lists.llvm.org
Wed Aug 28 00:36:29 PDT 2019


when might we not want this? Can you add a comment, even if only on
phabricator?

Thank you,
 Filipe

On Tue, 27 Aug 2019 at 20:55, Julian Lettner via Phabricator <
reviews at reviews.llvm.org> wrote:

> yln created this revision.
> Herald added subscribers: llvm-commits, hiraditya.
> Herald added a project: LLVM.
> yln added reviewers: kubamracek, dcoughlin, delcypher, eugenis.
>
> By default ASan calls a versioned function
> `__asan_version_mismatch_check_vXXX` to ensure that the compiler ABI
> version and runtime ABI version are compatible. This ensures that we get
> a predictable linker error instead of hard-to-debug runtime errors.
>
> Sometimes, however, we want to skip this safety guard. This new command
> line option allows us to do just that.
>
> rdar://47891956
>
>
> Repository:
>   rG LLVM Github Monorepo
>
> https://reviews.llvm.org/D66826
>
> Files:
>   llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
>   llvm/test/Instrumentation/AddressSanitizer/version-mismatch-check.ll
>
>
> Index: llvm/test/Instrumentation/AddressSanitizer/version-mismatch-check.ll
> ===================================================================
> --- /dev/null
> +++ llvm/test/Instrumentation/AddressSanitizer/version-mismatch-check.ll
> @@ -0,0 +1,12 @@
> +; Check that the ASan module constructor guards against compiler/runtime
> version
> +; mismatch.
> +
> +; RUN: opt < %s -asan-module                                        -S |
> FileCheck %s
> +; RUN: opt < %s -asan-module -asan-guard-against-version-mismatch=0 -S |
> FileCheck %s --check-prefix=NOGUARD
> +
> +target datalayout =
> "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64"
> +target triple = "x86_64-unknown-linux-gnu"
> +
> +; CHECK-LABEL: define internal void @asan.module_ctor()
> +; CHECK:         call void @__asan_version_mismatch_check_v
> +; NOGUARD-NOT:   call void @__asan_version_mismatch_check_v
> Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
> ===================================================================
> --- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
> +++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
> @@ -193,6 +193,11 @@
>      cl::desc("Enable recovery mode (continue-after-error)."),
>      cl::Hidden, cl::init(false));
>
> +static cl::opt<bool> ClInsertVersionCheck(
> +    "asan-guard-against-version-mismatch",
> +    cl::desc("Guard against compiler/runtime version mismatch."),
> +    cl::Hidden, cl::init(true));
> +
>  // This flag may need to be replaced with -f[no-]asan-reads.
>  static cl::opt<bool> ClInstrumentReads("asan-instrument-reads",
>                                         cl::desc("instrument read
> instructions"),
> @@ -2426,8 +2431,9 @@
>
>    // Create a module constructor. A destructor is created lazily because
> not all
>    // platforms, and not all modules need it.
> +  std::string AsanVersion = std::to_string(GetAsanVersion(M));
>    std::string VersionCheckName =
> -      kAsanVersionCheckNamePrefix + std::to_string(GetAsanVersion(M));
> +      ClInsertVersionCheck ? (kAsanVersionCheckNamePrefix + AsanVersion)
> : "";
>    std::tie(AsanCtorFunction, std::ignore) =
> createSanitizerCtorAndInitFunctions(
>        M, kAsanModuleCtorName, kAsanInitName, /*InitArgTypes=*/{},
>        /*InitArgs=*/{}, VersionCheckName);
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190828/db99d228/attachment.html>


More information about the llvm-commits mailing list