From: Anton Korobeynikov Date: Wed, 9 Jul 2008 13:25:46 +0000 (+0000) Subject: Fix several bugs in named sections handling X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2a889172a48177ec5a238f62e539515b39e99894;p=oota-llvm.git Fix several bugs in named sections handling git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@53312 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/TargetAsmInfo.cpp b/lib/Target/TargetAsmInfo.cpp index 6d27d1f4f04..483af129013 100644 --- a/lib/Target/TargetAsmInfo.cpp +++ b/lib/Target/TargetAsmInfo.cpp @@ -235,7 +235,7 @@ TargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV, } // Add flags from sections, if any. - if (Name) { + if (Name && *Name) { Flags |= SectionFlags::Named; // Some lame default implementation based on some magic section names. @@ -279,7 +279,7 @@ TargetAsmInfo::SectionForGlobal(const GlobalValue *GV) const { // directive and also append funky flags. Otherwise - section name is just // some magic assembler directive. if (Flags & SectionFlags::Named) - Name = SwitchToSectionDirective + Name + PrintSectionFlags(Flags); + Name = getSwitchToSectionDirective() + Name + PrintSectionFlags(Flags); return Name; } diff --git a/lib/Target/X86/X86TargetAsmInfo.cpp b/lib/Target/X86/X86TargetAsmInfo.cpp index 6a3bdfa6546..7a56ed55e06 100644 --- a/lib/Target/X86/X86TargetAsmInfo.cpp +++ b/lib/Target/X86/X86TargetAsmInfo.cpp @@ -336,9 +336,9 @@ X86ELFTargetAsmInfo::X86ELFTargetAsmInfo(const X86TargetMachine &TM): bool is64Bit = X86TM->getSubtarget().is64Bit(); ReadOnlySection = ".rodata"; - FourByteConstantSection = ".rodata.cst"; - EightByteConstantSection = ".rodata.cst"; - SixteenByteConstantSection = ".rodata.cst"; + FourByteConstantSection = "\t.section\t.rodata.cst4,\"aM\",@progbits,4"; + EightByteConstantSection = "\t.section\t.rodata.cst8,\"aM\",@progbits,8"; + SixteenByteConstantSection = "\t.section\t.rodata.cst16,\"aM\",@progbits,16"; CStringSection = ".rodata.str"; PrivateGlobalPrefix = ".L"; WeakRefDirective = "\t.weak\t"; @@ -466,12 +466,10 @@ X86ELFTargetAsmInfo::MergeableConstSection(const GlobalVariable *GV) const { unsigned Size = SectionFlags::getEntitySize(Flags); // FIXME: string here is temporary, until stuff will fully land in. - if (Size == 4) - return FourByteConstantSection; - else if (Size == 8) - return EightByteConstantSection; - else if (Size == 16) - return SixteenByteConstantSection; + // We cannot use {Four,Eight,Sixteen}ByteConstantSection here, since it's + // currently directly used by asmprinter. + if (Size == 4 || Size == 8 || Size == 16) + return ".rodata.cst" + utostr(Size); return getReadOnlySection(); } @@ -525,8 +523,8 @@ X86ELFTargetAsmInfo::SectionFlagsForGlobal(const GlobalValue *GV, // Mark section as named, when needed (so, we we will need .section directive // to switch into it). - if (Flags & (SectionFlags::Mergeable || - SectionFlags::TLS || + if (Flags & (SectionFlags::Mergeable | + SectionFlags::TLS | SectionFlags::Linkonce)) Flags |= SectionFlags::Named;