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