diff options
| author | Hans Wennborg <hans@hanshq.net> | 2018-08-14 08:59:56 +0000 |
|---|---|---|
| committer | Hans Wennborg <hans@hanshq.net> | 2018-08-14 08:59:56 +0000 |
| commit | 6141c26486bcf57b88b09ade9eff2a4ff3a06f6e (patch) | |
| tree | d315709460be717ec7fea8c87cec67d9a9eadd2d | |
| parent | 9b38a730d1f2f7c01b758e2df5fd95387944a832 (diff) | |
| download | bcm5719-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.cpp | 6 | ||||
| -rw-r--r-- | lld/test/COFF/Inputs/common-replacement.s | 5 | ||||
| -rw-r--r-- | lld/test/COFF/common-replacement.s | 35 |
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 |

