mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-05-21 12:38:45 +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 {
|
bool WinCOFFObjectWriter::isWeak(const MCSymbolData &SD) const {
|
||||||
// FIXME: this is for PR23025. Write a good description on
|
if (!SD.isExternal())
|
||||||
// why this is needed.
|
return false;
|
||||||
return SD.isExternal();
|
|
||||||
|
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(
|
void WinCOFFObjectWriter::RecordRelocation(
|
||||||
@ -674,7 +686,7 @@ void WinCOFFObjectWriter::RecordRelocation(
|
|||||||
assert(Target.getSymA() && "Relocation must reference a symbol!");
|
assert(Target.getSymA() && "Relocation must reference a symbol!");
|
||||||
|
|
||||||
const MCSymbol &Symbol = Target.getSymA()->getSymbol();
|
const MCSymbol &Symbol = Target.getSymA()->getSymbol();
|
||||||
const MCSymbol &A = Symbol.AliasedSymbol();
|
const MCSymbol &A = Symbol;
|
||||||
if (!Asm.hasSymbolData(A))
|
if (!Asm.hasSymbolData(A))
|
||||||
Asm.getContext().FatalError(
|
Asm.getContext().FatalError(
|
||||||
Fixup.getLoc(),
|
Fixup.getLoc(),
|
||||||
|
@ -3,11 +3,13 @@
|
|||||||
// CHECK: Relocations [
|
// CHECK: Relocations [
|
||||||
// CHECK-NEXT: Section {{.*}} .text {
|
// CHECK-NEXT: Section {{.*}} .text {
|
||||||
// CHECK-NEXT: 0x3 IMAGE_REL_AMD64_REL32 zed
|
// CHECK-NEXT: 0x3 IMAGE_REL_AMD64_REL32 zed
|
||||||
|
// CHECK-NEXT: 0xA IMAGE_REL_AMD64_REL32 zed2
|
||||||
// CHECK-NEXT: }
|
// CHECK-NEXT: }
|
||||||
// CHECK-NEXT: ]
|
// CHECK-NEXT: ]
|
||||||
|
|
||||||
foo:
|
foo:
|
||||||
leaq zed(%rip), %rax
|
leaq zed(%rip), %rax
|
||||||
|
leaq zed2(%rip), %rax
|
||||||
retq
|
retq
|
||||||
|
|
||||||
.section .rdata,"dr",discard,zed
|
.section .rdata,"dr",discard,zed
|
||||||
@ -16,3 +18,6 @@ Lbar:
|
|||||||
|
|
||||||
.globl zed
|
.globl zed
|
||||||
zed = Lbar+1
|
zed = Lbar+1
|
||||||
|
|
||||||
|
.globl zed2
|
||||||
|
zed2 = Lbar
|
||||||
|
Loading…
x
Reference in New Issue
Block a user