leonardchan added inline comments.

================
Comment at: clang/lib/CodeGen/BackendUtil.cpp:1231-1232
+      MPM.addPass(ModuleSanitizerCoveragePass(SancovOpts));
+      MPM.addPass(
+          
createModuleToFunctionPassAdaptor(SanitizerCoveragePass(SancovOpts)));
+    }
----------------
chandlerc wrote:
> Is there an existing function pass pipeline we can put this in, maybe by 
> using an extension point? That would make it much faster to run I suspect.
I tried this earlier, but when I use `registerOptimizerLastEPCallback()` before 
the default module pipeline is made, I end up getting this linker error for 
`-O2` runs:

```
fuzzer.c:(.text.sancov.module_ctor_8bit_counters[sancov.module_ctor_8bit_counters]+0x11):
 undefined reference to `__start___sancov_pcs'
fuzzer.c:(.text.sancov.module_ctor_8bit_counters[sancov.module_ctor_8bit_counters]+0x16):
 undefined reference to `__stop___sancov_pcs'
```

I don't understand how I get this because the symbols are declared in the IR 
dump as:

```
@__start___sancov_pcs = external hidden global i64*
@__stop___sancov_pcs = external hidden global i64*
```

for both the optimized cases if I use the adaptor or EP. I'm still linking with 
the same compiler-rt in each case.

The only difference I think of using the adaptor after 
`buildPerModuleDefaultPipeline()` vs using the extension point callback before 
is that the order in which the pass will be called changes, although I still 
don't see how it could lead to this undefined reference if I still link against 
compiler-rt.

Additionally, the only difference between the IR between using the adaptor vs 
the EP is a few extra globals/declarations seem to be missing when using the 
EP, which makes me think another pass that ran after this one removed them, 
although these don't seem to be related to the error.



================
Comment at: llvm/lib/Passes/PassRegistry.def:248
 FUNCTION_PASS("tsan", ThreadSanitizerPass())
+FUNCTION_PASS("sancov-func", SanitizerCoveragePass())
 #undef FUNCTION_PASS
----------------
chandlerc wrote:
> Consistency would suggest just `sancov` here? I don't feel strongly though.
Ah, so the reason why I don't use `sancov` here is because in the tests when 
using `-passes='function(sancov)', I get the following error:

```
/usr/local/google/home/leonardchan/llvm-monorepo/llvm-build-3-b133876586/bin/opt:
 unknown function pass 
'/usr/local/google/home/leonardchan/llvm-monorepo/llvm-build-3-b133876586/bin/sancov'
```

I think this is because lit tries to substitute `sancov` with the one under 
`bin/sancov` in my build dir. I'd be up for changing it if there's a way around 
this.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D62888



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

Reply via email to