1198090Srdivacky//===-- XCoreTargetObjectFile.cpp - XCore object files --------------------===//
2198090Srdivacky//
3198090Srdivacky//                     The LLVM Compiler Infrastructure
4198090Srdivacky//
5198090Srdivacky// This file is distributed under the University of Illinois Open Source
6198090Srdivacky// License. See LICENSE.TXT for details.
7198090Srdivacky//
8198090Srdivacky//===----------------------------------------------------------------------===//
9198090Srdivacky
10198090Srdivacky#include "XCoreTargetObjectFile.h"
11198090Srdivacky#include "XCoreSubtarget.h"
12207618Srdivacky#include "llvm/MC/MCContext.h"
13207618Srdivacky#include "llvm/MC/MCSectionELF.h"
14252723Sdim#include "llvm/Support/ELF.h"
15198090Srdivacky#include "llvm/Target/TargetMachine.h"
16198090Srdivackyusing namespace llvm;
17198090Srdivacky
18198090Srdivacky
19198090Srdivackyvoid XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
20198090Srdivacky  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
21198090Srdivacky
22198090Srdivacky  DataSection =
23218893Sdim    Ctx.getELFSection(".dp.data", ELF::SHT_PROGBITS,
24218893Sdim                      ELF::SHF_ALLOC | ELF::SHF_WRITE |
25218893Sdim                      ELF::XCORE_SHF_DP_SECTION,
26218893Sdim                      SectionKind::getDataRel());
27198090Srdivacky  BSSSection =
28218893Sdim    Ctx.getELFSection(".dp.bss", ELF::SHT_NOBITS,
29218893Sdim                      ELF::SHF_ALLOC | ELF::SHF_WRITE |
30218893Sdim                      ELF::XCORE_SHF_DP_SECTION,
31218893Sdim                      SectionKind::getBSS());
32198090Srdivacky
33198090Srdivacky  MergeableConst4Section =
34218893Sdim    Ctx.getELFSection(".cp.rodata.cst4", ELF::SHT_PROGBITS,
35218893Sdim                      ELF::SHF_ALLOC | ELF::SHF_MERGE |
36218893Sdim                      ELF::XCORE_SHF_CP_SECTION,
37218893Sdim                      SectionKind::getMergeableConst4());
38198090Srdivacky  MergeableConst8Section =
39218893Sdim    Ctx.getELFSection(".cp.rodata.cst8", ELF::SHT_PROGBITS,
40218893Sdim                      ELF::SHF_ALLOC | ELF::SHF_MERGE |
41218893Sdim                      ELF::XCORE_SHF_CP_SECTION,
42218893Sdim                      SectionKind::getMergeableConst8());
43198090Srdivacky  MergeableConst16Section =
44218893Sdim    Ctx.getELFSection(".cp.rodata.cst16", ELF::SHT_PROGBITS,
45218893Sdim                      ELF::SHF_ALLOC | ELF::SHF_MERGE |
46218893Sdim                      ELF::XCORE_SHF_CP_SECTION,
47218893Sdim                      SectionKind::getMergeableConst16());
48198090Srdivacky
49198090Srdivacky  // TLS globals are lowered in the backend to arrays indexed by the current
50198090Srdivacky  // thread id. After lowering they require no special handling by the linker
51198090Srdivacky  // and can be placed in the standard data / bss sections.
52198090Srdivacky  TLSDataSection = DataSection;
53198090Srdivacky  TLSBSSSection = BSSSection;
54198090Srdivacky
55198090Srdivacky  ReadOnlySection =
56218893Sdim    Ctx.getELFSection(".cp.rodata", ELF::SHT_PROGBITS,
57218893Sdim                      ELF::SHF_ALLOC |
58218893Sdim                      ELF::XCORE_SHF_CP_SECTION,
59218893Sdim                      SectionKind::getReadOnlyWithRel());
60198090Srdivacky}
61