1 #include "AVRELFStreamer.h"
3 #include "llvm/BinaryFormat/ELF.h"
4 #include "llvm/MC/MCSubtargetInfo.h"
5 #include "llvm/MC/SubtargetFeature.h"
6 #include "llvm/Support/FormattedStream.h"
8 #include "AVRMCTargetDesc.h"
12 static unsigned getEFlagsForFeatureSet(const FeatureBitset
&Features
) {
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
;
56 AVRELFStreamer::AVRELFStreamer(MCStreamer
&S
,
57 const MCSubtargetInfo
&STI
)
58 : AVRTargetStreamer(S
) {
60 MCAssembler
&MCA
= getStreamer().getAssembler();
61 unsigned EFlags
= MCA
.getELFHeaderEFlags();
63 EFlags
|= getEFlagsForFeatureSet(STI
.getFeatureBits());
65 MCA
.setELFHeaderEFlags(EFlags
);
68 } // end namespace llvm