[lld] r267007 - [LTO] An interesting case which shows up how we handle common symbols.
Davide Italiano via llvm-commits
llvm-commits at lists.llvm.org
Thu Apr 21 10:11:39 PDT 2016
Author: davide
Date: Thu Apr 21 12:11:39 2016
New Revision: 267007
URL: http://llvm.org/viewvc/llvm-project?rev=267007&view=rev
Log:
[LTO] An interesting case which shows up how we handle common symbols.
The gold plugin logic for common symbols is a little bit convoluted
as the plugin API has not an explicit way to update the alignment.
In gold, then, we need to keep the bitcode symbol @a around because
that's the only way to get the alignment right in the final object.
In lld, this is not true. We already have all the informations we
need about common symbols (size/alignment) so we don't have to
keep the existing symbol and pass it to the mover.
Added:
lld/trunk/test/ELF/lto/common2.ll
Added: lld/trunk/test/ELF/lto/common2.ll
URL: http://llvm.org/viewvc/llvm-project/lld/trunk/test/ELF/lto/common2.ll?rev=267007&view=auto
==============================================================================
--- lld/trunk/test/ELF/lto/common2.ll (added)
+++ lld/trunk/test/ELF/lto/common2.ll Thu Apr 21 12:11:39 2016
@@ -0,0 +1,24 @@
+; RUN: llvm-as %s -o %t1.o
+; RUN: ld.lld -m elf_x86_64 %t1.o -o %t -shared -save-temps
+; RUN: llvm-dis < %t.lto.bc | FileCheck %s
+; RUN: llvm-readobj -t %t | FileCheck %s --check-prefix=SHARED
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+ at a = common global i8 0, align 8
+
+; Shared library case, we ensure that the bitcode generated file
+; has not the a symbol but is appears in the final shared library
+; produced.
+; CHECK-NOT: @a = common global i8 0, align 8
+
+; SHARED: Symbol {
+; SHARED: Name: a
+; SHARED-NEXT: Value: 0x2000
+; SHARED-NEXT: Size: 1
+; SHARED-NEXT: Binding: Global
+; SHARED-NEXT: Type: None
+; SHARED-NEXT: Other: 0
+; SHARED-NEXT: Section: .bss
+; SHARED-NEXT: }
More information about the llvm-commits
mailing list