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