forked from OSchip/llvm-project
Revert D103717 "[InstrProfiling] Make __profd_ unconditionally private for ELF"
This reverts commit 76d0747e08
.
If a group has `__llvm_prf_vals` due to static value profiler counters
(`NS!=0`), we cannot make `__llvm_prf_data` private, because a prevailing text
section may reference `__llvm_prf_data` and will cause a `relocation refers to a
discarded section` linker error.
Note: while a `__profc_` group is non-prevailing, it may be referenced by a
prevailing text section due to inlining.
```
group section [ 66] `.group' [__profc__ZN5clang20EmitClangDeclContextERN4llvm12RecordKeeperERNS0_11raw_ostreamE] contains 4 sections:
[Index] Name
[ 67] __llvm_prf_cnts
[ 68] __llvm_prf_vals
[ 69] __llvm_prf_data
[ 70] .rela__llvm_prf_data
```
This commit is contained in:
parent
30c9d68ad9
commit
5798be8458
|
@ -929,12 +929,10 @@ InstrProfiling::getOrCreateRegionCounters(InstrProfIncrementInst *Inc) {
|
||||||
#define INSTR_PROF_DATA(Type, LLVMType, Name, Init) Init,
|
#define INSTR_PROF_DATA(Type, LLVMType, Name, Init) Init,
|
||||||
#include "llvm/ProfileData/InstrProfData.inc"
|
#include "llvm/ProfileData/InstrProfData.inc"
|
||||||
};
|
};
|
||||||
// If linker GC cannot discard data variables while the text section is
|
// If code never references data variables (the symbol is unneeded), and
|
||||||
// retained, data variables can be private. This optimization applies on ELF.
|
// linker GC cannot discard data variables while the text section is retained,
|
||||||
// On COFF, when DataReferencedByCode is false, __profd_ is never a comdat
|
// data variables can be private. This optimization applies on COFF and ELF.
|
||||||
// leader, this is applicable as well.
|
if (!DataReferencedByCode && !TT.isOSBinFormatMachO()) {
|
||||||
if (TT.isOSBinFormatELF() ||
|
|
||||||
(!DataReferencedByCode && TT.isOSBinFormatCOFF())) {
|
|
||||||
Linkage = GlobalValue::PrivateLinkage;
|
Linkage = GlobalValue::PrivateLinkage;
|
||||||
Visibility = GlobalValue::DefaultVisibility;
|
Visibility = GlobalValue::DefaultVisibility;
|
||||||
}
|
}
|
||||||
|
|
|
@ -54,7 +54,7 @@ bb11: ; preds = %bb2
|
||||||
}
|
}
|
||||||
|
|
||||||
; Test that comdat function's address is recorded.
|
; Test that comdat function's address is recorded.
|
||||||
; LOWER: @__profd_foo3.[[FOO3_HASH:[0-9]+]] = private {{.*}} @__profc_foo3.[[FOO3_HASH]]
|
; LOWER: @__profd_foo3.[[FOO3_HASH:[0-9]+]] = linkonce_odr{{.*}}@__profc_foo3.[[FOO3_HASH]]
|
||||||
; Function Attrs: nounwind uwtable
|
; Function Attrs: nounwind uwtable
|
||||||
define linkonce_odr i32 @foo3() comdat {
|
define linkonce_odr i32 @foo3() comdat {
|
||||||
ret i32 1
|
ret i32 1
|
||||||
|
|
Loading…
Reference in New Issue