diff options
Diffstat (limited to 'llvm')
4 files changed, 17 insertions, 10 deletions
diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp index 8bed2deef4c..468563c4498 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUAsmBackend.cpp @@ -127,11 +127,14 @@ bool AMDGPUAsmBackend::writeNopData(uint64_t Count, MCObjectWriter *OW) const {  namespace {  class ELFAMDGPUAsmBackend : public AMDGPUAsmBackend { +  bool Is64Bit; +  public: -  ELFAMDGPUAsmBackend(const Target &T) : AMDGPUAsmBackend(T) { } +  ELFAMDGPUAsmBackend(const Target &T, bool Is64Bit) : +      AMDGPUAsmBackend(T), Is64Bit(Is64Bit) { }    MCObjectWriter *createObjectWriter(raw_pwrite_stream &OS) const override { -    return createAMDGPUELFObjectWriter(OS); +    return createAMDGPUELFObjectWriter(Is64Bit, OS);    }  }; @@ -140,5 +143,8 @@ public:  MCAsmBackend *llvm::createAMDGPUAsmBackend(const Target &T,                                             const MCRegisterInfo &MRI,                                             const Triple &TT, StringRef CPU) { -  return new ELFAMDGPUAsmBackend(T); +  Triple TargetTriple(TT); + +  // Use 64-bit ELF for amdgcn +  return new ELFAMDGPUAsmBackend(T, TargetTriple.getArch() == Triple::amdgcn);  } diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp index faea0193740..7cb2cd4a940 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUELFObjectWriter.cpp @@ -18,7 +18,7 @@ namespace {  class AMDGPUELFObjectWriter : public MCELFObjectTargetWriter {  public: -  AMDGPUELFObjectWriter(); +  AMDGPUELFObjectWriter(bool Is64Bit);  protected:    unsigned GetRelocType(const MCValue &Target, const MCFixup &Fixup,                          bool IsPCRel) const override { @@ -30,10 +30,10 @@ protected:  } // End anonymous namespace -AMDGPUELFObjectWriter::AMDGPUELFObjectWriter() -  : MCELFObjectTargetWriter(false, 0, ELF::EM_AMDGPU, false) { } +AMDGPUELFObjectWriter::AMDGPUELFObjectWriter(bool Is64Bit) +  : MCELFObjectTargetWriter(Is64Bit, 0, ELF::EM_AMDGPU, false) { } -MCObjectWriter *llvm::createAMDGPUELFObjectWriter(raw_pwrite_stream &OS) { -  MCELFObjectTargetWriter *MOTW = new AMDGPUELFObjectWriter(); +MCObjectWriter *llvm::createAMDGPUELFObjectWriter(bool Is64Bit, raw_pwrite_stream &OS) { +  MCELFObjectTargetWriter *MOTW = new AMDGPUELFObjectWriter(Is64Bit);    return createELFObjectWriter(MOTW, OS, true);  } diff --git a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.h b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.h index ac611b862a1..59e57f5fa59 100644 --- a/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.h +++ b/llvm/lib/Target/AMDGPU/MCTargetDesc/AMDGPUMCTargetDesc.h @@ -46,7 +46,8 @@ MCCodeEmitter *createSIMCCodeEmitter(const MCInstrInfo &MCII,  MCAsmBackend *createAMDGPUAsmBackend(const Target &T, const MCRegisterInfo &MRI,                                       const Triple &TT, StringRef CPU); -MCObjectWriter *createAMDGPUELFObjectWriter(raw_pwrite_stream &OS); +MCObjectWriter *createAMDGPUELFObjectWriter(bool Is64Bit, +                                            raw_pwrite_stream &OS);  } // namespace llvm  #define GET_REGINFO_ENUM diff --git a/llvm/test/CodeGen/AMDGPU/elf.ll b/llvm/test/CodeGen/AMDGPU/elf.ll index af64b1f292b..35e9832d397 100644 --- a/llvm/test/CodeGen/AMDGPU/elf.ll +++ b/llvm/test/CodeGen/AMDGPU/elf.ll @@ -8,7 +8,7 @@  ; Test that we don't try to produce a COFF file on windows  ; RUN: llc < %s -mtriple=amdgcn-pc-mingw -mcpu=SI -verify-machineinstrs -filetype=obj | llvm-readobj -s -symbols -file-headers - | FileCheck --check-prefix=ELF %s -; ELF: Format: ELF32 +; ELF: Format: ELF64  ; ELF: Machine: EM_AMDGPU (0xE0)  ; ELF: Name: .AMDGPU.config  ; ELF: Type: SHT_PROGBITS  | 

