[PATCH] D76802: [InstrProfiling] Use !associated metadata for counters, data and values

Fangrui Song via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Mon Feb 1 09:49:48 PST 2021


MaskRay added a comment.

> The !associated metadata may be attached to a global object declaration with a single argument that references another global object. This metadata prevents discarding of the global object in linker GC unless the referenced object is also discarded.

"prevents discarding" is not accurate in the context. `__llvm_prf_*` cannot be discarded because C identifier name input sections are GC roots.

Add "C identifier name input sections are GC roots. In LLD, the SHF_LINK_ORDER flag overrides the C identifier name semantics." in appropriate place.

> Furthermore, when a function symbol is discarded by the linker, setting up !associated metadata allows linker to discard counters, data and values associated with that function symbol. This is not possible today because there's metadata to guide the linker. This approach is also used by other instrumentations like sanitizers.

This C identifier name GC currently only works with LLD but does no harm to gold/GNU ld.

Do you think `__llvm_prf_*` can link to the text section so that the self-link trick is not needed? (https://sourceware.org/bugzilla/show_bug.cgi?id=27259)


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

https://reviews.llvm.org/D76802



More information about the llvm-commits mailing list