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