mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Implement unique sections with an unique ID.
This allows the compiler/assembly programmer to switch back to a section. This in turn fixes the bootstrap failure on powerpc (tested on gcc110) without changing the ppc codegen at all. I will try to cleanup the various getELFSection overloads in a followup patch. Just using a default argument now would lead to ambiguities. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@234099 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -245,9 +245,11 @@ static StringRef getSectionPrefixForGlobal(SectionKind Kind) {
|
||||
return ".data.rel.ro";
|
||||
}
|
||||
|
||||
static const MCSectionELF *selectELFSectionForGlobal(
|
||||
MCContext &Ctx, const GlobalValue *GV, SectionKind Kind, Mangler &Mang,
|
||||
const TargetMachine &TM, bool EmitUniqueSection, unsigned Flags) {
|
||||
static const MCSectionELF *
|
||||
selectELFSectionForGlobal(MCContext &Ctx, const GlobalValue *GV,
|
||||
SectionKind Kind, Mangler &Mang,
|
||||
const TargetMachine &TM, bool EmitUniqueSection,
|
||||
unsigned Flags, unsigned *NextUniqueID) {
|
||||
unsigned EntrySize = 0;
|
||||
if (Kind.isMergeableCString()) {
|
||||
if (Kind.isMergeable2ByteCString()) {
|
||||
@ -297,9 +299,13 @@ static const MCSectionELF *selectELFSectionForGlobal(
|
||||
Name.push_back('.');
|
||||
TM.getNameWithPrefix(Name, GV, Mang, true);
|
||||
}
|
||||
unsigned UniqueID = ~0;
|
||||
if (EmitUniqueSection && !UniqueSectionNames) {
|
||||
UniqueID = *NextUniqueID;
|
||||
(*NextUniqueID)++;
|
||||
}
|
||||
return Ctx.getELFSection(Name, getELFSectionType(Name, Kind), Flags,
|
||||
EntrySize, Group,
|
||||
EmitUniqueSection && !UniqueSectionNames);
|
||||
EntrySize, Group, UniqueID);
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::SelectSectionForGlobal(
|
||||
@ -319,7 +325,7 @@ const MCSection *TargetLoweringObjectFileELF::SelectSectionForGlobal(
|
||||
EmitUniqueSection |= GV->hasComdat();
|
||||
|
||||
return selectELFSectionForGlobal(getContext(), GV, Kind, Mang, TM,
|
||||
EmitUniqueSection, Flags);
|
||||
EmitUniqueSection, Flags, &NextUniqueID);
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::getSectionForJumpTable(
|
||||
@ -332,7 +338,8 @@ const MCSection *TargetLoweringObjectFileELF::getSectionForJumpTable(
|
||||
return ReadOnlySection;
|
||||
|
||||
return selectELFSectionForGlobal(getContext(), &F, SectionKind::getReadOnly(),
|
||||
Mang, TM, EmitUniqueSection, ELF::SHF_ALLOC);
|
||||
Mang, TM, EmitUniqueSection, ELF::SHF_ALLOC,
|
||||
&NextUniqueID);
|
||||
}
|
||||
|
||||
bool TargetLoweringObjectFileELF::shouldPutJumpTableInFunctionSection(
|
||||
|
Reference in New Issue
Block a user