XCoreTargetObjectFile.cpp revision 198090
1//===-- XCoreTargetObjectFile.cpp - XCore 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 "XCoreTargetObjectFile.h"
11#include "XCoreSubtarget.h"
12#include "MCSectionXCore.h"
13#include "llvm/Target/TargetMachine.h"
14using namespace llvm;
15
16
17void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
18  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
19
20  DataSection =
21    MCSectionXCore::Create(".dp.data", MCSectionELF::SHT_PROGBITS,
22                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE |
23                           MCSectionXCore::SHF_DP_SECTION,
24                           SectionKind::getDataRel(), false, getContext());
25  BSSSection =
26    MCSectionXCore::Create(".dp.bss", MCSectionELF::SHT_NOBITS,
27                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_WRITE |
28                           MCSectionXCore::SHF_DP_SECTION,
29                           SectionKind::getBSS(), false, getContext());
30
31  MergeableConst4Section =
32    MCSectionXCore::Create(".cp.rodata.cst4", MCSectionELF::SHT_PROGBITS,
33                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
34                           MCSectionXCore::SHF_CP_SECTION,
35                           SectionKind::getMergeableConst4(), false,
36                           getContext());
37  MergeableConst8Section =
38    MCSectionXCore::Create(".cp.rodata.cst8", MCSectionELF::SHT_PROGBITS,
39                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
40                           MCSectionXCore::SHF_CP_SECTION,
41                           SectionKind::getMergeableConst8(), false,
42                           getContext());
43  MergeableConst16Section =
44    MCSectionXCore::Create(".cp.rodata.cst16", MCSectionELF::SHT_PROGBITS,
45                           MCSectionELF::SHF_ALLOC | MCSectionELF::SHF_MERGE |
46                           MCSectionXCore::SHF_CP_SECTION,
47                           SectionKind::getMergeableConst16(), false,
48                           getContext());
49
50  // TLS globals are lowered in the backend to arrays indexed by the current
51  // thread id. After lowering they require no special handling by the linker
52  // and can be placed in the standard data / bss sections.
53  TLSDataSection = DataSection;
54  TLSBSSSection = BSSSection;
55
56  ReadOnlySection =
57    MCSectionXCore::Create(".cp.rodata", MCSectionELF::SHT_PROGBITS,
58                           MCSectionELF::SHF_ALLOC |
59                           MCSectionXCore::SHF_CP_SECTION,
60                           SectionKind::getReadOnlyWithRel(), false,
61                           getContext());
62
63  // Dynamic linking is not supported. Data with relocations is placed in the
64  // same section as data without relocations.
65  DataRelSection = DataRelLocalSection = DataSection;
66  DataRelROSection = DataRelROLocalSection = ReadOnlySection;
67}
68