mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-07-23 14:25:07 +00:00
Add a proper fix for pr23025.
Instead of avoiding looking past every global symbol, only do so if the symbol is in a comdat. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@235181 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@@ -663,9 +663,21 @@ bool WinCOFFObjectWriter::IsSymbolRefDifferenceFullyResolvedImpl(
|
||||
}
|
||||
|
||||
bool WinCOFFObjectWriter::isWeak(const MCSymbolData &SD) const {
|
||||
// FIXME: this is for PR23025. Write a good description on
|
||||
// why this is needed.
|
||||
return SD.isExternal();
|
||||
if (!SD.isExternal())
|
||||
return false;
|
||||
|
||||
const MCSymbol &Sym = SD.getSymbol();
|
||||
if (!Sym.isInSection())
|
||||
return false;
|
||||
|
||||
const auto &Sec = cast<MCSectionCOFF>(Sym.getSection());
|
||||
if (!Sec.getCOMDATSymbol())
|
||||
return false;
|
||||
|
||||
// It looks like for COFF it is invalid to replace a reference to a global
|
||||
// in a comdat with a reference to a local.
|
||||
// FIXME: Add a specification reference if available.
|
||||
return true;
|
||||
}
|
||||
|
||||
void WinCOFFObjectWriter::RecordRelocation(
|
||||
@@ -674,7 +686,7 @@ void WinCOFFObjectWriter::RecordRelocation(
|
||||
assert(Target.getSymA() && "Relocation must reference a symbol!");
|
||||
|
||||
const MCSymbol &Symbol = Target.getSymA()->getSymbol();
|
||||
const MCSymbol &A = Symbol.AliasedSymbol();
|
||||
const MCSymbol &A = Symbol;
|
||||
if (!Asm.hasSymbolData(A))
|
||||
Asm.getContext().FatalError(
|
||||
Fixup.getLoc(),
|
||||
|
Reference in New Issue
Block a user