[llvm] r335304 - [X86] Fix 32-bit mingw comdat names, only add one underscore

Reid Kleckner via llvm-commits llvm-commits at lists.llvm.org
Thu Jun 21 16:06:33 PDT 2018


Author: rnk
Date: Thu Jun 21 16:06:33 2018
New Revision: 335304

URL: http://llvm.org/viewvc/llvm-project?rev=335304&view=rev
Log:
[X86] Fix 32-bit mingw comdat names, only add one underscore

Modified:
    llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
    llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
    llvm/trunk/test/CodeGen/X86/mingw-comdats.ll

Modified: llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h?rev=335304&r1=335303&r2=335304&view=diff
==============================================================================
--- llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h (original)
+++ llvm/trunk/include/llvm/CodeGen/TargetLoweringObjectFileImpl.h Thu Jun 21 16:06:33 2018
@@ -134,11 +134,6 @@ public:
 class TargetLoweringObjectFileCOFF : public TargetLoweringObjectFile {
   mutable unsigned NextUniqueID = 0;
 
-  /// Append "$symbol" to the section name when targetting mingw. The ld.bfd
-  /// COFF linker will not properly handle comdats otherwise.
-  void appendComdatSymbolForMinGW(SmallVectorImpl<char> &SecName,
-                                  StringRef Symbol, const DataLayout &DL) const;
-
 public:
   ~TargetLoweringObjectFileCOFF() override = default;
 

Modified: llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp?rev=335304&r1=335303&r2=335304&view=diff
==============================================================================
--- llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp (original)
+++ llvm/trunk/lib/CodeGen/TargetLoweringObjectFileImpl.cpp Thu Jun 21 16:06:33 2018
@@ -1072,15 +1072,6 @@ static StringRef getCOFFSectionNameForUn
   return ".data";
 }
 
-void TargetLoweringObjectFileCOFF::appendComdatSymbolForMinGW(
-    SmallVectorImpl<char> &SecName, StringRef Symbol,
-    const DataLayout &DL) const {
-  if (getTargetTriple().isWindowsGNUEnvironment()) {
-    SecName.push_back('$');
-    getMangler().getNameWithPrefix(SecName, Symbol, DL);
-  }
-}
-
 MCSection *TargetLoweringObjectFileCOFF::SelectSectionForGlobal(
     const GlobalObject *GO, SectionKind Kind, const TargetMachine &TM) const {
   // If we have -ffunction-sections then we should emit the global value to a
@@ -1113,8 +1104,12 @@ MCSection *TargetLoweringObjectFileCOFF:
     if (!ComdatGV->hasPrivateLinkage()) {
       MCSymbol *Sym = TM.getSymbol(ComdatGV);
       StringRef COMDATSymName = Sym->getName();
-      appendComdatSymbolForMinGW(Name, COMDATSymName,
-                                 GO->getParent()->getDataLayout());
+
+      // Append "$symbol" to the section name when targetting mingw. The ld.bfd
+      // COFF linker will not properly handle comdats otherwise.
+      if (getTargetTriple().isWindowsGNUEnvironment())
+        raw_svector_ostream(Name) << '$' << COMDATSymName;
+
       return getContext().getCOFFSection(Name, Characteristics, Kind,
                                          COMDATSymName, Selection, UniqueID);
     } else {

Modified: llvm/trunk/test/CodeGen/X86/mingw-comdats.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/CodeGen/X86/mingw-comdats.ll?rev=335304&r1=335303&r2=335304&view=diff
==============================================================================
--- llvm/trunk/test/CodeGen/X86/mingw-comdats.ll (original)
+++ llvm/trunk/test/CodeGen/X86/mingw-comdats.ll Thu Jun 21 16:06:33 2018
@@ -1,6 +1,7 @@
 ; RUN: llc -mtriple=x86_64-windows-itanium < %s | FileCheck %s
 ; RUN: llc -mtriple=x86_64-windows-msvc < %s | FileCheck %s
 ; RUN: llc -mtriple=x86_64-w64-windows-gnu < %s | FileCheck %s --check-prefix=GNU
+; RUN: llc -mtriple=i686-w64-windows-gnu < %s | FileCheck %s --check-prefix=GNU32
 ; RUN: llc -mtriple=x86_64-w64-windows-gnu < %s -filetype=obj | llvm-objdump - -headers | FileCheck %s --check-prefix=GNUOBJ
 
 ; GCC and MSVC handle comdats completely differently. Make sure we do the right
@@ -49,6 +50,13 @@ entry:
 ; GNU: gv:
 ; GNU: .long 42
 
+; GNU32: .section        .text$__Z3fooi,"xr",discard,__Z3fooi
+; GNU32: __Z3fooi:
+; GNU32: .section        .data$_gv,"dw",discard,_gv
+; GNU32: _gv:
+; GNU32: .long 42
+
+
 ; Make sure the assembler puts the .xdata and .pdata in sections with the right
 ; names.
 ; GNUOBJ: .text$_Z3fooi




More information about the llvm-commits mailing list