mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-01-27 14:34:58 +00:00
Don' try to make sections in comdats SHF_MERGE.
Parts of llvm were not expecting it and we wouldn't print the entity size of the section. Given what comdats are used for, having SHF_MERGE sections would be just a small improvement, so just disable it for now. Fixes pr22463. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@228196 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
54a6137379
commit
e247dd2839
@ -166,7 +166,7 @@ static unsigned getELFSectionType(StringRef Name, SectionKind K) {
|
|||||||
|
|
||||||
|
|
||||||
static unsigned
|
static unsigned
|
||||||
getELFSectionFlags(SectionKind K) {
|
getELFSectionFlags(SectionKind K, bool InCOMDAT) {
|
||||||
unsigned Flags = 0;
|
unsigned Flags = 0;
|
||||||
|
|
||||||
if (!K.isMetadata())
|
if (!K.isMetadata())
|
||||||
@ -181,7 +181,7 @@ getELFSectionFlags(SectionKind K) {
|
|||||||
if (K.isThreadLocal())
|
if (K.isThreadLocal())
|
||||||
Flags |= ELF::SHF_TLS;
|
Flags |= ELF::SHF_TLS;
|
||||||
|
|
||||||
if (K.isMergeableCString() || K.isMergeableConst())
|
if (!InCOMDAT && (K.isMergeableCString() || K.isMergeableConst()))
|
||||||
Flags |= ELF::SHF_MERGE;
|
Flags |= ELF::SHF_MERGE;
|
||||||
|
|
||||||
if (K.isMergeableCString())
|
if (K.isMergeableCString())
|
||||||
@ -211,7 +211,7 @@ const MCSection *TargetLoweringObjectFileELF::getExplicitSectionGlobal(
|
|||||||
Kind = getELFKindForNamedSection(SectionName, Kind);
|
Kind = getELFKindForNamedSection(SectionName, Kind);
|
||||||
|
|
||||||
StringRef Group = "";
|
StringRef Group = "";
|
||||||
unsigned Flags = getELFSectionFlags(Kind);
|
unsigned Flags = getELFSectionFlags(Kind, GV->hasComdat());
|
||||||
if (const Comdat *C = getELFComdat(GV)) {
|
if (const Comdat *C = getELFComdat(GV)) {
|
||||||
Group = C->getName();
|
Group = C->getName();
|
||||||
Flags |= ELF::SHF_GROUP;
|
Flags |= ELF::SHF_GROUP;
|
||||||
@ -243,7 +243,7 @@ static StringRef getSectionPrefixForGlobal(SectionKind Kind) {
|
|||||||
const MCSection *TargetLoweringObjectFileELF::
|
const MCSection *TargetLoweringObjectFileELF::
|
||||||
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
|
||||||
Mangler &Mang, const TargetMachine &TM) const {
|
Mangler &Mang, const TargetMachine &TM) const {
|
||||||
unsigned Flags = getELFSectionFlags(Kind);
|
unsigned Flags = getELFSectionFlags(Kind, GV->hasComdat());
|
||||||
|
|
||||||
// If we have -ffunction-section or -fdata-section then we should emit the
|
// If we have -ffunction-section or -fdata-section then we should emit the
|
||||||
// global value to a uniqued section specifically for it.
|
// global value to a uniqued section specifically for it.
|
||||||
|
8
test/CodeGen/X86/global-sections-comdat.ll
Normal file
8
test/CodeGen/X86/global-sections-comdat.ll
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
; RUN: llc < %s -mtriple=i386-unknown-linux | FileCheck %s -check-prefix=LINUX
|
||||||
|
; RUN: llc < %s -mtriple=i386-unknown-linux -data-sections | FileCheck %s -check-prefix=LINUX-SECTIONS
|
||||||
|
|
||||||
|
$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
|
Loading…
x
Reference in New Issue
Block a user