| //===-- AVRTargetObjectFile.cpp - AVR Object Files ------------------------===// | |
| // | |
| // The LLVM Compiler Infrastructure | |
| // | |
| // This file is distributed under the University of Illinois Open Source | |
| // License. See LICENSE.TXT for details. | |
| // | |
| //===----------------------------------------------------------------------===// | |
| #include "AVRTargetObjectFile.h" | |
| #include "llvm/BinaryFormat/ELF.h" | |
| #include "llvm/IR/DerivedTypes.h" | |
| #include "llvm/IR/GlobalValue.h" | |
| #include "llvm/IR/Mangler.h" | |
| #include "llvm/MC/MCContext.h" | |
| #include "llvm/MC/MCSectionELF.h" | |
| #include "AVR.h" | |
| namespace llvm { | |
| void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) { | |
| Base::Initialize(Ctx, TM); | |
| ProgmemDataSection = | |
| Ctx.getELFSection(".progmem.data", ELF::SHT_PROGBITS, ELF::SHF_ALLOC); | |
| } | |
| MCSection * | |
| AVRTargetObjectFile::SelectSectionForGlobal(const GlobalObject *GO, | |
| SectionKind Kind, | |
| const TargetMachine &TM) const { | |
| // Global values in flash memory are placed in the progmem.data section | |
| // unless they already have a user assigned section. | |
| if (AVR::isProgramMemoryAddress(GO) && !GO->hasSection()) | |
| return ProgmemDataSection; | |
| // Otherwise, we work the same way as ELF. | |
| return Base::SelectSectionForGlobal(GO, Kind, TM); | |
| } | |
| } // end of namespace llvm | |