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