1#include "AVRELFStreamer.h"
2
3#include "llvm/Support/ELF.h"
4#include "llvm/Support/FormattedStream.h"
5
6#include "AVRMCTargetDesc.h"
7
8namespace llvm {
9
10static 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();
59  unsigned EFlags = MCA.getELFHeaderEFlags();
60
61  EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits());
62
63  MCA.setELFHeaderEFlags(EFlags);
64}
65
66} // end namespace llvm
67