[llvm] r341082 - [libFuzzer] Port to Windows
Kostya Serebryany via llvm-commits
llvm-commits at lists.llvm.org
Thu Oct 11 18:23:11 PDT 2018
This patch seem to have two nearly-identical sections starting from a
comment "Account for the fact that on windows-msvc"
Is it possible to account for any such fact just once?
On Thu, Aug 30, 2018 at 8:55 AM Matt Morehouse via llvm-commits <
llvm-commits at lists.llvm.org> wrote:
> Author: morehouse
> Date: Thu Aug 30 08:54:44 2018
> New Revision: 341082
>
> URL: http://llvm.org/viewvc/llvm-project?rev=341082&view=rev
> Log:
> [libFuzzer] Port to Windows
>
> Summary:
> Port libFuzzer to windows-msvc.
> This patch allows libFuzzer targets to be built and run on Windows, using
> -fsanitize=fuzzer and/or fsanitize=fuzzer-no-link. It allows these forms of
> coverage instrumentation to work on Windows as well.
> It does not fix all issues, such as those with
> -fsanitize-coverage=stack-depth, which is not usable on Windows as of this
> patch.
> It also does not fix any libFuzzer integration tests. Nearly all of them
> fail to compile, fixing them will come in a later patch, so libFuzzer tests
> are disabled on Windows until them.
>
> Patch By: metzman
>
> Reviewers: morehouse, rnk
>
> Reviewed By: morehouse, rnk
>
> Subscribers: #sanitizers, delcypher, morehouse, kcc, eraman
>
> Differential Revision: https://reviews.llvm.org/D51022
>
> Added:
>
> llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll
> Modified:
> llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
>
> Modified: llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp?rev=341082&r1=341081&r2=341082&view=diff
>
> ==============================================================================
> --- llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp
> (original)
> +++ llvm/trunk/lib/Transforms/Instrumentation/SanitizerCoverage.cpp Thu
> Aug 30 08:54:44 2018
> @@ -273,9 +273,20 @@ Function *SanitizerCoverageModule::Creat
> auto SecStart = SecStartEnd.first;
> auto SecEnd = SecStartEnd.second;
> Function *CtorFunc;
> + Value *SecStartPtr = nullptr;
> + // Account for the fact that on windows-msvc __start_* symbols actually
> + // point to a uint64_t before the start of the array.
> + if (TargetTriple.getObjectFormat() == Triple::COFF) {
> + auto SecStartI8Ptr = IRB.CreatePointerCast(SecStart, Int8PtrTy);
> + auto GEP = IRB.CreateGEP(SecStartI8Ptr,
> + ConstantInt::get(IntptrTy,
> sizeof(uint64_t)));
> + SecStartPtr = IRB.CreatePointerCast(GEP, Ty);
> + } else {
> + SecStartPtr = IRB.CreatePointerCast(SecStart, Ty);
> + }
> std::tie(CtorFunc, std::ignore) = createSanitizerCtorAndInitFunctions(
> M, SanCovModuleCtorName, InitFunctionName, {Ty, Ty},
> - {IRB.CreatePointerCast(SecStart, Ty), IRB.CreatePointerCast(SecEnd,
> Ty)});
> + {SecStartPtr, IRB.CreatePointerCast(SecEnd, Ty)});
>
> if (TargetTriple.supportsCOMDAT()) {
> // Use comdat to dedup CtorFunc.
> @@ -397,9 +408,20 @@ bool SanitizerCoverageModule::runOnModul
> Function *InitFunction = declareSanitizerInitFunction(
> M, SanCovPCsInitName, {IntptrPtrTy, IntptrPtrTy});
> IRBuilder<> IRBCtor(Ctor->getEntryBlock().getTerminator());
> - IRBCtor.CreateCall(InitFunction,
> - {IRB.CreatePointerCast(SecStartEnd.first,
> IntptrPtrTy),
> - IRB.CreatePointerCast(SecStartEnd.second,
> IntptrPtrTy)});
> + Value *SecStartPtr = nullptr;
> + // Account for the fact that on windows-msvc __start_pc_table actually
> + // points to a uint64_t before the start of the PC table.
> + if (TargetTriple.getObjectFormat() == Triple::COFF) {
> + auto SecStartI8Ptr = IRB.CreatePointerCast(SecStartEnd.first,
> Int8PtrTy);
> + auto GEP = IRB.CreateGEP(SecStartI8Ptr,
> + ConstantInt::get(IntptrTy,
> sizeof(uint64_t)));
> + SecStartPtr = IRB.CreatePointerCast(GEP, IntptrPtrTy);
> + } else {
> + SecStartPtr = IRB.CreatePointerCast(SecStartEnd.first, IntptrPtrTy);
> + }
> + IRBCtor.CreateCall(
> + InitFunction,
> + {SecStartPtr, IRB.CreatePointerCast(SecStartEnd.second,
> IntptrPtrTy)});
> }
> // We don't reference these arrays directly in any of our runtime
> functions,
> // so we need to prevent them from being dead stripped.
> @@ -809,8 +831,13 @@ void SanitizerCoverageModule::InjectCove
>
> std::string
> SanitizerCoverageModule::getSectionName(const std::string &Section) const
> {
> - if (TargetTriple.getObjectFormat() == Triple::COFF)
> - return ".SCOV$M";
> + if (TargetTriple.getObjectFormat() == Triple::COFF) {
> + if (Section == SanCovCountersSectionName)
> + return ".SCOV$CM";
> + if (Section == SanCovPCsSectionName)
> + return ".SCOVP$M";
> + return ".SCOV$GM"; // For SanCovGuardsSectionName.
> + }
> if (TargetTriple.isOSBinFormatMachO())
> return "__DATA,__" + Section;
> return "__" + Section;
>
> Added:
> llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll
> URL:
> http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll?rev=341082&view=auto
>
> ==============================================================================
> ---
> llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll
> (added)
> +++
> llvm/trunk/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-8bit-counters.ll
> Thu Aug 30 08:54:44 2018
> @@ -0,0 +1,12 @@
> +; Checks that the PC and 8-bit Counter Arrays are placed in their own
> sections in COFF binaries.
> +; RUN: opt < %s -sancov -sanitizer-coverage-level=1
> -sanitizer-coverage-inline-8bit-counters=1 -sanitizer-coverage-pc-table=1
> -S | FileCheck %s
> +target datalayout = "e-m:w-i64:64-f80:128-n8:16:32:64-S128"
> +target triple = "x86_64-pc-windows-msvc19.14.26433"
> +
> +define void @foo() {
> +entry:
> + ret void
> +}
> +
> +; CHECK-DAG: section ".SCOV{{\$}}CM",
> +; CHECK-DAG: section ".SCOVP{{\$}}M",
>
>
> _______________________________________________
> 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/20181011/455c48ea/attachment.html>
More information about the llvm-commits
mailing list