[llvm] [Instrumentation] Mark instrumented calls as implicit (PR #106447)

Kyle Huey via llvm-commits llvm-commits at lists.llvm.org
Fri Sep 6 07:53:59 PDT 2024


khuey wrote:

This needs to be tested against actual users of this API before it's merged. The example given in the docs (https://clang.llvm.org/docs/SanitizerCoverage.html)

```c
extern "C" void __sanitizer_cov_trace_pc_guard(uint32_t *guard) {
  if (!*guard) return;  // Duplicate the guard check.
  // If you set *guard to 0 this code will not be called again for this edge.
  // Now you can get the PC and do whatever you want:
  //   store it somewhere or symbolize it and print right away.
  // The values of `*guard` are as you set them in
  // __sanitizer_cov_trace_pc_guard_init and so you can make them consecutive
  // and use them to dereference an array or a bit vector.
  void *PC = __builtin_return_address(0);
  char PcDescr[1024];
  // This function is a part of the sanitizer run-time.
  // To use it, link with AddressSanitizer or other sanitizer.
  __sanitizer_symbolize_pc(PC, "%p %F %L", PcDescr, sizeof(PcDescr));
  printf("guard: %p %x PC %s\n", guard, *guard, PcDescr);
}
```

Seems very likely to break (__sanitizer_symbolize_pc will end up finding the line 0 location with the instrumentation sequence in #54873).

https://github.com/llvm/llvm-project/pull/106447


More information about the llvm-commits mailing list