mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +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:
parent
1e5490b167
commit
c59decb902
@ -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(),
|
||||
|
@ -3,11 +3,13 @@
|
||||
// CHECK: Relocations [
|
||||
// CHECK-NEXT: Section {{.*}} .text {
|
||||
// CHECK-NEXT: 0x3 IMAGE_REL_AMD64_REL32 zed
|
||||
// CHECK-NEXT: 0xA IMAGE_REL_AMD64_REL32 zed2
|
||||
// CHECK-NEXT: }
|
||||
// CHECK-NEXT: ]
|
||||
|
||||
foo:
|
||||
leaq zed(%rip), %rax
|
||||
leaq zed2(%rip), %rax
|
||||
retq
|
||||
|
||||
.section .rdata,"dr",discard,zed
|
||||
@ -16,3 +18,6 @@ Lbar:
|
||||
|
||||
.globl zed
|
||||
zed = Lbar+1
|
||||
|
||||
.globl zed2
|
||||
zed2 = Lbar
|
||||
|
Loading…
Reference in New Issue
Block a user