1 //===-- XCoreTargetObjectFile.cpp - XCore object files --------------------===//
3 // The LLVM Compiler Infrastructure
5 // This file is distributed under the University of Illinois Open Source
6 // License. See LICENSE.TXT for details.
8 //===----------------------------------------------------------------------===//
10 #include "XCoreTargetObjectFile.h"
11 #include "XCoreSubtarget.h"
12 #include "llvm/MC/MCContext.h"
13 #include "llvm/MC/MCSectionELF.h"
14 #include "llvm/Target/TargetMachine.h"
15 #include "llvm/Support/ELF.h"
19 void XCoreTargetObjectFile::Initialize(MCContext
&Ctx
, const TargetMachine
&TM
){
20 TargetLoweringObjectFileELF::Initialize(Ctx
, TM
);
23 Ctx
.getELFSection(".dp.data", ELF::SHT_PROGBITS
,
24 ELF::SHF_ALLOC
| ELF::SHF_WRITE
|
25 ELF::XCORE_SHF_DP_SECTION
,
26 SectionKind::getDataRel());
28 Ctx
.getELFSection(".dp.bss", ELF::SHT_NOBITS
,
29 ELF::SHF_ALLOC
| ELF::SHF_WRITE
|
30 ELF::XCORE_SHF_DP_SECTION
,
31 SectionKind::getBSS());
33 MergeableConst4Section
=
34 Ctx
.getELFSection(".cp.rodata.cst4", ELF::SHT_PROGBITS
,
35 ELF::SHF_ALLOC
| ELF::SHF_MERGE
|
36 ELF::XCORE_SHF_CP_SECTION
,
37 SectionKind::getMergeableConst4());
38 MergeableConst8Section
=
39 Ctx
.getELFSection(".cp.rodata.cst8", ELF::SHT_PROGBITS
,
40 ELF::SHF_ALLOC
| ELF::SHF_MERGE
|
41 ELF::XCORE_SHF_CP_SECTION
,
42 SectionKind::getMergeableConst8());
43 MergeableConst16Section
=
44 Ctx
.getELFSection(".cp.rodata.cst16", ELF::SHT_PROGBITS
,
45 ELF::SHF_ALLOC
| ELF::SHF_MERGE
|
46 ELF::XCORE_SHF_CP_SECTION
,
47 SectionKind::getMergeableConst16());
49 // TLS globals are lowered in the backend to arrays indexed by the current
50 // thread id. After lowering they require no special handling by the linker
51 // and can be placed in the standard data / bss sections.
52 TLSDataSection
= DataSection
;
53 TLSBSSSection
= BSSSection
;
56 Ctx
.getELFSection(".cp.rodata", ELF::SHT_PROGBITS
,
58 ELF::XCORE_SHF_CP_SECTION
,
59 SectionKind::getReadOnlyWithRel());
61 // Dynamic linking is not supported. Data with relocations is placed in the
62 // same section as data without relocations.
63 DataRelSection
= DataRelLocalSection
= DataSection
;
64 DataRelROSection
= DataRelROLocalSection
= ReadOnlySection
;