forked from OSchip/llvm-project
[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: 339049
This commit is contained in:
parent
434ef8335e
commit
214d69975c
|
@ -1413,11 +1413,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);
|
||||
|
|
|
@ -0,0 +1,5 @@
|
|||
.globl foo
|
||||
.data
|
||||
.p2align 2, 0
|
||||
foo:
|
||||
.long 42
|
|
@ -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
|
Loading…
Reference in New Issue