1 //===-------- AMDGPUELFStreamer.cpp - ELF Object Output -------------------===// 2 // 3 // The LLVM Compiler Infrastructure 4 // 5 // This file is distributed under the University of Illinois Open Source 6 // License. See LICENSE.TXT for details. 7 // 8 //===----------------------------------------------------------------------===// 9 10 #include "AMDGPUELFStreamer.h" 11 #include "Utils/AMDGPUBaseInfo.h" 12 #include "llvm/BinaryFormat/ELF.h" 13 14 using namespace llvm; 15 16 AMDGPUELFStreamer::AMDGPUELFStreamer(const Triple &T, MCContext &Context, 17 MCAsmBackend &MAB, raw_pwrite_stream &OS, 18 MCCodeEmitter *Emitter) 19 : MCELFStreamer(Context, MAB, OS, Emitter) { 20 unsigned Arch = ELF::EF_AMDGPU_ARCH_NONE; 21 switch (T.getArch()) { 22 case Triple::r600: 23 Arch = ELF::EF_AMDGPU_ARCH_R600; 24 break; 25 case Triple::amdgcn: 26 Arch = ELF::EF_AMDGPU_ARCH_GCN; 27 break; 28 default: 29 break; 30 } 31 32 MCAssembler &MCA = getAssembler(); 33 unsigned EFlags = MCA.getELFHeaderEFlags(); 34 EFlags &= ~ELF::EF_AMDGPU_ARCH; 35 EFlags |= Arch; 36 MCA.setELFHeaderEFlags(EFlags); 37 } 38 39 MCELFStreamer *llvm::createAMDGPUELFStreamer(const Triple &T, MCContext &Context, 40 MCAsmBackend &MAB, 41 raw_pwrite_stream &OS, 42 MCCodeEmitter *Emitter, 43 bool RelaxAll) { 44 return new AMDGPUELFStreamer(T, Context, MAB, OS, Emitter); 45 } 46