| #include "AVRELFStreamer.h" | |
| #include "llvm/BinaryFormat/ELF.h" | |
| #include "llvm/MC/MCAssembler.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 |