[PATCH] D36957: [ELF] - Make IR symbols be visible when doing relocatable link.

George Rimar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Tue Aug 22 01:38:09 PDT 2017


This revision was automatically updated to reflect the committed changes.
Closed by commit rL311431: [ELF] - Make IR symbols be visible when doing relocatable link. (authored by grimar).

Changed prior to commit:
  https://reviews.llvm.org/D36957?vs=111969&id=112121#toc

Repository:
  rL LLVM

https://reviews.llvm.org/D36957

Files:
  lld/trunk/ELF/LTO.cpp
  lld/trunk/test/ELF/lto/relocatable.ll


Index: lld/trunk/ELF/LTO.cpp
===================================================================
--- lld/trunk/ELF/LTO.cpp
+++ lld/trunk/ELF/LTO.cpp
@@ -144,7 +144,13 @@
     // be removed.
     R.Prevailing = !ObjSym.isUndefined() && B->getFile() == &F;
 
-    R.VisibleToRegularObj = Sym->IsUsedInRegularObj ||
+    // We ask LTO to preserve following global symbols:
+    // 1) All symbols when doing relocatable link, so that them can be used
+    //    for doing final link.
+    // 2) Symbols that are used in regular objects.
+    // 3) C named sections if we have corresponding __start_/__stop_ symbol.
+    // 4) Symbols that are defined in bitcode files and used for dynamic linking.
+    R.VisibleToRegularObj = Config->Relocatable || Sym->IsUsedInRegularObj ||
                             (R.Prevailing && Sym->includeInDynsym()) ||
                             UsedStartStop.count(ObjSym.getSectionName());
     if (R.Prevailing)
Index: lld/trunk/test/ELF/lto/relocatable.ll
===================================================================
--- lld/trunk/test/ELF/lto/relocatable.ll
+++ lld/trunk/test/ELF/lto/relocatable.ll
@@ -0,0 +1,55 @@
+; REQUIRES: x86
+; RUN: llvm-as %s -o %t1.o
+; RUN: ld.lld %t1.o -r -o %t
+; RUN: llvm-readobj -symbols %t | FileCheck %s
+
+; CHECK:       Symbols [
+; CHECK-NEXT:   Symbol {
+; CHECK-NEXT:     Name:
+; CHECK-NEXT:     Value: 0x0
+; CHECK-NEXT:     Size: 0
+; CHECK-NEXT:     Binding: Local
+; CHECK-NEXT:     Type: None
+; CHECK-NEXT:     Other: 0
+; CHECK-NEXT:     Section: Undefined
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Symbol {
+; CHECK-NEXT:     Name:
+; CHECK-NEXT:     Value: 0x0
+; CHECK-NEXT:     Size: 0
+; CHECK-NEXT:     Binding: Local
+; CHECK-NEXT:     Type: Section
+; CHECK-NEXT:     Other: 0
+; CHECK-NEXT:     Section: .text
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Symbol {
+; CHECK-NEXT:     Name:
+; CHECK-NEXT:     Value: 0x0
+; CHECK-NEXT:     Size: 0
+; CHECK-NEXT:     Binding: Local
+; CHECK-NEXT:     Type: Section
+; CHECK-NEXT:     Other: 0
+; CHECK-NEXT:     Section: .text.foo
+; CHECK-NEXT:   }
+; CHECK-NEXT:   Symbol {
+; CHECK-NEXT:     Name: foo
+; CHECK-NEXT:     Value: 0x0
+; CHECK-NEXT:     Size: 1
+; CHECK-NEXT:     Binding: Global
+; CHECK-NEXT:     Type: Function
+; CHECK-NEXT:     Other: 0
+; CHECK-NEXT:     Section: .text.foo
+; CHECK-NEXT:   }
+; CHECK-NEXT: ]
+
+target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
+target triple = "x86_64-unknown-linux-gnu"
+
+define void @foo() {
+  call void @bar()
+  ret void
+}
+
+define internal void @bar() {
+  ret void
+}


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D36957.112121.patch
Type: text/x-patch
Size: 2579 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170822/9ca28216/attachment.bin>


More information about the llvm-commits mailing list