blob: 481de320b22fef1c0a47dfc20ad53338cdbf92f6 [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
Dylan McKay28ae3172016-05-21 00:35:07 +00006#include "AVRMCTargetDesc.h"
7
8namespace llvm {
9
Dylan McKay7ec6f562016-05-20 01:17:38 +000010static unsigned getEFlagsForFeatureSet(const FeatureBitset &Features) {
11 unsigned EFlags = 0;
12
13 // Set architecture
14 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::ELFArchAVRTiny])
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,
55 const MCSubtargetInfo &STI)
56 : AVRTargetStreamer(S) {
57
58 MCAssembler &MCA = getStreamer().getAssembler();
Dylan McKay28ae3172016-05-21 00:35:07 +000059 unsigned EFlags = MCA.getELFHeaderEFlags();
Dylan McKay7ec6f562016-05-20 01:17:38 +000060
Dylan McKay28ae3172016-05-21 00:35:07 +000061 EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits());
Dylan McKay7ec6f562016-05-20 01:17:38 +000062
63 MCA.setELFHeaderEFlags(EFlags);
64}
Dylan McKay28ae3172016-05-21 00:35:07 +000065
66} // end namespace llvm