blob: af14d9292f2760562079d1272fca3bd2418a0d94 [file] [log] [blame]
Dylan McKay5c96de32016-01-07 10:53:15 +00001//===-- AVRTargetObjectFile.cpp - AVR Object Files ------------------------===//
2//
3// The LLVM Compiler Infrastructure
4//
5// This file is distributed under the University of Illinois Open Source
6// License. See LICENSE.TXT for details.
7//
8//===----------------------------------------------------------------------===//
9
10#include "AVRTargetObjectFile.h"
11
12#include "llvm/IR/DerivedTypes.h"
13#include "llvm/IR/GlobalValue.h"
14#include "llvm/IR/Mangler.h"
15#include "llvm/MC/MCContext.h"
16#include "llvm/MC/MCSectionELF.h"
17#include "llvm/Support/ELF.h"
18
19#include "AVR.h"
20
21namespace llvm {
22void AVRTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM) {
23 Base::Initialize(Ctx, TM);
24 ProgmemDataSection =
25 Ctx.getELFSection(".progmem.data", ELF::SHT_PROGBITS, ELF::SHF_ALLOC);
26}
27
28MCSection *
Peter Collingbourne67335642016-10-24 19:23:39 +000029AVRTargetObjectFile::SelectSectionForGlobal(const GlobalObject *GO,
Dylan McKay907cde32016-09-24 11:38:08 +000030 SectionKind Kind,
Dylan McKay5c96de32016-01-07 10:53:15 +000031 const TargetMachine &TM) const {
32 // Global values in flash memory are placed in the progmem.data section
33 // unless they already have a user assigned section.
Peter Collingbourne67335642016-10-24 19:23:39 +000034 if (AVR::isProgramMemoryAddress(GO) && !GO->hasSection())
Dylan McKay5c96de32016-01-07 10:53:15 +000035 return ProgmemDataSection;
36
37 // Otherwise, we work the same way as ELF.
Peter Collingbourne67335642016-10-24 19:23:39 +000038 return Base::SelectSectionForGlobal(GO, Kind, TM);
Dylan McKay5c96de32016-01-07 10:53:15 +000039}
40} // end of namespace llvm
Dylan McKay907cde32016-09-24 11:38:08 +000041