[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254508. pratyai added a comment. Added the alignment for i1 as a special case. Also the inline-bool-flag.ll test had to be changed with it. PTAL if I am missing something; I did not expect it to be much diffrerent than inline-8bit-counters.ll, but evidently it is now. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: @__sancov_gen_ = private global [1 x i1] zeroinitializer, section "__sancov_bool_flag", comdat($foo), align 1, !associated !0 +; CHECK: store i1 true, i1* getelementptr inbounds ([1 x i1], [1 x i1]* @__sancov_gen_, i64 0, i64 0), align 1, !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i1* bitcast (i1**
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254509. pratyai added a comment. Added the alignment for i1 as a special case. Also the inline-bool-flag.ll test had to be changed with it. PTAL if I am missing something; I did not expect it to be much diffrerent than inline-8bit-counters.ll, but evidently it is now. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: @__sancov_gen_ = private global [1 x i1] zeroinitializer, section "__sancov_bool_flag", comdat($foo), align 1, !associated !0 +; CHECK: store i1 true, i1* getelementptr inbounds ([1 x i1], [1 x i1]* @__sancov_gen_, i64 0, i64 0), align 1, !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i1* bitcast (i1**
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai added a comment. It looks like I broke the tests after the `i8 `-> `i1` switch. I think it's because of an existing bug. From https://llvm.org/docs/LangRef.html > i1:8:8 - i1 is 8-bit (byte) aligned OTOH, in `SanitizerCoverage.cpp`, we have in `CreateFunctionLocalArrayInSection()`: Array->setAlignment(Align(Ty->isPointerTy() ? DL->getPointerSize() : Ty->getPrimitiveSizeInBits() / 8)); IIUC `getPrimitiveSizeInBits() / 8` would be `1 / 8 => 0` for `i1` type (it works for other `int` types which have multiple-of-8 bits. PLMK if my assessment is correct, and if so if I should fix it in a separate patch, or just keep that in here. I'll leave this patch "un-split" for now. Thanks! Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254470. pratyai added a comment. And missed a space. Sorry, I'm just not very familiar with this kind of test, and cannot spot the mistakes before going to the web UI. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: section "__sancov_bool_flag", comdat($foo), !associated !0 +; CHECK: store i1 true, i1* getelementptr inbounds ([1 x i1], [1 x i1]* @__sancov_gen_, i64 0, i64 0), !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i1* bitcast (i1** @__start___sancov_bool_flag to i1*), i1* bitcast (i1** @__stop___sancov_bool_flag to i1*)) Index: llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254468. pratyai added a comment. fsanitize-coverage.c undo was incorrect the first time :( Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: section "__sancov_bool_flag", comdat($foo), !associated !0 +; CHECK: store i1 true, i1* getelementptr inbounds ([1 x i1], [1 x i1]* @__sancov_gen_, i64 0, i64 0), !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i1* bitcast (i1** @__start___sancov_bool_flag to i1*), i1* bitcast (i1** @__stop___sancov_bool_flag to i1*)) Index: llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll === --- /dev/null +++
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254462. pratyai added a comment. Did the same for fsanitize-coverage.c. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: section "__sancov_bool_flag", comdat($foo), !associated !0 +; CHECK: store i1 true, i1* getelementptr inbounds ([1 x i1], [1 x i1]* @__sancov_gen_, i64 0, i64 0), !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i1* bitcast (i1** @__start___sancov_bool_flag to i1*), i1* bitcast (i1** @__stop___sancov_bool_flag to i1*)) Index: llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll === --- /dev/null +++
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254461. pratyai added a comment. Undid the `arc lint` on autocomplete.c. `arc lint` does not seem to have an option --style, but it's just one line diff anyway. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: section "__sancov_bool_flag", comdat($foo), !associated !0 +; CHECK: store i1 true, i1* getelementptr inbounds ([1 x i1], [1 x i1]* @__sancov_gen_, i64 0, i64 0), !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i1* bitcast (i1** @__start___sancov_bool_flag to i1*), i1* bitcast (i1** @__stop___sancov_bool_flag to i1*)) Index: llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
vitalybuka added inline comments. Comment at: clang/test/Driver/autocomplete.c:49 +// RUN: %clang --autocomplete=-fno-sanitize-coverage=,f | FileCheck %s +// -check-prefix=FNOSANICOVER FNOSANICOVER: func RUN: %clang +// --autocomplete=-fno-sanitize-coverage= | FileCheck %s probably you didn't add "--style=file" this dir should not enforce line length Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254418. pratyai added a comment. - Switched to Int1Ty. - Switched Atomic::NonAtomic (same as just dropping the two lines?) - C++ files were clang-formatted, but arc lint couldn't find clang-format-diff before. Now it seems to have formatted the lit tests. - Will split the patch later (i.e. remove all non-instrumentation stuff from this patch, then move flags & compiler-rt tests into two other patches). Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: section "__sancov_bool_flag", comdat($foo), !associated !0 +; CHECK: store i1 true, i1* getelementptr inbounds ([1 x i1], [1 x i1]* @__sancov_gen_, i64 0, i64 0), !nosanitize !1 + ret void +} +; CHECK: call
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
vitalybuka added a comment. LGTM would it be possible to split into 3 patches 1. Instrumentation 2. clang flags stuff 3. compiler-rt test Btw. is this clang formated? Comment at: llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp:482 +Ctor = CreateInitCallsForSections(M, SanCovModuleCtorBoolFlagName, + SanCovBoolFlagInitName, Int8PtrTy, + SanCovBoolFlagSectionName); Int1PtrT? Comment at: llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp:918 +auto Store = IRB.CreateStore(ConstantInt::get(Int8Ty, 1), FlagPtr); +Store->setAtomic(AtomicOrdering::Monotonic); +Store->setAlignment(llvm::MaybeAlign(FunctionBoolArray->getAlign())); Unordered or even NotAtomic is good enough here Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 ___ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254316. pratyai added a comment. Still had a couple of lines of diff left :( Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: section "__sancov_bool_flag", comdat($foo), align 1 +; CHECK: store atomic i8 1, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @__sancov_gen_, i64 0, i64 0) monotonic, align 1, !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i8* bitcast (i8** @__start___sancov_bool_flag to i8*), i8* bitcast (i8** @__stop___sancov_bool_flag to i8*)) Index: llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll === --- /dev/null +++
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai updated this revision to Diff 254312. pratyai added a comment. Removed some unintentional diffs. Removed some unintentional diffs from clang/lib/Frontend/CompilerInvocation.cpp. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D77244/new/ https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +; CHECK: section "__sancov_bool_flag", comdat($foo), align 1 +; CHECK: store atomic i8 1, i8* getelementptr inbounds ([1 x i8], [1 x i8]* @__sancov_gen_, i64 0, i64 0) monotonic, align 1, !nosanitize !1 + ret void +} +; CHECK: call void @__sanitizer_cov_bool_flag_init(i8* bitcast (i8** @__start___sancov_bool_flag to i8*), i8* bitcast (i8** @__stop___sancov_bool_flag to i8*)) Index: llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll
[PATCH] D77244: sancov/inline-bool-flag feature + tests + docs.
pratyai created this revision. pratyai added reviewers: kcc, vitalybuka. Herald added subscribers: Sanitizers, cfe-commits, jfb, hiraditya. Herald added projects: clang, Sanitizers. pratyai updated this revision to Diff 254312. pratyai added a comment. Removed some unintentional diffs. Removed some unintentional diffs from clang/lib/Frontend/CompilerInvocation.cpp. New SanitizerCoverage feature `inline-bool-flag` which inserts an atomic store of `1` to a boolean (which is an 8bit integer in practice) flag on every instrumented edge. Implementation-wise it's very similar to `inline-8bit-counters` features. So, much of wiring and test just follows the same pattern. Tested with `cmake --build . -- check-llvm`. Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D77244 Files: clang/docs/SanitizerCoverage.rst clang/include/clang/Basic/CodeGenOptions.def clang/include/clang/Driver/CC1Options.td clang/include/clang/Driver/Options.td clang/lib/CodeGen/BackendUtil.cpp clang/lib/Driver/SanitizerArgs.cpp clang/lib/Frontend/CompilerInvocation.cpp clang/test/Driver/autocomplete.c clang/test/Driver/fsanitize-coverage.c compiler-rt/test/sanitizer_common/TestCases/sanitizer_coverage_inline_bool_flag.cpp llvm/include/llvm/Transforms/Instrumentation.h llvm/lib/Transforms/Instrumentation/SanitizerCoverage.cpp llvm/test/Instrumentation/SanitizerCoverage/coff-pc-table-inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll Index: llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/trace-pc-guard-inline-bool-flag.ll @@ -0,0 +1,14 @@ +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-inline-bool-flag -S | FileCheck %s + +; Module ctors should have stable names across modules, not something like +; @sancov.module_ctor.3 that may cause duplicate ctors after linked together. + +; CHECK: define internal void @sancov.module_ctor_trace_pc_guard() comdat { +; CHECK: define internal void @sancov.module_ctor_bool_flag() comdat { + +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" +define void @foo() { + ret void +} Index: llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll === --- llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll +++ llvm/test/Instrumentation/SanitizerCoverage/pc-table.ll @@ -1,8 +1,10 @@ ; Test -sanitizer-coverage-pc-table=1 ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -sancov -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard -sanitizer-coverage-pc-table=1 -S | FileCheck %s ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-8bit-counters -sanitizer-coverage-pc-table=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-inline-bool-flag -sanitizer-coverage-pc-table=1 -S | FileCheck %s 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" Index: llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll === --- /dev/null +++ llvm/test/Instrumentation/SanitizerCoverage/inline-bool-flag.ll @@ -0,0 +1,13 @@ +; Test -sanitizer-coverage-inline-bool-flag=1 +; RUN: opt < %s -sancov -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s +; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=1 -sanitizer-coverage-inline-bool-flag=1 -S | FileCheck %s + +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" +define void @foo() { +entry: +;