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
10namespace llvm {
11
12static 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
56AVRELFStreamer::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