[all-commits] [llvm/llvm-project] 58ecfc: [profile] Add __attribute__((used)) to zero size d...

Fangrui Song via All-commits all-commits at lists.llvm.org
Wed Feb 17 19:22:50 PST 2021


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: 58ecfccd0dd3a064a11b1f2eb164cbff7d60faf5
      https://github.com/llvm/llvm-project/commit/58ecfccd0dd3a064a11b1f2eb164cbff7d60faf5
  Author: Fangrui Song <i at maskray.me>
  Date:   2021-02-17 (Wed, 17 Feb 2021)

  Changed paths:
    M compiler-rt/lib/profile/InstrProfilingPlatformLinux.c
    M compiler-rt/lib/profile/InstrProfilingPort.h

  Log Message:
  -----------
  [profile] Add __attribute__((used)) to zero size dummy sections

D14468 added these dummy sections. This patch adds `__attribute__((used))` so
that when compiled by GCC>=11 or (expected, D96838) Clang>=13 on some ELF platforms,
these sections will get SHF_GNU_RETAIN to make sure they will not be discarded
by ld --gc-sections.

We are trying to get rid of LLD's "__start_/__stop_ references retain C identifier name sections" rule.
If LLD drops the rule in the future (we will retain compatibility for `__llvm_prf_*` for a while),
`__llvm_prf_*` will need to have the SHF_GNU_RETAIN flag, otherwise:

```
// __llvm_prf_cnts/__llvm_prf_data usually exist, but {names,vnds} may not exist.
// Such diagnostics will happen with {cnts,data} as well if no input object file is instrumented.
% clang++ -fprofile-generate a.cc -fuse-ld=lld -Wl,--gc-sections
ld.lld: error: undefined hidden symbol: __start___llvm_prf_names
>>> referenced by InstrProfilingPlatformLinux.c
>>>               InstrProfilingPlatformLinux.c.o:(__llvm_profile_begin_names) in archive /tmp/RelA/lib/clang/13.0.0/lib/linux/libclang_rt.profile-x86_64.a
...
```

Differential Revision: https://reviews.llvm.org/D96902




More information about the All-commits mailing list