Path: blob/main/contrib/llvm-project/llvm/lib/Target/AVR/MCTargetDesc/AVRELFStreamer.cpp
35294 views
#include "AVRELFStreamer.h"12#include "llvm/BinaryFormat/ELF.h"3#include "llvm/MC/MCAssembler.h"4#include "llvm/MC/MCSubtargetInfo.h"5#include "llvm/Support/FormattedStream.h"6#include "llvm/TargetParser/SubtargetFeature.h"78#include "AVRMCTargetDesc.h"910namespace llvm {1112static unsigned getEFlagsForFeatureSet(const FeatureBitset &Features) {13unsigned EFlags = 0;1415// Set architecture16if (Features[AVR::ELFArchAVR1])17EFlags |= ELF::EF_AVR_ARCH_AVR1;18else if (Features[AVR::ELFArchAVR2])19EFlags |= ELF::EF_AVR_ARCH_AVR2;20else if (Features[AVR::ELFArchAVR25])21EFlags |= ELF::EF_AVR_ARCH_AVR25;22else if (Features[AVR::ELFArchAVR3])23EFlags |= ELF::EF_AVR_ARCH_AVR3;24else if (Features[AVR::ELFArchAVR31])25EFlags |= ELF::EF_AVR_ARCH_AVR31;26else if (Features[AVR::ELFArchAVR35])27EFlags |= ELF::EF_AVR_ARCH_AVR35;28else if (Features[AVR::ELFArchAVR4])29EFlags |= ELF::EF_AVR_ARCH_AVR4;30else if (Features[AVR::ELFArchAVR5])31EFlags |= ELF::EF_AVR_ARCH_AVR5;32else if (Features[AVR::ELFArchAVR51])33EFlags |= ELF::EF_AVR_ARCH_AVR51;34else if (Features[AVR::ELFArchAVR6])35EFlags |= ELF::EF_AVR_ARCH_AVR6;36else if (Features[AVR::ELFArchTiny])37EFlags |= ELF::EF_AVR_ARCH_AVRTINY;38else if (Features[AVR::ELFArchXMEGA1])39EFlags |= ELF::EF_AVR_ARCH_XMEGA1;40else if (Features[AVR::ELFArchXMEGA2])41EFlags |= ELF::EF_AVR_ARCH_XMEGA2;42else if (Features[AVR::ELFArchXMEGA3])43EFlags |= ELF::EF_AVR_ARCH_XMEGA3;44else if (Features[AVR::ELFArchXMEGA4])45EFlags |= ELF::EF_AVR_ARCH_XMEGA4;46else if (Features[AVR::ELFArchXMEGA5])47EFlags |= ELF::EF_AVR_ARCH_XMEGA5;48else if (Features[AVR::ELFArchXMEGA6])49EFlags |= ELF::EF_AVR_ARCH_XMEGA6;50else if (Features[AVR::ELFArchXMEGA7])51EFlags |= ELF::EF_AVR_ARCH_XMEGA7;5253return EFlags;54}5556AVRELFStreamer::AVRELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI)57: AVRTargetStreamer(S) {58ELFObjectWriter &W = getStreamer().getWriter();59unsigned EFlags = W.getELFHeaderEFlags();6061EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits());62EFlags |= ELF::EF_AVR_LINKRELAX_PREPARED;6364W.setELFHeaderEFlags(EFlags);65}6667} // end namespace llvm686970