1*9880d681SAndroid Build Coastguard Worker #include "AVRELFStreamer.h" 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/ELF.h" 4*9880d681SAndroid Build Coastguard Worker #include "llvm/Support/FormattedStream.h" 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Worker #include "AVRMCTargetDesc.h" 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker namespace llvm { 9*9880d681SAndroid Build Coastguard Worker getEFlagsForFeatureSet(const FeatureBitset & Features)10*9880d681SAndroid Build Coastguard Workerstatic unsigned getEFlagsForFeatureSet(const FeatureBitset &Features) { 11*9880d681SAndroid Build Coastguard Worker unsigned EFlags = 0; 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker // Set architecture 14*9880d681SAndroid Build Coastguard Worker if (Features[AVR::ELFArchAVR1]) 15*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR1; 16*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR2]) 17*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR2; 18*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR25]) 19*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR25; 20*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR3]) 21*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR3; 22*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR31]) 23*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR31; 24*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR35]) 25*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR35; 26*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR4]) 27*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR4; 28*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR5]) 29*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR5; 30*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR51]) 31*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR51; 32*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVR6]) 33*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVR6; 34*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchAVRTiny]) 35*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_AVRTINY; 36*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchXMEGA1]) 37*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_XMEGA1; 38*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchXMEGA2]) 39*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_XMEGA2; 40*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchXMEGA3]) 41*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_XMEGA3; 42*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchXMEGA4]) 43*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_XMEGA4; 44*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchXMEGA5]) 45*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_XMEGA5; 46*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchXMEGA6]) 47*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_XMEGA6; 48*9880d681SAndroid Build Coastguard Worker else if (Features[AVR::ELFArchXMEGA7]) 49*9880d681SAndroid Build Coastguard Worker EFlags |= ELF::EF_AVR_ARCH_XMEGA7; 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Worker return EFlags; 52*9880d681SAndroid Build Coastguard Worker } 53*9880d681SAndroid Build Coastguard Worker AVRELFStreamer(MCStreamer & S,const MCSubtargetInfo & STI)54*9880d681SAndroid Build Coastguard WorkerAVRELFStreamer::AVRELFStreamer(MCStreamer &S, 55*9880d681SAndroid Build Coastguard Worker const MCSubtargetInfo &STI) 56*9880d681SAndroid Build Coastguard Worker : AVRTargetStreamer(S) { 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker MCAssembler &MCA = getStreamer().getAssembler(); 59*9880d681SAndroid Build Coastguard Worker unsigned EFlags = MCA.getELFHeaderEFlags(); 60*9880d681SAndroid Build Coastguard Worker 61*9880d681SAndroid Build Coastguard Worker EFlags |= getEFlagsForFeatureSet(STI.getFeatureBits()); 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker MCA.setELFHeaderEFlags(EFlags); 64*9880d681SAndroid Build Coastguard Worker } 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Worker } // end namespace llvm 67