brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.1 KiB · d685084 Raw
66 lines · cpp
1#include "AVRELFStreamer.h"2#include "AVRMCTargetDesc.h"3#include "llvm/BinaryFormat/ELF.h"4#include "llvm/MC/MCELFObjectWriter.h"5#include "llvm/MC/MCSubtargetInfo.h"6#include "llvm/TargetParser/SubtargetFeature.h"7 8namespace llvm {9 10static unsigned getEFlagsForFeatureSet(const FeatureBitset &Features) {11  unsigned EFlags = 0;12 13  // Set architecture14  if (Features[AVR::ELFArchAVR1])15    EFlags |= ELF::EF_AVR_ARCH_AVR1;16  else if (Features[AVR::ELFArchAVR2])17    EFlags |= ELF::EF_AVR_ARCH_AVR2;18  else if (Features[AVR::ELFArchAVR25])19    EFlags |= ELF::EF_AVR_ARCH_AVR25;20  else if (Features[AVR::ELFArchAVR3])21    EFlags |= ELF::EF_AVR_ARCH_AVR3;22  else if (Features[AVR::ELFArchAVR31])23    EFlags |= ELF::EF_AVR_ARCH_AVR31;24  else if (Features[AVR::ELFArchAVR35])25    EFlags |= ELF::EF_AVR_ARCH_AVR35;26  else if (Features[AVR::ELFArchAVR4])27    EFlags |= ELF::EF_AVR_ARCH_AVR4;28  else if (Features[AVR::ELFArchAVR5])29    EFlags |= ELF::EF_AVR_ARCH_AVR5;30  else if (Features[AVR::ELFArchAVR51])31    EFlags |= ELF::EF_AVR_ARCH_AVR51;32  else if (Features[AVR::ELFArchAVR6])33    EFlags |= ELF::EF_AVR_ARCH_AVR6;34  else if (Features[AVR::ELFArchTiny])35    EFlags |= ELF::EF_AVR_ARCH_AVRTINY;36  else if (Features[AVR::ELFArchXMEGA1])37    EFlags |= ELF::EF_AVR_ARCH_XMEGA1;38  else if (Features[AVR::ELFArchXMEGA2])39    EFlags |= ELF::EF_AVR_ARCH_XMEGA2;40  else if (Features[AVR::ELFArchXMEGA3])41    EFlags |= ELF::EF_AVR_ARCH_XMEGA3;42  else if (Features[AVR::ELFArchXMEGA4])43    EFlags |= ELF::EF_AVR_ARCH_XMEGA4;44  else if (Features[AVR::ELFArchXMEGA5])45    EFlags |= ELF::EF_AVR_ARCH_XMEGA5;46  else if (Features[AVR::ELFArchXMEGA6])47    EFlags |= ELF::EF_AVR_ARCH_XMEGA6;48  else if (Features[AVR::ELFArchXMEGA7])49    EFlags |= ELF::EF_AVR_ARCH_XMEGA7;50 51  return EFlags;52}53 54AVRELFStreamer::AVRELFStreamer(MCStreamer &S, const MCSubtargetInfo &STI)55    : AVRTargetStreamer(S) {56  ELFObjectWriter &W = getStreamer().getWriter();57  unsigned EFlags = W.getELFHeaderEFlags();58 59  EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits());60  EFlags |= ELF::EF_AVR_LINKRELAX_PREPARED;61 62  W.setELFHeaderEFlags(EFlags);63}64 65} // end namespace llvm66