mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-13 20:32:21 +00:00
Use short names for jumptable sections.
Also refactor code to remove some duplication. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@230087 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
bc051faae1
commit
c093973970
@ -249,6 +249,27 @@ static StringRef getSectionPrefixForGlobal(SectionKind Kind) {
|
||||
return ".data.rel.ro";
|
||||
}
|
||||
|
||||
static const MCSection *
|
||||
getUniqueELFSection(MCContext &Ctx, const GlobalValue &GV, SectionKind Kind,
|
||||
Mangler &Mang, const TargetMachine &TM, unsigned Flags) {
|
||||
StringRef Prefix = getSectionPrefixForGlobal(Kind);
|
||||
|
||||
SmallString<128> Name(Prefix);
|
||||
bool UniqueSectionNames = TM.getUniqueSectionNames();
|
||||
if (UniqueSectionNames) {
|
||||
Name.push_back('.');
|
||||
TM.getNameWithPrefix(Name, &GV, Mang, true);
|
||||
}
|
||||
StringRef Group = "";
|
||||
if (const Comdat *C = getELFComdat(&GV)) {
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
Group = C->getName();
|
||||
}
|
||||
|
||||
return Ctx.getELFSection(Name, getELFSectionType(Name, Kind), Flags, 0, Group,
|
||||
!UniqueSectionNames);
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::
|
||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
Mangler &Mang, const TargetMachine &TM) const {
|
||||
@ -264,24 +285,8 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
EmitUniquedSection = TM.getDataSections();
|
||||
}
|
||||
|
||||
if (EmitUniquedSection || GV->hasComdat()) {
|
||||
StringRef Prefix = getSectionPrefixForGlobal(Kind);
|
||||
|
||||
SmallString<128> Name(Prefix);
|
||||
bool UniqueSectionNames = TM.getUniqueSectionNames();
|
||||
if (UniqueSectionNames) {
|
||||
Name.push_back('.');
|
||||
TM.getNameWithPrefix(Name, GV, Mang, true);
|
||||
}
|
||||
StringRef Group = "";
|
||||
if (const Comdat *C = getELFComdat(GV)) {
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
Group = C->getName();
|
||||
}
|
||||
|
||||
return getContext().getELFSection(Name, getELFSectionType(Name, Kind),
|
||||
Flags, 0, Group, !UniqueSectionNames);
|
||||
}
|
||||
if (EmitUniquedSection || GV->hasComdat())
|
||||
return getUniqueELFSection(getContext(), *GV, Kind, Mang, TM, Flags);
|
||||
|
||||
if (Kind.isText()) return TextSection;
|
||||
|
||||
@ -346,17 +351,8 @@ const MCSection *TargetLoweringObjectFileELF::getSectionForJumpTable(
|
||||
if (!EmitUniqueSection)
|
||||
return ReadOnlySection;
|
||||
|
||||
SmallString<128> Name(".rodata.");
|
||||
TM.getNameWithPrefix(Name, &F, Mang, true);
|
||||
|
||||
unsigned Flags = ELF::SHF_ALLOC;
|
||||
StringRef Group = "";
|
||||
if (C) {
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
Group = C->getName();
|
||||
}
|
||||
|
||||
return getContext().getELFSection(Name, ELF::SHT_PROGBITS, Flags, 0, Group);
|
||||
return getUniqueELFSection(getContext(), F, SectionKind::getReadOnly(), Mang,
|
||||
TM, ELF::SHF_ALLOC);
|
||||
}
|
||||
|
||||
bool TargetLoweringObjectFileELF::shouldPutJumpTableInFunctionSection(
|
||||
|
@ -1,5 +1,6 @@
|
||||
; RUN: llc < %s -mtriple=i386-unknown-linux | FileCheck %s -check-prefix=LINUX
|
||||
; RUN: llc < %s -mtriple=i386-unknown-linux -data-sections -function-sections | FileCheck %s -check-prefix=LINUX-SECTIONS
|
||||
; RUN: llc < %s -mtriple=i386-unknown-linux -data-sections -function-sections -unique-section-names=false | FileCheck %s -check-prefix=LINUX-SECTIONS-SHORT
|
||||
|
||||
$F1 = comdat any
|
||||
define void @F1(i32 %y) comdat {
|
||||
@ -32,8 +33,14 @@ bb5:
|
||||
; LINUX-SECTIONS-NEXT: .cfi_endproc
|
||||
; LINUX-SECTIONS-NEXT: .section .rodata.F1,"aG",@progbits,F1,comdat
|
||||
|
||||
; LINUX-SECTIONS-SHORT: .section .text,"axG",@progbits,F1,comdat
|
||||
; LINUX-SECTIONS-SHORT: .size F1,
|
||||
; LINUX-SECTIONS-SHORT-NEXT: .cfi_endproc
|
||||
; LINUX-SECTIONS-SHORT-NEXT: .section .rodata,"aG",@progbits,F1,comdat
|
||||
|
||||
$G16 = comdat any
|
||||
@G16 = unnamed_addr constant i32 42, comdat
|
||||
|
||||
; LINUX: .section .rodata.G16,"aG",@progbits,G16,comdat
|
||||
; LINUX-SECTIONS: .section .rodata.G16,"aG",@progbits,G16,comdat
|
||||
; LINUX-SECTIONS-SHORT: .section .rodata,"aG",@progbits,G16,comdat
|
||||
|
Loading…
Reference in New Issue
Block a user