Index: lib/Target/R600/MCTargetDesc/AMDGPUAsmBackend.cpp =================================================================== --- lib/Target/R600/MCTargetDesc/AMDGPUAsmBackend.cpp +++ lib/Target/R600/MCTargetDesc/AMDGPUAsmBackend.cpp @@ -127,11 +127,14 @@ namespace { class ELFAMDGPUAsmBackend : public AMDGPUAsmBackend { +private: + 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); } }; @@ -141,5 +144,8 @@ const MCRegisterInfo &MRI, StringRef TT, StringRef CPU) { - return new ELFAMDGPUAsmBackend(T); + Triple TargetTriple(TT); + + // Use 64-bit ELF for amdgcn + return new ELFAMDGPUAsmBackend(T, TargetTriple.getArch() == Triple::amdgcn); } Index: lib/Target/R600/MCTargetDesc/AMDGPUELFObjectWriter.cpp =================================================================== --- lib/Target/R600/MCTargetDesc/AMDGPUELFObjectWriter.cpp +++ lib/Target/R600/MCTargetDesc/AMDGPUELFObjectWriter.cpp @@ -18,7 +18,7 @@ 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 @@ } // 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); } Index: lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.h =================================================================== --- lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.h +++ lib/Target/R600/MCTargetDesc/AMDGPUMCTargetDesc.h @@ -45,7 +45,8 @@ MCAsmBackend *createAMDGPUAsmBackend(const Target &T, const MCRegisterInfo &MRI, StringRef TT, StringRef CPU); -MCObjectWriter *createAMDGPUELFObjectWriter(raw_pwrite_stream &OS); +MCObjectWriter *createAMDGPUELFObjectWriter(bool Is64Bit, + raw_pwrite_stream &OS); } // End llvm namespace #define GET_REGINFO_ENUM Index: test/CodeGen/R600/elf.ll =================================================================== --- test/CodeGen/R600/elf.ll +++ test/CodeGen/R600/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