[llvm] [HWASan] optimize AttrInfer fix for selective HWASan (PR #108111)
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Tue Sep 10 17:32:42 PDT 2024
================
@@ -591,47 +609,81 @@ void HWAddressSanitizer::createHwasanCtorComdat() {
appendToCompilerUsed(M, Dummy);
}
-/// Module-level initialization.
-///
-/// inserts a call to __hwasan_init to the module's constructor list.
-void HWAddressSanitizer::initializeModule() {
- LLVM_DEBUG(dbgs() << "Init " << M.getName() << "\n");
- TargetTriple = Triple(M.getTargetTriple());
-
- for (auto &F : M.functions()) {
- // Remove memory attributes that are invalid with HWASan.
- // HWASan checks read from shadow, which invalidates memory(argmem: *)
- // Short granule checks on function arguments read from the argument memory
- // (last byte of the granule), which invalidates writeonly.
- //
- // This is not only true for sanitized functions, because AttrInfer can
- // infer those attributes on libc functions, which is not true if those
- // are instrumented (Android) or intercepted.
-
- // The API is weird. `onlyReadsMemory` actually means "does not write", and
- // `onlyWritesMemory` actually means "does not read". So we reconstruct
- // "accesses memory" && "does not read" <=> "writes".
- bool Changed = false;
- if (!F.doesNotAccessMemory()) {
- bool WritesMemory = !F.onlyReadsMemory();
- bool ReadsMemory = !F.onlyWritesMemory();
- if ((WritesMemory && !ReadsMemory) || F.onlyAccessesArgMemory()) {
- F.removeFnAttr(Attribute::Memory);
- Changed = true;
- }
+void HWAddressSanitizer::removeFnAttributes(Function *F) {
+ if (!F || ChangedFns.contains(F))
+ return;
----------------
vitalybuka wrote:
most of the patch can be extracted into NFC refactorings
https://github.com/llvm/llvm-project/pull/108111
More information about the llvm-commits
mailing list