clang has different behavior depending on -fuse-ld=XXX:
[hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=gold -Wl,-y,__llvm_profile_raw_version -Wl,-plugin-opt=save-temps -fprofile-generate -flto -o a a.c -save-temps a.o: definition of __llvm_profile_raw_version /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.profile-x86_64.a(InstrProfiling.c.o): definition of __llvm_profile_raw_version a.o: definition of __llvm_profile_raw_version [hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=bfd -Wl,-y,__llvm_profile_raw_version -Wl,-plugin-opt=save-temps -fprofile-generate -flto -o a a.o /usr/bin/ld.bfd: a.o: definition of __llvm_profile_raw_version [hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=bfd -Wl,-y,__llvm_profile_raw_version -Wl,-plugin-opt=save-temps -fprofile-generate -flto -o a a.c -save-temps /usr/bin/ld.bfd: a.o (symbol from plugin): definition of __llvm_profile_raw_version /usr/bin/ld.bfd: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.profile-x86_64.a(InstrProfiling.c.o): definition of __llvm_profile_raw_version [hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=gold -Wl,-y,__llvm_profile_raw_version -Wl,-plugin-opt=save-temps -fprofile-generate -flto -o a a.o /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.profile-x86_64.a(InstrProfiling.c.o): definition of __llvm_profile_raw_version [hjl@gnu-cfl-2 pr26262]$ rm a.o [hjl@gnu-cfl-2 pr26262]$ clang -fprofile-generate -flto -c a.c [hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=bfd -Wl,-y,__llvm_profile_raw_version -Wl,-plugin-opt=save-temps -fprofile-generate -flto -o a a.o /usr/bin/ld.bfd: a.o (symbol from plugin): definition of __llvm_profile_raw_version /usr/bin/ld.bfd: /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.profile-x86_64.a(InstrProfiling.c.o): definition of __llvm_profile_raw_version [hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=gold -Wl,-y,__llvm_profile_raw_version -Wl,-plugin-opt=save-temps -fprofile-generate -flto -o a a.o /usr/lib64/clang/10.0.0/lib/linux/libclang_rt.profile-x86_64.a(InstrProfiling.c.o): definition of __llvm_profile_raw_version [hjl@gnu-cfl-2 pr26262]$
It looks like a clang bug.
clang has different behavior depending on -fuse-ld=XXX:
[hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=gold -Wl,-y, __llvm_ profile_ raw_version -Wl,-plugin- opt=save- temps -fprofile-generate -flto -o a a.c -save-temps profile_ raw_version clang/10. 0.0/lib/ linux/libclang_ rt.profile- x86_64. a(InstrProfilin g.c.o): definition of __llvm_ profile_ raw_version profile_ raw_version __llvm_ profile_ raw_version -Wl,-plugin- opt=save- temps -fprofile-generate -flto -o a a.o profile_ raw_version __llvm_ profile_ raw_version -Wl,-plugin- opt=save- temps -fprofile-generate -flto -o a a.c -save-temps profile_ raw_version clang/10. 0.0/lib/ linux/libclang_ rt.profile- x86_64. a(InstrProfilin g.c.o): definition of __llvm_ profile_ raw_version __llvm_ profile_ raw_version -Wl,-plugin- opt=save- temps -fprofile-generate -flto -o a a.o clang/10. 0.0/lib/ linux/libclang_ rt.profile- x86_64. a(InstrProfilin g.c.o): definition of __llvm_ profile_ raw_version __llvm_ profile_ raw_version -Wl,-plugin- opt=save- temps -fprofile-generate -flto -o a a.o profile_ raw_version clang/10. 0.0/lib/ linux/libclang_ rt.profile- x86_64. a(InstrProfilin g.c.o): definition of __llvm_ profile_ raw_version __llvm_ profile_ raw_version -Wl,-plugin- opt=save- temps -fprofile-generate -flto -o a a.o clang/10. 0.0/lib/ linux/libclang_ rt.profile- x86_64. a(InstrProfilin g.c.o): definition of __llvm_ profile_ raw_version
a.o: definition of __llvm_
/usr/lib64/
a.o: definition of __llvm_
[hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=bfd -Wl,-y,
/usr/bin/ld.bfd: a.o: definition of __llvm_
[hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=bfd -Wl,-y,
/usr/bin/ld.bfd: a.o (symbol from plugin): definition of __llvm_
/usr/bin/ld.bfd: /usr/lib64/
[hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=gold -Wl,-y,
/usr/lib64/
[hjl@gnu-cfl-2 pr26262]$ rm a.o
[hjl@gnu-cfl-2 pr26262]$ clang -fprofile-generate -flto -c a.c
[hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=bfd -Wl,-y,
/usr/bin/ld.bfd: a.o (symbol from plugin): definition of __llvm_
/usr/bin/ld.bfd: /usr/lib64/
[hjl@gnu-cfl-2 pr26262]$ clang -fuse-ld=gold -Wl,-y,
/usr/lib64/
[hjl@gnu-cfl-2 pr26262]$
It looks like a clang bug.