Dylan McKay | 7ec6f56 | 2016-05-20 01:17:38 +0000 | [diff] [blame^] | 1 | #include "AVRELFStreamer.h" |
| 2 | |
| 3 | #include "llvm/Support/ELF.h" |
| 4 | #include "llvm/Support/FormattedStream.h" |
| 5 | |
| 6 | static 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 | |
| 50 | AVRELFStreamer::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 | } |