diff options
| author | Rafael Espindola <rafael.espindola@gmail.com> | 2011-12-21 17:30:17 +0000 | 
|---|---|---|
| committer | Rafael Espindola <rafael.espindola@gmail.com> | 2011-12-21 17:30:17 +0000 | 
| commit | b264d338548aea21b6e88335dac35b627d3b3e80 (patch) | |
| tree | fa013015072cd0f5e66335b978f63428c7a02b57 /llvm/lib/MC | |
| parent | 1ad4095d6bb6b827708c30b96183e6b15ae1578e (diff) | |
| download | bcm5719-llvm-b264d338548aea21b6e88335dac35b627d3b3e80.tar.gz bcm5719-llvm-b264d338548aea21b6e88335dac35b627d3b3e80.zip  | |
Move the X86 specific bits of the ELF writer to the Target/X86 directory.
Other targets will follow shortly.
llvm-svn: 147060
Diffstat (limited to 'llvm/lib/MC')
| -rw-r--r-- | llvm/lib/MC/ELFObjectWriter.cpp | 201 | ||||
| -rw-r--r-- | llvm/lib/MC/ELFObjectWriter.h | 18 | ||||
| -rw-r--r-- | llvm/lib/MC/MCELFObjectTargetWriter.cpp | 8 | 
3 files changed, 19 insertions, 208 deletions
diff --git a/llvm/lib/MC/ELFObjectWriter.cpp b/llvm/lib/MC/ELFObjectWriter.cpp index 5e1b0d0dfed..8918097d3d3 100644 --- a/llvm/lib/MC/ELFObjectWriter.cpp +++ b/llvm/lib/MC/ELFObjectWriter.cpp @@ -29,7 +29,6 @@  #include "llvm/ADT/StringSwitch.h"  #include "../Target/Mips/MCTargetDesc/MipsFixupKinds.h" -#include "../Target/X86/MCTargetDesc/X86FixupKinds.h"  #include "../Target/ARM/MCTargetDesc/ARMFixupKinds.h"  #include "../Target/PowerPC/MCTargetDesc/PPCFixupKinds.h" @@ -1261,7 +1260,7 @@ MCObjectWriter *llvm::createELFObjectWriter(MCELFObjectTargetWriter *MOTW,    switch (MOTW->getEMachine()) {      case ELF::EM_386:      case ELF::EM_X86_64: -      return new X86ELFObjectWriter(MOTW, OS, IsLittleEndian); break; +      return new ELFObjectWriter(MOTW, OS, IsLittleEndian); break;      case ELF::EM_ARM:        return new ARMELFObjectWriter(MOTW, OS, IsLittleEndian); break;      case ELF::EM_MBLAZE: @@ -1275,6 +1274,15 @@ MCObjectWriter *llvm::createELFObjectWriter(MCELFObjectTargetWriter *MOTW,    }  } +unsigned ELFObjectWriter::GetRelocType(const MCValue &Target, +                                       const MCFixup &Fixup, +                                       bool IsPCRel, +                                       bool IsRelocWithSymbol, +                                       int64_t Addend) const { +  return TargetObjectWriter->GetRelocType(Target, Fixup, IsPCRel, +                                          IsRelocWithSymbol, Addend); +} +  /// START OF SUBCLASSES for ELFObjectWriter  //===- ARMELFObjectWriter -------------------------------------------===// @@ -1628,195 +1636,6 @@ unsigned MBlazeELFObjectWriter::GetRelocType(const MCValue &Target,    return Type;  } -//===- X86ELFObjectWriter -------------------------------------------===// - - -X86ELFObjectWriter::X86ELFObjectWriter(MCELFObjectTargetWriter *MOTW, -                                       raw_ostream &_OS, -                                       bool IsLittleEndian) -  : ELFObjectWriter(MOTW, _OS, IsLittleEndian) -{} - -X86ELFObjectWriter::~X86ELFObjectWriter() -{} - -unsigned X86ELFObjectWriter::GetRelocType(const MCValue &Target, -                                          const MCFixup &Fixup, -                                          bool IsPCRel, -                                          bool IsRelocWithSymbol, -                                          int64_t Addend) const { -  // determine the type of the relocation - -  MCSymbolRefExpr::VariantKind Modifier = Target.isAbsolute() ? -    MCSymbolRefExpr::VK_None : Target.getSymA()->getKind(); -  unsigned Type; -  if (is64Bit()) { -    if (IsPCRel) { -      switch ((unsigned)Fixup.getKind()) { -      default: llvm_unreachable("invalid fixup kind!"); - -      case FK_Data_8: Type = ELF::R_X86_64_PC64; break; -      case FK_Data_4: Type = ELF::R_X86_64_PC32; break; -      case FK_Data_2: Type = ELF::R_X86_64_PC16; break; - -      case FK_PCRel_8: -        assert(Modifier == MCSymbolRefExpr::VK_None); -        Type = ELF::R_X86_64_PC64; -        break; -      case X86::reloc_signed_4byte: -      case X86::reloc_riprel_4byte_movq_load: -      case X86::reloc_riprel_4byte: -      case FK_PCRel_4: -        switch (Modifier) { -        default: -          llvm_unreachable("Unimplemented"); -        case MCSymbolRefExpr::VK_None: -          Type = ELF::R_X86_64_PC32; -          break; -        case MCSymbolRefExpr::VK_PLT: -          Type = ELF::R_X86_64_PLT32; -          break; -        case MCSymbolRefExpr::VK_GOTPCREL: -          Type = ELF::R_X86_64_GOTPCREL; -          break; -        case MCSymbolRefExpr::VK_GOTTPOFF: -          Type = ELF::R_X86_64_GOTTPOFF; -        break; -        case MCSymbolRefExpr::VK_TLSGD: -          Type = ELF::R_X86_64_TLSGD; -          break; -        case MCSymbolRefExpr::VK_TLSLD: -          Type = ELF::R_X86_64_TLSLD; -          break; -        } -        break; -      case FK_PCRel_2: -        assert(Modifier == MCSymbolRefExpr::VK_None); -        Type = ELF::R_X86_64_PC16; -        break; -      case FK_PCRel_1: -        assert(Modifier == MCSymbolRefExpr::VK_None); -        Type = ELF::R_X86_64_PC8; -        break; -      } -    } else { -      switch ((unsigned)Fixup.getKind()) { -      default: llvm_unreachable("invalid fixup kind!"); -      case FK_Data_8: Type = ELF::R_X86_64_64; break; -      case X86::reloc_signed_4byte: -        switch (Modifier) { -        default: -          llvm_unreachable("Unimplemented"); -        case MCSymbolRefExpr::VK_None: -          Type = ELF::R_X86_64_32S; -          break; -        case MCSymbolRefExpr::VK_GOT: -          Type = ELF::R_X86_64_GOT32; -          break; -        case MCSymbolRefExpr::VK_GOTPCREL: -          Type = ELF::R_X86_64_GOTPCREL; -          break; -        case MCSymbolRefExpr::VK_TPOFF: -          Type = ELF::R_X86_64_TPOFF32; -          break; -        case MCSymbolRefExpr::VK_DTPOFF: -          Type = ELF::R_X86_64_DTPOFF32; -          break; -        } -        break; -      case FK_Data_4: -        Type = ELF::R_X86_64_32; -        break; -      case FK_Data_2: Type = ELF::R_X86_64_16; break; -      case FK_PCRel_1: -      case FK_Data_1: Type = ELF::R_X86_64_8; break; -      } -    } -  } else { -    if (IsPCRel) { -      switch ((unsigned)Fixup.getKind()) { -      default: llvm_unreachable("invalid fixup kind!"); - -      case X86::reloc_global_offset_table: -        Type = ELF::R_386_GOTPC; -        break; - -      case X86::reloc_signed_4byte: -      case FK_PCRel_4: -      case FK_Data_4: -        switch (Modifier) { -        default: -          llvm_unreachable("Unimplemented"); -        case MCSymbolRefExpr::VK_None: -          Type = ELF::R_386_PC32; -          break; -        case MCSymbolRefExpr::VK_PLT: -          Type = ELF::R_386_PLT32; -          break; -        } -        break; -      } -    } else { -      switch ((unsigned)Fixup.getKind()) { -      default: llvm_unreachable("invalid fixup kind!"); - -      case X86::reloc_global_offset_table: -        Type = ELF::R_386_GOTPC; -        break; - -      // FIXME: Should we avoid selecting reloc_signed_4byte in 32 bit mode -      // instead? -      case X86::reloc_signed_4byte: -      case FK_PCRel_4: -      case FK_Data_4: -        switch (Modifier) { -        default: -          llvm_unreachable("Unimplemented"); -        case MCSymbolRefExpr::VK_None: -          Type = ELF::R_386_32; -          break; -        case MCSymbolRefExpr::VK_GOT: -          Type = ELF::R_386_GOT32; -          break; -        case MCSymbolRefExpr::VK_GOTOFF: -          Type = ELF::R_386_GOTOFF; -          break; -        case MCSymbolRefExpr::VK_TLSGD: -          Type = ELF::R_386_TLS_GD; -          break; -        case MCSymbolRefExpr::VK_TPOFF: -          Type = ELF::R_386_TLS_LE_32; -          break; -        case MCSymbolRefExpr::VK_INDNTPOFF: -          Type = ELF::R_386_TLS_IE; -          break; -        case MCSymbolRefExpr::VK_NTPOFF: -          Type = ELF::R_386_TLS_LE; -          break; -        case MCSymbolRefExpr::VK_GOTNTPOFF: -          Type = ELF::R_386_TLS_GOTIE; -          break; -        case MCSymbolRefExpr::VK_TLSLDM: -          Type = ELF::R_386_TLS_LDM; -          break; -        case MCSymbolRefExpr::VK_DTPOFF: -          Type = ELF::R_386_TLS_LDO_32; -          break; -        case MCSymbolRefExpr::VK_GOTTPOFF: -          Type = ELF::R_386_TLS_IE_32; -          break; -        } -        break; -      case FK_Data_2: Type = ELF::R_386_16; break; -      case FK_PCRel_1: -      case FK_Data_1: Type = ELF::R_386_8; break; -      } -    } -  } - -  return Type; -} -  //===- MipsELFObjectWriter -------------------------------------------===//  MipsELFObjectWriter::MipsELFObjectWriter(MCELFObjectTargetWriter *MOTW, diff --git a/llvm/lib/MC/ELFObjectWriter.h b/llvm/lib/MC/ELFObjectWriter.h index 3ba722c2703..32ab198fd5d 100644 --- a/llvm/lib/MC/ELFObjectWriter.h +++ b/llvm/lib/MC/ELFObjectWriter.h @@ -351,27 +351,11 @@ class ELFObjectWriter : public MCObjectWriter {    protected:      virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,                                    bool IsPCRel, bool IsRelocWithSymbol, -                                  int64_t Addend) const = 0; +                                  int64_t Addend) const;      virtual void adjustFixupOffset(const MCFixup &Fixup,                                     uint64_t &RelocOffset) {}    }; -  //===- X86ELFObjectWriter -------------------------------------------===// - -  class X86ELFObjectWriter : public ELFObjectWriter { -  public: -    X86ELFObjectWriter(MCELFObjectTargetWriter *MOTW, -                       raw_ostream &_OS, -                       bool IsLittleEndian); - -    virtual ~X86ELFObjectWriter(); -  protected: -    virtual unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup, -                                  bool IsPCRel, bool IsRelocWithSymbol, -                                  int64_t Addend) const; -  }; - -    //===- ARMELFObjectWriter -------------------------------------------===//    class ARMELFObjectWriter : public ELFObjectWriter { diff --git a/llvm/lib/MC/MCELFObjectTargetWriter.cpp b/llvm/lib/MC/MCELFObjectTargetWriter.cpp index 1d5698dd452..51435174d9f 100644 --- a/llvm/lib/MC/MCELFObjectTargetWriter.cpp +++ b/llvm/lib/MC/MCELFObjectTargetWriter.cpp @@ -19,5 +19,13 @@ MCELFObjectTargetWriter::MCELFObjectTargetWriter(bool Is64Bit_,      HasRelocationAddend(HasRelocationAddend_), Is64Bit(Is64Bit_) {  } +unsigned MCELFObjectTargetWriter::GetRelocType(const MCValue &Target, +                                               const MCFixup &Fixup, +                                               bool IsPCRel, +                                               bool IsRelocWithSymbol, +                                               int64_t Addend) const { +  return 0; +} +  MCELFObjectTargetWriter::~MCELFObjectTargetWriter() {  }  | 

