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:
Rafael Espindola committed 2015-05-29 18:26:09 +00:00
1 parent 3bd732d1ee
commit e97d937576
6 files changed
+12 -13

No files matched your search

+1 -1
View File
@@ -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,
+1 -1
View File
@@ -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;
} }
+1 -1
View File
@@ -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;
} }
} }