diff options
Diffstat (limited to 'lib/CodeGen')
-rw-r--r-- | lib/CodeGen/AsmPrinter/AsmPrinter.cpp | 20 | ||||
-rw-r--r-- | lib/CodeGen/ELFWriter.cpp | 10 |
2 files changed, 17 insertions, 13 deletions
diff --git a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp index 7c9fcf5fd6..f9839ddc68 100644 --- a/lib/CodeGen/AsmPrinter/AsmPrinter.cpp +++ b/lib/CodeGen/AsmPrinter/AsmPrinter.cpp @@ -349,8 +349,7 @@ void AsmPrinter::EmitConstantPool(MachineConstantPool *MCP) { } } - 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 @@ void AsmPrinter::EmitJumpTableInfo(MachineJumpTableInfo *MJTI, // 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 1d33c7e1fe..be1e6bfe75 100644 --- a/lib/CodeGen/ELFWriter.cpp +++ b/lib/CodeGen/ELFWriter.cpp @@ -178,7 +178,13 @@ void ELFWriter::addExternalSymbol(const char *External) { // 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 @@ ELFSection &ELFWriter::getConstantPoolSection(MachineConstantPoolEntry &CPE) { 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()); |