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