diff options
Diffstat (limited to 'llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp')
-rw-r--r-- | llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp new file mode 100644 index 00000000000..243f8ed7fb5 --- /dev/null +++ b/llvm/lib/Target/RISCV/MCTargetDesc/RISCVELFStreamer.cpp @@ -0,0 +1,39 @@ +//===-- RISCVELFStreamer.cpp - RISCV ELF Target Streamer Methods ----------===// +// +// The LLVM Compiler Infrastructure +// +// This file is distributed under the University of Illinois Open Source +// License. See LICENSE.TXT for details. +// +//===----------------------------------------------------------------------===// +// +// This file provides RISCV specific target streamer methods. +// +//===----------------------------------------------------------------------===// + +#include "RISCVELFStreamer.h" +#include "RISCVMCTargetDesc.h" +#include "llvm/BinaryFormat/ELF.h" +#include "llvm/MC/MCSubtargetInfo.h" + +using namespace llvm; + +// This part is for ELF object output. +RISCVTargetELFStreamer::RISCVTargetELFStreamer(MCStreamer &S, + const MCSubtargetInfo &STI) + : RISCVTargetStreamer(S) { + MCAssembler &MCA = getStreamer().getAssembler(); + + const FeatureBitset &Features = STI.getFeatureBits(); + + unsigned EFlags = MCA.getELFHeaderEFlags(); + + if (Features[RISCV::FeatureStdExtC]) + EFlags |= ELF::EF_RISCV_RVC; + + MCA.setELFHeaderEFlags(EFlags); +} + +MCELFStreamer &RISCVTargetELFStreamer::getStreamer() { + return static_cast<MCELFStreamer &>(Streamer); +} |