[PATCH] D151785: [clangd] Desugar template parameter aliases in type hints

2023-06-13 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added a comment.

In D151785#4418037 , @zyounan wrote:

> In D151785#4417973 , @kstoimenov 
> wrote:
>
>> Looks like this might have broken a couple of sanitizer builds. Here is one 
>> of them: https://lab.llvm.org/buildbot/#/builders/5/builds/34387. Could you 
>> please revert or fix? 
>> Thanks!
>
> Sorry for the inconvenience. I think this issue had been fixed by 
> https://github.com/llvm/llvm-project/commit/0e8384a0fe4f03d60cd92aba1cae074512481ca2.
>  Does it work now? Please let me know if we still have problems.

The bot went green after the fix. Thanks.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151785/new/

https://reviews.llvm.org/D151785

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D151785: [clangd] Desugar template parameter aliases in type hints

2023-06-13 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added a comment.

Looks like this might have broken a couple of sanitizer builds. Here is one of 
them: https://lab.llvm.org/buildbot/#/builders/5/builds/34387. Could you please 
revert or fix? 
Thanks!


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D151785/new/

https://reviews.llvm.org/D151785

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D145822: [HWASAN][LSAN] Exclude crash-recovery-modules.m from HWASAN tests

2023-03-10 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG100a3c397c20: [HWASAN][LSAN] Exclude 
crash-recovery-modules.m from HWASAN tests (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145822/new/

https://reviews.llvm.org/D145822

Files:
  clang/test/Index/crash-recovery-modules.m


Index: clang/test/Index/crash-recovery-modules.m
===
--- clang/test/Index/crash-recovery-modules.m
+++ clang/test/Index/crash-recovery-modules.m
@@ -11,7 +11,7 @@
 // RUN: env CINDEXTEST_FAILONERROR=1 c-index-test -test-load-source all 
-fmodules -fmodules-cache-path=%t -Xclang -fdisable-module-hash -I 
%S/Inputs/Headers %s > /dev/null
 
 // REQUIRES: crash-recovery
-// UNSUPPORTED: libstdcxx-safe-mode
+// UNSUPPORTED: libstdcxx-safe-mode, hwasan
 
 @import Crash;
 


Index: clang/test/Index/crash-recovery-modules.m
===
--- clang/test/Index/crash-recovery-modules.m
+++ clang/test/Index/crash-recovery-modules.m
@@ -11,7 +11,7 @@
 // RUN: env CINDEXTEST_FAILONERROR=1 c-index-test -test-load-source all -fmodules -fmodules-cache-path=%t -Xclang -fdisable-module-hash -I %S/Inputs/Headers %s > /dev/null
 
 // REQUIRES: crash-recovery
-// UNSUPPORTED: libstdcxx-safe-mode
+// UNSUPPORTED: libstdcxx-safe-mode, hwasan
 
 @import Crash;
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D145822: [HWASAN][LSAN] Exclude crash-recovery-modules.m from HWASAN tests

2023-03-10 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov marked an inline comment as done.
kstoimenov added a comment.

In D145822#4185801 , @vitalybuka 
wrote:

> what is about detect_leaks?

Yes. I had to revert only this file because it broke a bunch of bots.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145822/new/

https://reviews.llvm.org/D145822

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D145822: [HWASAN][LSAN] Exclude crash-recovery-modules.m from HWASAN tests

2023-03-10 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 504264.
kstoimenov edited the summary of this revision.
kstoimenov added a comment.

Moved UNSUPPORTED to one line.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145822/new/

https://reviews.llvm.org/D145822

Files:
  clang/test/Index/crash-recovery-modules.m


Index: clang/test/Index/crash-recovery-modules.m
===
--- clang/test/Index/crash-recovery-modules.m
+++ clang/test/Index/crash-recovery-modules.m
@@ -11,7 +11,7 @@
 // RUN: env CINDEXTEST_FAILONERROR=1 c-index-test -test-load-source all 
-fmodules -fmodules-cache-path=%t -Xclang -fdisable-module-hash -I 
%S/Inputs/Headers %s > /dev/null
 
 // REQUIRES: crash-recovery
-// UNSUPPORTED: libstdcxx-safe-mode
+// UNSUPPORTED: libstdcxx-safe-mode, hwasan
 
 @import Crash;
 


Index: clang/test/Index/crash-recovery-modules.m
===
--- clang/test/Index/crash-recovery-modules.m
+++ clang/test/Index/crash-recovery-modules.m
@@ -11,7 +11,7 @@
 // RUN: env CINDEXTEST_FAILONERROR=1 c-index-test -test-load-source all -fmodules -fmodules-cache-path=%t -Xclang -fdisable-module-hash -I %S/Inputs/Headers %s > /dev/null
 
 // REQUIRES: crash-recovery
-// UNSUPPORTED: libstdcxx-safe-mode
+// UNSUPPORTED: libstdcxx-safe-mode, hwasan
 
 @import Crash;
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D145822: [HWASAN][LSAN] Exclude crash-recovery-modules.m from HWASAN tests

2023-03-10 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added a subscriber: arphaman.
Herald added a project: All.
kstoimenov requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D145822

Files:
  clang/test/Index/crash-recovery-modules.m


Index: clang/test/Index/crash-recovery-modules.m
===
--- clang/test/Index/crash-recovery-modules.m
+++ clang/test/Index/crash-recovery-modules.m
@@ -33,3 +33,4 @@
 // RUN: FileCheck < %t.err -check-prefix=CHECK-LIBCLANG-CRASH %s
 // CHECK-LIBCLANG-CRASH-DAG: libclang: crash detected during parsing
 // CHECK-LIBCLANG-CRASH-DAG: Unable to load translation unit!
+// UNSUPPORTED: hwasan


Index: clang/test/Index/crash-recovery-modules.m
===
--- clang/test/Index/crash-recovery-modules.m
+++ clang/test/Index/crash-recovery-modules.m
@@ -33,3 +33,4 @@
 // RUN: FileCheck < %t.err -check-prefix=CHECK-LIBCLANG-CRASH %s
 // CHECK-LIBCLANG-CRASH-DAG: libclang: crash detected during parsing
 // CHECK-LIBCLANG-CRASH-DAG: Unable to load translation unit!
+// UNSUPPORTED: hwasan
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D145727: [HWASAN][LSAN] Disable tests which don't pass in HWASAN+LSAN mode

2023-03-09 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG011b4d4706ee: [HWASAN][LSAN] Disable tests which don't 
pass in HWASAN+LSAN mode (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145727/new/

https://reviews.llvm.org/D145727

Files:
  clang/test/Driver/crash-diagnostics-dir-3.c
  clang/test/Driver/crash-diagnostics-dir.c
  clang/test/Driver/crash-report-clang-cl.cpp
  clang/test/Driver/crash-report-header.h
  clang/test/Driver/crash-report-spaces.c
  clang/test/Driver/crash-report-with-asserts.c
  clang/test/Driver/crash-report.cpp
  clang/test/Driver/emit-reproducer.c
  clang/test/Driver/output-file-cleanup.c
  clang/test/Driver/rewrite-map-in-diagnostics.c
  clang/test/Index/crash-recovery-code-complete.c
  clang/test/Index/crash-recovery-modules.m
  clang/test/Index/crash-recovery-reparse.c
  clang/test/Index/crash-recovery.c
  clang/test/Index/create-libclang-completion-reproducer.c
  clang/test/Index/create-libclang-parsing-reproducer.c
  clang/test/Index/error-on-deserialized.c
  clang/test/Index/record-completion-invocation.c
  clang/test/Index/record-parsing-invocation.c
  llvm/test/Bitcode/invalid.test
  llvm/test/MC/AsmParser/unmatched-if-macro.s
  llvm/test/tools/llvm-mc/disassembler-options.test
  llvm/test/tools/llvm-profdata/merge-incompatible.test
  llvm/test/tools/llvm-reduce/fail-execute-test.test

Index: llvm/test/tools/llvm-reduce/fail-execute-test.test
===
--- llvm/test/tools/llvm-reduce/fail-execute-test.test
+++ llvm/test/tools/llvm-reduce/fail-execute-test.test
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-reduce --test=%s.NotAFileInTestingDir %p/Inputs/test-output-format.ll 2>&1 | FileCheck -DFILENAME=%s.NotAFileInTestingDir --strict-whitespace %s
 
-# CHECK: Error running interesting-ness test: {{(Executable "[[FILENAME]]" doesn't exist$)?(program not executable$)?}}
\ No newline at end of file
+# CHECK: Error running interesting-ness test: {{(Executable "[[FILENAME]]" doesn't exist$)?(program not executable$)?}}
Index: llvm/test/tools/llvm-profdata/merge-incompatible.test
===
--- llvm/test/tools/llvm-profdata/merge-incompatible.test
+++ llvm/test/tools/llvm-profdata/merge-incompatible.test
@@ -1,3 +1,4 @@
+RUN: export LSAN_OPTIONS=detect_leaks=0
 RUN: not llvm-profdata merge %p/Inputs/fe-basic.proftext %p/Inputs/ir-basic.proftext -o /dev/null 2>&1 | FileCheck %s
 CHECK: ir-basic.proftext: Merge IR generated profile with Clang generated profile.
 
Index: llvm/test/tools/llvm-mc/disassembler-options.test
===
--- llvm/test/tools/llvm-mc/disassembler-options.test
+++ llvm/test/tools/llvm-mc/disassembler-options.test
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-mc -M invalid /dev/null 2>&1 | FileCheck %s
 
 # CHECK: error: invalid disassembler option 'invalid'
Index: llvm/test/MC/AsmParser/unmatched-if-macro.s
===
--- llvm/test/MC/AsmParser/unmatched-if-macro.s
+++ llvm/test/MC/AsmParser/unmatched-if-macro.s
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-mc -triple x86_64 %s -o /dev/null 2>&1 | FileCheck %s
 
 ## This also tests that we don't assert due to an active macro instantiation.
Index: llvm/test/Bitcode/invalid.test
===
--- llvm/test/Bitcode/invalid.test
+++ llvm/test/Bitcode/invalid.test
@@ -1,3 +1,4 @@
+RUN: export LSAN_OPTIONS=detect_leaks=0
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-empty.bc 2>&1 | \
 RUN:   FileCheck --check-prefix=INVALID-EMPTY %s
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-pr20485.bc 2>&1 | \
Index: clang/test/Index/record-parsing-invocation.c
===
--- clang/test/Index/record-parsing-invocation.c
+++ clang/test/Index/record-parsing-invocation.c
@@ -1,3 +1,4 @@
+// RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
 // RUN: env CINDEXTEST_INVOCATION_EMISSION_PATH=%t not c-index-test -test-load-source all %s
Index: clang/test/Index/record-completion-invocation.c
===
--- clang/test/Index/record-completion-invocation.c
+++ clang/test/Index/record-completion-invocation.c
@@ -1,3 +1,4 @@
+// RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
 // RUN: env CINDEXTEST_INVOCATION_EMISSION_PATH=%t not c-index-test -code-completion-at=%s:10:1 "-remap-file=%s,%S/Inputs/record-parsing-invocation-remap.c" %s
Index: clang/test/Index/error-on-deserialized.c
==

[PATCH] D145727: [HWASAN][LSAN] Disable tests which don't pass in HWASAN+LSAN mode

2023-03-09 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 503915.
kstoimenov added a comment.

Removed debug print.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145727/new/

https://reviews.llvm.org/D145727

Files:
  clang/test/Driver/crash-diagnostics-dir-3.c
  clang/test/Driver/crash-diagnostics-dir.c
  clang/test/Driver/crash-report-clang-cl.cpp
  clang/test/Driver/crash-report-header.h
  clang/test/Driver/crash-report-spaces.c
  clang/test/Driver/crash-report-with-asserts.c
  clang/test/Driver/crash-report.cpp
  clang/test/Driver/emit-reproducer.c
  clang/test/Driver/output-file-cleanup.c
  clang/test/Driver/rewrite-map-in-diagnostics.c
  clang/test/Index/crash-recovery-code-complete.c
  clang/test/Index/crash-recovery-modules.m
  clang/test/Index/crash-recovery-reparse.c
  clang/test/Index/crash-recovery.c
  clang/test/Index/create-libclang-completion-reproducer.c
  clang/test/Index/create-libclang-parsing-reproducer.c
  clang/test/Index/error-on-deserialized.c
  clang/test/Index/record-completion-invocation.c
  clang/test/Index/record-parsing-invocation.c
  llvm/test/Bitcode/invalid.test
  llvm/test/MC/AsmParser/unmatched-if-macro.s
  llvm/test/tools/llvm-mc/disassembler-options.test
  llvm/test/tools/llvm-profdata/merge-incompatible.test
  llvm/test/tools/llvm-reduce/fail-execute-test.test

Index: llvm/test/tools/llvm-reduce/fail-execute-test.test
===
--- llvm/test/tools/llvm-reduce/fail-execute-test.test
+++ llvm/test/tools/llvm-reduce/fail-execute-test.test
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-reduce --test=%s.NotAFileInTestingDir %p/Inputs/test-output-format.ll 2>&1 | FileCheck -DFILENAME=%s.NotAFileInTestingDir --strict-whitespace %s
 
-# CHECK: Error running interesting-ness test: {{(Executable "[[FILENAME]]" doesn't exist$)?(program not executable$)?}}
\ No newline at end of file
+# CHECK: Error running interesting-ness test: {{(Executable "[[FILENAME]]" doesn't exist$)?(program not executable$)?}}
Index: llvm/test/tools/llvm-profdata/merge-incompatible.test
===
--- llvm/test/tools/llvm-profdata/merge-incompatible.test
+++ llvm/test/tools/llvm-profdata/merge-incompatible.test
@@ -1,3 +1,4 @@
+RUN: export LSAN_OPTIONS=detect_leaks=0
 RUN: not llvm-profdata merge %p/Inputs/fe-basic.proftext %p/Inputs/ir-basic.proftext -o /dev/null 2>&1 | FileCheck %s
 CHECK: ir-basic.proftext: Merge IR generated profile with Clang generated profile.
 
Index: llvm/test/tools/llvm-mc/disassembler-options.test
===
--- llvm/test/tools/llvm-mc/disassembler-options.test
+++ llvm/test/tools/llvm-mc/disassembler-options.test
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-mc -M invalid /dev/null 2>&1 | FileCheck %s
 
 # CHECK: error: invalid disassembler option 'invalid'
Index: llvm/test/MC/AsmParser/unmatched-if-macro.s
===
--- llvm/test/MC/AsmParser/unmatched-if-macro.s
+++ llvm/test/MC/AsmParser/unmatched-if-macro.s
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-mc -triple x86_64 %s -o /dev/null 2>&1 | FileCheck %s
 
 ## This also tests that we don't assert due to an active macro instantiation.
Index: llvm/test/Bitcode/invalid.test
===
--- llvm/test/Bitcode/invalid.test
+++ llvm/test/Bitcode/invalid.test
@@ -1,3 +1,4 @@
+RUN: export LSAN_OPTIONS=detect_leaks=0
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-empty.bc 2>&1 | \
 RUN:   FileCheck --check-prefix=INVALID-EMPTY %s
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-pr20485.bc 2>&1 | \
Index: clang/test/Index/record-parsing-invocation.c
===
--- clang/test/Index/record-parsing-invocation.c
+++ clang/test/Index/record-parsing-invocation.c
@@ -1,3 +1,4 @@
+// RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
 // RUN: env CINDEXTEST_INVOCATION_EMISSION_PATH=%t not c-index-test -test-load-source all %s
Index: clang/test/Index/record-completion-invocation.c
===
--- clang/test/Index/record-completion-invocation.c
+++ clang/test/Index/record-completion-invocation.c
@@ -1,3 +1,4 @@
+// RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
 // RUN: env CINDEXTEST_INVOCATION_EMISSION_PATH=%t not c-index-test -code-completion-at=%s:10:1 "-remap-file=%s,%S/Inputs/record-parsing-invocation-remap.c" %s
Index: clang/test/Index/error-on-deserialized.c
===
--- clang/test/Index/error-on-deserialized.c
+++ clang/test/Index/error-on-deserialized.c
@@ -3,6 +3,7 @@
 
 // This tests that we will co

[PATCH] D145727: [HWASAN][LSAN] Disable tests which don't pass in HWASAN+LSAN mode

2023-03-09 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added subscribers: arphaman, emaste.
Herald added a project: All.
kstoimenov requested review of this revision.
Herald added subscribers: llvm-commits, cfe-commits, MaskRay.
Herald added projects: clang, LLVM.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D145727

Files:
  clang/test/Driver/crash-diagnostics-dir-3.c
  clang/test/Driver/crash-diagnostics-dir.c
  clang/test/Driver/crash-report-clang-cl.cpp
  clang/test/Driver/crash-report-header.h
  clang/test/Driver/crash-report-spaces.c
  clang/test/Driver/crash-report-with-asserts.c
  clang/test/Driver/crash-report.cpp
  clang/test/Driver/emit-reproducer.c
  clang/test/Driver/output-file-cleanup.c
  clang/test/Driver/rewrite-map-in-diagnostics.c
  clang/test/Index/crash-recovery-code-complete.c
  clang/test/Index/crash-recovery-modules.m
  clang/test/Index/crash-recovery-reparse.c
  clang/test/Index/crash-recovery.c
  clang/test/Index/create-libclang-completion-reproducer.c
  clang/test/Index/create-libclang-parsing-reproducer.c
  clang/test/Index/error-on-deserialized.c
  clang/test/Index/record-completion-invocation.c
  clang/test/Index/record-parsing-invocation.c
  lld/test/ELF/crash-report.test
  llvm/test/Bitcode/invalid.test
  llvm/test/MC/AsmParser/unmatched-if-macro.s
  llvm/test/tools/llvm-mc/disassembler-options.test
  llvm/test/tools/llvm-profdata/merge-incompatible.test
  llvm/test/tools/llvm-reduce/fail-execute-test.test

Index: llvm/test/tools/llvm-reduce/fail-execute-test.test
===
--- llvm/test/tools/llvm-reduce/fail-execute-test.test
+++ llvm/test/tools/llvm-reduce/fail-execute-test.test
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-reduce --test=%s.NotAFileInTestingDir %p/Inputs/test-output-format.ll 2>&1 | FileCheck -DFILENAME=%s.NotAFileInTestingDir --strict-whitespace %s
 
-# CHECK: Error running interesting-ness test: {{(Executable "[[FILENAME]]" doesn't exist$)?(program not executable$)?}}
\ No newline at end of file
+# CHECK: Error running interesting-ness test: {{(Executable "[[FILENAME]]" doesn't exist$)?(program not executable$)?}}
Index: llvm/test/tools/llvm-profdata/merge-incompatible.test
===
--- llvm/test/tools/llvm-profdata/merge-incompatible.test
+++ llvm/test/tools/llvm-profdata/merge-incompatible.test
@@ -1,3 +1,4 @@
+RUN: export LSAN_OPTIONS=detect_leaks=0
 RUN: not llvm-profdata merge %p/Inputs/fe-basic.proftext %p/Inputs/ir-basic.proftext -o /dev/null 2>&1 | FileCheck %s
 CHECK: ir-basic.proftext: Merge IR generated profile with Clang generated profile.
 
Index: llvm/test/tools/llvm-mc/disassembler-options.test
===
--- llvm/test/tools/llvm-mc/disassembler-options.test
+++ llvm/test/tools/llvm-mc/disassembler-options.test
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-mc -M invalid /dev/null 2>&1 | FileCheck %s
 
 # CHECK: error: invalid disassembler option 'invalid'
Index: llvm/test/MC/AsmParser/unmatched-if-macro.s
===
--- llvm/test/MC/AsmParser/unmatched-if-macro.s
+++ llvm/test/MC/AsmParser/unmatched-if-macro.s
@@ -1,3 +1,4 @@
+# RUN: export LSAN_OPTIONS=detect_leaks=0
 # RUN: not llvm-mc -triple x86_64 %s -o /dev/null 2>&1 | FileCheck %s
 
 ## This also tests that we don't assert due to an active macro instantiation.
Index: llvm/test/Bitcode/invalid.test
===
--- llvm/test/Bitcode/invalid.test
+++ llvm/test/Bitcode/invalid.test
@@ -1,3 +1,4 @@
+RUN: export LSAN_OPTIONS=detect_leaks=0
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-empty.bc 2>&1 | \
 RUN:   FileCheck --check-prefix=INVALID-EMPTY %s
 RUN: not llvm-dis -disable-output %p/Inputs/invalid-pr20485.bc 2>&1 | \
Index: lld/test/ELF/crash-report.test
===
--- lld/test/ELF/crash-report.test
+++ lld/test/ELF/crash-report.test
@@ -2,6 +2,7 @@
 
 ## Test the diagnostics produced when LLD crashes.
 
+# RUN: echo "ZXCV: $HWASAN_OPTIONS"
 # RUN: env FORCE_LLD_DIAGNOSTICS_CRASH=1 not --crash ld.lld -o /dev/null 2>&1 | FileCheck %s
 
 ## Check the crash text has the correct structure.
Index: clang/test/Index/record-parsing-invocation.c
===
--- clang/test/Index/record-parsing-invocation.c
+++ clang/test/Index/record-parsing-invocation.c
@@ -1,3 +1,4 @@
+// RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: rm -rf %t
 // RUN: mkdir %t
 // RUN: env CINDEXTEST_INVOCATION_EMISSION_PATH=%t not c-index-test -test-load-source all %s
Index: clang/test/Index/record-completion-invocation.c
===
--- clang/test/Index/record-completion-invocation.c
+++ clang/test

[PATCH] D145451: Disable tests which don't pass in HWASAN+LSAN mode

2023-03-08 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov abandoned this revision.
kstoimenov added a comment.

I will send a different patch with LSAN_OPTIONS instead.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145451/new/

https://reviews.llvm.org/D145451

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D145615: [LSAN] Disable leaks in test using environment variables instead of not running them with ASAN.

2023-03-08 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG50cd2c257cb4: [LSAN] Disable leaks in test using environment 
variables instead of not running… (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D145615/new/

https://reviews.llvm.org/D145615

Files:
  clang/test/CodeGenCXX/debug-info-enum-i128.cpp
  mlir/test/Pass/crash-recovery-dynamic-failure.mlir
  mlir/test/Pass/crash-recovery.mlir
  mlir/test/mlir-cpu-runner/async-group.mlir


Index: mlir/test/mlir-cpu-runner/async-group.mlir
===
--- mlir/test/mlir-cpu-runner/async-group.mlir
+++ mlir/test/mlir-cpu-runner/async-group.mlir
@@ -1,3 +1,10 @@
+// This is crashing in CI "most of the time" on a AMD Rome CPU VM on GCP with:
+//Tracer caught signal 11: addr=0x7a800028 pc=0x2e81ba sp=0x7efd2a7ffd50
+//LeakSanitizer has encountered a fatal error.
+// This is hard to reproduce locally unfortunately. Disable it with ASAN/LSAN
+// to keep the bot green for now.
+// RUN: export LSAN_OPTIONS=detect_leaks=0
+
 // RUN:   mlir-opt %s 
-pass-pipeline="builtin.module(async-to-async-runtime,func.func(async-runtime-ref-counting,async-runtime-ref-counting-opt),convert-async-to-llvm,func.func(convert-arith-to-llvm),convert-func-to-llvm,reconcile-unrealized-casts)"
 \
 // RUN: | mlir-cpu-runner  
\
 // RUN: -e main -entry-point-result=void -O0   
\
@@ -6,13 +13,6 @@
 // RUN: -shared-libs=%mlir_async_runtime   \
 // RUN: | FileCheck %s
 
-// This is crashing in CI "most of the time" on a AMD Rome CPU VM on GCP with:
-//Tracer caught signal 11: addr=0x7a800028 pc=0x2e81ba sp=0x7efd2a7ffd50
-//LeakSanitizer has encountered a fatal error.
-// This is hard to reproduce locally unfortunately. Disable it with ASAN/LSAN
-// to keep the bot green for now.
-// UNSUPPORTED: asan
-
 // FIXME: https://github.com/llvm/llvm-project/issues/57231
 // UNSUPPORTED: hwasan
 // FIXME: Windows does not have aligned_alloc
Index: mlir/test/Pass/crash-recovery.mlir
===
--- mlir/test/Pass/crash-recovery.mlir
+++ mlir/test/Pass/crash-recovery.mlir
@@ -1,3 +1,5 @@
+// The crash recovery mechanism will leak memory allocated in the crashing 
thread.
+// RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: mlir-opt %s 
-pass-pipeline='builtin.module(builtin.module(test-module-pass, 
test-pass-crash))' -mlir-pass-pipeline-crash-reproducer=%t -verify-diagnostics
 // RUN: cat %t | FileCheck -check-prefix=REPRO %s
 // RUN: mlir-opt %s 
-pass-pipeline='builtin.module(builtin.module(test-module-pass, 
test-pass-crash))' -mlir-pass-pipeline-crash-reproducer=%t -verify-diagnostics 
-mlir-pass-pipeline-local-reproducer -mlir-disable-threading
Index: mlir/test/Pass/crash-recovery-dynamic-failure.mlir
===
--- mlir/test/Pass/crash-recovery-dynamic-failure.mlir
+++ mlir/test/Pass/crash-recovery-dynamic-failure.mlir
@@ -1,10 +1,10 @@
+// The crash recovery mechanism will leak memory allocated in the crashing 
thread.
+// RUN: export LSAN_OPTIONS=detect_leaks=0
+
 // Check that local reproducers will also traverse dynamic pass pipelines.
 // RUN: mlir-opt %s 
