| #include "AVRELFStreamer.h" |
| |
| #include "llvm/BinaryFormat/ELF.h" |
| #include "llvm/MC/MCSubtargetInfo.h" |
| #include "llvm/MC/SubtargetFeature.h" |
| #include "llvm/Support/FormattedStream.h" |
| |
| #include "AVRMCTargetDesc.h" |
| |
| namespace llvm { |
| |
| static unsigned getEFlagsForFeatureSet(const FeatureBitset &Features) { |
| unsigned EFlags = 0; |
| |
| // Set architecture |
| if (Features[AVR::ELFArchAVR1]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR1; |
| else if (Features[AVR::ELFArchAVR2]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR2; |
| else if (Features[AVR::ELFArchAVR25]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR25; |
| else if (Features[AVR::ELFArchAVR3]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR3; |
| else if (Features[AVR::ELFArchAVR31]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR31; |
| else if (Features[AVR::ELFArchAVR35]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR35; |
| else if (Features[AVR::ELFArchAVR4]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR4; |
| else if (Features[AVR::ELFArchAVR5]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR5; |
| else if (Features[AVR::ELFArchAVR51]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR51; |
| else if (Features[AVR::ELFArchAVR6]) |
| EFlags |= ELF::EF_AVR_ARCH_AVR6; |
| else if (Features[AVR::ELFArchTiny]) |
| EFlags |= ELF::EF_AVR_ARCH_AVRTINY; |
| else if (Features[AVR::ELFArchXMEGA1]) |
| EFlags |= ELF::EF_AVR_ARCH_XMEGA1; |
| else if (Features[AVR::ELFArchXMEGA2]) |
| EFlags |= ELF::EF_AVR_ARCH_XMEGA2; |
| else if (Features[AVR::ELFArchXMEGA3]) |
| EFlags |= ELF::EF_AVR_ARCH_XMEGA3; |
| else if (Features[AVR::ELFArchXMEGA4]) |
| EFlags |= ELF::EF_AVR_ARCH_XMEGA4; |
| else if (Features[AVR::ELFArchXMEGA5]) |
| EFlags |= ELF::EF_AVR_ARCH_XMEGA5; |
| else if (Features[AVR::ELFArchXMEGA6]) |
| EFlags |= ELF::EF_AVR_ARCH_XMEGA6; |
| else if (Features[AVR::ELFArchXMEGA7]) |
| EFlags |= ELF::EF_AVR_ARCH_XMEGA7; |
| |
| return EFlags; |
| } |
| |
| AVRELFStreamer::AVRELFStreamer(MCStreamer &S, |
| const MCSubtargetInfo &STI) |
| : AVRTargetStreamer(S) { |
| |
| MCAssembler &MCA = getStreamer().getAssembler(); |
| unsigned EFlags = MCA.getELFHeaderEFlags(); |
| |
| EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits()); |
| |
| MCA.setELFHeaderEFlags(EFlags); |
| } |
| |
| } // end namespace llvm |