1*5c96de3aSDylan McKay //===-- AVRTargetObjectFile.cpp - AVR Object Files ------------------------===// 2*5c96de3aSDylan McKay // 3*5c96de3aSDylan McKay // The LLVM Compiler Infrastructure 4*5c96de3aSDylan McKay // 5*5c96de3aSDylan McKay // This file is distributed under the University of Illinois Open Source 6*5c96de3aSDylan McKay // License. See LICENSE.TXT for details. 7*5c96de3aSDylan McKay // 8*5c96de3aSDylan McKay //===----------------------------------------------------------------------===// 9*5c96de3aSDylan McKay 10*5c96de3aSDylan McKay #include "AVRTargetObjectFile.h" 11*5c96de3aSDylan McKay 12*5c96de3aSDylan McKay #include "llvm/IR/DerivedTypes.h" 13*5c96de3aSDylan McKay #include "llvm/IR/GlobalValue.h" 14*5c96de3aSDylan McKay #include "llvm/IR/Mangler.h" 15*5c96de3aSDylan McKay #include "llvm/MC/MCContext.h" 16*5c96de3aSDylan McKay #include "llvm/MC/MCSectionELF.h" 17*5c96de3aSDylan McKay #include "llvm/Support/ELF.h" 18*5c96de3aSDylan McKay 19*5c96de3aSDylan McKay #include "AVR.h" 20*5c96de3aSDylan McKay 21*5c96de3aSDylan McKay namespace llvm { 22*5c96de3aSDylan McKay void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) { 23*5c96de3aSDylan McKay Base::Initialize(Ctx, TM); 24*5c96de3aSDylan McKay ProgmemDataSection = 25*5c96de3aSDylan McKay Ctx.getELFSection(".progmem.data", ELF::SHT_PROGBITS, ELF::SHF_ALLOC); 26*5c96de3aSDylan McKay } 27*5c96de3aSDylan McKay 28*5c96de3aSDylan McKay MCSection * 29*5c96de3aSDylan McKay AVRTargetObjectFile::SelectSectionForGlobal(const GlobalValue *GV, 30*5c96de3aSDylan McKay SectionKind Kind, Mangler &Mang, 31*5c96de3aSDylan McKay const TargetMachine &TM) const { 32*5c96de3aSDylan McKay // Global values in flash memory are placed in the progmem.data section 33*5c96de3aSDylan McKay // unless they already have a user assigned section. 34*5c96de3aSDylan McKay if (AVR::isProgramMemoryAddress(GV) && !GV->hasSection()) 35*5c96de3aSDylan McKay return ProgmemDataSection; 36*5c96de3aSDylan McKay 37*5c96de3aSDylan McKay // Otherwise, we work the same way as ELF. 38*5c96de3aSDylan McKay return Base::SelectSectionForGlobal(GV, Kind, Mang, TM); 39*5c96de3aSDylan McKay } 40*5c96de3aSDylan McKay } // end of namespace llvm 41