[llvm] r228196 - Don' try to make sections in comdats SHF_MERGE.

Eric Christopher echristo at gmail.com
Wed Feb 4 16:36:24 PST 2015


Can you go ahead and add a FIXME here? It's conceivable that we'll want
SHF_MERGE sections to be part of a comdat.

-eric

On Wed Feb 04 2015 at 1:35:53 PM Rafael Espindola <
rafael.espindola at gmail.com> wrote:

> Author: rafael
> Date: Wed Feb  4 15:27:24 2015
> New Revision: 228196
>
> URL: http://llvm.org/viewvc/llvm-project?rev=228196&view=rev
> Log:
> 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.
>
> Added:
>     llvm/trunk/test/CodeGen/X86/global-sections-comdat.ll
> Modified:
>     llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
>
> Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/
> TargetLoweringObjectFileImpl.cpp?rev=228196&r1=228195&r2=228196&view=diff
> ============================================================
> ==================
> --- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
> +++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Wed Feb  4
> 15:27:24 2015
> @@ -166,7 +166,7 @@ static unsigned getELFSectionType(String
>
>
>  static unsigned
> -getELFSectionFlags(SectionKind K) {
> +getELFSectionFlags(SectionKind K, bool InCOMDAT) {
>    unsigned Flags = 0;
>
>    if (!K.isMetadata())
> @@ -181,7 +181,7 @@ getELFSectionFlags(SectionKind K) {
>    if (K.isThreadLocal())
>      Flags |= ELF::SHF_TLS;
>
> -  if (K.isMergeableCString() || K.isMergeableConst())
> +  if (!InCOMDAT && (K.isMergeableCString() || K.isMergeableConst()))
>      Flags |= ELF::SHF_MERGE;
>
>    if (K.isMergeableCString())
> @@ -211,7 +211,7 @@ const MCSection *TargetLoweringObjectFil
>    Kind = getELFKindForNamedSection(SectionName, Kind);
>
>    StringRef Group = "";
> -  unsigned Flags = getELFSectionFlags(Kind);
> +  unsigned Flags = getELFSectionFlags(Kind, GV->hasComdat());
>    if (const Comdat *C = getELFComdat(GV)) {
>      Group = C->getName();
>      Flags |= ELF::SHF_GROUP;
> @@ -243,7 +243,7 @@ static StringRef getSectionPrefixForGlob
>  const MCSection *TargetLoweringObjectFileELF::
>  SelectSectionForGlobal(const GlobalValue *GV, SectionKind Kind,
>                         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
>    // global value to a uniqued section specifically for it.
>
> Added: llvm/trunk/test/CodeGen/X86/global-sections-comdat.ll
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/
> CodeGen/X86/global-sections-comdat.ll?rev=228196&view=auto
> ============================================================
> ==================
> --- llvm/trunk/test/CodeGen/X86/global-sections-comdat.ll (added)
> +++ llvm/trunk/test/CodeGen/X86/global-sections-comdat.ll Wed Feb  4
> 15:27:24 2015
> @@ -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
> + at G16 = unnamed_addr constant i32 42, comdat
> +
> +; LINUX: .section      .rodata.G16,"aG", at progbits,G16,comdat
> +; LINUX-SECTIONS: .section     .rodata.G16,"aG", at progbits,G16,comdat
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20150205/6599024f/attachment.html>


More information about the llvm-commits mailing list