mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-11-01 15:11:24 +00:00
Switch llvm to using comdats. For now always use groups with a single
section. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@125526 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
56519aac04
commit
5d618ef7f1
@ -266,22 +266,6 @@ getExplicitSectionGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
getELFSectionFlags(Kind), Kind);
|
||||
}
|
||||
|
||||
static const char *getSectionPrefixForUniqueGlobal(SectionKind Kind) {
|
||||
if (Kind.isText()) return ".gnu.linkonce.t.";
|
||||
if (Kind.isReadOnly()) return ".gnu.linkonce.r.";
|
||||
|
||||
if (Kind.isThreadData()) return ".gnu.linkonce.td.";
|
||||
if (Kind.isThreadBSS()) return ".gnu.linkonce.tb.";
|
||||
|
||||
if (Kind.isDataNoRel()) return ".gnu.linkonce.d.";
|
||||
if (Kind.isDataRelLocal()) return ".gnu.linkonce.d.rel.local.";
|
||||
if (Kind.isDataRel()) return ".gnu.linkonce.d.rel.";
|
||||
if (Kind.isReadOnlyWithRelLocal()) return ".gnu.linkonce.d.rel.ro.local.";
|
||||
|
||||
assert(Kind.isReadOnlyWithRel() && "Unknown section kind");
|
||||
return ".gnu.linkonce.d.rel.ro.";
|
||||
}
|
||||
|
||||
/// getSectionPrefixForGlobal - Return the section prefix name used by options
|
||||
/// FunctionsSections and DataSections.
|
||||
static const char *getSectionPrefixForGlobal(SectionKind Kind) {
|
||||
@ -317,19 +301,21 @@ SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||
if ((GV->isWeakForLinker() || EmitUniquedSection) &&
|
||||
!Kind.isCommon() && !Kind.isBSS()) {
|
||||
const char *Prefix;
|
||||
if (GV->isWeakForLinker())
|
||||
Prefix = getSectionPrefixForUniqueGlobal(Kind);
|
||||
else {
|
||||
assert(EmitUniquedSection);
|
||||
Prefix = getSectionPrefixForGlobal(Kind);
|
||||
}
|
||||
Prefix = getSectionPrefixForGlobal(Kind);
|
||||
|
||||
SmallString<128> Name(Prefix, Prefix+strlen(Prefix));
|
||||
MCSymbol *Sym = Mang->getSymbol(GV);
|
||||
Name.append(Sym->getName().begin(), Sym->getName().end());
|
||||
StringRef Group = "";
|
||||
unsigned Flags = getELFSectionFlags(Kind);
|
||||
if (GV->isWeakForLinker()) {
|
||||
Group = Sym->getName();
|
||||
Flags |= ELF::SHF_GROUP;
|
||||
}
|
||||
|
||||
return getContext().getELFSection(Name.str(),
|
||||
getELFSectionType(Name.str(), Kind),
|
||||
getELFSectionFlags(Kind), Kind);
|
||||
Flags, Kind, 0, Group);
|
||||
}
|
||||
|
||||
if (Kind.isText()) return TextSection;
|
||||
|
@ -61,6 +61,8 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
OS << 'a';
|
||||
if (Flags & ELF::SHF_EXECINSTR)
|
||||
OS << 'x';
|
||||
if (Flags & ELF::SHF_GROUP)
|
||||
OS << 'G';
|
||||
if (Flags & ELF::SHF_WRITE)
|
||||
OS << 'w';
|
||||
if (Flags & ELF::SHF_MERGE)
|
||||
@ -104,6 +106,8 @@ void MCSectionELF::PrintSwitchToSection(const MCAsmInfo &MAI,
|
||||
OS << "," << EntrySize;
|
||||
}
|
||||
|
||||
if (Flags & ELF::SHF_GROUP)
|
||||
OS << "," << Group->getName() << ",comdat";
|
||||
OS << '\n';
|
||||
}
|
||||
|
||||
|
@ -66,7 +66,7 @@
|
||||
@"foo bar" = linkonce global i32 42
|
||||
|
||||
; LINUX: .type foo_20_bar,@object
|
||||
; LINUX:.section .gnu.linkonce.d.foo_20_bar,"aw",@progbits
|
||||
; LINUX: .section .data.foo_20_bar,"aGw",@progbits,foo_20_bar,comdat
|
||||
; LINUX: .weak foo_20_bar
|
||||
; LINUX: foo_20_bar:
|
||||
|
||||
@ -79,7 +79,7 @@
|
||||
@G6 = weak_odr unnamed_addr constant [1 x i8] c"\01"
|
||||
|
||||
; LINUX: .type G6,@object
|
||||
; LINUX: .section .gnu.linkonce.r.G6,"a",@progbits
|
||||
; LINUX: .section .rodata.G6,"aG",@progbits,G6,comdat
|
||||
; LINUX: .weak G6
|
||||
; LINUX: G6:
|
||||
; LINUX: .byte 1
|
||||
|
@ -1,4 +1,4 @@
|
||||
; RUN: llc < %s -relocation-model=pic -mtriple=i386-linux-gnu -asm-verbose=false | not grep -F .text
|
||||
; RUN: llc < %s -relocation-model=pic -mtriple=i386-linux-gnu -asm-verbose=false | grep -F .text._Z3fooILi1EEvi,"axG",@progbits,_Z3fooILi1EEvi,comdat
|
||||
; RUN: llc < %s -relocation-model=pic -mtriple=i686-apple-darwin -asm-verbose=false | FileCheck %s
|
||||
; RUN: llc < %s -mtriple=x86_64-apple-darwin | not grep 'lJTI'
|
||||
; rdar://6971437
|
||||
|
@ -339,6 +339,7 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file,
|
||||
}
|
||||
|
||||
int definition = attrs & LTO_SYMBOL_DEFINITION_MASK;
|
||||
sym.comdat_key = NULL;
|
||||
switch (definition) {
|
||||
case LTO_SYMBOL_DEFINITION_REGULAR:
|
||||
sym.def = LDPK_DEF;
|
||||
@ -350,6 +351,7 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file,
|
||||
sym.def = LDPK_COMMON;
|
||||
break;
|
||||
case LTO_SYMBOL_DEFINITION_WEAK:
|
||||
sym.comdat_key = sym.name;
|
||||
sym.def = LDPK_WEAKDEF;
|
||||
break;
|
||||
case LTO_SYMBOL_DEFINITION_WEAKUNDEF:
|
||||
@ -360,9 +362,7 @@ static ld_plugin_status claim_file_hook(const ld_plugin_input_file *file,
|
||||
return LDPS_ERR;
|
||||
}
|
||||
|
||||
// LLVM never emits COMDAT.
|
||||
sym.size = 0;
|
||||
sym.comdat_key = NULL;
|
||||
|
||||
sym.resolution = LDPR_UNKNOWN;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user