
This puts handling of undefined symbols in a single location. Its also more in line with the ELF backend which only reports undefined symbols based on relocations. One side effect is that we no longer report undefined symbols that are only referenced in GC'd sections. This also fixes a crash reported in the emscripten toolchain: https://github.com/emscripten-core/emscripten/issues/8930. Differential Revision: https://reviews.llvm.org/D64280 llvm-svn: 365553
28 lines
905 B
LLVM
28 lines
905 B
LLVM
; RUN: llc -filetype=obj %s -o %t.o
|
|
; RUN: wasm-ld --allow-undefined -o %t.wasm %t.o
|
|
|
|
; Fails due to undefined 'foo'
|
|
; RUN: not wasm-ld --undefined=baz -o %t.wasm %t.o 2>&1 | FileCheck %s
|
|
; CHECK: error: {{.*}}.o: undefined symbol: foo
|
|
; CHECK-NOT: undefined symbol: baz
|
|
|
|
; Succeeds if we pass a file containing 'foo' as --allow-undefined-file.
|
|
; RUN: echo 'foo' > %t.txt
|
|
; RUN: wasm-ld --allow-undefined-file=%t.txt -o %t.wasm %t.o
|
|
|
|
; Succeeds even if a missing symbol is added via --export
|
|
; RUN: wasm-ld --allow-undefined --export=xxx -o %t.wasm %t.o
|
|
|
|
target triple = "wasm32-unknown-unknown"
|
|
|
|
; Takes the address of the external foo() resulting in undefined external
|
|
@bar = global i8* bitcast (i32 ()* @foo to i8*), align 4
|
|
@llvm.used = appending global [1 x i8**] [i8** @bar], section "llvm.metadata"
|
|
|
|
declare i32 @foo() #0
|
|
|
|
define hidden void @_start() local_unnamed_addr #0 {
|
|
entry:
|
|
ret void
|
|
}
|