mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2026-04-27 04:18:42 +00:00
Pass a MCSymbol to needsRelocateWithSymbol.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@238589 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
1 parent
3bd732d1ee
commit
e97d937576
6 files changed
+12
-13
No files matched your search
@@ -69,7 +69,7 @@ public:
|
|||||||
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||||
bool IsPCRel) const = 0;
|
bool IsPCRel) const = 0;
|
||||||
|
|
||||||
virtual bool needsRelocateWithSymbol(const MCSymbolData &SD,
|
virtual bool needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
unsigned Type) const;
|
unsigned Type) const;
|
||||||
|
|
||||||
virtual void sortRelocs(const MCAssembler &Asm,
|
virtual void sortRelocs(const MCAssembler &Asm,
|
||||||
|
|||||||
@@ -593,7 +593,7 @@ bool ELFObjectWriter::shouldRelocateWithSymbol(const MCAssembler &Asm,
|
|||||||
if (Asm.isThumbFunc(Sym))
|
if (Asm.isThumbFunc(Sym))
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
if (TargetObjectWriter->needsRelocateWithSymbol(*SD, Type))
|
if (TargetObjectWriter->needsRelocateWithSymbol(*Sym, Type))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -24,7 +24,7 @@ MCELFObjectTargetWriter::MCELFObjectTargetWriter(bool Is64Bit_,
|
|||||||
IsN64(IsN64_){
|
IsN64(IsN64_){
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MCELFObjectTargetWriter::needsRelocateWithSymbol(const MCSymbolData &SD,
|
bool MCELFObjectTargetWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
unsigned Type) const {
|
unsigned Type) const {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ namespace {
|
|||||||
unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||||
bool IsPCRel) const override;
|
bool IsPCRel) const override;
|
||||||
|
|
||||||
bool needsRelocateWithSymbol(const MCSymbolData &SD,
|
bool needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
unsigned Type) const override;
|
unsigned Type) const override;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -49,7 +49,7 @@ ARMELFObjectWriter::ARMELFObjectWriter(uint8_t OSABI)
|
|||||||
|
|
||||||
ARMELFObjectWriter::~ARMELFObjectWriter() {}
|
ARMELFObjectWriter::~ARMELFObjectWriter() {}
|
||||||
|
|
||||||
bool ARMELFObjectWriter::needsRelocateWithSymbol(const MCSymbolData &SD,
|
bool ARMELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
unsigned Type) const {
|
unsigned Type) const {
|
||||||
// FIXME: This is extremely conservative. This really needs to use a
|
// FIXME: This is extremely conservative. This really needs to use a
|
||||||
// whitelist with a clear explanation for why each realocation needs to
|
// whitelist with a clear explanation for why each realocation needs to
|
||||||
|
|||||||
@@ -46,7 +46,7 @@ struct MipsRelocationEntry {
|
|||||||
|
|
||||||
unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||||
bool IsPCRel) const override;
|
bool IsPCRel) const override;
|
||||||
bool needsRelocateWithSymbol(const MCSymbolData &SD,
|
bool needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
unsigned Type) const override;
|
unsigned Type) const override;
|
||||||
virtual void sortRelocs(const MCAssembler &Asm,
|
virtual void sortRelocs(const MCAssembler &Asm,
|
||||||
std::vector<ELFRelocationEntry> &Relocs) override;
|
std::vector<ELFRelocationEntry> &Relocs) override;
|
||||||
@@ -405,9 +405,8 @@ void MipsELFObjectWriter::sortRelocs(const MCAssembler &Asm,
|
|||||||
Relocs[I] = MipsRelocs[I].R;
|
Relocs[I] = MipsRelocs[I].R;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool
|
bool MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbolData &SD,
|
unsigned Type) const {
|
||||||
unsigned Type) const {
|
|
||||||
// FIXME: This is extremely conservative. This really needs to use a
|
// FIXME: This is extremely conservative. This really needs to use a
|
||||||
// whitelist with a clear explanation for why each realocation needs to
|
// whitelist with a clear explanation for why each realocation needs to
|
||||||
// point to the symbol, not to the section.
|
// point to the symbol, not to the section.
|
||||||
@@ -434,7 +433,7 @@ MipsELFObjectWriter::needsRelocateWithSymbol(const MCSymbolData &SD,
|
|||||||
return true;
|
return true;
|
||||||
|
|
||||||
case ELF::R_MIPS_32:
|
case ELF::R_MIPS_32:
|
||||||
if (MCELF::getOther(SD) & (ELF::STO_MIPS_MICROMIPS >> 2))
|
if (MCELF::getOther(Sym.getData()) & (ELF::STO_MIPS_MICROMIPS >> 2))
|
||||||
return true;
|
return true;
|
||||||
// falltrough
|
// falltrough
|
||||||
case ELF::R_MIPS_26:
|
case ELF::R_MIPS_26:
|
||||||
|
|||||||
@@ -28,7 +28,7 @@ namespace {
|
|||||||
unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,
|
||||||
bool IsPCRel) const override;
|
bool IsPCRel) const override;
|
||||||
|
|
||||||
bool needsRelocateWithSymbol(const MCSymbolData &SD,
|
bool needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
unsigned Type) const override;
|
unsigned Type) const override;
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
@@ -395,7 +395,7 @@ unsigned PPCELFObjectWriter::GetRelocType(const MCValue &Target,
|
|||||||
return Type;
|
return Type;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool PPCELFObjectWriter::needsRelocateWithSymbol(const MCSymbolData &SD,
|
bool PPCELFObjectWriter::needsRelocateWithSymbol(const MCSymbol &Sym,
|
||||||
unsigned Type) const {
|
unsigned Type) const {
|
||||||
switch (Type) {
|
switch (Type) {
|
||||||
default:
|
default:
|
||||||
@@ -407,7 +407,7 @@ bool PPCELFObjectWriter::needsRelocateWithSymbol(const MCSymbolData &SD,
|
|||||||
// The "other" values are stored in the last 6 bits of the second byte.
|
// The "other" values are stored in the last 6 bits of the second byte.
|
||||||
// The traditional defines for STO values assume the full byte and thus
|
// The traditional defines for STO values assume the full byte and thus
|
||||||
// the shift to pack it.
|
// the shift to pack it.
|
||||||
unsigned Other = MCELF::getOther(SD) << 2;
|
unsigned Other = MCELF::getOther(Sym.getData()) << 2;
|
||||||
return (Other & ELF::STO_PPC64_LOCAL_MASK) != 0;
|
return (Other & ELF::STO_PPC64_LOCAL_MASK) != 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in new issue
Block a user