[PATCH] D98061: [InstrProfiling] Generate runtime hook for ELF platforms

Fangrui Song via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Tue Mar 23 12:38:30 PDT 2021


MaskRay added a comment.

> This approach was already used prior to 9a041a75221ca, but we changed it to always generate the llvm_profile_runtime due to a TAPI limitation.

D43794 <https://reviews.llvm.org/D43794> (rG9a041a75221ca <https://reviews.llvm.org/rG9a041a75221cadaafbf902e8ec6b73f6d2612d89>) does not seem to affect the ELF behavior.

> We can stop passing -u__llvm_profile_runtime to the linker on Linux and Fuchsia since the generated undefined symbol in each translation unit that needed it serves the same purpose.

This restores the behavior before @davidxl's rG170cd100ed6f38ec5826dbd1bd6930ddfd3490a4 <https://reviews.llvm.org/rG170cd100ed6f38ec5826dbd1bd6930ddfd3490a4> (2015).
While having less code in the clang driver side is pros to me, I don't know whether it should come with the cost of conditional presence/absence of the .profraw file.
(you can specify LLVM_PROFILE_FILE without %m; -fprofile-profile-generate by default does not use %m)

>> There are also going to be binaries in our system build that don't use foo.h and ideally shouldn't have any overhead since nothing inside them is instrumented (they should behave as if -fprofile-instr-generate wasn't set for them at all). That's not the case today because if you set -fprofile-instr-generate, driver passes -u__llvm_profile_runtime to the linker which "pulls in" the profile runtime introducing some extra bloat and startup overhead I described earlier.
>>
>> The overhead is just __llvm_profile_write_file, right? It just writes a 100+ bytes file which has very little overhead.
>
> It could be more if you use the continuous mode where you'd also need to mmap the profile and do some additional setup.

Can the cost be avoided in the runtime?



================
Comment at: llvm/test/Instrumentation/InstrProfiling/linkage.ll:13
 ; MACHO: @__llvm_profile_runtime = external global i32
-; ELF-NOT: @__llvm_profile_runtime = external global i32
 
----------------
If the symbol is now present, a CHECK line should be kept.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D98061



More information about the cfe-commits mailing list