[lld] r339049 - [COFF] Remove a superfluous warning about aligncomm for non-common symbols

Martin Storsjo via llvm-commits llvm-commits at lists.llvm.org
Mon Aug 6 12:49:18 PDT 2018


Author: mstorsjo
Date: Mon Aug  6 12:49:18 2018
New Revision: 339049

URL: http://llvm.org/viewvc/llvm-project?rev=339049&view=rev
Log:
[COFF] Remove a superfluous warning about aligncomm for non-common symbols

It's not an error if a common symbol (uninitialized data, with alignment
specified via the aligncomm directive) is replaced with a regular
one with initialized data (with alignment specified via the section
chunk).

Differential Revision: https://reviews.llvm.org/D50268

Added:
    lld/trunk/test/COFF/Inputs/common-replacement.s
    lld/trunk/test/COFF/common-replacement.s
Modified:
    lld/trunk/COFF/Driver.cpp

Modified: lld/trunk/COFF/Driver.cpp
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/COFF/Driver.cpp?rev=339049&r1=339048&r2=339049&view=diff
==============================================================================
--- lld/trunk/COFF/Driver.cpp (original)
+++ lld/trunk/COFF/Driver.cpp Mon Aug  6 12:49:18 2018
@@ -1413,11 +1413,11 @@ void LinkerDriver::link(ArrayRef<const c
       continue;
     }
 
+    // If the symbol isn't common, it must have been replaced with a regular
+    // symbol, which will carry its own alignment.
     auto *DC = dyn_cast<DefinedCommon>(Sym);
-    if (!DC) {
-      warn("/aligncomm symbol " + Name + " of wrong kind");
+    if (!DC)
       continue;
-    }
 
     CommonChunk *C = DC->getChunk();
     C->Alignment = std::max(C->Alignment, Alignment);

Added: lld/trunk/test/COFF/Inputs/common-replacement.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/Inputs/common-replacement.s?rev=339049&view=auto
==============================================================================
--- lld/trunk/test/COFF/Inputs/common-replacement.s (added)
+++ lld/trunk/test/COFF/Inputs/common-replacement.s Mon Aug  6 12:49:18 2018
@@ -0,0 +1,5 @@
+        .globl          foo
+        .data
+        .p2align        2, 0
+foo:
+        .long           42

Added: lld/trunk/test/COFF/common-replacement.s
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/COFF/common-replacement.s?rev=339049&view=auto
==============================================================================
--- lld/trunk/test/COFF/common-replacement.s (added)
+++ lld/trunk/test/COFF/common-replacement.s Mon Aug  6 12:49:18 2018
@@ -0,0 +1,35 @@
+# REQUIRES: x86
+
+# RUN: llvm-mc -triple=x86_64-windows-gnu %s -filetype=obj -o %t1.obj
+# RUN: llvm-mc -triple=x86_64-windows-gnu %S/Inputs/common-replacement.s -filetype=obj -o %t2.obj
+
+# RUN: lld-link -lldmingw -entry:main %t1.obj %t2.obj -out:%t.exe -verbose 2>&1 \
+# RUN:   | FileCheck -check-prefix VERBOSE %s
+# RUN: llvm-readobj -s %t.exe | FileCheck -check-prefix SECTIONS %s
+
+# VERBOSE: -aligncomm:"foo",2
+
+# As long as the .comm symbol is replaced with actual data, RawDataSize
+# below should be nonzero.
+
+# SECTIONS:         Name: .data (2E 64 61 74 61 00 00 00)
+# SECTIONS-NEXT:    VirtualSize: 0x8
+# SECTIONS-NEXT:    VirtualAddress: 0x2000
+# SECTIONS-NEXT:    RawDataSize: 512
+
+
+        .text
+        .def            main;
+        .scl            2;
+        .type           32;
+        .endef
+        .globl          main
+        .p2align        4, 0x90
+main:
+        movl            foo(%rip), %eax
+        retq
+
+# This produces an aligncomm directive, but when linking in
+# Inputs/common-replacement.s, this symbol is replaced by a normal defined
+# symbol instead.
+        .comm           foo, 4, 2




More information about the llvm-commits mailing list