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

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Nov 4 13:02:04 PDT 2022


MaskRay added a comment.

In D137227#3909056 <https://reviews.llvm.org/D137227#3909056>, @sbc100 wrote:

>> The asan instrumentation just prepends `__odr_asan_gen_` to the symbol name to form a new symbol name. For ELF every byte except `\0` can be used in a symbol name, and this is totally fine.
>>
>> I am unfamiliar with WebAssembly. Does the aforementioned parsing tool somehow skip printing `_stdcmd<1068>::init` symbols?
>
> The parser was confused by the presence of a colon in the symbol names and generating an error.  I created a patch that makes it a little more robust: https://github.com/emscripten-core/emscripten/pull/18152
>
> So we have a fix for the proximate issue, but I just wanted to check if that new prepended symbol name was supposed to be the demanded C++ name (which it seem to be) rather than the mangled name?

I think so. The instrumentation is done at LLVM layer, not Clang layer. The LLVM layer code generally shouldn't know the different mangling schemes used by different language frontends.
For C++, we can get a mangled variable name with something like

  template <typename T>
  inline int var = 3;
  
  int *x = &var<int>;

`_Z3varIiE`

My understanding is that all such symbols are in a COMDAT and have a linkonce_odr/weak_odr linkage: these symbols are skipped by `ModuleAddressSanitizer::shouldInstrumentGlobal`, so one will not see `__odr_asan_gen__Z3varIiE`.
I do not know what the WebAssembly world does but if you can provide detail instructions for reproduce I am happy to take a look if needed.

> This is the first time we've had these characters appearing in symbol names so I just wanted to flag that as relatively unprecedented (at least in terms of all the codebases that emscripten has been exposed to so far).
>
>> `ModuleAddressSanitizer::shouldInstrumentGlobal` encodes the candidate global variables.




Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D137227



More information about the llvm-commits mailing list