mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-06-13 22:24:07 +00:00
Add r228980 back.
Add support for having multiple sections with the same name and comdat. Using this in combination with -ffunction-sections allows LLVM to output a .o file with mulitple sections named .text. This saves space by avoiding long unique names of the form .text.<C++ mangled name>. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@229541 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
@ -228,25 +228,25 @@ const MCSection *TargetLoweringObjectFileELF::getExplicitSectionGlobal(
|
||||
/// DataSections.
|
||||
static StringRef getSectionPrefixForGlobal(SectionKind Kind) {
|
||||
if (Kind.isText())
|
||||
return ".text.";
|
||||
return ".text";
|
||||
if (Kind.isReadOnly())
|
||||
return ".rodata.";
|
||||
return ".rodata";
|
||||
if (Kind.isBSS())
|
||||
return ".bss.";
|
||||
return ".bss";
|
||||
if (Kind.isThreadData())
|
||||
return ".tdata.";
|
||||
return ".tdata";
|
||||
if (Kind.isThreadBSS())
|
||||
return ".tbss.";
|
||||
return ".tbss";
|
||||
if (Kind.isDataNoRel())
|
||||
return ".data.";
|
||||
return ".data";
|
||||
if (Kind.isDataRelLocal())
|
||||
return ".data.rel.local.";
|
||||
return ".data.rel.local";
|
||||
if (Kind.isDataRel())
|
||||
return ".data.rel.";
|
||||
return ".data.rel";
|
||||
if (Kind.isReadOnlyWithRelLocal())
|
||||
return ".data.rel.ro.local.";
|
||||
return ".data.rel.ro.local";
|
||||
assert(Kind.isReadOnlyWithRel() && "Unknown section kind");
|
||||
return ".data.rel.ro.";
|
||||
return ".data.rel.ro";
|
||||
}
|
||||
|
||||
const MCSection *TargetLoweringObjectFileELF::
|
||||
@ -268,16 +268,19 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
StringRef Prefix = getSectionPrefixForGlobal(Kind);
|
||||
|
||||
SmallString<128> Name(Prefix);
|
||||
TM.getNameWithPrefix(Name, GV, Mang, true);
|
||||
|
||||
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.str(), getELFSectionType(Name.str(), Kind), Flags, 0, Group);
|
||||
return getContext().getELFSection(Name, getELFSectionType(Name, Kind),
|
||||
Flags, 0, Group, !UniqueSectionNames);
|
||||
}
|
||||
|
||||
if (Kind.isText()) return TextSection;
|
||||
|
Reference in New Issue
Block a user