[ELF] - Make IR symbols be visible when doing relocatable link.
This is PR33097. Previously when doing relocatable link, all IR symbols were absent in result object file. Patch makes external symbols to be exported. Differential revision: https://reviews.llvm.org/D36957 llvm-svn: 311431
This commit is contained in:
parent
ffe62e3ae9
commit
3a1af22099
|
@ -144,7 +144,13 @@ void BitcodeCompiler::add(BitcodeFile &F) {
|
|||
// 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)
|
||||
|
|
|
@ -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
|
||||
}
|
Loading…
Reference in New Issue