summaryrefslogtreecommitdiffstats
path: root/gnu/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'gnu/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp')
-rw-r--r--gnu/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp156
1 files changed, 0 insertions, 156 deletions
diff --git a/gnu/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp b/gnu/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
deleted file mode 100644
index c60a262e719..00000000000
--- a/gnu/llvm/lib/Target/XCore/XCoreTargetObjectFile.cpp
+++ /dev/null
@@ -1,156 +0,0 @@
-//===-- XCoreTargetObjectFile.cpp - XCore object files --------------------===//
-//
-// The LLVM Compiler Infrastructure
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "XCoreTargetObjectFile.h"
-#include "XCoreSubtarget.h"
-#include "llvm/BinaryFormat/ELF.h"
-#include "llvm/IR/DataLayout.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/MC/MCSectionELF.h"
-#include "llvm/Target/TargetMachine.h"
-
-using namespace llvm;
-
-
-void XCoreTargetObjectFile::Initialize(MCContext &Ctx, const TargetMachine &TM){
- TargetLoweringObjectFileELF::Initialize(Ctx, TM);
-
- BSSSection = Ctx.getELFSection(".dp.bss", ELF::SHT_NOBITS,
- ELF::SHF_ALLOC | ELF::SHF_WRITE |
- ELF::XCORE_SHF_DP_SECTION);
- BSSSectionLarge = Ctx.getELFSection(".dp.bss.large", ELF::SHT_NOBITS,
- ELF::SHF_ALLOC | ELF::SHF_WRITE |
- ELF::XCORE_SHF_DP_SECTION);
- DataSection = Ctx.getELFSection(".dp.data", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_WRITE |
- ELF::XCORE_SHF_DP_SECTION);
- DataSectionLarge = Ctx.getELFSection(".dp.data.large", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_WRITE |
- ELF::XCORE_SHF_DP_SECTION);
- DataRelROSection = Ctx.getELFSection(".dp.rodata", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_WRITE |
- ELF::XCORE_SHF_DP_SECTION);
- DataRelROSectionLarge = Ctx.getELFSection(
- ".dp.rodata.large", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_WRITE | ELF::XCORE_SHF_DP_SECTION);
- ReadOnlySection =
- Ctx.getELFSection(".cp.rodata", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::XCORE_SHF_CP_SECTION);
- ReadOnlySectionLarge =
- Ctx.getELFSection(".cp.rodata.large", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::XCORE_SHF_CP_SECTION);
- MergeableConst4Section = Ctx.getELFSection(
- ".cp.rodata.cst4", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_MERGE | ELF::XCORE_SHF_CP_SECTION, 4, "");
- MergeableConst8Section = Ctx.getELFSection(
- ".cp.rodata.cst8", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_MERGE | ELF::XCORE_SHF_CP_SECTION, 8, "");
- MergeableConst16Section = Ctx.getELFSection(
- ".cp.rodata.cst16", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_MERGE | ELF::XCORE_SHF_CP_SECTION, 16, "");
- CStringSection =
- Ctx.getELFSection(".cp.rodata.string", ELF::SHT_PROGBITS,
- ELF::SHF_ALLOC | ELF::SHF_MERGE | ELF::SHF_STRINGS |
- ELF::XCORE_SHF_CP_SECTION);
- // TextSection - see MObjectFileInfo.cpp
- // StaticCtorSection - see MObjectFileInfo.cpp
- // StaticDtorSection - see MObjectFileInfo.cpp
- }
-
-static unsigned getXCoreSectionType(SectionKind K) {
- if (K.isBSS())
- return ELF::SHT_NOBITS;
- return ELF::SHT_PROGBITS;
-}
-
-static unsigned getXCoreSectionFlags(SectionKind K, bool IsCPRel) {
- unsigned Flags = 0;
-
- if (!K.isMetadata())
- Flags |= ELF::SHF_ALLOC;
-
- if (K.isText())
- Flags |= ELF::SHF_EXECINSTR;
- else if (IsCPRel)
- Flags |= ELF::XCORE_SHF_CP_SECTION;
- else
- Flags |= ELF::XCORE_SHF_DP_SECTION;
-
- if (K.isWriteable())
- Flags |= ELF::SHF_WRITE;
-
- if (K.isMergeableCString() || K.isMergeableConst4() ||
- K.isMergeableConst8() || K.isMergeableConst16())
- Flags |= ELF::SHF_MERGE;
-
- if (K.isMergeableCString())
- Flags |= ELF::SHF_STRINGS;
-
- return Flags;
-}
-
-MCSection *XCoreTargetObjectFile::getExplicitSectionGlobal(
- const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
- StringRef SectionName = GO->getSection();
- // Infer section flags from the section name if we can.
- bool IsCPRel = SectionName.startswith(".cp.");
- if (IsCPRel && !Kind.isReadOnly())
- report_fatal_error("Using .cp. section for writeable object.");
- return getContext().getELFSection(SectionName, getXCoreSectionType(Kind),
- getXCoreSectionFlags(Kind, IsCPRel));
-}
-
-MCSection *XCoreTargetObjectFile::SelectSectionForGlobal(
- const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
-
- bool UseCPRel = GO->hasLocalLinkage();
-
- if (Kind.isText()) return TextSection;
- if (UseCPRel) {
- if (Kind.isMergeable1ByteCString()) return CStringSection;
- if (Kind.isMergeableConst4()) return MergeableConst4Section;
- if (Kind.isMergeableConst8()) return MergeableConst8Section;
- if (Kind.isMergeableConst16()) return MergeableConst16Section;
- }
- Type *ObjType = GO->getValueType();
- auto &DL = GO->getParent()->getDataLayout();
- if (TM.getCodeModel() == CodeModel::Small || !ObjType->isSized() ||
- DL.getTypeAllocSize(ObjType) < CodeModelLargeSize) {
- if (Kind.isReadOnly()) return UseCPRel? ReadOnlySection
- : DataRelROSection;
- if (Kind.isBSS() || Kind.isCommon())return BSSSection;
- if (Kind.isData())
- return DataSection;
- if (Kind.isReadOnlyWithRel()) return DataRelROSection;
- } else {
- if (Kind.isReadOnly()) return UseCPRel? ReadOnlySectionLarge
- : DataRelROSectionLarge;
- if (Kind.isBSS() || Kind.isCommon())return BSSSectionLarge;
- if (Kind.isData())
- return DataSectionLarge;
- if (Kind.isReadOnlyWithRel()) return DataRelROSectionLarge;
- }
-
- assert((Kind.isThreadLocal() || Kind.isCommon()) && "Unknown section kind");
- report_fatal_error("Target does not support TLS or Common sections");
-}
-
-MCSection *XCoreTargetObjectFile::getSectionForConstant(const DataLayout &DL,
- SectionKind Kind,
- const Constant *C,
- unsigned &Align) const {
- if (Kind.isMergeableConst4()) return MergeableConst4Section;
- if (Kind.isMergeableConst8()) return MergeableConst8Section;
- if (Kind.isMergeableConst16()) return MergeableConst16Section;
- assert((Kind.isReadOnly() || Kind.isReadOnlyWithRel()) &&
- "Unknown section kind");
- // We assume the size of the object is never greater than CodeModelLargeSize.
- // To handle CodeModelLargeSize changes to AsmPrinter would be required.
- return ReadOnlySection;
-}