-pass-pipeline='builtin.module(test-module-pass,test-dynamic-pipeline{op-name=inner_mod1
 run-on-nested-operations=1 dynamic-pipeline=test-pass-failure})' 
-mlir-pass-pipeline-crash-reproducer=%t -verify-diagnostics 
-mlir-pass-pipeline-local-reproducer --mlir-disable-threading
 // RUN: cat %t | FileCheck -check-prefix=REPRO_LOCAL_DYNAMIC_FAILURE %s
 
-// The crash recovery mechanism will leak memory allocated in the crashing 
thread.
-// UNSUPPORTED: asan
-
 module @inner_mod1 {
   // expected-error@below {{Failures have been detected while processing an 
MLIR pass pipeline}}
   // expected-note@below {{Pipeline failed while executing}}
Index: clang/test/CodeGenCXX/debug-info-enum-i128.cpp
===
--- clang/test/CodeGenCXX/debug-info-enum-i128.cpp
+++ clang/test/CodeGenCXX/debug-info-enum-i128.cpp
@@ -1,9 +1,10 @@
+// FIXME: llvm.org/pr51221, the APSInt leaks
+// RUN: export LSAN_OPTIONS=detect_leaks=0
+
 // RUN: %clang_cc1 %s -triple x86_64-windows-msvc -gcodeview 
-debug-info-kind=limited -emit-llvm -o - | FileCheck %s
 // RUN: %clang_cc1 %s -triple x86_64-linux-gnu -debug-info-kind=limited 
-emit-llvm -o - | FileCheck %s
 // RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -debug-info-kind=limited 
-emit-llvm -o - | FileCheck %s
 
-// FIXME: llvm.org/pr51221, the APSInt leaks
-// UNSUPPORTED: asan
 
 enum class uns : __uint128_t { unsval = __uint128_t(1) << 64 };
 uns t1() { return uns::unsval; }


Index: mlir/test/mlir-cpu-runner/async-group.mlir
=

[PATCH] D145615: [LSAN] Disable leaks in test using environment variables instead of not running them with ASAN.

2023-03-08 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added subscribers: Moerafaat, zero9178, bzcheeseman, sdasgup3, 
wenzhicui, wrengr, cota, teijeong, rdzhabarov, tatianashp, msifontes, jurahul, 
Kayjukh, grosul1, Joonsoo, liufengdb, aartbik, mgester, arpith-jacob, 
antiagainst, shauheen, rriddle, mehdi_amini, thopre.
Herald added a project: All.
kstoimenov requested review of this revision.
Herald added subscribers: cfe-commits, stephenneuendorffer, nicolasvasilache.
Herald added projects: clang, MLIR.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D145615

Files:
  clang/test/CodeGenCXX/debug-info-enum-i128.cpp
  mlir/test/Pass/crash-recovery-dynamic-failure.mlir
  mlir/test/Pass/crash-recovery.mlir
  mlir/test/mlir-cpu-runner/async-group.mlir


Index: mlir/test/mlir-cpu-runner/async-group.mlir
===
--- mlir/test/mlir-cpu-runner/async-group.mlir
+++ mlir/test/mlir-cpu-runner/async-group.mlir
@@ -1,3 +1,10 @@
+// This is crashing in CI "most of the time" on a AMD Rome CPU VM on GCP with:
+//Tracer caught signal 11: addr=0x7a800028 pc=0x2e81ba sp=0x7efd2a7ffd50
+//LeakSanitizer has encountered a fatal error.
+// This is hard to reproduce locally unfortunately. Disable it with ASAN/LSAN
+// to keep the bot green for now.
+// RUN: export LSAN_OPTIONS=detect_leaks=0
+
 // RUN:   mlir-opt %s 
-pass-pipeline="builtin.module(async-to-async-runtime,func.func(async-runtime-ref-counting,async-runtime-ref-counting-opt),convert-async-to-llvm,func.func(convert-arith-to-llvm),convert-func-to-llvm,reconcile-unrealized-casts)"
 \
 // RUN: | mlir-cpu-runner  
\
 // RUN: -e main -entry-point-result=void -O0   
\
@@ -6,13 +13,6 @@
 // RUN: -shared-libs=%mlir_async_runtime   \
 // RUN: | FileCheck %s
 
-// This is crashing in CI "most of the time" on a AMD Rome CPU VM on GCP with:
-//Tracer caught signal 11: addr=0x7a800028 pc=0x2e81ba sp=0x7efd2a7ffd50
-//LeakSanitizer has encountered a fatal error.
-// This is hard to reproduce locally unfortunately. Disable it with ASAN/LSAN
-// to keep the bot green for now.
-// UNSUPPORTED: asan
-
 // FIXME: https://github.com/llvm/llvm-project/issues/57231
 // UNSUPPORTED: hwasan
 // FIXME: Windows does not have aligned_alloc
Index: mlir/test/Pass/crash-recovery.mlir
===
--- mlir/test/Pass/crash-recovery.mlir
+++ mlir/test/Pass/crash-recovery.mlir
@@ -1,3 +1,5 @@
+// The crash recovery mechanism will leak memory allocated in the crashing 
thread.
+// RUN: export LSAN_OPTIONS=detect_leaks=0
 // RUN: mlir-opt %s 
-pass-pipeline='builtin.module(builtin.module(test-module-pass, 
test-pass-crash))' -mlir-pass-pipeline-crash-reproducer=%t -verify-diagnostics
 // RUN: cat %t | FileCheck -check-prefix=REPRO %s
 // RUN: mlir-opt %s 
-pass-pipeline='builtin.module(builtin.module(test-module-pass, 
test-pass-crash))' -mlir-pass-pipeline-crash-reproducer=%t -verify-diagnostics 
-mlir-pass-pipeline-local-reproducer -mlir-disable-threading
Index: mlir/test/Pass/crash-recovery-dynamic-failure.mlir
===
--- mlir/test/Pass/crash-recovery-dynamic-failure.mlir
+++ mlir/test/Pass/crash-recovery-dynamic-failure.mlir
@@ -1,10 +1,10 @@
+// The crash recovery mechanism will leak memory allocated in the crashing 
thread.
+// RUN: export LSAN_OPTIONS=detect_leaks=0
+
 // Check that local reproducers will also traverse dynamic pass pipelines.
 // RUN: mlir-opt %s 
-pass-pipeline='builtin.module(test-module-pass,test-dynamic-pipeline{op-name=inner_mod1
 run-on-nested-operations=1 dynamic-pipeline=test-pass-failure})' 
-mlir-pass-pipeline-crash-reproducer=%t -verify-diagnostics 
-mlir-pass-pipeline-local-reproducer --mlir-disable-threading
 // RUN: cat %t | FileCheck -check-prefix=REPRO_LOCAL_DYNAMIC_FAILURE %s
 
-// The crash recovery mechanism will leak memory allocated in the crashing 
thread.
-// UNSUPPORTED: asan
-
 module @inner_mod1 {
   // expected-error@below {{Failures have been detected while processing an 
MLIR pass pipeline}}
   // expected-note@below {{Pipeline failed while executing}}
Index: clang/test/CodeGenCXX/debug-info-enum-i128.cpp
===
--- clang/test/CodeGenCXX/debug-info-enum-i128.cpp
+++ clang/test/CodeGenCXX/debug-info-enum-i128.cpp
@@ -1,9 +1,10 @@
+// FIXME: llvm.org/pr51221, the APSInt leaks
+// RUN: export LSAN_OPTIONS=detect_leaks=0
+
 // RUN: %clang_cc1 %s -triple x86_64-windows-msvc -gcodeview 
-debug-info-kind=limited -emit-llvm -o - | FileCheck %s
 // RUN: %clang_cc1 %s -triple x86_64-linux-gnu -debug-info-kind=limited 
-emit-llvm -o - | FileCheck %s
 // RUN: %clang_cc1 %s -triple powerpc64-ibm-aix-xcoff -debug-info-kind=limited 
-emit-llvm -o - | FileCheck %s
 
-// FIXME: llvm.org/pr51221, the APSInt leaks
-// UNSUPPORTED:

[PATCH] D145451: Disable tests which don't pass in HWASAN+LSAN mode

2023-03-06 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added a subscriber: arphaman.
Herald added a project: All.
kstoimenov requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D145451

Files:
  clang/test/CodeGenCXX/debug-info-enum-i128.cpp
  clang/test/Driver/crash-diagnostics-dir-3.c
  clang/test/Driver/crash-diagnostics-dir.c
  clang/test/Driver/crash-report-clang-cl.cpp
  clang/test/Driver/crash-report-header.h
  clang/test/Driver/crash-report-spaces.c
  clang/test/Driver/crash-report-with-asserts.c
  clang/test/Driver/crash-report.cpp
  clang/test/Driver/emit-reproducer.c
  clang/test/Driver/output-file-cleanup.c
  clang/test/Driver/rewrite-map-in-diagnostics.c
  clang/test/Index/crash-recovery-code-complete.c
  clang/test/Index/crash-recovery-modules.m
  clang/test/Index/crash-recovery-reparse.c
  clang/test/Index/crash-recovery.c
  clang/test/Index/create-libclang-completion-reproducer.c
  clang/test/Index/create-libclang-parsing-reproducer.c
  clang/test/Index/error-on-deserialized.c
  clang/test/Index/record-completion-invocation.c
  clang/test/Index/record-parsing-invocation.c
  llvm/test/tools/llvm-profdata/merge-incompatible.test

Index: llvm/test/tools/llvm-profdata/merge-incompatible.test
===
--- llvm/test/tools/llvm-profdata/merge-incompatible.test
+++ llvm/test/tools/llvm-profdata/merge-incompatible.test
@@ -5,3 +5,6 @@
 // we do not know which files have incompatible kinds.
 RUN: not llvm-profdata merge %p/Inputs/fe-basic.proftext %p/Inputs/ir-basic.proftext --num-threads=2 -o /dev/null 2>&1 | FileCheck %s --check-prefix=THREADS
 THREADS: unsupported instrumentation profile format version
+
+// Fixme: enable when passing in HWASAN+LSAN mode.
+// UNSUPPORTED: hwasan
Index: clang/test/Index/record-parsing-invocation.c
===
--- clang/test/Index/record-parsing-invocation.c
+++ clang/test/Index/record-parsing-invocation.c
@@ -26,3 +26,6 @@
 
 // CHECK: {"toolchain":"{{.*}}","libclang.operation":"parse","libclang.opts":1,"args":["clang","-fno-spell-checking","{{.*}}record-parsing-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"]}
 // CHECK-UNSAVED: {"toolchain":"{{.*}}","libclang.operation":"parse","libclang.opts":1,"args":["clang","-fno-spell-checking","{{.*}}record-parsing-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"],"unsaved_file_hashes":[{"name":"{{.*}}record-parsing-invocation.c","md5":"aee23773de90e665992b48209351d70e"}]}
+
+// Fixme: enable when passing in HWASAN+LSAN mode.
+// UNSUPPORTED: hwasan
Index: clang/test/Index/record-completion-invocation.c
===
--- clang/test/Index/record-completion-invocation.c
+++ clang/test/Index/record-completion-invocation.c
@@ -9,3 +9,6 @@
 // RUN: cat %t/libclang-* | FileCheck %s
 
 // CHECK: {"toolchain":"{{.*}}","libclang.operation":"complete","libclang.opts":1,"args":["clang","-fno-spell-checking","{{.*}}record-completion-invocation.c","-Xclang","-detailed-preprocessing-record","-fallow-editor-placeholders"],"invocation-args":["-code-completion-at={{.*}}record-completion-invocation.c:10:1"],"unsaved_file_hashes":[{"name":"{{.*}}record-completion-invocation.c","md5":"aee23773de90e665992b48209351d70e"}]}
+
+// Fixme: enable when passing in HWASAN+LSAN mode.
+// UNSUPPORTED: hwasan
Index: clang/test/Index/error-on-deserialized.c
===
--- clang/test/Index/error-on-deserialized.c
+++ clang/test/Index/error-on-deserialized.c
@@ -11,3 +11,6 @@
 // RUN:  | FileCheck %s
 
 // CHECK: error: 'NestedVar1' was deserialized
+
+// Fixme: enable when passing in HWASAN+LSAN mode.
+// UNSUPPORTED: hwasan
Index: clang/test/Index/create-libclang-parsing-reproducer.c
===
--- clang/test/Index/create-libclang-parsing-reproducer.c
+++ clang/test/Index/create-libclang-parsing-reproducer.c
@@ -19,3 +19,6 @@
 // CHECK-NEXT: {
 // CHECK-NEXT: "files":["{{.*}}.c","{{.*}}.sh"]
 // CHECK-NEXT: }
+
+// Fixme: enable when passing in HWASAN+LSAN mode.
+// UNSUPPORTED: hwasan
Index: clang/test/Index/create-libclang-completion-reproducer.c
===
--- clang/test/Index/create-libclang-completion-reproducer.c
+++ clang/test/Index/create-libclang-completion-reproducer.c
@@ -12,3 +12,6 @@
 // CHECK-NEXT: {
 // CHECK-NEXT: "files":["{{.*}}.c","{{.*}}.sh"]
 // CHECK-NEXT: }
+
+// Fixme: enable when passing in HWASAN+LSAN mode.
+// UNSUPPORTED: hwasan
Index: clang/test/Index/crash-recovery.c
===
--- clang/test/Index/crash-recovery.c
+++ clang/test/Index/crash

[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2023-02-24 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: compiler-rt/lib/asan/CMakeLists.txt:198
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}

thetruestblue wrote:
> Can you explain the motivation here?
> 
> RTAsan_static object library isn't built on Apple & Apple ASAN doesn't 
> support static libraries. is there a reason why this was added to Apple that 
> I'm missing?
> 
> I don't believe this actually builds anything on Apple platforms since no OS 
> is passed and in add_compiler_rt_runtime no libnames get set.
> 
> Even the tests added are not-apple specific.
As far as I remember it was because of the __asan_report_(load|store)n 
functions defined in asan_rtl_static.cpp. They are defined as weak so that we 
could link the binary without providing the implementation, which was later 
loaded from asan_rtl DSO. 

