summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Wennborg <hans@hanshq.net>2018-08-14 08:59:56 +0000
committerHans Wennborg <hans@hanshq.net>2018-08-14 08:59:56 +0000
commit6141c26486bcf57b88b09ade9eff2a4ff3a06f6e (patch)
treed315709460be717ec7fea8c87cec67d9a9eadd2d
parent9b38a730d1f2f7c01b758e2df5fd95387944a832 (diff)
downloadbcm5719-llvm-6141c26486bcf57b88b09ade9eff2a4ff3a06f6e.tar.gz
bcm5719-llvm-6141c26486bcf57b88b09ade9eff2a4ff3a06f6e.zip
Merging r339049:
------------------------------------------------------------------------ r339049 | mstorsjo | 2018-08-06 21:49:18 +0200 (Mon, 06 Aug 2018) | 8 lines [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 ------------------------------------------------------------------------ llvm-svn: 339658
-rw-r--r--lld/COFF/Driver.cpp6
-rw-r--r--lld/test/COFF/Inputs/common-replacement.s5
-rw-r--r--lld/test/COFF/common-replacement.s35
3 files changed, 43 insertions, 3 deletions
diff --git a/lld/COFF/Driver.cpp b/lld/COFF/Driver.cpp
index eefdb48bead..da7527607ff 100644
--- a/lld/COFF/Driver.cpp
+++ b/lld/COFF/Driver.cpp
@@ -1551,11 +1551,11 @@ void LinkerDriver::link(ArrayRef<const char *> ArgsArr) {
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);
diff --git a/lld/test/COFF/Inputs/common-replacement.s b/lld/test/COFF/Inputs/common-replacement.s
new file mode 100644
index 00000000000..eaaeee2a3d3
--- /dev/null
+++ b/lld/test/COFF/Inputs/common-replacement.s
@@ -0,0 +1,5 @@
+ .globl foo
+ .data
+ .p2align 2, 0
+foo:
+ .long 42
diff --git a/lld/test/COFF/common-replacement.s b/lld/test/COFF/common-replacement.s
new file mode 100644
index 00000000000..51e31fa167c
--- /dev/null
+++ b/lld/test/COFF/common-replacement.s
@@ -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
OpenPOWER on IntegriCloud