Remove "JumpTableDataSection" from TAI, instead, have AsmPrinter
compute it based on what it knows. As part of this, rename getSectionForMergeableConstant
to getSectionForConstant because it works for non-mergable constants also.
The only functionality change from this is that Xcore will start dropping
its jump tables into readonly section instead of data section in -static mode.
This should be fine as the linker resolves the relocations. If this is a
problem, let me know and we'll come up with another solution.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@77833 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 7c9fcf5..f9839dd 100644
--- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -349,8 +349,7 @@
}
}
- const MCSection *S =
- getObjFileLowering().getSectionForMergeableConstant(Kind);
+ const MCSection *S = getObjFileLowering().getSectionForConstant(Kind);
// The number of sections are small, just do a linear search from the
// last section to the first.
@@ -419,22 +418,21 @@
// the appropriate section.
TargetLowering *LoweringInfo = TM.getTargetLowering();
- const char *JumpTableDataSection = TAI->getJumpTableDataSection();
const Function *F = MF.getFunction();
-
- const MCSection *FuncSection =
- getObjFileLowering().SectionForGlobal(F, Mang, TM);
-
bool JTInDiffSection = false;
- if ((IsPic && !LoweringInfo->usesGlobalOffsetTable()) ||
- !JumpTableDataSection || F->isWeakForLinker()) {
+ if (F->isWeakForLinker() ||
+ (IsPic && !LoweringInfo->usesGlobalOffsetTable())) {
// In PIC mode, we need to emit the jump table to the same section as the
// function body itself, otherwise the label differences won't make sense.
// We should also do if the section name is NULL or function is declared in
// discardable section.
- SwitchToSection(FuncSection);
+ SwitchToSection(getObjFileLowering().SectionForGlobal(F, Mang, TM));
} else {
- SwitchToDataSection(JumpTableDataSection);
+ // Otherwise, drop it in the readonly section.
+ const MCSection *ReadOnlySection =
+ getObjFileLowering().getSectionForConstant(
+ SectionKind::get(SectionKind::ReadOnly));
+ SwitchToSection(ReadOnlySection);
JTInDiffSection = true;
}
diff --git a/lib/CodeGen/ELFWriter.cpp b/lib/CodeGen/ELFWriter.cpp
index 1d33c7e..be1e6bf 100644
--- a/lib/CodeGen/ELFWriter.cpp
+++ b/lib/CodeGen/ELFWriter.cpp
@@ -178,7 +178,13 @@
// Get jump table section on the section name returned by TAI
ELFSection &ELFWriter::getJumpTableSection() {
unsigned Align = TM.getTargetData()->getPointerABIAlignment();
- return getSection(TAI->getJumpTableDataSection(),
+
+ const TargetLoweringObjectFile &TLOF =
+ TM.getTargetLowering()->getObjFileLowering();
+
+ return getSection(TLOF.getSectionForConstant(
+ SectionKind::get(SectionKind::ReadOnly))
+ ->getName(),
ELFSection::SHT_PROGBITS,
ELFSection::SHF_ALLOC, Align);
}
@@ -204,7 +210,7 @@
const TargetLoweringObjectFile &TLOF =
TM.getTargetLowering()->getObjFileLowering();
- return getSection(TLOF.getSectionForMergeableConstant(Kind)->getName(),
+ return getSection(TLOF.getSectionForConstant(Kind)->getName(),
ELFSection::SHT_PROGBITS,
ELFSection::SHF_MERGE | ELFSection::SHF_ALLOC,
CPE.getAlignment());