1 //===-------- AMDGPUELFStreamer.cpp - ELF Object Output -------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "AMDGPUELFStreamer.h"
11 #include "Utils/AMDGPUBaseInfo.h"
12 #include "llvm/BinaryFormat/ELF.h"
13 #include "llvm/MC/MCAsmBackend.h"
14 #include "llvm/MC/MCCodeEmitter.h"
18 AMDGPUELFStreamer::AMDGPUELFStreamer(const Triple &T, MCContext &Context,
19 std::unique_ptr<MCAsmBackend> MAB,
20 raw_pwrite_stream &OS,
21 std::unique_ptr<MCCodeEmitter> Emitter)
22 : MCELFStreamer(Context, std::move(MAB), OS, std::move(Emitter)) {
23 unsigned Arch = ELF::EF_AMDGPU_ARCH_NONE;
24 switch (T.getArch()) {
26 Arch = ELF::EF_AMDGPU_ARCH_R600;
29 Arch = ELF::EF_AMDGPU_ARCH_GCN;
35 MCAssembler &MCA = getAssembler();
36 unsigned EFlags = MCA.getELFHeaderEFlags();
37 EFlags &= ~ELF::EF_AMDGPU_ARCH;
39 MCA.setELFHeaderEFlags(EFlags);
42 MCELFStreamer *llvm::createAMDGPUELFStreamer(
43 const Triple &T, MCContext &Context, std::unique_ptr<MCAsmBackend> MAB,
44 raw_pwrite_stream &OS, std::unique_ptr<MCCodeEmitter> Emitter,
46 return new AMDGPUELFStreamer(T, Context, std::move(MAB), OS,