
This matches the behavior of the ELF linker where -u/--undefined means symbols will get pulled in from archives but won't result in link error if they are missing. Also, don't actually great symbol table entries for the undefined symbols, again matching more closely the ELF linker. This also results in simplification of the code. Differential Revision: https://reviews.llvm.org/D50279 llvm-svn: 338938
39 lines
1.6 KiB
Plaintext
39 lines
1.6 KiB
Plaintext
; Verify that the -u / --undefined option is able to pull in symbols from
|
|
; an archive, and doesn't error when uses to pull in a symbol already loaded.
|
|
;
|
|
; RUN: llc -filetype=obj %S/Inputs/ret64.ll -o %t.o
|
|
; RUN: llc -filetype=obj %S/Inputs/ret32.ll -o %t2.o
|
|
; RUN: llc -filetype=obj %S/Inputs/start.ll -o %t.start.o
|
|
; RUN: rm -f %t2.a
|
|
; RUN: llvm-ar rcs %t2.a %t2.o
|
|
; RUN: wasm-ld %t.start.o --no-gc-sections %t2.a %t.o -o %t.wasm -u ret32 --undefined ret64
|
|
; RUN: obj2yaml %t.wasm | FileCheck %s
|
|
; RUN: wasm-ld %t.start.o --no-gc-sections %t2.a %t.o -o %t2.wasm
|
|
; RUN: obj2yaml %t2.wasm | FileCheck %s -check-prefix=NO-LOAD
|
|
|
|
; CHECK: Name: name
|
|
; CHECK-NEXT: FunctionNames:
|
|
; CHECK-NEXT: - Index: 0
|
|
; CHECK-NEXT: Name: __wasm_call_ctors
|
|
; CHECK-NEXT: - Index: 1
|
|
; CHECK-NEXT: Name: _start
|
|
; CHECK-NEXT: - Index: 2
|
|
; CHECK-NEXT: Name: ret64
|
|
; CHECK-NEXT: - Index: 3
|
|
; CHECK-NEXT: Name: ret32
|
|
; CHECK-NEXT: ...
|
|
|
|
; NO-LOAD: Name: name
|
|
; NO-LOAD-NEXT: FunctionNames:
|
|
; NO-LOAD-NEXT: - Index: 0
|
|
; NO-LOAD-NEXT: Name: __wasm_call_ctors
|
|
; NO-LOAD-NEXT: - Index: 1
|
|
; NO-LOAD-NEXT: Name: _start
|
|
; NO-LOAD-NEXT: - Index: 2
|
|
; NO-LOAD-NEXT: Name: ret64
|
|
; NO-LOAD-NEXT: ...
|
|
|
|
; Verify that referencing a symbol that is not found doesn't result in a link
|
|
; failure. This matches the behaviour of the ELF linker.
|
|
; RUN: wasm-ld %t.start.o -o %t.wasm -u symboldoesnotexist
|