It is possible that we don't need this on Apple, but we will most likely need 
that on Windows. So if you are planning to make changes here you might have to 
revisit the 'NOT WIN32 AND NOT APPLE' statements to make sure we don't break 
the Windows build. 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D138329: [-Wunsafe-buffer-usage] Add a new recursive matcher to replace `forEachDescendant` in unsafe buffer check

2023-01-05 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added a comment.

Is it possible these errors are due to your change: 
https://lab.llvm.org/buildbot/#/builders/5/builds/30522/steps/13/logs/stdio? If 
so please consider reverting/fixing.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D138329/new/

https://reviews.llvm.org/D138329

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D137227: [asan] Default to -fsanitize-address-use-odr-indicator for non-Windows

2022-11-02 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov accepted this revision.
kstoimenov added inline comments.
This revision is now accepted and ready to land.



Comment at: llvm/test/Instrumentation/AddressSanitizer/global_with_comdat.ll:8
 ;
-; RUN: opt < %s -passes=asan -asan-globals-live-support=1 -S | 
FileCheck %s --check-prefixes=CHECK,NOCOMDAT
+; RUN: opt < %s -passes=asan -asan-globals-live-support=1 
-asan-use-odr-indicator=0 -S | FileCheck %s --check-prefixes=CHECK,NOCOMDAT
 ; Check that enabling odr indicators enables comdat for globals.

Remove extra space? 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D137227/new/

https://reviews.llvm.org/D137227

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D132907: [msan] Add more specific messages for use-after-destroy

2022-08-30 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov accepted this revision.
kstoimenov added inline comments.
This revision is now accepted and ready to land.



Comment at: clang/lib/CodeGen/CGClass.cpp:1773
   // function
-  EmitSanitizerDtorCallback(CGF, VTablePtr, PoisonSize);
+  EmitSanitizerDtorCallback(CGF, "__sanitizer_dtor_callback_vptr",
+VTablePtr);

Should this be a constant? 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D132907/new/

https://reviews.llvm.org/D132907

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D129832: [sanitizer] Add "mainsrc" prefix to sanitizer special case list

2022-07-15 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov accepted this revision.
kstoimenov added a comment.

I think the name 'mainsrc' is slightly misleading because of the association 
with the 'main' function. Maybe something like primarysrc would be better to 
avoid this confusion?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D129832/new/

https://reviews.llvm.org/D129832

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D126929: Add sanitizer metadata attributes to clang IR gen.

2022-06-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov accepted this revision.
kstoimenov added a comment.
This revision is now accepted and ready to land.

Please get approval from vitalybuka@ before submitting.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126929/new/

https://reviews.llvm.org/D126929

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D126929: Add sanitizer metadata attributes to clang IR gen.

2022-06-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: clang/lib/CodeGen/SanitizerMetadata.cpp:48-50
+  GVSanitizerMetadata Meta;
+  if (GV->hasSanitizerMetadata())
+Meta = GV->getSanitizerMetadata();

hctim wrote:
> kstoimenov wrote:
> > Would it make sense to create two separate functions something like 
> > reportGlobalNew and reportGlobalLegacy to make it more clear which one is 
> > which? Then you code will be something like the one below? You can come up 
> > with better names for functions, I am sure. 
> > 
> > ```
> > reportGlobal(...) {
> >   reportGlobalNew(...);
> >   reportGlobalLegacy(...);
> > }
> > ```
> > 
> I think there's too much crossover (like calculating `IsExcluded` and setting 
> of `Meta.Sanitizer`) to warrant splitting them out; and the follow-up patch 
> is going to immediately delete the legacy code anyway :).
In that case, could you please add a FIXME comment indicating which code is 
supposed to be deleted? 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126929/new/

https://reviews.llvm.org/D126929

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D126929: Add sanitizer metadata attributes to clang IR gen.

2022-06-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: clang/lib/CodeGen/SanitizerMetadata.cpp:48-50
+  GVSanitizerMetadata Meta;
+  if (GV->hasSanitizerMetadata())
+Meta = GV->getSanitizerMetadata();

Would it make sense to create two separate functions something like 
reportGlobalNew and reportGlobalLegacy to make it more clear which one is 
which? Then you code will be something like the one below? You can come up with 
better names for functions, I am sure. 

```
reportGlobal(...) {
  reportGlobalNew(...);
  reportGlobalLegacy(...);
}
```



Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126929/new/

https://reviews.llvm.org/D126929

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124699: [DeadArgElim] Set unused arguments for internal functions

2022-05-31 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added a comment.

This change is breaking memory sanitizer in some cases. We observed that  when 
the argument is not actually removed the pass is dropping the noundef 
attribute. See the diff snippet below. Is that an intended behavior?

We would like to revert this as it is breaking MSan tests.

Thanks, 
Kirill

  < define internal %struct._object* @coro_wrapper_close(%struct.PyCoroWrapper* 
noundef %cw, %struct._object* noundef %args) #0 !dbg !1065 {
  ---
  > define internal %struct._object* @coro_wrapper_close(%struct.PyCoroWrapper* 
noundef %cw, %struct._object* %args) #0 !dbg !1065 {


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124699/new/

https://reviews.llvm.org/D124699

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D126100: Add sanitizer-specific GlobalValue attributes.

2022-05-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov accepted this revision.
kstoimenov added a comment.
This revision is now accepted and ready to land.

LGTM, but get one from vitalybuka@ too. 
Sorry about delayed review, I missed it. Next time ping me if I don't respond 
within a day.




Comment at: llvm/lib/IR/Globals.cpp:225
+const SanitizerMetadata &GlobalValue::getSanitizerMetadata() const {
+  assert(hasSanitizerMetadata());
+  return getContext().pImpl->GlobalValueSanitizerMetadata[this];

Do we expect that 'this' is in the map? If so could you add an assert here 
using 'find' for example? 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D126100/new/

https://reviews.llvm.org/D126100

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124493: Move Sanitizer metadata to be on-GlobalValue.

2022-05-02 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: clang/lib/CodeGen/SanitizerMetadataFactory.h:33
+
+class SanitizerMetadataFactory {
+  SanitizerMetadataFactory(const SanitizerMetadataFactory &) = delete;

Not sure if this class follows the 'factory' design pattern, which typically it 
would have some sort of 'produce' or 'create' method. Maybe 
SanitizerMatadataWriter or SanitizerMatadataCreator? 



Comment at: clang/lib/CodeGen/SanitizerMetadataFactory.h:46-48
+  void setASanSpecificMetadata(llvm::GlobalVariable::SanitizerMetadata &Meta,
+   llvm::GlobalVariable *GV, SourceLocation Loc,
+   QualType Ty, bool IsDynInit = false);

This could be private I think.



Comment at: compiler-rt/lib/asan/asan_globals.cpp:90
+
+  DataInfo info;
+  Symbolizer::GetOrInit()->SymbolizeData(g.beg, &info);

Outside of the scope of this change. It looks like DataInfo's constructor is 
calling memset on it's fields. I would have probably designed this differently 
because now it looks like potential uninitialized when we check for 'info.line 
!= 0'. 



Comment at: llvm/include/llvm/AsmParser/LLToken.h:205
   kw_nest,
+  kw_no_sanitize,
+  kw_no_sanitize_address,

Why do we need to add these to lex? I am surprised that didn't have the need so 
far. 



Comment at: llvm/include/llvm/IR/GlobalValue.h:312
+void RemoveSanitizer(GlobalSanitizer S) { Sanitizer &= ~S; }
+bool HasSanitizer(GlobalSanitizer S) const {
+  if (Sanitizer == GlobalSanitizer::NoSanitize)

I suspect that there might be another place where that logic exists. I am 
worried that we are duplicating it. Do you might looking for it in the code 
base?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124493/new/

https://reviews.llvm.org/D124493

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124493: Move Sanitizer metadata to be on-GlobalValue.

2022-05-02 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added a comment.

One meta-observation: can you split this into smaller patches?


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124493/new/

https://reviews.llvm.org/D124493

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D124679: [clangd] More precisely enable clang warnings through ClangTidy options

2022-04-29 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp:558
+  TU.ClangTidyProvider = addClangArgs({"-Wunused"}, "*");
+  EXPECT_THAT(*TU.build().getDiagnostics(), ElementsAre(UnusedFooWarning));
+  // And we can explicitly exclude a category too.

This breaks sanitizer buildbot: 
https://lab.llvm.org/buildbot/#/builders/5/builds/22933. 

Could you please fix or revert? 


```
/b/sanitizer-x86_64-linux-fast/build/llvm-project/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp:558
Value of: *TU.build().getDiagnostics()
Expected: has 1 element that (Diag at 1:16-1:19 = [unused function 'foo']) and 
(diag name "-Wunused-function") and (diag source 1) and (diag severity 3)
  Actual: { [1:16-1:19] unused function 'foo', [1:16-1:19] declaration must be 
declared within the '__llvm_libc' namespace }, which has 2 elements
/b/sanitizer-x86_64-linux-fast/build/llvm-project/clang-tools-extra/clangd/unittests/DiagnosticsTests.cpp:562
Value of: *TU.build().getDiagnostics()
Expected: is empty
  Actual: { [1:16-1:19] declaration must be declared within the '__llvm_libc' 
namespace }, whose size is 1

```


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D124679/new/

https://reviews.llvm.org/D124679

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D122407: [ASan] Reland of D116182 to always link asan_static library.

2022-03-24 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGdd67e6972f85: [ASan] Reland of D116182 to always link 
asan_static library. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D122407/new/

https://reviews.llvm.org/D122407

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_interface.inc
  compiler-rt/lib/asan/asan_rtl_x86_64.S

Index: compiler-rt/lib/asan/asan_rtl_x86_64.S
===
--- compiler-rt/lib/asan/asan_rtl_x86_64.S
+++ compiler-rt/lib/asan/asan_rtl_x86_64.S
@@ -16,6 +16,7 @@
 #define BEGINF(reg, op, s, i) \
 .section .text.FNAME(reg, op, s, i),"ax",@progbits ;\
 .globl  FNAME(reg, op, s, i) ;\
+.hidden  FNAME(reg, op, s, i) ;\
 ASM_TYPE_FUNCTION(FNAME(reg, op, s, i)) ;\
 .cfi_startproc ;\
 FNAME(reg, op, s, i): ;\
@@ -41,7 +42,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 1, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##1@PLT ;\
+jmp__asan_report_##op##1_asm ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_2(reg, op, i) \
 CLABEL(reg, op, 2, i): ;\
@@ -53,7 +54,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 2, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##2@PLT ;\
+jmp__asan_report_##op##2_asm ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_4(reg, op, i) \
 CLABEL(reg, op, 4, i): ;\
@@ -65,7 +66,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 4, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##4@PLT ;\
+jmp__asan_report_##op##4_asm ;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_1(reg, op) \
 BEGINF(reg, op, 1, add) ;\
@@ -96,7 +97,7 @@
 #define ASAN_MEMORY_ACCESS_FAIL(reg, op, s, i) \
 FLABEL(reg, op, s, i): ;\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##s@PLT;\
+jmp__asan_report_##op##s##_asm;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_8(reg, op) \
 BEGINF(reg, op, 8, add) ;\
Index: compiler-rt/lib/asan/asan_interface.inc
===
--- compiler-rt/lib/asan/asan_interface.inc
+++ compiler-rt/lib/asan/asan_interface.inc
@@ -180,37 +180,3 @@
 INTERFACE_WEAK_FUNCTION(__asan_default_options)
 INTERFACE_WEAK_FUNCTION(__asan_default_suppressions)
 INTERFACE_WEAK_FUNCTION(__asan_on_error)
-
-#if defined(__x86_64__) && !defined(__APPLE__) && !defined(_WIN32)
-
-#  define ASAN_MEMORY_ACCESS_CALLBACK_ADD(s, reg, op) \
-INTERFACE_FUNCTION(__asan_check_##op##_add_##s##_##reg)
-
-#  define ASAN_MEMORY_ACCESS_CALLBACKS_ADD(reg)\
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(1, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(1, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(2, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(2, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(4, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(4, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(8, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(8, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(16, reg, load) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(16, reg, store)
-
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RAX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RBX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RCX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RDX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RSI)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RDI)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RBP)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R8)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R9)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R12)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R13)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R14)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R15)
-
-#endif  // defined(__x86_64__) && !defined(__APPLE__) && !defined(_WIN32)
-
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -49,6 +48,7 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
   )
 endif()
 
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -30,6 +30,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
 //
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
 
 // RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
@@ -38,6 +39,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHE

[PATCH] D122407: [ASan] Reland of D116182 to always link asan_static library.

2022-03-24 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added a subscriber: mgorny.
Herald added a project: All.
kstoimenov requested review of this revision.
Herald added projects: clang, Sanitizers.
Herald added subscribers: Sanitizers, cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D122407

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_interface.inc
  compiler-rt/lib/asan/asan_rtl_x86_64.S

Index: compiler-rt/lib/asan/asan_rtl_x86_64.S
===
--- compiler-rt/lib/asan/asan_rtl_x86_64.S
+++ compiler-rt/lib/asan/asan_rtl_x86_64.S
@@ -16,6 +16,7 @@
 #define BEGINF(reg, op, s, i) \
 .section .text.FNAME(reg, op, s, i),"ax",@progbits ;\
 .globl  FNAME(reg, op, s, i) ;\
+.hidden  FNAME(reg, op, s, i) ;\
 ASM_TYPE_FUNCTION(FNAME(reg, op, s, i)) ;\
 .cfi_startproc ;\
 FNAME(reg, op, s, i): ;\
@@ -41,7 +42,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 1, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##1@PLT ;\
+jmp__asan_report_##op##1_asm ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_2(reg, op, i) \
 CLABEL(reg, op, 2, i): ;\
@@ -53,7 +54,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 2, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##2@PLT ;\
+jmp__asan_report_##op##2_asm ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_4(reg, op, i) \
 CLABEL(reg, op, 4, i): ;\
@@ -65,7 +66,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 4, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##4@PLT ;\
+jmp__asan_report_##op##4_asm ;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_1(reg, op) \
 BEGINF(reg, op, 1, add) ;\
@@ -96,7 +97,7 @@
 #define ASAN_MEMORY_ACCESS_FAIL(reg, op, s, i) \
 FLABEL(reg, op, s, i): ;\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##s@PLT;\
+jmp__asan_report_##op##s##_asm;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_8(reg, op) \
 BEGINF(reg, op, 8, add) ;\
Index: compiler-rt/lib/asan/asan_interface.inc
===
--- compiler-rt/lib/asan/asan_interface.inc
+++ compiler-rt/lib/asan/asan_interface.inc
@@ -180,37 +180,3 @@
 INTERFACE_WEAK_FUNCTION(__asan_default_options)
 INTERFACE_WEAK_FUNCTION(__asan_default_suppressions)
 INTERFACE_WEAK_FUNCTION(__asan_on_error)
-
-#if defined(__x86_64__) && !defined(__APPLE__) && !defined(_WIN32)
-
-#  define ASAN_MEMORY_ACCESS_CALLBACK_ADD(s, reg, op) \
-INTERFACE_FUNCTION(__asan_check_##op##_add_##s##_##reg)
-
-#  define ASAN_MEMORY_ACCESS_CALLBACKS_ADD(reg)\
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(1, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(1, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(2, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(2, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(4, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(4, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(8, reg, load)  \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(8, reg, store) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(16, reg, load) \
-ASAN_MEMORY_ACCESS_CALLBACK_ADD(16, reg, store)
-
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RAX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RBX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RCX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RDX)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RSI)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RDI)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(RBP)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R8)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R9)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R12)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R13)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R14)
-ASAN_MEMORY_ACCESS_CALLBACKS_ADD(R15)
-
-#endif  // defined(__x86_64__) && !defined(__APPLE__) && !defined(_WIN32)
-
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -49,6 +48,7 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
   )
 endif()
 
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -30,6 +30,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
 //
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
 
 // RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
@@ -38,6 +39,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
 

[PATCH] D121405: [ASan] Moved optimized callbacks out of asan_static to avoid DSO size increase.

2022-03-10 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rG035441ff3008: [ASan] Moved optimized callbacks out of 
asan_static to avoid DSO size increase. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D121405/new/

https://reviews.llvm.org/D121405

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_x86_64.S


Index: compiler-rt/lib/asan/asan_rtl_x86_64.S
===
--- compiler-rt/lib/asan/asan_rtl_x86_64.S
+++ compiler-rt/lib/asan/asan_rtl_x86_64.S
@@ -42,7 +42,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 1, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##1_asm ;\
+jmp__asan_report_##op##1 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_2(reg, op, i) \
 CLABEL(reg, op, 2, i): ;\
@@ -54,7 +54,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 2, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##2_asm ;\
+jmp__asan_report_##op##2 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_4(reg, op, i) \
 CLABEL(reg, op, 4, i): ;\
@@ -66,7 +66,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 4, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##4_asm ;\
+jmp__asan_report_##op##4 ;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_1(reg, op) \
 BEGINF(reg, op, 1, add) ;\
@@ -97,7 +97,7 @@
 #define ASAN_MEMORY_ACCESS_FAIL(reg, op, s, i) \
 FLABEL(reg, op, s, i): ;\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##s##_asm;\
+jmp__asan_report_##op##s##;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_8(reg, op) \
 BEGINF(reg, op, 8, add) ;\
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,6 +34,7 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
+asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -48,7 +49,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_STATIC_SOURCES
-asan_rtl_x86_64.S
   )
 endif()
 
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -30,7 +30,6 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
 //
-// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
 
 // RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
@@ -39,7 +38,6 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
 //
-// CHECK-ASAN-SHARED-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -842,10 +842,6 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.


Index: compiler-rt/lib/asan/asan_rtl_x86_64.S
===
--- compiler-rt/lib/asan/asan_rtl_x86_64.S
+++ compiler-rt/lib/asan/asan_rtl_x86_64.S
@@ -42,7 +42,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 1, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##1_asm ;\
+jmp__asan_report_##op##1 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_2(reg, op, i) \
 CLABEL(reg, op, 2, i): ;\
@@ -54,7 +54,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 2, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##2_asm ;\
+jmp__asan_report_##op##2 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_4(reg, op, i) \
 CLABEL(reg, op, 4, i): ;\
@@ -66,7 +66,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 4, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##4_asm ;\
+jmp__asan_report_##op##4 ;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_1(reg, op) \
 BEGINF(reg, op, 1, add) ;\
@@ -97,7 +97,7 @@
 #define ASAN_MEMORY_ACCESS_FAIL(reg, op, s, i) \
 FLABEL(reg, op, s, i): ;\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##s

[PATCH] D121405: [ASan] Moved optimized callbacks out of asan_static to avoid DSO size increase.

2022-03-10 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added a subscriber: mgorny.
Herald added a project: All.
kstoimenov requested review of this revision.
Herald added projects: clang, Sanitizers.
Herald added subscribers: Sanitizers, cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D121405

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_x86_64.S


Index: compiler-rt/lib/asan/asan_rtl_x86_64.S
===
--- compiler-rt/lib/asan/asan_rtl_x86_64.S
+++ compiler-rt/lib/asan/asan_rtl_x86_64.S
@@ -42,7 +42,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 1, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##1_asm ;\
+jmp__asan_report_##op##1 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_2(reg, op, i) \
 CLABEL(reg, op, 2, i): ;\
@@ -54,7 +54,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 2, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##2_asm ;\
+jmp__asan_report_##op##2 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_4(reg, op, i) \
 CLABEL(reg, op, 4, i): ;\
@@ -66,7 +66,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 4, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##4_asm ;\
+jmp__asan_report_##op##4 ;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_1(reg, op) \
 BEGINF(reg, op, 1, add) ;\
@@ -97,7 +97,7 @@
 #define ASAN_MEMORY_ACCESS_FAIL(reg, op, s, i) \
 FLABEL(reg, op, s, i): ;\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##s##_asm;\
+jmp__asan_report_##op##s##;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_8(reg, op) \
 BEGINF(reg, op, 8, add) ;\
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,6 +34,7 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
+asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -48,7 +49,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_STATIC_SOURCES
-asan_rtl_x86_64.S
   )
 endif()
 
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -30,7 +30,6 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
 //
-// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
 
 // RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
@@ -39,7 +38,6 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
 //
-// CHECK-ASAN-SHARED-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -842,10 +842,6 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.


Index: compiler-rt/lib/asan/asan_rtl_x86_64.S
===
--- compiler-rt/lib/asan/asan_rtl_x86_64.S
+++ compiler-rt/lib/asan/asan_rtl_x86_64.S
@@ -42,7 +42,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 1, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##1_asm ;\
+jmp__asan_report_##op##1 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_2(reg, op, i) \
 CLABEL(reg, op, 2, i): ;\
@@ -54,7 +54,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 2, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##2_asm ;\
+jmp__asan_report_##op##2 ;\
 
 #define ASAN_MEMORY_ACCESS_EXTRA_CHECK_4(reg, op, i) \
 CLABEL(reg, op, 4, i): ;\
@@ -66,7 +66,7 @@
 pop%rcx ;\
 jl RLABEL(reg, op, 4, i);\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##4_asm ;\
+jmp__asan_report_##op##4 ;\
 
 #define ASAN_MEMORY_ACCESS_CALLBACK_ADD_1(reg, op) \
 BEGINF(reg, op, 1, add) ;\
@@ -97,7 +97,7 @@
 #define ASAN_MEMORY_ACCESS_FAIL(reg, op, s, i) \
 FLABEL(reg, op, s, i): ;\
 mov%##reg,%rdi ;\
-jmp__asan_report_##op##s##_asm;\
+jmp__asan_report_##op#

[PATCH] D120394: [asan] Allow -fsanitize-address-globals-dead-stripping with -fno-data-sections for ELF

2022-02-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov accepted this revision.
kstoimenov added a comment.

LGTM


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120394/new/

https://reviews.llvm.org/D120394

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D120391: [Driver] Add -fno-sanitize-address-globals-dead-stripping

2022-02-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov accepted this revision.
kstoimenov added a comment.
This revision is now accepted and ready to land.

LGTM. But please wait for LTGM from vitalybuka@. Also there is internal 
asan-globals-live-support flag if you need it before this one lands.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D120391/new/

https://reviews.llvm.org/D120391

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118739: Revert "[ASan] Not linking asan_static library for DSO."

2022-02-01 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGd7dd7ad827a0: Revert "[ASan] Not linking asan_static 
library for DSO." (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118739/new/

https://reviews.llvm.org/D118739

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -39,7 +39,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
 //
-// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -845,16 +845,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
-  // Always link the static runtime for executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -39,7 +39,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
 //
-// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -845,16 +845,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
-  // Always link the static runtime for executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118739: Revert "[ASan] Not linking asan_static library for DSO."

2022-02-01 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
kstoimenov requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

It turned out that this change is causing segfaults in some situations. This 
reverts commit cf730d8ce1341ba593144df2e2bc8411238e04c3 
.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118739

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -39,7 +39,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
 //
-// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -845,16 +845,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
-  // Always link the static runtime for executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -39,7 +39,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
 //
-// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX: libclang_rt.asan_static-x86_64
 // CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -845,16 +845,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
-  // Always link the static runtime for executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118205: [ASan] Added a unit test for D118184.

2022-01-25 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG69da422bdaa6: [ASan] Added a unit test for D118184. 
(authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118205/new/

https://reviews.llvm.org/D118205

Files:
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -24,6 +24,24 @@
 //
 // CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
+// RUN: %clang -fsanitize=address %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
+//
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
+
+// RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
+//
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-shared-libsan \
 // RUN: -resource-dir=%S/Inputs/resource_dir \


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -24,6 +24,24 @@
 //
 // CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
+// RUN: %clang -fsanitize=address %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
+//
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
+
+// RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
+//
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
 // RUN: -resource-dir=%S/Inputs/resource_dir \
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118205: [ASan] Added a unit test for D118184.

2022-01-25 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 403083.
kstoimenov added a comment.

Fixed order.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118205/new/

https://reviews.llvm.org/D118205

Files:
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -24,6 +24,24 @@
 //
 // CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
+// RUN: %clang -fsanitize=address %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
+//
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
+
+// RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
+//
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-shared-libsan \
 // RUN: -resource-dir=%S/Inputs/resource_dir \


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -24,6 +24,24 @@
 //
 // CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
+// RUN: %clang -fsanitize=address %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
+//
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
+
+// RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
+//
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
 // RUN: -resource-dir=%S/Inputs/resource_dir \
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118205: [ASan] Added a unit test for D118184.

2022-01-25 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
kstoimenov added a reviewer: kda.
kstoimenov requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

To make sure the the libraries are there for executable and not there for DSOs.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118205

Files:
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -24,6 +24,24 @@
 //
 // CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
+// RUN: %clang -fsanitize=address %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
+//
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
+
+// RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
+//
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-shared-libsan \
 // RUN: -resource-dir=%S/Inputs/resource_dir \


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -24,6 +24,24 @@
 //
 // CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
+// RUN: %clang -fsanitize=address %s -### -o %t.o 2>&1 \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-EXECUTABLE-LINUX %s
+//
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan_static-x86_64
+// CHECK-ASAN-EXECUTABLE-LINUX: libclang_rt.asan-x86_64
+
+// RUN: %clang -fsanitize=address -shared %s -### -o %t.o 2>&1  \
+// RUN: -target x86_64-unknown-linux -fuse-ld=ld \
+// RUN: -resource-dir=%S/Inputs/resource_dir \
+// RUN: --sysroot=%S/Inputs/basic_linux_tree \
+// RUN:   | FileCheck --check-prefix=CHECK-ASAN-SHARED-LINUX %s
+//
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan-x86_64
+// CHECK-ASAN-SHARED-LINUX-NOT: libclang_rt.asan_static-x86_64
+
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
 // RUN: -resource-dir=%S/Inputs/resource_dir \
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118184: [ASan] Not linking asan_static library for DSO.

2022-01-25 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGcf730d8ce134: [ASan] Not linking asan_static library for 
DSO. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D118184/new/

https://reviews.llvm.org/D118184

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp


Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,16 +826,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
+  // Always link the static runtime for executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 


Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,16 +826,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
+  // Always link the static runtime for executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D118184: [ASan] Not lininking asan_static library for DSO.

2022-01-25 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
kstoimenov requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

Whithout this change DSOs fail to link because of missing 
asan_report_(load|store)n functions.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D118184

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp


Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,16 +826,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
+  // Always link the static runtime for executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 


Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,16 +826,16 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt())
-HelperStaticRuntimes.push_back("asan_static");
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
 return;
   }
 
+  // Always link the static runtime for executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Each static runtime that has a DSO counterpart above is excluded below,
   // but runtimes that exist only as static are not affected by needsSharedRt.
 
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116670: [ASan] Driver changes to always link-in asan_static library.

2022-01-11 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa3b9edf8b8c3: [ASan] Driver changes to always link-in 
asan_static library. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116670/new/

https://reviews.llvm.org/D116670

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,10 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,10 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116670: [ASan] Driver changes to always link-in asan_static library.

2022-01-06 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 397908.
kstoimenov added a comment.

Lint if statement.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116670/new/

https://reviews.llvm.org/D116670

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,10 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,10 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt())
+HelperStaticRuntimes.push_back("asan_static");
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116670: [ASan] Driver changes to always link-in asan_static library.

2022-01-05 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
kstoimenov requested review of this revision.
Herald added a project: clang.
Herald added a subscriber: cfe-commits.

This enables the changes from D116182 .


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D116670

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address 
-shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_static");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.


Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_static");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2022-01-05 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG027ffb173a68: [ASan] Moved optimized callbacks into a 
separate library. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_static.cpp
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/asan_rtl_static.cpp
===
--- /dev/null
+++ compiler-rt/lib/asan/asan_rtl_static.cpp
@@ -0,0 +1,15 @@
+//===-- asan_static_rtl.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+//
+// This file is a part of AddressSanitizer, an address sanity checker.
+//
+// Main file of the ASan run-time library.
+//===--===//
+
+// This file is empty for now. Main reason to have it is workaround for Windows
+// build, which complains because no files are part of the asan_static lib.
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,16 @@
   asan_new_delete.cpp
   )
 
+set(ASAN_STATIC_SOURCES
+  asan_rtl_static.cpp
+  )
+
+if (NOT WIN32 AND NOT APPLE)
+  list(APPEND ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +144,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +191,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +230,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2022-01-05 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 397613.
kstoimenov added a comment.

Removed driver part.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_static.cpp
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/asan_rtl_static.cpp
===
--- /dev/null
+++ compiler-rt/lib/asan/asan_rtl_static.cpp
@@ -0,0 +1,15 @@
+//===-- asan_static_rtl.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+//
+// This file is a part of AddressSanitizer, an address sanity checker.
+//
+// Main file of the ASan run-time library.
+//===--===//
+
+// This file is empty for now. Main reason to have it is workaround for Windows
+// build, which complains because no files are part of the asan_static lib.
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,16 @@
   asan_new_delete.cpp
   )
 
+set(ASAN_STATIC_SOURCES
+  asan_rtl_static.cpp
+  )
+
+if (NOT WIN32 AND NOT APPLE)
+  list(APPEND ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +144,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +191,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +230,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG71b3bfde9cd2: [ASan] Moved optimized callbacks into a 
separate library. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_static.cpp
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/asan_rtl_static.cpp
===
--- /dev/null
+++ compiler-rt/lib/asan/asan_rtl_static.cpp
@@ -0,0 +1,15 @@
+//===-- asan_static_rtl.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+//
+// This file is a part of AddressSanitizer, an address sanity checker.
+//
+// Main file of the ASan run-time library.
+//===--===//
+
+// This file is empty for now. Main reason to have it is workaround for Windows
+// build, which complains because no files are part of the asan_static lib.
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,16 @@
   asan_new_delete.cpp
   )
 
