mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 03:02:36 +01:00
2174d3b961
In PGO, a C++ external linkage function `foo` has a private counter `__profc_foo` and a private `__profd_foo` in a `comdat nodeduplicate`. A `__attribute__((weak))` function `foo` has a weak hidden counter `__profc_foo` and a private `__profd_foo` in a `comdat nodeduplicate`. In `ld.lld a.o b.o`, say a.o defines an external linkage `foo` and b.o defines a weak `foo`. Currently we treat `comdat nodeduplicate` as `comdat any`, ld.lld will incorrectly consider `b.o:__profc_foo` non-prevailing. In the worst case when `b.o:__profd_foo` is retained and `b.o:__profc_foo` isn't, there will be dangling reference causing an `undefined hidden symbol` error. Add SelectionKind to `Comdat` in IRSymtab and let linkers ignore nodeduplicate comdat. Differential Revision: https://reviews.llvm.org/D106228 |
||
---|---|---|
.. | ||
Archive.cpp | ||
ArchiveWriter.cpp | ||
Binary.cpp | ||
CMakeLists.txt | ||
COFFImportFile.cpp | ||
COFFModuleDefinition.cpp | ||
COFFObjectFile.cpp | ||
Decompressor.cpp | ||
ELF.cpp | ||
ELFObjectFile.cpp | ||
Error.cpp | ||
FaultMapParser.cpp | ||
IRObjectFile.cpp | ||
IRSymtab.cpp | ||
MachOObjectFile.cpp | ||
MachOUniversal.cpp | ||
MachOUniversalWriter.cpp | ||
Minidump.cpp | ||
ModuleSymbolTable.cpp | ||
Object.cpp | ||
ObjectFile.cpp | ||
RecordStreamer.cpp | ||
RecordStreamer.h | ||
RelocationResolver.cpp | ||
SymbolicFile.cpp | ||
SymbolSize.cpp | ||
TapiFile.cpp | ||
TapiUniversal.cpp | ||
WasmObjectFile.cpp | ||
WindowsMachineFlag.cpp | ||
WindowsResource.cpp | ||
XCOFFObjectFile.cpp |