1f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner//===-- XCoreTargetObjectFile.cpp - XCore object files --------------------===//
2f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner//
3f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner//                     The LLVM Compiler Infrastructure
4f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner//
5f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner// This file is distributed under the University of Illinois Open Source
6f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner// License. See LICENSE.TXT for details.
7f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner//
8f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner//===----------------------------------------------------------------------===//
9f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner
10f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner#include "XCoreTargetObjectFile.h"
11a87dea4f8c546ca748f1777a8d1cabcc06515d91Chris Lattner#include "XCoreSubtarget.h"
1274aae4726a66733c5872588287535a984f9a94c7Chris Lattner#include "llvm/MC/MCContext.h"
1374aae4726a66733c5872588287535a984f9a94c7Chris Lattner#include "llvm/MC/MCSectionELF.h"
14c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola#include "llvm/Support/ELF.h"
15d04a8d4b33ff316ca4cf961e06c9e312eff8e64fChandler Carruth#include "llvm/Target/TargetMachine.h"
16f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattnerusing namespace llvm;
17f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner
18f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner
19a87dea4f8c546ca748f1777a8d1cabcc06515d91Chris Lattnervoid XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
20a87dea4f8c546ca748f1777a8d1cabcc06515d91Chris Lattner  TargetLoweringObjectFileELF::Initialize(Ctx, TM);
21a87dea4f8c546ca748f1777a8d1cabcc06515d91Chris Lattner
22760e24cd0514d4459eb2802d81472432f688de09Chris Lattner  DataSection =
23c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola    Ctx.getELFSection(".dp.data", ELF::SHT_PROGBITS,
241c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::SHF_ALLOC | ELF::SHF_WRITE |
251c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::XCORE_SHF_DP_SECTION,
263f2d13c98eb04962bf6fcfdcc6f62789bc820d79Rafael Espindola                      SectionKind::getDataRel());
27760e24cd0514d4459eb2802d81472432f688de09Chris Lattner  BSSSection =
28c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola    Ctx.getELFSection(".dp.bss", ELF::SHT_NOBITS,
291c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::SHF_ALLOC | ELF::SHF_WRITE |
301c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::XCORE_SHF_DP_SECTION,
313f2d13c98eb04962bf6fcfdcc6f62789bc820d79Rafael Espindola                      SectionKind::getBSS());
32760e24cd0514d4459eb2802d81472432f688de09Chris Lattner
331123135dbfa776bbe4c2120a16098d81e0850a76Richard Osborne  MergeableConst4Section =
34c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola    Ctx.getELFSection(".cp.rodata.cst4", ELF::SHT_PROGBITS,
351c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::SHF_ALLOC | ELF::SHF_MERGE |
361c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::XCORE_SHF_CP_SECTION,
373f2d13c98eb04962bf6fcfdcc6f62789bc820d79Rafael Espindola                      SectionKind::getMergeableConst4());
381123135dbfa776bbe4c2120a16098d81e0850a76Richard Osborne  MergeableConst8Section =
39c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola    Ctx.getELFSection(".cp.rodata.cst8", ELF::SHT_PROGBITS,
401c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::SHF_ALLOC | ELF::SHF_MERGE |
411c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::XCORE_SHF_CP_SECTION,
423f2d13c98eb04962bf6fcfdcc6f62789bc820d79Rafael Espindola                      SectionKind::getMergeableConst8());
431123135dbfa776bbe4c2120a16098d81e0850a76Richard Osborne  MergeableConst16Section =
44c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola    Ctx.getELFSection(".cp.rodata.cst16", ELF::SHT_PROGBITS,
451c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::SHF_ALLOC | ELF::SHF_MERGE |
461c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::XCORE_SHF_CP_SECTION,
473f2d13c98eb04962bf6fcfdcc6f62789bc820d79Rafael Espindola                      SectionKind::getMergeableConst16());
48f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner
49f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner  // TLS globals are lowered in the backend to arrays indexed by the current
50f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner  // thread id. After lowering they require no special handling by the linker
51f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner  // and can be placed in the standard data / bss sections.
52f0144127b98425d214e59e4a1a4b342b78e3642bChris Lattner  TLSDataSection = DataSection;
53cea01bfe7d764714d13079014f7d812c8b66b202Chris Lattner  TLSBSSSection = BSSSection;
5434bee6da7a3f45aa5b2de69f42e05bb35340023bRichard Osborne
5534bee6da7a3f45aa5b2de69f42e05bb35340023bRichard Osborne  ReadOnlySection =
56c85dca66e68c9fa6ffa8471c64113b12d8d94fb1Rafael Espindola    Ctx.getELFSection(".cp.rodata", ELF::SHT_PROGBITS,
571c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::SHF_ALLOC |
581c13026e8f94bd332c0979baa9c777da99d48736Rafael Espindola                      ELF::XCORE_SHF_CP_SECTION,
593f2d13c98eb04962bf6fcfdcc6f62789bc820d79Rafael Espindola                      SectionKind::getReadOnlyWithRel());
601102afb8c5474f6b1e2cdff6ac0b8b0e913441e4Nick Lewycky}
61