15c96de3aSDylan McKay //===-- AVRTargetObjectFile.cpp - AVR Object Files ------------------------===//
25c96de3aSDylan McKay //
35c96de3aSDylan McKay //                     The LLVM Compiler Infrastructure
45c96de3aSDylan McKay //
55c96de3aSDylan McKay // This file is distributed under the University of Illinois Open Source
65c96de3aSDylan McKay // License. See LICENSE.TXT for details.
75c96de3aSDylan McKay //
85c96de3aSDylan McKay //===----------------------------------------------------------------------===//
95c96de3aSDylan McKay 
105c96de3aSDylan McKay #include "AVRTargetObjectFile.h"
115c96de3aSDylan McKay 
125c96de3aSDylan McKay #include "llvm/IR/DerivedTypes.h"
135c96de3aSDylan McKay #include "llvm/IR/GlobalValue.h"
145c96de3aSDylan McKay #include "llvm/IR/Mangler.h"
155c96de3aSDylan McKay #include "llvm/MC/MCContext.h"
165c96de3aSDylan McKay #include "llvm/MC/MCSectionELF.h"
175c96de3aSDylan McKay #include "llvm/Support/ELF.h"
185c96de3aSDylan McKay 
195c96de3aSDylan McKay #include "AVR.h"
205c96de3aSDylan McKay 
215c96de3aSDylan McKay namespace llvm {
225c96de3aSDylan McKay void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) {
235c96de3aSDylan McKay   Base::Initialize(Ctx, TM);
245c96de3aSDylan McKay   ProgmemDataSection =
255c96de3aSDylan McKay       Ctx.getELFSection(".progmem.data", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
265c96de3aSDylan McKay }
275c96de3aSDylan McKay 
285c96de3aSDylan McKay MCSection *
295c96de3aSDylan McKay AVRTargetObjectFile::SelectSectionForGlobal(const GlobalValue *GV,
30*907cde3cSDylan McKay                                             SectionKind Kind,
315c96de3aSDylan McKay                                             const TargetMachine &TM) const {
325c96de3aSDylan McKay   // Global values in flash memory are placed in the progmem.data section
335c96de3aSDylan McKay   // unless they already have a user assigned section.
345c96de3aSDylan McKay   if (AVR::isProgramMemoryAddress(GV) && !GV->hasSection())
355c96de3aSDylan McKay     return ProgmemDataSection;
365c96de3aSDylan McKay 
375c96de3aSDylan McKay   // Otherwise, we work the same way as ELF.
38*907cde3cSDylan McKay   return Base::SelectSectionForGlobal(GV, Kind, TM);
395c96de3aSDylan McKay }
405c96de3aSDylan McKay } // end of namespace llvm
41*907cde3cSDylan McKay 
42