forked from OSchip/llvm-project
parent
9b54878b38
commit
d926ea2ff7
|
@ -396,7 +396,7 @@ bool X86MachObjectWriter::recordScatteredRelocation(MachObjectWriter *Writer,
|
|||
if (!SB->getFragment()) {
|
||||
Asm.getContext().reportError(
|
||||
Fixup.getLoc(),
|
||||
"symbol '" + B->getSymbol().getName() +
|
||||
"symbol '" + SB->getName() +
|
||||
"' can not be undefined in a subtraction expression");
|
||||
return false;
|
||||
}
|
||||
|
@ -408,7 +408,7 @@ bool X86MachObjectWriter::recordScatteredRelocation(MachObjectWriter *Writer,
|
|||
// pedantic compatibility with 'as'.
|
||||
Type = A->isExternal() ? (unsigned)MachO::GENERIC_RELOC_SECTDIFF
|
||||
: (unsigned)MachO::GENERIC_RELOC_LOCAL_SECTDIFF;
|
||||
Value2 = Writer->getSymbolAddress(B->getSymbol(), Layout);
|
||||
Value2 = Writer->getSymbolAddress(*SB, Layout);
|
||||
FixedValue -= Writer->getSectionAddress(SB->getFragment()->getParent());
|
||||
}
|
||||
|
||||
|
@ -468,8 +468,8 @@ void X86MachObjectWriter::recordTLVPRelocation(MachObjectWriter *Writer,
|
|||
const MCFixup &Fixup,
|
||||
MCValue Target,
|
||||
uint64_t &FixedValue) {
|
||||
assert(Target.getSymA()->getKind() == MCSymbolRefExpr::VK_TLVP &&
|
||||
!is64Bit() &&
|
||||
const MCSymbolRefExpr *SymA = Target.getSymA();
|
||||
assert(SymA->getKind() == MCSymbolRefExpr::VK_TLVP && !is64Bit() &&
|
||||
"Should only be called with a 32-bit TLVP relocation!");
|
||||
|
||||
unsigned Log2Size = getFixupKindLog2Size(Fixup.getKind());
|
||||
|
@ -480,15 +480,14 @@ void X86MachObjectWriter::recordTLVPRelocation(MachObjectWriter *Writer,
|
|||
// subtraction from the picbase. For 32-bit pic the addend is the difference
|
||||
// between the picbase and the next address. For 32-bit static the addend is
|
||||
// zero.
|
||||
if (Target.getSymB()) {
|
||||
if (auto *SymB = Target.getSymB()) {
|
||||
// If this is a subtraction then we're pcrel.
|
||||
uint32_t FixupAddress =
|
||||
Writer->getFragmentAddress(Fragment, Layout) + Fixup.getOffset();
|
||||
IsPCRel = 1;
|
||||
FixedValue =
|
||||
FixupAddress -
|
||||
Writer->getSymbolAddress(Target.getSymB()->getSymbol(), Layout) +
|
||||
Target.getConstant();
|
||||
FixedValue = FixupAddress -
|
||||
Writer->getSymbolAddress(SymB->getSymbol(), Layout) +
|
||||
Target.getConstant();
|
||||
FixedValue += 1ULL << Log2Size;
|
||||
} else {
|
||||
FixedValue = 0;
|
||||
|
@ -499,8 +498,7 @@ void X86MachObjectWriter::recordTLVPRelocation(MachObjectWriter *Writer,
|
|||
MRE.r_word0 = Value;
|
||||
MRE.r_word1 =
|
||||
(IsPCRel << 24) | (Log2Size << 25) | (MachO::GENERIC_RELOC_TLV << 28);
|
||||
Writer->addRelocation(&Target.getSymA()->getSymbol(), Fragment->getParent(),
|
||||
MRE);
|
||||
Writer->addRelocation(&SymA->getSymbol(), Fragment->getParent(), MRE);
|
||||
}
|
||||
|
||||
void X86MachObjectWriter::RecordX86Relocation(MachObjectWriter *Writer,
|
||||
|
|
Loading…
Reference in New Issue