+set(ASAN_STATIC_SOURCES
+  asan_rtl_static.cpp
+  )
+
+if (NOT WIN32 AND NOT APPLE)
+  list(APPEND ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +144,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +191,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +230,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_ba

[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov requested review of this revision.
kstoimenov added a comment.

Added empty asan_static_rtl.cpp to work around the Windows build problem.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 396083.
kstoimenov added a comment.

Fixed a comment.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_static.cpp
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/asan_rtl_static.cpp
===
--- /dev/null
+++ compiler-rt/lib/asan/asan_rtl_static.cpp
@@ -0,0 +1,15 @@
+//===-- asan_static_rtl.cpp ---===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+//
+// This file is a part of AddressSanitizer, an address sanity checker.
+//
+// Main file of the ASan run-time library.
+//===--===//
+
+// This file is empty for now. Main reason to have it is workaround for Windows
+// build, which complains because no files are part of the asan_static lib.
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,16 @@
   asan_new_delete.cpp
   )
 
+set(ASAN_STATIC_SOURCES
+  asan_rtl_static.cpp
+  )
+
+if (NOT WIN32 AND NOT APPLE)
+  list(APPEND ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +144,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +191,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +230,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_static");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
__

[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 396082.
kstoimenov added a comment.

s/set/append/


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_static.cpp
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/asan_rtl_static.cpp
===
--- /dev/null
+++ compiler-rt/lib/asan/asan_rtl_static.cpp
@@ -0,0 +1,15 @@
+//===-- asan_rtl.cpp --===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+//
+// This file is a part of AddressSanitizer, an address sanity checker.
+//
+// Main file of the ASan run-time library.
+//===--===//
+
+// This file is empty for now. Main reason to have it is workaround for Windows
+// build, which complains because no files are part of the asan_static lib.
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,16 @@
   asan_new_delete.cpp
   )
 
+set(ASAN_STATIC_SOURCES
+  asan_rtl_static.cpp
+  )
+
+if (NOT WIN32 AND NOT APPLE)
+  list(APPEND ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +144,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +191,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +230,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_static");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
_

[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 396081.
kstoimenov added a comment.

Added asan_rtl_static.cpp empty file.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/asan_rtl_static.cpp
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/asan_rtl_static.cpp
===
--- /dev/null
+++ compiler-rt/lib/asan/asan_rtl_static.cpp
@@ -0,0 +1,15 @@
+//===-- asan_rtl.cpp --===//
+//
+// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
+// See https://llvm.org/LICENSE.txt for license information.
+// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
+//
+//===--===//
+//
+// This file is a part of AddressSanitizer, an address sanity checker.
+//
+// Main file of the ASan run-time library.
+//===--===//
+
+// This file is empty for now. Main reason to have it is workaround for Windows
+// build, which complains because no files are part of the asan_static lib.
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,16 @@
   asan_new_delete.cpp
   )
 
+set(ASAN_STATIC_SOURCES
+  asan_rtl_static.cpp
+  )
+
+if (NOT WIN32 AND NOT APPLE)
+  set(ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +144,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +191,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +230,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_static");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into

[PATCH] D116223: Revert "[ASan] Moved optimized callbacks into a separate library."

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG4bf31659fac7: Revert "[ASan] Moved optimized callbacks 
into a separate library." (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116223/new/

https://reviews.llvm.org/D116223

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,7 +261,6 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
-$
 $
 $
 $
@@ -287,7 +286,6 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
-  $
   $
   $
   $
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,6 +34,7 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
+asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -42,12 +43,6 @@
   asan_new_delete.cpp
   )
 
-if (NOT WIN32 AND NOT APPLE)
-  set(ASAN_STATIC_SOURCES
-asan_rtl_x86_64.S
-  )
-endif()
-
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -140,12 +135,6 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
-  add_compiler_rt_object_libraries(RTAsan_static
-ARCHS ${ASAN_SUPPORTED_ARCH}
-SOURCES ${ASAN_STATIC_SOURCES}
-ADDITIONAL_HEADERS ${ASAN_HEADERS}
-CFLAGS ${ASAN_CFLAGS}
-DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -187,14 +176,6 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
-
-  add_compiler_rt_runtime(clang_rt.asan_static
-STATIC
-ARCHS ${ASAN_SUPPORTED_ARCH}
-OBJECT_LIBS RTAsan_static
-CFLAGS ${ASAN_CFLAGS}
-DEFS ${ASAN_COMMON_DEFINITIONS}
-PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -226,14 +207,6 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
-  add_compiler_rt_runtime(clang_rt.asan_static
-STATIC
-ARCHS ${ASAN_SUPPORTED_ARCH}
-OBJECT_LIBS RTAsan_static
-CFLAGS ${ASAN_CFLAGS}
-DEFS ${ASAN_COMMON_DEFINITIONS}
-PARENT_TARGET asan)
-
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,11 +826,6 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt()) {
-HelperStaticRuntimes.push_back("asan_static");
-  }
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116223: Revert "[ASan] Moved optimized callbacks into a separate library."

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added a subscriber: mgorny.
kstoimenov requested review of this revision.
Herald added projects: clang, Sanitizers.
Herald added subscribers: Sanitizers, cfe-commits.

This reverts commit ab3640aa0e8361921a5d0cdc393a5b75e78ec22b 
.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D116223

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,7 +261,6 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
-$
 $
 $
 $
@@ -287,7 +286,6 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
-  $
   $
   $
   $
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,6 +34,7 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
+asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -42,12 +43,6 @@
   asan_new_delete.cpp
   )
 
-if (NOT WIN32 AND NOT APPLE)
-  set(ASAN_STATIC_SOURCES
-asan_rtl_x86_64.S
-  )
-endif()
-
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -140,12 +135,6 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
-  add_compiler_rt_object_libraries(RTAsan_static
-ARCHS ${ASAN_SUPPORTED_ARCH}
-SOURCES ${ASAN_STATIC_SOURCES}
-ADDITIONAL_HEADERS ${ASAN_HEADERS}
-CFLAGS ${ASAN_CFLAGS}
-DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -187,14 +176,6 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
-
-  add_compiler_rt_runtime(clang_rt.asan_static
-STATIC
-ARCHS ${ASAN_SUPPORTED_ARCH}
-OBJECT_LIBS RTAsan_static
-CFLAGS ${ASAN_CFLAGS}
-DEFS ${ASAN_COMMON_DEFINITIONS}
-PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -226,14 +207,6 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
-  add_compiler_rt_runtime(clang_rt.asan_static
-STATIC
-ARCHS ${ASAN_SUPPORTED_ARCH}
-OBJECT_LIBS RTAsan_static
-CFLAGS ${ASAN_CFLAGS}
-DEFS ${ASAN_COMMON_DEFINITIONS}
-PARENT_TARGET asan)
-
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,11 +826,6 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
-  // Always link the static runtime regardless of DSO or executable.
-  if (SanArgs.needsAsanRt()) {
-HelperStaticRuntimes.push_back("asan_static");
-  }
-
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGab3640aa0e83: [ASan] Moved optimized callbacks into a 
separate library. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,12 @@
   asan_new_delete.cpp
   )
 
+if (NOT WIN32 AND NOT APPLE)
+  set(ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +140,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +187,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +226,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_static");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added a comment.

Renamed it 'dso' to 'static'. I know it could be a little bit confusing. I was 
considering 'static_link' or 'always_static', but it seems too long.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-23 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 396031.
kstoimenov marked an inline comment as done.
kstoimenov added a comment.

Remaned dso to static.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,12 @@
   asan_new_delete.cpp
   )
 
+if (NOT WIN32 AND NOT APPLE)
+  set(ASAN_STATIC_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +140,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_static
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_STATIC_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -176,6 +187,14 @@
 LINK_FLAGS ${WEAK_SYMBOL_LINK_FLAGS}
 DEFS ${ASAN_DYNAMIC_DEFINITIONS}
 PARENT_TARGET asan)
+
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
 else()
   # Build separate libraries for each target.
 
@@ -207,6 +226,14 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_static
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_static
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
+
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the static runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_static");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-22 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 395914.
kstoimenov added a comment.

Updated a comment.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D116182/new/

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,12 @@
   asan_new_delete.cpp
   )
 
+if (NOT WIN32 AND NOT APPLE)
+  set(ASAN_DSO_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +140,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_dso
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_DSO_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -207,6 +218,13 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_dso
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_dso
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // Always link the DSO part of the runtime regardless of DSO or executable.
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_dso");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D116182: [ASan] Moved optimized callbacks into a separate library.

2021-12-22 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added a subscriber: mgorny.
kstoimenov requested review of this revision.
Herald added projects: clang, Sanitizers.
Herald added subscribers: Sanitizers, cfe-commits.

This will allow linking in the callbacks directly instead of using PLT.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D116182

Files:
  clang/lib/Driver/ToolChains/CommonArgs.cpp
  clang/test/Driver/sanitizer-ld.c
  compiler-rt/lib/asan/CMakeLists.txt
  compiler-rt/lib/asan/tests/CMakeLists.txt

Index: compiler-rt/lib/asan/tests/CMakeLists.txt
===
--- compiler-rt/lib/asan/tests/CMakeLists.txt
+++ compiler-rt/lib/asan/tests/CMakeLists.txt
@@ -261,6 +261,7 @@
   set(ASAN_TEST_RUNTIME_OBJECTS
 $
 $
+$
 $
 $
 $
@@ -286,6 +287,7 @@
 # Test w/o ASan instrumentation. Link it with ASan statically.
 add_executable(AsanNoinstTest # FIXME: .arch?
   $
+  $
   $
   $
   $
Index: compiler-rt/lib/asan/CMakeLists.txt
===
--- compiler-rt/lib/asan/CMakeLists.txt
+++ compiler-rt/lib/asan/CMakeLists.txt
@@ -34,7 +34,6 @@
 
 if (NOT WIN32 AND NOT APPLE)
   list(APPEND ASAN_SOURCES
-asan_rtl_x86_64.S
 asan_interceptors_vfork.S
 )
 endif()
@@ -43,6 +42,12 @@
   asan_new_delete.cpp
   )
 
+if (NOT WIN32 AND NOT APPLE)
+  set(ASAN_DSO_SOURCES
+asan_rtl_x86_64.S
+  )
+endif()
+
 set(ASAN_PREINIT_SOURCES
   asan_preinit.cpp
   )
@@ -135,6 +140,12 @@
 ADDITIONAL_HEADERS ${ASAN_HEADERS}
 CFLAGS ${ASAN_CFLAGS}
 DEFS ${ASAN_COMMON_DEFINITIONS})
+  add_compiler_rt_object_libraries(RTAsan_dso
+ARCHS ${ASAN_SUPPORTED_ARCH}
+SOURCES ${ASAN_DSO_SOURCES}
+ADDITIONAL_HEADERS ${ASAN_HEADERS}
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS})
   add_compiler_rt_object_libraries(RTAsan_preinit
 ARCHS ${ASAN_SUPPORTED_ARCH}
 SOURCES ${ASAN_PREINIT_SOURCES}
@@ -207,6 +218,13 @@
 DEFS ${ASAN_COMMON_DEFINITIONS}
 PARENT_TARGET asan)
 
+  add_compiler_rt_runtime(clang_rt.asan_dso
+STATIC
+ARCHS ${ASAN_SUPPORTED_ARCH}
+OBJECT_LIBS RTAsan_dso
+CFLAGS ${ASAN_CFLAGS}
+DEFS ${ASAN_COMMON_DEFINITIONS}
+PARENT_TARGET asan)
   add_compiler_rt_runtime(clang_rt.asan-preinit
 STATIC
 ARCHS ${ASAN_SUPPORTED_ARCH}
Index: clang/test/Driver/sanitizer-ld.c
===
--- clang/test/Driver/sanitizer-ld.c
+++ clang/test/Driver/sanitizer-ld.c
@@ -22,7 +22,7 @@
 // RUN: --sysroot=%S/Inputs/basic_linux_tree \
 // RUN:   | FileCheck --check-prefix=CHECK-ASAN-NO-LINK-RUNTIME-LINUX %s
 //
-// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan
+// CHECK-ASAN-NO-LINK-RUNTIME-LINUX-NOT: libclang_rt.asan-x86_64
 
 // RUN: %clang -no-canonical-prefixes %s -### -o %t.o 2>&1 \
 // RUN: -target i386-unknown-linux -fuse-ld=ld -fsanitize=address -shared-libsan \
Index: clang/lib/Driver/ToolChains/CommonArgs.cpp
===
--- clang/lib/Driver/ToolChains/CommonArgs.cpp
+++ clang/lib/Driver/ToolChains/CommonArgs.cpp
@@ -826,6 +826,11 @@
   if (SanArgs.needsStatsRt() && SanArgs.linkRuntimes())
 StaticRuntimes.push_back("stats_client");
 
+  // ZXCV
+  if (SanArgs.needsAsanRt()) {
+HelperStaticRuntimes.push_back("asan_dso");
+  }
+
   // Collect static runtimes.
   if (Args.hasArg(options::OPT_shared)) {
 // Don't link static runtimes into DSOs.
___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-11-04 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
kstoimenov marked an inline comment as done.
Closed by commit rG3f1aca58df8f: [ASan] Added stack safety support in address 
sanitizer. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-pipeline' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-pipeline' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAn

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-11-04 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384902.
kstoimenov added a comment.

Moved AddressSanitizer back to the loop.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-pipeline' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-pipeline' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer ASan(*F.getParent(), &GlobalsMD, 

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-11-04 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384877.
kstoimenov marked 2 inline comments as done.
kstoimenov added a comment.

Fixed tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-pipeline' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-pipeline' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer ASan(*F.getParen

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384587.
kstoimenov added a comment.

Restored StackSafetyAnalysis.h.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer ASan(*F.getParent(), &GlobalsMD, Com

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384583.
kstoimenov added a comment.

After removing function pass.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-Addr

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa55c4ec1cee7: [ASan] Process functions in Asan module pass 
(authored by kstoimenov).

Changed prior to commit:
  https://reviews.llvm.org/D112732?vs=384544&id=384571#toc

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/tools/opt/NewPMDriver.cpp


Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -344,8 +344,6 @@
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass(Opts));
   return true;
 } else if (Name == "asan-function-pipeline") {
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 
-sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s 
-passes='module(require,sancov-module,asan-module),function(asan)'
 -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | 
FileCheck %s
+; RUN: opt < %s 
-passes='module(require,sancov-module,asan-module)' 
-sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck 
%s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1300,14 +1300,22 @@
   UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) 
{
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, Options.CompileKernel,
-   Options.Recover, UseGlobalGC,
-   UseOdrIndicator, DestructorKind);
-  if (Sanitizer.instrumentModule(M))
-return PreservedAnalyses::none();
-  return PreservedAnalyses::all();
+  ModuleAnalysisManager &MAM) {
+  GlobalsMetadata &GlobalsMD = MAM.getResult(M);
+  ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, Options.CompileKernel,
+ Options.Recover, UseGlobalGC,
+ UseOdrIndicator, DestructorKind);
+  bool Modified = false;
+  auto &FAM = 
MAM.getResult(M).getManager();
+  for (Function &F : M) {
+AddressSanitizer FunctionSanitizer(M, &GlobalsMD, Options.CompileKernel,
+   Options.Recover, Options.UseAfterScope,
+   Options.UseAfterReturn);
+const TargetLibraryInfo &TLI = FAM.getResult(F);
+Modified |= FunctionSanitizer.instrumentFunction(F, &TLI);
+  }
+  Modified |= ModuleSanitizer.instrumentModule(M);
+  return Modified ? PreservedAnalyses::none() : PreservedAnalyses::all();
 }
 
 INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md",
@@ -2841,6 +2849,8 @@
 
 bool AddressSanitizer::instrumentFunction(Function &F,
   const TargetLibraryInfo *TLI) {
+  if (F.empty())
+return false;
   if (F.getLinkage() == GlobalValue::AvailableExternallyLinkage) return false;
   if (!ClDebugFunc.empty() && ClDebugFunc == F.getName()) return false;
   if (F.getName().startswith("__asan_")) return false;
Index: clang/lib/CodeGen/BackendUtil.cpp
===
--- clang/lib/CodeGen/BackendUtil.cpp
+++ clang/lib/CodeGen/BackendUtil.cpp
@@ -1188,8 +1188,6 @@
 MPM.addPass(RequireAnalysisPass());
 MPM.addPass(ModuleAddressSanitizerPass(
 Opts, UseGlobalGC, UseOdrIndicator, DestructorKind));
-MPM.addPass(
-createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   }
 };
 ASanPass(SanitizerKind::Address, false);


Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPM

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384544.
kstoimenov added a comment.

After merging D113072 .


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/tools/opt/NewPMDriver.cpp


Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -344,8 +344,6 @@
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass(Opts));
   return true;
 } else if (Name == "asan-function-pipeline") {
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 
-sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s 
-passes='module(require,sancov-module,asan-module),function(asan)'
 -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | 
FileCheck %s
+; RUN: opt < %s 
-passes='module(require,sancov-module,asan-module)' 
-sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck 
%s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1300,14 +1300,22 @@
   UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) 
{
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, Options.CompileKernel,
-   Options.Recover, UseGlobalGC,
-   UseOdrIndicator, DestructorKind);
-  if (Sanitizer.instrumentModule(M))
-return PreservedAnalyses::none();
-  return PreservedAnalyses::all();
+  ModuleAnalysisManager &MAM) {
+  GlobalsMetadata &GlobalsMD = MAM.getResult(M);
+  ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, Options.CompileKernel,
+ Options.Recover, UseGlobalGC,
+ UseOdrIndicator, DestructorKind);
+  bool Modified = false;
+  auto &FAM = 
MAM.getResult(M).getManager();
+  for (Function &F : M) {
+AddressSanitizer FunctionSanitizer(M, &GlobalsMD, Options.CompileKernel,
+   Options.Recover, Options.UseAfterScope,
+   Options.UseAfterReturn);
+const TargetLibraryInfo &TLI = FAM.getResult(F);
+Modified |= FunctionSanitizer.instrumentFunction(F, &TLI);
+  }
+  Modified |= ModuleSanitizer.instrumentModule(M);
+  return Modified ? PreservedAnalyses::none() : PreservedAnalyses::all();
 }
 
 INITIALIZE_PASS(ASanGlobalsMetadataWrapperPass, "asan-globals-md",
@@ -2841,6 +2849,8 @@
 
 bool AddressSanitizer::instrumentFunction(Function &F,
   const TargetLibraryInfo *TLI) {
+  if (F.empty())
+return false;
   if (F.getLinkage() == GlobalValue::AvailableExternallyLinkage) return false;
   if (!ClDebugFunc.empty() && ClDebugFunc == F.getName()) return false;
   if (F.getName().startswith("__asan_")) return false;
Index: llvm/lib/Passes/PassBuilder.cpp
===
--- llvm/lib/Passes/PassBuilder.cpp
+++ llvm/lib/Passes/PassBuilder.cpp
@@ -580,10 +580,6 @@
   return parseSinglePassOption(Params, "minimal", "LowerMatrixIntrinsics");
 }
 
-Expected parseModuleAddressSanitizerPassOptions(StringRef Params) {
-  return parseSinglePassOption(Params, "kernel", "ModuleAddressSanitizer");
-}
-
 Expected parseASanPassOptions(StringRef Params) {
   AddressSanitizerOptions Result;
   while (!Params.empty()) {
Index: clang/lib/CodeGen/BackendUtil.cpp
===
--- clang/lib/CodeGen/BackendUtil.cpp
+++ clang/lib/CodeGen/BackendUtil.cpp
@@ -1188,8 +1188,6 @@

[PATCH] D113131: [ASan] Process functions in Asan module pass.

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
kstoimenov added a reviewer: vitalybuka.
Herald added subscribers: ormris, hiraditya.
kstoimenov requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Re-land of D112732  with fixes.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D113131

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan<>,asan
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,17 +1295,28 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: clang/lib/CodeGen/BackendUtil.cpp:1189
+MPM.addPass(ModuleAddressSanitizerPass(
+CompileKernel, Recover, ModuleUseAfterScope, UseOdrIndicator,
+DestructorKind, UseAfterScope, UseAfterReturn));

rupprecht wrote:
> rupprecht wrote:
> > I'm seeing build errors here, and I'm not sure what this is supposed to be?
> > 
> > ```
> > /home/rupprecht/src/llvm-project/clang/lib/CodeGen/BackendUtil.cpp:1189:37: 
> > error: use of undeclared identifier 'ModuleUseAfterScope'; did you mean 
> > 'UseAfterScope'?
> > CompileKernel, Recover, ModuleUseAfterScope, UseOdrIndicator,
> > ^~~
> > UseAfterScope
> > ```
> > 
> > https://buildkite.com/llvm-project/upstream-bazel-rbe/builds/11193#bbebbf99-a2c1-4959-b6f7-f7fb816591c0
> I see it was reverted already, sorry!
Sorry about breaking the build. I can't understand how my local tests passed. 
Functions with a long list of boolean params are so error prone. The downside 
of not using the builder pattern :-( 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D113129: Revert "[ASan] Process functions in Asan module pass"

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rGb3145323b549: Revert "[ASan] Process functions in Asan 
module pass" (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D113129/new/

https://reviews.llvm.org/D113129

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,16 +340,19 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
+AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
+  MPM.addPass(
+  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
-  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(ModuleAddressSanitizerPass());
+  MPM.addPass(
+  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: asan<>,asan
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: function(asan<>,asan)
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,28 +1295,17 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind, bool UseAfterScope,
-AsanDetectStackUseAfterReturnMode UseAfterReturn)
+AsanDtorKind DestructorKind)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
-  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  ModuleAnalysisManager &MAM) {
-  GlobalsMetadata &GlobalsMD = MAM.getResult(M);
-  ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, CompileKernel, Recover,
- UseGlobalGC, UseOdrIndicator,
- DestructorKind);
-  bool Modified = false

[PATCH] D113129: Revert "[ASan] Process functions in Asan module pass"

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added subscribers: ormris, hiraditya.
kstoimenov requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

This reverts commit 76ea87b94e5cba335d691e4e18e3464ad45c8b52 
.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D113129

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,16 +340,19 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
+AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
+  MPM.addPass(
+  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
-  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(ModuleAddressSanitizerPass());
+  MPM.addPass(
+  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: asan<>,asan
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: function(asan<>,asan)
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,28 +1295,17 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind, bool UseAfterScope,
-AsanDetectStackUseAfterReturnMode UseAfterReturn)
+AsanDtorKind DestructorKind)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
-  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  ModuleAnalysisManager &MAM) {
-  GlobalsMetadata &GlobalsMD = MAM.getResult(M);
-  ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, CompileKernel, Recover,
- UseGlobalGC, UseOdrIndicator,
- Des

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG76ea87b94e5c: [ASan] Process functions in Asan module pass 
(authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan<>,asan
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,17 +1295,28 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384515.
kstoimenov added a comment.

After rebase.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan<>,asan
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,17 +1295,28 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  ModuleAnalysisManager &MAM) {
+  GlobalsMetadata &GlobalsMD = MAM.getResult(M);
+  ModuleAddressSanitizer Module

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384488.
kstoimenov marked 3 inline comments as done.
kstoimenov added a comment.

Moved module after function.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan<>,asan
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,17 +1295,28 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  ModuleAnalysisManager &MAM) {
+  GlobalsMetadata &Gl

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384467.
kstoimenov added a comment.

Moved empty check to the top of the function.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan<>,asan
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,17 +1295,27 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  ModuleAnalysisManager &MAM) {
+  GlobalsMetadata &GlobalsMD = MAM.getResult(M);

[PATCH] D112732: [ASan] Process functions in Asan module pass

2021-11-03 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 384465.
kstoimenov added a comment.

Moved module instumentation back ahead of function instrumentation.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan<>,asan
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,17 +1295,27 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  ModuleAnalysisManager &MAM) {
+  GlobalsMetadata &GlobalsM

[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-11-01 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h:92
 
-struct AddressSanitizerOptions {
-  AddressSanitizerOptions()

vitalybuka wrote:
> Why do we need to remove AddressSanitizerOptions?
Adding it back in as discussed offline. 



Comment at: llvm/lib/Passes/PassRegistry.def:139
 "kernel;recover")
 MODULE_PASS_WITH_PARAMS("asan-module",
 "ModuleAddressSanitizerPass",

vitalybuka wrote:
> And I guess now we need to use parseASanPassOptions here? 
I must have reverted by an accident. Should be done now. 



Comment at: llvm/lib/Passes/PassRegistry.def:146
 },
 parseModuleAddressSanitizerPassOptions,
 "kernel")

I think parseModuleAddressSanitizerPassOptions does exactly the same thing as 
parseASanPassOptions, which is to look for the "kernel" param. 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-11-01 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 383921.
kstoimenov marked an inline comment as done.
kstoimenov added a comment.

Update after discussing with vitalybuka@.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan<>,asan
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1295,17 +1295,28 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  ModuleAnalysisManager &MAM) {
+  Global

[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-11-01 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 383819.
kstoimenov added a comment.

Fixed remaing 2 tests.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
  llvm/test/Other/new-pm-print-pipeline.ll
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/test/Other/new-pm-print-pipeline.ll
===
--- llvm/test/Other/new-pm-print-pipeline.ll
+++ llvm/test/Other/new-pm-print-pipeline.ll
@@ -46,8 +46,8 @@
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(hwasan<>,hwasan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-14
 ; CHECK-14: hwasan<>,hwasan
 
-; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='function(asan<>,asan)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
-; CHECK-15: function(asan<>,asan)
+; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(asan-module<>,asan-module)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-15
+; CHECK-15: asan-module<>,asan-module
 
 ; RUN: opt -disable-output -disable-verify -print-pipeline-passes -passes='module(loop-extract<>,loop-extract)' < %s | FileCheck %s --match-full-lines --check-prefixes=CHECK-16
 ; CHECK-16: loop-extract<>,loop-extract
Index: llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
===
--- llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
+++ llvm/test/Instrumentation/SanitizerCoverage/tracing-comdat.ll
@@ -2,7 +2,7 @@
 ; Make sure asan does not instrument __sancov_gen_
 
 ; RUN: opt < %s -passes='module(sancov-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
-; RUN: opt < %s -passes='module(require,sancov-module,asan-module),function(asan)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
+; RUN: opt < %s -passes='module(require,sancov-module,asan-module)' -sanitizer-coverage-level=3 -sanitizer-coverage-trace-pc-guard  -S  | FileCheck %s
 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
 target triple = "x86_64-unknown-linux-gnu"
 $Foo = comdat any
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1254,35 +1254,6 @@
   return GlobalsMetadata(M);
 }
 
-PreservedAnalyses AddressSanitizerPass::run(Function &F,
-AnalysisManager &AM) {
-  auto &MAMProxy = AM.getResult(F);
-  Module &M = *F.getParent();
-  if (auto *R = MAMProxy.getCachedResult(M)) {
-const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
-if (Sanitizer.instrumentFunction(F, TLI))
-  return PreservedAnalyses::none();
-return PreservedAnalyses::all();
-  }
-
-  report_fatal_error(
-  "The ASanGlobalsMetadataAnalysis is required to run before "
-  "AddressSanitizer can run");
-  return PreservedAnalyses::all();
-}
-
-void AddressSanitizerPass::printPipeline(
-raw_ostream &OS, function_ref MapClassName2PassName) {
-  static_cast *>(this)->printPipeline(
-  OS, MapClassName2PassName);
-  OS << "<";
-  if (Options.CompileKernel)
-OS << "kernel";
-  OS << ">";
-}
-
 void ModuleAddressSanitizerPass::

[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-10-29 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp:1289
+  }
+  Modified |= ModuleSanitizer.instrumentModule(M);
+  if (Modified)

At first I had module sanitizer run first, but some tests failed. Is it 
possible that the function pass has some side effects, which are used by the 
module pass? 



Comment at: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp:2829
   if (F.getName().startswith("__asan_")) return false;
+  if (F.empty()) return false;
 

This was a pain to figure out. Maybe we should apply the same check in HWAsan? 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-10-29 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 383536.
kstoimenov marked 2 inline comments as done.
kstoimenov added a comment.

Fixed test failures and crashes.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/tools/opt/NewPMDriver.cpp

Index: llvm/tools/opt/NewPMDriver.cpp
===
--- llvm/tools/opt/NewPMDriver.cpp
+++ llvm/tools/opt/NewPMDriver.cpp
@@ -340,19 +340,16 @@
   PB.registerPipelineParsingCallback(
   [](StringRef Name, ModulePassManager &MPM,
  ArrayRef) {
-AddressSanitizerOptions Opts;
 if (Name == "asan-pipeline") {
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
   MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 } else if (Name == "asan-function-pipeline") {
+  // FIXME: now this is the same as asan-pipeline and can me removed.
   MPM.addPass(
   RequireAnalysisPass());
-  MPM.addPass(
-  createModuleToFunctionPassAdaptor(AddressSanitizerPass(Opts)));
+  MPM.addPass(ModuleAddressSanitizerPass());
   return true;
 }
 return false;
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1254,35 +1254,6 @@
   return GlobalsMetadata(M);
 }
 
-PreservedAnalyses AddressSanitizerPass::run(Function &F,
-AnalysisManager &AM) {
-  auto &MAMProxy = AM.getResult(F);
-  Module &M = *F.getParent();
-  if (auto *R = MAMProxy.getCachedResult(M)) {
-const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
-if (Sanitizer.instrumentFunction(F, TLI))
-  return PreservedAnalyses::none();
-return PreservedAnalyses::all();
-  }
-
-  report_fatal_error(
-  "The ASanGlobalsMetadataAnalysis is required to run before "
-  "AddressSanitizer can run");
-  return PreservedAnalyses::all();
-}
-
-void AddressSanitizerPass::printPipeline(
-raw_ostream &OS, function_ref MapClassName2PassName) {
-  static_cast *>(this)->printPipeline(
-  OS, MapClassName2PassName);
-  OS << "<";
-  if (Options.CompileKernel)
-OS << "kernel";
-  OS << ">";
-}
-
 void ModuleAddressSanitizerPass::printPipeline(
 raw_ostream &OS, function_ref MapClassName2PassName) {
   static_cast *>(this)->printPipeline(
@@ -1295,17 +1266,28 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
-  AnalysisManager &AM) {
-  GlobalsMetadata &GlobalsMD = AM.getResult(M);
-  ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
-   UseGlobalGC, UseOdrIndicator,
-   DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  ModuleAnalysisManager &MAM) {
+  GlobalsMetadata &GlobalsMD = MAM.getResult(M);
+  ModuleAddressSanitizer ModuleSanitizer(M, &GlobalsMD, CompileKernel, Recover,
+ UseGlobalGC, UseOdrIndicator,
+ DestructorKind);
+  bool Modified = false;
+  auto &FAM = MAM.getResult(M).getManager();
+  for (Function &F : M) {
+AddressSanitizer FunctionSanitizer(M, &GlobalsMD, CompileKernel, Recover,
+   UseAfterScope, UseAfterReturn);
+const TargetLibraryInfo &TLI = FAM.getResult(F);
+Modified |= FunctionSanitizer.instrumentFunction(F, &TLI);
+  }
+  Modified |= ModuleSanitizer.instrumentModule(M);
+  if (Modified)
 return PreservedAnalyses::none();
   return PreservedAnalyses::all();
 }
@@ -2844,6 +2826,7 @

[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-10-28 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov planned changes to this revision.
kstoimenov added a comment.

Tests are not passing. Hold off the review.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-10-28 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 383072.
kstoimenov added a comment.

Added AddressSanitizerOptions back.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1254,35 +1254,6 @@
   return GlobalsMetadata(M);
 }
 
-PreservedAnalyses AddressSanitizerPass::run(Function &F,
-AnalysisManager &AM) {
-  auto &MAMProxy = AM.getResult(F);
-  Module &M = *F.getParent();
-  if (auto *R = MAMProxy.getCachedResult(M)) {
-const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
-if (Sanitizer.instrumentFunction(F, TLI))
-  return PreservedAnalyses::none();
-return PreservedAnalyses::all();
-  }
-
-  report_fatal_error(
-  "The ASanGlobalsMetadataAnalysis is required to run before "
-  "AddressSanitizer can run");
-  return PreservedAnalyses::all();
-}
-
-void AddressSanitizerPass::printPipeline(
-raw_ostream &OS, function_ref MapClassName2PassName) {
-  static_cast *>(this)->printPipeline(
-  OS, MapClassName2PassName);
-  OS << "<";
-  if (Options.CompileKernel)
-OS << "kernel";
-  OS << ">";
-}
-
 void ModuleAddressSanitizerPass::printPipeline(
 raw_ostream &OS, function_ref MapClassName2PassName) {
   static_cast *>(this)->printPipeline(
@@ -1295,9 +1266,11 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
   AnalysisManager &AM) {
@@ -1305,7 +1278,14 @@
   ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
UseGlobalGC, UseOdrIndicator,
DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  bool Modified = Sanitizer.instrumentModule(M);
+  const TargetLibraryInfo *TLI = &AM.getResult(M);
+  for (Function &F : M) {
+AddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
+   UseAfterScope, UseAfterReturn);
+Modified |= Sanitizer.instrumentFunction(F, TLI);
+  }
+  if (Modified)
 return PreservedAnalyses::none();
   return PreservedAnalyses::all();
 }
Index: llvm/lib/Passes/PassRegistry.def
===
--- llvm/lib/Passes/PassRegistry.def
+++ llvm/lib/Passes/PassRegistry.def
@@ -393,13 +393,6 @@
   "no-profile-peeling;profile-peeling;"
   "no-runtime;runtime;"
   "no-upperbound;upperbound")
-FUNCTION_PASS_WITH_PARAMS("asan",
-  "AddressSanitizerPass",
-   [](AddressSanitizerOptions Opts) {
- return AddressSanitizerPass(Opts);
-   },
-  parseASanPassOptions,
-  "kernel")
 FUNCTION_PASS_WITH_PARAMS("msan",
   "MemorySanitizerPass",
[](MemorySanitizerOptions Opts) {
Index: llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
===
--- llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
+++ llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
@@ -103,26 +103,6 @@
   AsanDetectStackUseAfterReturnMode UseAfterReturn;
 };
 
-/// Public interface to the address sanitizer pass for instrumenting code to
-/// check for various memory errors at runtime.
-///
-/// The sanitizer itself is a function pass that works by inserting various
-/// calls to the ASan runtime library functions. The runtime library essentially
-/// replaces malloc() and free() with custom implementations that allow regions
-/// surrounding requested memory to be checked for invalid accesses

[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-10-28 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 383071.
kstoimenov edited the summary of this revision.
kstoimenov added a comment.

Reverted pass builder.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1254,35 +1254,6 @@
   return GlobalsMetadata(M);
 }
 
-PreservedAnalyses AddressSanitizerPass::run(Function &F,
-AnalysisManager &AM) {
-  auto &MAMProxy = AM.getResult(F);
-  Module &M = *F.getParent();
-  if (auto *R = MAMProxy.getCachedResult(M)) {
-const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
-if (Sanitizer.instrumentFunction(F, TLI))
-  return PreservedAnalyses::none();
-return PreservedAnalyses::all();
-  }
-
-  report_fatal_error(
-  "The ASanGlobalsMetadataAnalysis is required to run before "
-  "AddressSanitizer can run");
-  return PreservedAnalyses::all();
-}
-
-void AddressSanitizerPass::printPipeline(
-raw_ostream &OS, function_ref MapClassName2PassName) {
-  static_cast *>(this)->printPipeline(
-  OS, MapClassName2PassName);
-  OS << "<";
-  if (Options.CompileKernel)
-OS << "kernel";
-  OS << ">";
-}
-
 void ModuleAddressSanitizerPass::printPipeline(
 raw_ostream &OS, function_ref MapClassName2PassName) {
   static_cast *>(this)->printPipeline(
@@ -1295,9 +1266,11 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
   AnalysisManager &AM) {
@@ -1305,7 +1278,14 @@
   ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
UseGlobalGC, UseOdrIndicator,
DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  bool Modified = Sanitizer.instrumentModule(M);
+  const TargetLibraryInfo *TLI = &AM.getResult(M);
+  for (Function &F : M) {
+AddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
+   UseAfterScope, UseAfterReturn);
+Modified |= Sanitizer.instrumentFunction(F, TLI);
+  }
+  if (Modified)
 return PreservedAnalyses::none();
   return PreservedAnalyses::all();
 }
Index: llvm/lib/Passes/PassRegistry.def
===
--- llvm/lib/Passes/PassRegistry.def
+++ llvm/lib/Passes/PassRegistry.def
@@ -393,13 +393,6 @@
   "no-profile-peeling;profile-peeling;"
   "no-runtime;runtime;"
   "no-upperbound;upperbound")
-FUNCTION_PASS_WITH_PARAMS("asan",
-  "AddressSanitizerPass",
-   [](AddressSanitizerOptions Opts) {
- return AddressSanitizerPass(Opts);
-   },
-  parseASanPassOptions,
-  "kernel")
 FUNCTION_PASS_WITH_PARAMS("msan",
   "MemorySanitizerPass",
[](MemorySanitizerOptions Opts) {
Index: llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
===
--- llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
+++ llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
@@ -89,40 +89,6 @@
   static AnalysisKey Key;
 };
 
-struct AddressSanitizerOptions {
-  AddressSanitizerOptions()
-  : AddressSanitizerOptions(false, false, false,
-AsanDetectStackUseAfterReturnMode::Runtime){};
-  AddressSanitizerOptions(bool CompileKernel, bool Recover, bool UseAfterScope,
-  AsanDetectStackUseAfterReturnMode UseAfterReturn)
-  : CompileKernel(CompileKernel), Recover(Recover),
-UseAfterScop

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-28 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: llvm/include/llvm/Analysis/StackSafetyAnalysis.h:93
+  bool invalidate(Module &, const PreservedAnalyses &,
+  ModuleAnalysisManager::Invalidator &) {
+return false;

eugenis wrote:
> vitalybuka wrote:
> > vitalybuka wrote:
> > > we still can't do that, some passes can make results irrelevant
> > Looks like only immutable analysis can be used through proxy, and this 
> > analysis cannot be immutable.
> > Maybe we have to convert Asan into ModulePass, like HWAsan.
> > Any other ideas? @eugenis @pcc @morehouse 
> Is the problem here that an invalidated analysis needs to be rerun, and the 
> module-to-function proxy does not know how to do that?
> 
> TBH, I'm not sure how big the performance benefits of a function pass are. 
> With the amount of time we've sunk in working around function pass 
> requirements and I'd say just go for it.
> 
See https://reviews.llvm.org/D112732. I changed it for the new pass manager 
only. 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-10-28 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 383068.
kstoimenov added a comment.

Removed unrelated files.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112732/new/

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1254,35 +1254,6 @@
   return GlobalsMetadata(M);
 }
 
-PreservedAnalyses AddressSanitizerPass::run(Function &F,
-AnalysisManager &AM) {
-  auto &MAMProxy = AM.getResult(F);
-  Module &M = *F.getParent();
-  if (auto *R = MAMProxy.getCachedResult(M)) {
-const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
-if (Sanitizer.instrumentFunction(F, TLI))
-  return PreservedAnalyses::none();
-return PreservedAnalyses::all();
-  }
-
-  report_fatal_error(
-  "The ASanGlobalsMetadataAnalysis is required to run before "
-  "AddressSanitizer can run");
-  return PreservedAnalyses::all();
-}
-
-void AddressSanitizerPass::printPipeline(
-raw_ostream &OS, function_ref MapClassName2PassName) {
-  static_cast *>(this)->printPipeline(
-  OS, MapClassName2PassName);
-  OS << "<";
-  if (Options.CompileKernel)
-OS << "kernel";
-  OS << ">";
-}
-
 void ModuleAddressSanitizerPass::printPipeline(
 raw_ostream &OS, function_ref MapClassName2PassName) {
   static_cast *>(this)->printPipeline(
@@ -1295,9 +1266,11 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
   AnalysisManager &AM) {
@@ -1305,7 +1278,14 @@
   ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
UseGlobalGC, UseOdrIndicator,
DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  bool Modified = Sanitizer.instrumentModule(M);
+  const TargetLibraryInfo *TLI = &AM.getResult(M);
+  for (Function &F : M) {
+AddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
+   UseAfterScope, UseAfterReturn);
+Modified |= Sanitizer.instrumentFunction(F, TLI);
+  }
+  if (Modified)
 return PreservedAnalyses::none();
   return PreservedAnalyses::all();
 }
Index: llvm/lib/Passes/PassRegistry.def
===
--- llvm/lib/Passes/PassRegistry.def
+++ llvm/lib/Passes/PassRegistry.def
@@ -393,13 +393,6 @@
   "no-profile-peeling;profile-peeling;"
   "no-runtime;runtime;"
   "no-upperbound;upperbound")
-FUNCTION_PASS_WITH_PARAMS("asan",
-  "AddressSanitizerPass",
-   [](AddressSanitizerOptions Opts) {
- return AddressSanitizerPass(Opts);
-   },
-  parseASanPassOptions,
-  "kernel")
 FUNCTION_PASS_WITH_PARAMS("msan",
   "MemorySanitizerPass",
[](MemorySanitizerOptions Opts) {
Index: llvm/lib/Passes/PassBuilder.cpp
===
--- llvm/lib/Passes/PassBuilder.cpp
+++ llvm/lib/Passes/PassBuilder.cpp
@@ -584,24 +584,6 @@
   return parseSinglePassOption(Params, "kernel", "ModuleAddressSanitizer");
 }
 
-Expected parseASanPassOptions(StringRef Params) {
-  AddressSanitizerOptions Result;
-  while (!Params.empty()) {
-StringRef ParamName;
-std::tie(ParamName, Params) = Params.split(';');
-
-if (ParamName == "kernel") {
-  Result.CompileKernel = true;
-} else {
-  return make_error(
-  formatv("invalid AddressSanitizer pass parameter '{0}' ", ParamName)
-  .str(),
-  inconvertibleErrorCode());
-}
-  }
-  return Result;
-}
-
 Expect

[PATCH] D112732: [ASan] Removed AddressSanitizerPass function pass class and rolled it into the module pass for the new pass mangager only.

2021-10-28 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added subscribers: ormris, hiraditya.
kstoimenov requested review of this revision.
Herald added projects: clang, LLVM.
Herald added subscribers: llvm-commits, cfe-commits.

Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D112732

Files:
  clang/lib/CodeGen/BackendUtil.cpp
  clang/test/CodeGen/asan-stack-safety-analysis.c
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Passes/PassBuilder.cpp
  llvm/lib/Passes/PassRegistry.def
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/MemorySanitizer/msan_eager.ll.rej

Index: llvm/test/Instrumentation/MemorySanitizer/msan_eager.ll.rej
===
--- /dev/null
+++ llvm/test/Instrumentation/MemorySanitizer/msan_eager.ll.rej
@@ -0,0 +1,22 @@
+--- msan_eager.ll
 msan_eager.ll
+@@ -69,8 +69,8 @@
+ 
+ define void @NormalArgAfterNoUndef(i32 noundef %a, i32 %b) nounwind uwtable sanitize_memory {
+ ; CHECK-LABEL: @NormalArgAfterNoUndef(
+-; CHECK-NEXT:[[TMP1:%.*]] = load i32, i32* bitcast ([100 x i64]* @__msan_param_tls to i32*), align 8
+-; CHECK-NEXT:[[TMP2:%.*]] = load i32, i32* getelementptr inbounds ([200 x i32], [200 x i32]* @__msan_param_origin_tls, i32 0, i32 0), align 4
++; CHECK-NEXT:[[TMP1:%.*]] = load i32, i32* inttoptr (i64 add (i64 ptrtoint ([100 x i64]* @__msan_param_tls to i64), i64 8) to i32*), align 8
++; CHECK-NEXT:[[TMP2:%.*]] = load i32, i32* inttoptr (i64 add (i64 ptrtoint ([200 x i32]* @__msan_param_origin_tls to i64), i64 8) to i32*), align 4
+ ; CHECK-NEXT:call void @llvm.donothing()
+ ; CHECK-NEXT:[[P:%.*]] = inttoptr i64 0 to i32*
+ ; CHECK-NEXT:[[TMP3:%.*]] = ptrtoint i32* [[P]] to i64
+@@ -135,7 +135,7 @@
+ ; CHECK-LABEL: @CallNormalArgAfterNoUndef(
+ ; CHECK-NEXT:call void @llvm.donothing()
+ ; CHECK-NEXT:[[R:%.*]] = call i32 @NormalRet() #[[ATTR0]]
+-; CHECK-NEXT:store i32 0, i32* bitcast ([100 x i64]* @__msan_param_tls to i32*), align 8
++; CHECK-NEXT:store i32 0, i32* inttoptr (i64 add (i64 ptrtoint ([100 x i64]* @__msan_param_tls to i64), i64 8) to i32*), align 8
+ ; CHECK-NEXT:call void @NormalArgAfterNoUndef(i32 [[R]], i32 [[R]]) #[[ATTR0]]
+ ; CHECK-NEXT:ret void
+ ;
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -1254,35 +1254,6 @@
   return GlobalsMetadata(M);
 }
 
-PreservedAnalyses AddressSanitizerPass::run(Function &F,
-AnalysisManager &AM) {
-  auto &MAMProxy = AM.getResult(F);
-  Module &M = *F.getParent();
-  if (auto *R = MAMProxy.getCachedResult(M)) {
-const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
-if (Sanitizer.instrumentFunction(F, TLI))
-  return PreservedAnalyses::none();
-return PreservedAnalyses::all();
-  }
-
-  report_fatal_error(
-  "The ASanGlobalsMetadataAnalysis is required to run before "
-  "AddressSanitizer can run");
-  return PreservedAnalyses::all();
-}
-
-void AddressSanitizerPass::printPipeline(
-raw_ostream &OS, function_ref MapClassName2PassName) {
-  static_cast *>(this)->printPipeline(
-  OS, MapClassName2PassName);
-  OS << "<";
-  if (Options.CompileKernel)
-OS << "kernel";
-  OS << ">";
-}
-
 void ModuleAddressSanitizerPass::printPipeline(
 raw_ostream &OS, function_ref MapClassName2PassName) {
   static_cast *>(this)->printPipeline(
@@ -1295,9 +1266,11 @@
 
 ModuleAddressSanitizerPass::ModuleAddressSanitizerPass(
 bool CompileKernel, bool Recover, bool UseGlobalGC, bool UseOdrIndicator,
-AsanDtorKind DestructorKind)
+AsanDtorKind DestructorKind, bool UseAfterScope,
+AsanDetectStackUseAfterReturnMode UseAfterReturn)
 : CompileKernel(CompileKernel), Recover(Recover), UseGlobalGC(UseGlobalGC),
-  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind) {}
+  UseOdrIndicator(UseOdrIndicator), DestructorKind(DestructorKind),
+  UseAfterScope(UseAfterScope), UseAfterReturn(UseAfterReturn) {}
 
 PreservedAnalyses ModuleAddressSanitizerPass::run(Module &M,
   AnalysisManager &AM) {
@@ -1305,7 +1278,14 @@
   ModuleAddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
UseGlobalGC, UseOdrIndicator,
DestructorKind);
-  if (Sanitizer.instrumentModule(M))
+  bool Modified = Sanitizer.instrumentModule(M);
+  const TargetLibraryInfo *TLI = &AM.getResult(M);
+  for (Function &F : M) {
+AddressSanitizer Sanitizer(M, &GlobalsMD, CompileKernel, Recover,
+

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 382486.
kstoimenov added a comment.

s/I/LI/.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer ASan(*F.

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov marked 2 inline comments as done.
kstoimenov added a comment.

PTAL.




Comment at: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp:1265
 GlobalsMetadata ASanGlobalsMetadataAnalysis::run(Module &M,
  ModuleAnalysisManager &AM) {
   return GlobalsMetadata(M);

vitalybuka wrote:
> vitalybuka wrote:
> > You can make this module pass to calculate StackSafetyGlobalAnalysis and 
> > use cached one below.
> > This way we will avoid exposure of this logic to PM
> It should probably be in ModuleAddressSanitizerPass, so it wll return ::all() 
> and we don't care about invalidation.
getCachedResult uses the invalidation so I couldn't get rid of it. 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 382483.
kstoimenov added a comment.

Removed {} after if.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSaniti

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 382482.
kstoimenov added a comment.

Added a comment.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer 

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 382481.
kstoimenov marked 2 inline comments as done.
kstoimenov added a comment.

Fixed test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,19 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=0  -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 -asan \
+; RUN: -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -S -enable-new-pm=1 -asan-instrumentation-with-call-threshold=0 \
+; RUN: -passes='asan-module,asan' -asan-use-stack-safety=1 -o - | FileCheck %s --check-prefixes=SAFETY
+; NOSAFETY: call void @__asan_load1
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,6 +654,7 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
+   const StackSafetyGlobalInfo *SSGI,
bool CompileKernel = false, bool Recover = false,
bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
@@ -657,7 +665,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSGI(SSGI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSGI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -797,16 +806,22 @@
 
   void getAnalysisUsage(AnalysisUsage &AU) const override {
 AU.addRequired();
+if (ClUseStackSafety)
+  AU.addRequired();
 AU.addRequired();
   }
 
   bool runOnFunction(Function &F) override {
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
+const StackSafetyGlobalInfo *const SSGI =
+ClUseStackSafety
+? &getAnalysis().getResult()
+: nullptr;
 const TargetLibraryInfo *TLI =
 &getAnal

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-21 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added a comment.

This should be good for re-review now. PTAL.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-21 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov added inline comments.



Comment at: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp:812
   bool runOnFunction(Function &F) override {
+if (ClUseStackSafety) {
+  report_fatal_error("Stack safety analysis is not supported "

fmayer wrote:
> kstoimenov wrote:
> > vitalybuka wrote:
> > > functionality of the pass should be the same, so I don't see why this is 
> > > the fatal error. so just ignore it?
> > > 
> > > btw, why don't you want to support it?
> > I would like to support it, but I am not sure how to get an instance of 
> > StackSafetyGlobalAnalysis, because in the legacy pass manger I don't have 
> > access to AnalysisManager &AM. If you know how to make this work, 
> > please let me know. 
> > 
> > As far as the report_fatal_error my logic is that if someone sets 
> > ClUseStackSafety flag they expect it to work and if it silently doesn't it 
> > is a bad user experience. 
> Maybe it would help to look at the HWASan instrumentation pass, which uses 
> the stack safety analysis for both old and new pass managers.
Thanks for the hint. I've used the HWAsan approach. 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-21 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 381391.
kstoimenov added a comment.

Added support for legacy pass manager and a test for it.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,15 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -passes='asan-pipeline' -enable-new-pm=0 -S -asan-instrumentation-with-call-threshold=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; RUN: opt < %s -passes='asan-pipeline' -enable-new-pm=1 -S -asan-instrumentation-with-call-threshold=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; NOSAFETY: call void @__asan_load1
+; RUN: opt < %s -passes='asan-pipeline' -enable-new-pm=0 -S -asan-use-stack-safety=true -asan-instrumentation-with-call-threshold=0 -o - | FileCheck %s --check-prefixes=SAFETY
+; RUN: opt < %s -passes='asan-pipeline' -enable-new-pm=1 -S -asan-use-stack-safety=true -asan-instrumentation-with-call-threshold=0 -o - | FileCheck %s --check-prefixes=SAFETY
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,8 +654,8 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
-   bool CompileKernel = false, bool Recover = false,
-   bool UseAfterScope = false,
+   const StackSafetyGlobalInfo *SSI, bool CompileKernel = false,
+   bool Recover = false, bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
AsanDetectStackUseAfterReturnMode::Runtime)
   : CompileKernel(ClEnableKasan.getNumOccurrences() > 0 ? ClEnableKasan
@@ -657,7 +664,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSI(SSI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +693,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +778,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -801,12 +809,16 @@
   }
 
   bool runOnFunction(Function &F) override {
+const StackSafetyGlobalInfo *SSI = nullptr;
+if (ClUseStackSafety) {
+  SSI = &getAnalysis().getResult();
+}
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
 const TargetLibraryInfo *TLI =
 &getAnalysis()

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-21 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov marked 4 inline comments as done.
kstoimenov added inline comments.



Comment at: clang/test/CodeGen/asan-stack-safety-analysis.c:1
+// REQUIRES: x86-registered-target
+

fmayer wrote:
> fmayer wrote:
> > Should this file be in llvm/test/Instrumentation/ instead? Also consider 
> > porting some of the tests from HWASan 
> > (https://github.com/llvm/llvm-project/blob/main/llvm/test/Instrumentation/HWAddressSanitizer/stack-safety-analysis.ll).
> Uhm nevermind my first sentence, sorry about that. This is of course the 
> right location.
I've removed this file. Also added a .ll test for the internal flag. 



Comment at: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp:812
   bool runOnFunction(Function &F) override {
+if (ClUseStackSafety) {
+  report_fatal_error("Stack safety analysis is not supported "

vitalybuka wrote:
> functionality of the pass should be the same, so I don't see why this is the 
> fatal error. so just ignore it?
> 
> btw, why don't you want to support it?
I would like to support it, but I am not sure how to get an instance of 
StackSafetyGlobalAnalysis, because in the legacy pass manger I don't have 
access to AnalysisManager &AM. If you know how to make this work, 
please let me know. 

As far as the report_fatal_error my logic is that if someone sets 
ClUseStackSafety flag they expect it to work and if it silently doesn't it is a 
bad user experience. 


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

___
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits


[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-21 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 381365.
kstoimenov added a comment.

Removed the top level flag and addressed comments.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-stack-safety.ll
@@ -0,0 +1,13 @@
+; REQUIRES: x86-registered-target
+
+; RUN: opt < %s -passes='asan-pipeline' -S -asan-instrumentation-with-call-threshold=0 -o - | FileCheck %s --check-prefixes=NOSAFETY
+; NOSAFETY: call void @__asan_load1
+; RUN: opt < %s -passes='asan-pipeline' -S -asan-use-stack-safety=true -asan-instrumentation-with-call-threshold=0 -o - | FileCheck %s --check-prefixes=SAFETY
+; SAFETY-NOT: call void @__asan_load1
+
+define i32 @stack-safety() sanitize_address {
+  %buf = alloca [10 x i8], align 1
+  %arrayidx = getelementptr inbounds [10 x i8], [10 x i8]* %buf, i64 0, i64 0
+  %1 = load i8, i8* %arrayidx, align 1
+  ret i32 0
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,8 +654,8 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
-   bool CompileKernel = false, bool Recover = false,
-   bool UseAfterScope = false,
+   const StackSafetyGlobalInfo *SSI, bool CompileKernel = false,
+   bool Recover = false, bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
AsanDetectStackUseAfterReturnMode::Runtime)
   : CompileKernel(ClEnableKasan.getNumOccurrences() > 0 ? ClEnableKasan
@@ -657,7 +664,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSI(SSI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +693,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +778,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -801,12 +809,16 @@
   }
 
   bool runOnFunction(Function &F) override {
+if (ClUseStackSafety) {
+  report_fatal_error("Stack safety analysis is not supported "
+ "with legacy pass manager.");
+}
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer ASan(*F.getParent(), &GlobalsMD, CompileKernel, Recover,
-  UseAfterScope, UseAfterReturn);
+AddressSanitizer ASan(*F.getParent(), &GlobalsMD, nullptr, CompileKernel,
+  Recover, UseAfterScope, UseAfterReturn);
 return ASan.instrumentFunction(F

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-19 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 380829.
kstoimenov added a comment.

Fixed the test to pass.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D112098/new/

https://reviews.llvm.org/D112098

Files:
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/SanitizerArgs.h
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/Driver/SanitizerArgs.cpp
  clang/test/CodeGen/asan-stack-safety-analysis.c
  clang/test/Driver/fsanitize.c
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,8 +654,8 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
-   bool CompileKernel = false, bool Recover = false,
-   bool UseAfterScope = false,
+   const StackSafetyGlobalInfo *SSI, bool CompileKernel = false,
+   bool Recover = false, bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
AsanDetectStackUseAfterReturnMode::Runtime)
   : CompileKernel(ClEnableKasan.getNumOccurrences() > 0 ? ClEnableKasan
@@ -657,7 +664,7 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSI(SSI) {
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +693,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +778,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -801,12 +809,16 @@
   }
 
   bool runOnFunction(Function &F) override {
+if (ClUseStackSafety) {
+  report_fatal_error("Stack safety analysis is not supported "
+ "with legacy pass manager.");
+}
 GlobalsMetadata &GlobalsMD =
 getAnalysis().getGlobalsMD();
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer ASan(*F.getParent(), &GlobalsMD, CompileKernel, Recover,
-  UseAfterScope, UseAfterReturn);
+AddressSanitizer ASan(*F.getParent(), &GlobalsMD, nullptr, CompileKernel,
+  Recover, UseAfterScope, UseAfterReturn);
 return ASan.instrumentFunction(F, TLI);
   }
 
@@ -1260,8 +1272,11 @@
   Module &M = *F.getParent();
   if (auto *R = MAMProxy.getCachedResult(M)) {
 const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
+const StackSafetyGlobalInfo *SSI =
+MAMProxy.getCachedResult(M);
+AddressSanitizer Sanitizer(M, R, SSI, Options.CompileKernel,
+   Options.Recover, Options.UseAfterScope,
+   Options.UseAfterReturn);
 if (Sanitizer.instrumentFunction(F, TLI))
   return Preserve

[PATCH] D112098: [ASan] Added stack safety support in address sanitizer.

2021-10-19 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov created this revision.
Herald added subscribers: ormris, dexonsmith, dang, hiraditya.
kstoimenov requested review of this revision.
Herald added a reviewer: jdoerfert.
Herald added subscribers: llvm-commits, cfe-commits, sstefan1.
Herald added projects: clang, LLVM.

Added and implemented -asan-use-stack-safety flag and 
-fsanitize-address-use-stack-safety flags,
which control if the ASan would use the Stack Safety results to emit less code 
for operations which are
makred as 'safe' by the static analysis.


Repository:
  rG LLVM Github Monorepo

https://reviews.llvm.org/D112098

Files:
  clang/include/clang/Basic/CodeGenOptions.def
  clang/include/clang/Driver/Options.td
  clang/include/clang/Driver/SanitizerArgs.h
  clang/lib/CodeGen/BackendUtil.cpp
  clang/lib/Driver/SanitizerArgs.cpp
  clang/test/CodeGen/asan-stack-safety-analysis.c
  clang/test/Driver/fsanitize.c
  llvm/include/llvm/Analysis/StackSafetyAnalysis.h
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp

Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -26,6 +26,7 @@
 #include "llvm/ADT/Triple.h"
 #include "llvm/ADT/Twine.h"
 #include "llvm/Analysis/MemoryBuiltins.h"
+#include "llvm/Analysis/StackSafetyAnalysis.h"
 #include "llvm/Analysis/TargetLibraryInfo.h"
 #include "llvm/Analysis/ValueTracking.h"
 #include "llvm/BinaryFormat/MachO.h"
@@ -47,6 +48,7 @@
 #include "llvm/IR/GlobalVariable.h"
 #include "llvm/IR/IRBuilder.h"
 #include "llvm/IR/InlineAsm.h"
+#include "llvm/IR/InstIterator.h"
 #include "llvm/IR/InstVisitor.h"
 #include "llvm/IR/InstrTypes.h"
 #include "llvm/IR/Instruction.h"
@@ -211,6 +213,11 @@
 "asan-instrument-writes", cl::desc("instrument write instructions"),
 cl::Hidden, cl::init(true));
 
+static cl::opt
+ClUseStackSafety("asan-use-stack-safety", cl::Hidden, cl::init(false),
+ cl::Hidden, cl::desc("Use Stack Safety analysis results"),
+ cl::Optional);
+
 static cl::opt ClInstrumentAtomics(
 "asan-instrument-atomics",
 cl::desc("instrument atomic instructions (rmw, cmpxchg)"), cl::Hidden,
@@ -647,8 +654,8 @@
 /// AddressSanitizer: instrument the code in module to find memory bugs.
 struct AddressSanitizer {
   AddressSanitizer(Module &M, const GlobalsMetadata *GlobalsMD,
-   bool CompileKernel = false, bool Recover = false,
-   bool UseAfterScope = false,
+   const StackSafetyGlobalInfo *SSI, bool CompileKernel = false,
+   bool Recover = false, bool UseAfterScope = false,
AsanDetectStackUseAfterReturnMode UseAfterReturn =
AsanDetectStackUseAfterReturnMode::Runtime)
   : CompileKernel(ClEnableKasan.getNumOccurrences() > 0 ? ClEnableKasan
@@ -657,7 +664,8 @@
 UseAfterScope(UseAfterScope || ClUseAfterScope),
 UseAfterReturn(ClUseAfterReturn.getNumOccurrences() ? ClUseAfterReturn
 : UseAfterReturn),
-GlobalsMD(*GlobalsMD) {
+GlobalsMD(*GlobalsMD), SSI(SSI) {
+assert(GlobalsMD != nullptr);
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
@@ -686,7 +694,7 @@
   /// Check if we want (and can) handle this alloca.
   bool isInterestingAlloca(const AllocaInst &AI);
 
-  bool ignoreAccess(Value *Ptr);
+  bool ignoreAccess(Instruction *Inst, Value *Ptr);
   void getInterestingMemoryOperands(
   Instruction *I, SmallVectorImpl &Interesting);
 
@@ -771,6 +779,7 @@
   FunctionCallee AsanMemmove, AsanMemcpy, AsanMemset;
   Value *LocalDynamicShadow = nullptr;
   const GlobalsMetadata &GlobalsMD;
+  const StackSafetyGlobalInfo *SSI;
   DenseMap ProcessedAllocas;
 
   FunctionCallee AMDGPUAddressShared;
@@ -805,8 +814,8 @@
 getAnalysis().getGlobalsMD();
 const TargetLibraryInfo *TLI =
 &getAnalysis().getTLI(F);
-AddressSanitizer ASan(*F.getParent(), &GlobalsMD, CompileKernel, Recover,
-  UseAfterScope, UseAfterReturn);
+AddressSanitizer ASan(*F.getParent(), &GlobalsMD, nullptr, CompileKernel,
+  Recover, UseAfterScope, UseAfterReturn);
 return ASan.instrumentFunction(F, TLI);
   }
 
@@ -1260,8 +1269,11 @@
   Module &M = *F.getParent();
   if (auto *R = MAMProxy.getCachedResult(M)) {
 const TargetLibraryInfo *TLI = &AM.getResult(F);
-AddressSanitizer Sanitizer(M, R, Options.CompileKernel, Options.Recover,
-   Options.UseAfterScope, Options.UseAfterReturn);
+const StackSafetyGlobalInfo *SSI =
+MAMProxy.getCachedResult(M);
+AddressSanitizer Sanitizer(M, R, SSI, Options.CompileKernel,
+   Options.Recover, Options.U

[PATCH] D108377: [asan] Implemented flag to emit intrinsics to optimize ASan callbacks.

2021-08-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was automatically updated to reflect the committed changes.
Closed by commit rGa3f413962627: [asan] Implemented flag to emit intrinsics to 
optimize ASan callbacks. (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108377/new/

https://reviews.llvm.org/D108377

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
@@ -0,0 +1,86 @@
+; RUN: opt < %s -asan -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 \
+; RUN:   -asan-optimize-callbacks -S | FileCheck %s --check-prefixes=LOAD,STORE
+; RUN: opt < %s -asan -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 \
+; RUN:   -asan-optimize-callbacks --asan-kernel -S | \
+; RUN:   FileCheck %s --check-prefixes=LOAD-KERNEL,STORE-KERNEL
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @load(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+sanitize_address {
+  %n1 = load i8, i8* %p1, align 1
+  %n2 = load i16, i16* %p2, align 2
+  %n4 = load i32, i32* %p4, align 4
+  %n8 = load i64, i64* %p8, align 8
+  %n16 = load i128, i128* %p16, align 16
+; LOAD:  call void @llvm.asan.check.memaccess(i8* %p1, i32 0)
+; LOAD-NEXT: %n1 = load i8, i8* %p1, align 1
+; LOAD-NEXT: %1 = bitcast i16* %p2 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 2)
+; LOAD-NEXT: %n2 = load i16, i16* %p2, align 2
+; LOAD-NEXT: %2 = bitcast i32* %p4 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 4)
+; LOAD-NEXT: %n4 = load i32, i32* %p4, align 4
+; LOAD-NEXT: %3 = bitcast i64* %p8 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 6)
+; LOAD-NEXT: %n8 = load i64, i64* %p8, align 8
+; LOAD-NEXT: %4 = bitcast i128* %p16 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 8)
+; LOAD-NEXT: %n16 = load i128, i128* %p16, align 16
+
+; LOAD-KERNEL:  call void @llvm.asan.check.memaccess(i8* %p1, i32 1)
+; LOAD-KERNEL-NEXT: %n1 = load i8, i8* %p1, align 1
+; LOAD-KERNEL-NEXT: %1 = bitcast i16* %p2 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 3)
+; LOAD-KERNEL-NEXT: %n2 = load i16, i16* %p2, align 2
+; LOAD-KERNEL-NEXT: %2 = bitcast i32* %p4 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 5)
+; LOAD-KERNEL-NEXT: %n4 = load i32, i32* %p4, align 4
+; LOAD-KERNEL-NEXT: %3 = bitcast i64* %p8 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 7)
+; LOAD-KERNEL-NEXT: %n8 = load i64, i64* %p8, align 8
+; LOAD-KERNEL-NEXT: %4 = bitcast i128* %p16 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 9)
+; LOAD-KERNEL-NEXT: %n16 = load i128, i128* %p16, align 16
+  ret void
+}
+
+define void @store(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+sanitize_address {
+  store i8 0, i8* %p1, align 1
+  store i16 0, i16* %p2, align 2
+  store i32 0, i32* %p4, align 4
+  store i64 0, i64* %p8, align 8
+  store i128 0, i128* %p16, align 16
+; STORE:  call void @llvm.asan.check.memaccess(i8* %p1, i32 32)
+; STORE-NEXT: store i8 0, i8* %p1, align 1
+; STORE-NEXT: %1 = bitcast i16* %p2 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 34)
+; STORE-NEXT: store i16 0, i16* %p2, align 2
+; STORE-NEXT: %2 = bitcast i32* %p4 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 36)
+; STORE-NEXT: store i32 0, i32* %p4, align 4
+; STORE-NEXT: %3 = bitcast i64* %p8 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 38)
+; STORE-NEXT: store i64 0, i64* %p8, align 8
+; STORE-NEXT: %4 = bitcast i128* %p16 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 40)
+; STORE-NEXT: store i128 0, i128* %p16, align 16
+
+; STORE-KERNEL:  call void @llvm.asan.check.memaccess(i8* %p1, i32 33)
+; STORE-KERNEL-NEXT: store i8 0, i8* %p1, align 1
+; STORE-KERNEL-NEXT: %1 = bitcast i16* %p2 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 35)
+; STORE-KERNEL-NEXT: store i16 0, i16* %p2, align 2
+; STORE-KERNEL-NEXT: %2 = bitcast i32* %p4 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 37)
+; STORE-KERNEL-NEXT: store i32 0, i32* %p4, align 4
+; STORE-KERNEL-NEXT: %3 = bitcast i64* %p8 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 39)
+; STORE-KERNEL-NEXT: store i64 0, i64* %p8, align 8
+; STORE-KERNEL-NEXT: %4 = bitcast i128* %p16 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 41)
+; STORE-KERNEL-NEXT: store i128 0, i128* %p16, align 16
+; STORE-KERNEL-NEXT: ret void
+  ret void
+}
Index: llvm/lib/Transforms/Instrumentati

[PATCH] D108377: [asan] Implemented flag to emit intrinsics to optimize ASan callbacks.

2021-08-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 368959.
kstoimenov added a comment.

Fixed the test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108377/new/

https://reviews.llvm.org/D108377

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
@@ -0,0 +1,86 @@
+; RUN: opt < %s -asan -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 \
+; RUN:   -asan-optimize-callbacks -S | FileCheck %s --check-prefixes=LOAD,STORE
+; RUN: opt < %s -asan -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 \
+; RUN:   -asan-optimize-callbacks --asan-kernel -S | \
+; RUN:   FileCheck %s --check-prefixes=LOAD-KERNEL,STORE-KERNEL
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @load(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+sanitize_address {
+  %n1 = load i8, i8* %p1, align 1
+  %n2 = load i16, i16* %p2, align 2
+  %n4 = load i32, i32* %p4, align 4
+  %n8 = load i64, i64* %p8, align 8
+  %n16 = load i128, i128* %p16, align 16
+; LOAD:  call void @llvm.asan.check.memaccess(i8* %p1, i32 0)
+; LOAD-NEXT: %n1 = load i8, i8* %p1, align 1
+; LOAD-NEXT: %1 = bitcast i16* %p2 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 2)
+; LOAD-NEXT: %n2 = load i16, i16* %p2, align 2
+; LOAD-NEXT: %2 = bitcast i32* %p4 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 4)
+; LOAD-NEXT: %n4 = load i32, i32* %p4, align 4
+; LOAD-NEXT: %3 = bitcast i64* %p8 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 6)
+; LOAD-NEXT: %n8 = load i64, i64* %p8, align 8
+; LOAD-NEXT: %4 = bitcast i128* %p16 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 8)
+; LOAD-NEXT: %n16 = load i128, i128* %p16, align 16
+
+; LOAD-KERNEL:  call void @llvm.asan.check.memaccess(i8* %p1, i32 1)
+; LOAD-KERNEL-NEXT: %n1 = load i8, i8* %p1, align 1
+; LOAD-KERNEL-NEXT: %1 = bitcast i16* %p2 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 3)
+; LOAD-KERNEL-NEXT: %n2 = load i16, i16* %p2, align 2
+; LOAD-KERNEL-NEXT: %2 = bitcast i32* %p4 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 5)
+; LOAD-KERNEL-NEXT: %n4 = load i32, i32* %p4, align 4
+; LOAD-KERNEL-NEXT: %3 = bitcast i64* %p8 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 7)
+; LOAD-KERNEL-NEXT: %n8 = load i64, i64* %p8, align 8
+; LOAD-KERNEL-NEXT: %4 = bitcast i128* %p16 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 9)
+; LOAD-KERNEL-NEXT: %n16 = load i128, i128* %p16, align 16
+  ret void
+}
+
+define void @store(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+sanitize_address {
+  store i8 0, i8* %p1, align 1
+  store i16 0, i16* %p2, align 2
+  store i32 0, i32* %p4, align 4
+  store i64 0, i64* %p8, align 8
+  store i128 0, i128* %p16, align 16
+; STORE:  call void @llvm.asan.check.memaccess(i8* %p1, i32 32)
+; STORE-NEXT: store i8 0, i8* %p1, align 1
+; STORE-NEXT: %1 = bitcast i16* %p2 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 34)
+; STORE-NEXT: store i16 0, i16* %p2, align 2
+; STORE-NEXT: %2 = bitcast i32* %p4 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 36)
+; STORE-NEXT: store i32 0, i32* %p4, align 4
+; STORE-NEXT: %3 = bitcast i64* %p8 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 38)
+; STORE-NEXT: store i64 0, i64* %p8, align 8
+; STORE-NEXT: %4 = bitcast i128* %p16 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 40)
+; STORE-NEXT: store i128 0, i128* %p16, align 16
+
+; STORE-KERNEL:  call void @llvm.asan.check.memaccess(i8* %p1, i32 33)
+; STORE-KERNEL-NEXT: store i8 0, i8* %p1, align 1
+; STORE-KERNEL-NEXT: %1 = bitcast i16* %p2 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 35)
+; STORE-KERNEL-NEXT: store i16 0, i16* %p2, align 2
+; STORE-KERNEL-NEXT: %2 = bitcast i32* %p4 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 37)
+; STORE-KERNEL-NEXT: store i32 0, i32* %p4, align 4
+; STORE-KERNEL-NEXT: %3 = bitcast i64* %p8 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 39)
+; STORE-KERNEL-NEXT: store i64 0, i64* %p8, align 8
+; STORE-KERNEL-NEXT: %4 = bitcast i128* %p16 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 41)
+; STORE-KERNEL-NEXT: store i128 0, i128* %p16, align 16
+; STORE-KERNEL-NEXT: ret void
+  ret void
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Trans

[PATCH] D108377: [asan] Implemented flag to emit intrinsics to optimize ASan callbacks.

2021-08-26 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 368903.
kstoimenov added a comment.

Added a test.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108377/new/

https://reviews.llvm.org/D108377

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll

Index: llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
@@ -0,0 +1,86 @@
+; RUN: opt < %s -asan -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 \
+;  -asan-optimize-callbacks -S | FileCheck %s --check-prefixes=LOAD,STORE
+; RUN: opt < %s -asan -enable-new-pm=0 -asan-instrumentation-with-call-threshold=0 \
+;  -asan-optimize-callbacks --asan-kernel -S | \
+;  FileCheck %s --check-prefixes=LOAD-KERNEL,STORE-KERNEL
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @load(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+sanitize_address {
+  %n1 = load i8, i8* %p1, align 1
+  %n2 = load i16, i16* %p2, align 2
+  %n4 = load i32, i32* %p4, align 4
+  %n8 = load i64, i64* %p8, align 8
+  %n16 = load i128, i128* %p16, align 16
+; LOAD:  call void @llvm.asan.check.memaccess(i8* %p1, i32 0)
+; LOAD-NEXT: %n1 = load i8, i8* %p1, align 1
+; LOAD-NEXT: %1 = bitcast i16* %p2 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 2)
+; LOAD-NEXT: %n2 = load i16, i16* %p2, align 2
+; LOAD-NEXT: %2 = bitcast i32* %p4 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 4)
+; LOAD-NEXT: %n4 = load i32, i32* %p4, align 4
+; LOAD-NEXT: %3 = bitcast i64* %p8 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 6)
+; LOAD-NEXT: %n8 = load i64, i64* %p8, align 8
+; LOAD-NEXT: %4 = bitcast i128* %p16 to i8*
+; LOAD-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 8)
+; LOAD-NEXT: %n16 = load i128, i128* %p16, align 16
+
+; LOAD-KERNEL:  call void @llvm.asan.check.memaccess(i8* %p1, i32 1)
+; LOAD-KERNEL-NEXT: %n1 = load i8, i8* %p1, align 1
+; LOAD-KERNEL-NEXT: %1 = bitcast i16* %p2 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 3)
+; LOAD-KERNEL-NEXT: %n2 = load i16, i16* %p2, align 2
+; LOAD-KERNEL-NEXT: %2 = bitcast i32* %p4 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 5)
+; LOAD-KERNEL-NEXT: %n4 = load i32, i32* %p4, align 4
+; LOAD-KERNEL-NEXT: %3 = bitcast i64* %p8 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 7)
+; LOAD-KERNEL-NEXT: %n8 = load i64, i64* %p8, align 8
+; LOAD-KERNEL-NEXT: %4 = bitcast i128* %p16 to i8*
+; LOAD-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 9)
+; LOAD-KERNEL-NEXT: %n16 = load i128, i128* %p16, align 16
+  ret void
+}
+
+define void @store(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+sanitize_address {
+  store i8 0, i8* %p1, align 1
+  store i16 0, i16* %p2, align 2
+  store i32 0, i32* %p4, align 4
+  store i64 0, i64* %p8, align 8
+  store i128 0, i128* %p16, align 16
+; STORE:  call void @llvm.asan.check.memaccess(i8* %p1, i32 32)
+; STORE-NEXT: store i8 0, i8* %p1, align 1
+; STORE-NEXT: %1 = bitcast i16* %p2 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 34)
+; STORE-NEXT: store i16 0, i16* %p2, align 2
+; STORE-NEXT: %2 = bitcast i32* %p4 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 36)
+; STORE-NEXT: store i32 0, i32* %p4, align 4
+; STORE-NEXT: %3 = bitcast i64* %p8 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 38)
+; STORE-NEXT: store i64 0, i64* %p8, align 8
+; STORE-NEXT: %4 = bitcast i128* %p16 to i8*
+; STORE-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 40)
+; STORE-NEXT: store i128 0, i128* %p16, align 16
+
+; STORE-KERNEL:  call void @llvm.asan.check.memaccess(i8* %p1, i32 33)
+; STORE-KERNEL-NEXT: store i8 0, i8* %p1, align 1
+; STORE-KERNEL-NEXT: %1 = bitcast i16* %p2 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %1, i32 35)
+; STORE-KERNEL-NEXT: store i16 0, i16* %p2, align 2
+; STORE-KERNEL-NEXT: %2 = bitcast i32* %p4 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %2, i32 37)
+; STORE-KERNEL-NEXT: store i32 0, i32* %p4, align 4
+; STORE-KERNEL-NEXT: %3 = bitcast i64* %p8 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %3, i32 39)
+; STORE-KERNEL-NEXT: store i64 0, i64* %p8, align 8
+; STORE-KERNEL-NEXT: %4 = bitcast i128* %p16 to i8*
+; STORE-KERNEL-NEXT: call void @llvm.asan.check.memaccess(i8* %4, i32 41)
+; STORE-KERNEL-NEXT: store i128 0, i128* %p16, align 16
+; STORE-KERNEL-NEXT: ret void
+  ret void
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentatio

[PATCH] D108377: [asan] Implemented flag to emit intrinsics to optimize ASan callbacks.

2021-08-25 Thread Kirill Stoimenov via Phabricator via cfe-commits
kstoimenov updated this revision to Diff 368663.
kstoimenov added a comment.

Upload after submitting the main patch.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D108377/new/

https://reviews.llvm.org/D108377

Files:
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll


Index: llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
@@ -0,0 +1,14 @@
+; RUN: opt < %s -asan -asan-module -enable-new-pm=0 -S | FileCheck %s
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @load1(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+  sanitize_address {
+  %n1 = load i8, i8* %p1
+  %n2 = load i16, i16* %p2
+  %n4 = load i32, i32* %p4
+  %n8 = load i64, i64* %p8
+  %n16 = load i128, i128* %p16
+;  store i32 0, i32* %p4, align 8
+  ret void
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -356,6 +356,10 @@
 static cl::opt ClOpt("asan-opt", cl::desc("Optimize instrumentation"),
cl::Hidden, cl::init(true));
 
+static cl::opt ClOptimizeCallbacks("asan-optimize-callbacks",
+ cl::desc("Optimize callbacks"),
+ cl::Hidden, cl::init(false));
+
 static cl::opt ClOptSameTemp(
 "asan-opt-same-temp", cl::desc("Instrument the same temp just once"),
 cl::Hidden, cl::init(true));
@@ -657,6 +661,7 @@
 C = &(M.getContext());
 LongSize = M.getDataLayout().getPointerSizeInBits();
 IntptrTy = Type::getIntNTy(*C, LongSize);
+Int8PtrTy = Type::getInt8PtrTy(*C);
 TargetTriple = Triple(M.getTargetTriple());
 
 Mapping = getShadowMapping(TargetTriple, LongSize, this->CompileKernel);
@@ -747,6 +752,7 @@
   bool UseAfterScope;
   AsanDetectStackUseAfterReturnMode UseAfterReturn;
   Type *IntptrTy;
+  Type *Int8PtrTy;
   ShadowMapping Mapping;
   FunctionCallee AsanHandleNoReturnFunc;
   FunctionCallee AsanPtrCmpFunction, AsanPtrSubFunction;
@@ -1768,14 +1774,23 @@
   IRBuilder<> IRB(InsertBefore);
   Value *AddrLong = IRB.CreatePointerCast(Addr, IntptrTy);
   size_t AccessSizeIndex = TypeSizeToSizeIndex(TypeSize);
+  const ASanAccessInfo AccessInfo(IsWrite, CompileKernel, AccessSizeIndex);
 
   if (UseCalls) {
-if (Exp == 0)
-  IRB.CreateCall(AsanMemoryAccessCallback[IsWrite][0][AccessSizeIndex],
- AddrLong);
-else
-  IRB.CreateCall(AsanMemoryAccessCallback[IsWrite][1][AccessSizeIndex],
- {AddrLong, ConstantInt::get(IRB.getInt32Ty(), Exp)});
+if (ClOptimizeCallbacks) {
+  Value *Ptr8 = IRB.CreatePointerCast(Addr, Int8PtrTy);
+  Module *M = IRB.GetInsertBlock()->getParent()->getParent();
+  IRB.CreateCall(
+  Intrinsic::getDeclaration(M, Intrinsic::asan_check_memaccess),
+  {Ptr8, ConstantInt::get(IRB.getInt32Ty(), AccessInfo.Packed)});
+} else {
+  if (Exp == 0)
+IRB.CreateCall(AsanMemoryAccessCallback[IsWrite][0][AccessSizeIndex],
+   AddrLong);
+  else
+IRB.CreateCall(AsanMemoryAccessCallback[IsWrite][1][AccessSizeIndex],
+   {AddrLong, ConstantInt::get(IRB.getInt32Ty(), Exp)});
+}
 return;
   }
 


Index: llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
===
--- /dev/null
+++ llvm/test/Instrumentation/AddressSanitizer/asan-optimize-callbacks.ll
@@ -0,0 +1,14 @@
+; RUN: opt < %s -asan -asan-module -enable-new-pm=0 -S | FileCheck %s
+
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @load1(i8* %p1, i16* %p2, i32* %p4, i64* %p8, i128* %p16)
+  sanitize_address {
+  %n1 = load i8, i8* %p1
+  %n2 = load i16, i16* %p2
+  %n4 = load i32, i32* %p4
+  %n8 = load i64, i64* %p8
+  %n16 = load i128, i128* %p16
+;  store i32 0, i32* %p4, align 8
+  ret void
+}
Index: llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
===
--- llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
+++ llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
@@ -356,6 +356,10 @@
 static cl::opt ClOpt("asan-opt", cl::desc("Optimize instrumentation"),
cl::Hidden, cl::init(true));
 
+static cl::opt ClOptimizeCallbacks("asan-optimize-callbacks",
+ cl::desc("Optimize callbacks"),
+ cl::Hidden, cl::init(false));
+
 static cl::opt ClOptSameTemp(
 "asan-opt-same-temp", cl::desc("Instrument the same

[PATCH] D107850: [asan] Implemented intrinsic for the custom calling convention similar used by HWASan for X86.

2021-08-25 Thread Kirill Stoimenov via Phabricator via cfe-commits
This revision was landed with ongoing or failed builds.
This revision was automatically updated to reflect the committed changes.
Closed by commit rG832aae738bec: [asan] Implemented intrinsic for the custom 
calling convention similar used by… (authored by kstoimenov).

Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D107850/new/

https://reviews.llvm.org/D107850

Files:
  llvm/include/llvm/IR/Intrinsics.td
  llvm/include/llvm/Transforms/Instrumentation/AddressSanitizer.h
  llvm/lib/Target/X86/X86AsmPrinter.cpp
  llvm/lib/Target/X86/X86AsmPrinter.h
  llvm/lib/Target/X86/X86InstrCompiler.td
  llvm/lib/Target/X86/X86MCInstLower.cpp
  llvm/lib/Target/X86/X86RegisterInfo.td
  llvm/lib/Transforms/Instrumentation/AddressSanitizer.cpp
  llvm/test/CodeGen/X86/asan-check-memaccess-add.ll
  llvm/test/CodeGen/X86/asan-check-memaccess-or.ll

Index: llvm/test/CodeGen/X86/asan-check-memaccess-or.ll
===
--- /dev/null
+++ llvm/test/CodeGen/X86/asan-check-memaccess-or.ll
@@ -0,0 +1,253 @@
+; RUN: llc < %s | FileCheck %s
+
+target triple = "x86_64-pc-win"
+
+define void @load1(i8* nocapture readonly %x) {
+; CHECK:  callq   __asan_check_load1_rn[[RN1:.*]]
+; CHECK:  callq   __asan_check_store1_rn[[RN1]]
+; CHECK-NEXT: retq
+  call void @llvm.asan.check.memaccess(i8* %x, i32 0)
+  call void @llvm.asan.check.memaccess(i8* %x, i32 32)
+  ret void
+}
+
+define void @load2(i16* nocapture readonly %x) {
+; CHECK:  callq   __asan_check_load2_rn[[RN2:.*]]
+; CHECK:  callq   __asan_check_store2_rn[[RN2]]
+; CHECK-NEXT: retq
+  %1 = ptrtoint i16* %x to i64
+  %2 = bitcast i16* %x to i8*
+  call void @llvm.asan.check.memaccess(i8* %2, i32 2)
+  call void @llvm.asan.check.memaccess(i8* %2, i32 34)
+  ret void
+}
+
+define void @load4(i32* nocapture readonly %x) {
+; CHECK:  callq   __asan_check_load4_rn[[RN4:.*]]
+; CHECK:  callq   __asan_check_store4_rn[[RN4]]
+; CHECK-NEXT: retq
+  %1 = ptrtoint i32* %x to i64
+  %2 = bitcast i32* %x to i8*
+  call void @llvm.asan.check.memaccess(i8* %2, i32 4)
+  call void @llvm.asan.check.memaccess(i8* %2, i32 36)
+  ret void
+}
+define void @load8(i64* nocapture readonly %x) {
+; CHECK:  callq   __asan_check_load8_rn[[RN8:.*]]
+; CHECK:  callq   __asan_check_store8_rn[[RN8]]
+; CHECK-NEXT: retq
+  %1 = ptrtoint i64* %x to i64
+  %2 = bitcast i64* %x to i8*
+  call void @llvm.asan.check.memaccess(i8* %2, i32 6)
+  call void @llvm.asan.check.memaccess(i8* %2, i32 38)
+  ret void
+}
+
+define void @load16(i128* nocapture readonly %x) {
+; CHECK:  callq   __asan_check_load16_rn[[RN16:.*]]
+; CHECK:  callq   __asan_check_store16_rn[[RN16]]
+; CHECK-NEXT: retq
+  %1 = ptrtoint i128* %x to i64
+  %2 = bitcast i128* %x to i8*
+  call void @llvm.asan.check.memaccess(i8* %2, i32 8)
+  call void @llvm.asan.check.memaccess(i8* %2, i32 40)
+  ret void
+}
+
+; CHECK:  .type   __asan_check_load1_rn[[RN1]],@function
+; CHECK-NEXT: .weak   __asan_check_load1_rn[[RN1]]
+; CHECK-NEXT: .hidden __asan_check_load1_rn[[RN1]]
+; CHECK-NEXT: __asan_check_load1_rn[[RN1]]:
+; CHECK-NEXT: movq[[REG:.*]], %r8
+; CHECK-NEXT: shrq$3, %r8
+; CHECK-NEXT: orq $17592186044416, %r8{{.*}}
+; CHECK-NEXT: movb(%r8), %r8b
+; CHECK-NEXT: testb   %r8b, %r8b
+; CHECK-NEXT: jne [[EXTRA:.*]]
+; CHECK-NEXT: [[RET:.*]]:
+; CHECK-NEXT: retq
+; CHECK-NEXT: [[EXTRA]]:
+; CHECK-NEXT: pushq   %rcx
+; CHECK-NEXT: movq[[REG]], %rcx
+; CHECK-NEXT: andl$7, %ecx
+; CHECK-NEXT: cmpl%r8d, %ecx
+; CHECK-NEXT: popq%rcx
+; CHECK-NEXT: jl  [[RET]]
+; CHECK-NEXT: movq[[REG:.*]], %rdi
+; CHECK-NEXT: jmp __asan_report_load1
+
+; CHECK:  .type   __asan_check_load2_rn[[RN2]],@function
+; CHECK-NEXT: .weak   __asan_check_load2_rn[[RN2]]
+; CHECK-NEXT: .hidden __asan_check_load2_rn[[RN2]]
+; CHECK-NEXT: __asan_check_load2_rn[[RN2]]:
+; CHECK-NEXT: movq[[REG:.*]], %r8
+; CHECK-NEXT: shrq$3, %r8
+; CHECK-NEXT: orq $17592186044416, %r8{{.*}}
+; CHECK-NEXT: movb(%r8), %r8b
+; CHECK-NEXT: testb   %r8b, %r8b
+; CHECK-NEXT: jne [[EXTRA:.*]]
+; CHECK-NEXT: [[RET:.*]]:
+; CHECK-NEXT: retq
+; CHECK-NEXT: [[EXTRA]]:
+; CHECK-NEXT: pushq   %rcx
+; CHECK-NEXT: movq[[REG]], %rcx
+; CHECK-NEXT: andl$7, %ecx
+; CHECK-NEXT: addl$1, %ecx
+; CHECK-NEXT: cmpl%r8d, %ecx
+; CHECK-NEXT: popq%rcx
+; CHECK-NEXT: jl  [[RET]]
+; CHECK-NEXT: movq[[REG:.*]], %rdi
+; CHECK-NEXT: jmp __asan_report_load2
+
+; CHECK:  .type   _

  1   2   >