[lld][WebAssembly] Convert more tests to assembly. NFC (#184418)
The only expectations change here is that `__stack_pointer` is no longer exports in the `archive-export.test` test. This is because we don't enable the mutable-globals feature (since the assembly files don't contains all the now-default features of the generic CPU).
This commit is contained in:
parent
3b4d5ffe84
commit
928505c983
@ -1,9 +0,0 @@
|
||||
target triple = "wasm32-unknown-unknown"
|
||||
|
||||
declare i32 @bar() local_unnamed_addr #1
|
||||
|
||||
define i32 @foo() local_unnamed_addr #0 {
|
||||
entry:
|
||||
%call = tail call i32 @bar() #2
|
||||
ret i32 %call
|
||||
}
|
||||
7
lld/test/wasm/Inputs/archive1.s
Normal file
7
lld/test/wasm/Inputs/archive1.s
Normal file
@ -0,0 +1,7 @@
|
||||
.functype bar () -> (i32)
|
||||
|
||||
.globl foo
|
||||
foo:
|
||||
.functype foo () -> (i32)
|
||||
call bar
|
||||
end_function
|
||||
@ -1,14 +0,0 @@
|
||||
target triple = "wasm32-unknown-unknown"
|
||||
|
||||
declare i32 @foo() local_unnamed_addr #1
|
||||
|
||||
define i32 @bar() local_unnamed_addr #0 {
|
||||
entry:
|
||||
%call = tail call i32 @foo() #2
|
||||
ret i32 %call
|
||||
}
|
||||
|
||||
define void @archive2_symbol() local_unnamed_addr #0 {
|
||||
entry:
|
||||
ret void
|
||||
}
|
||||
12
lld/test/wasm/Inputs/archive2.s
Normal file
12
lld/test/wasm/Inputs/archive2.s
Normal file
@ -0,0 +1,12 @@
|
||||
.functype foo () -> (i32)
|
||||
|
||||
.globl bar
|
||||
bar:
|
||||
.functype bar () -> (i32)
|
||||
call foo
|
||||
end_function
|
||||
|
||||
.globl archive2_symbol
|
||||
archive2_symbol:
|
||||
.functype archive2_symbol () -> ()
|
||||
end_function
|
||||
@ -1,11 +0,0 @@
|
||||
target triple = "wasm32-unknown-unknown"
|
||||
|
||||
define i32 @bar() local_unnamed_addr #0 {
|
||||
entry:
|
||||
ret i32 1
|
||||
}
|
||||
|
||||
define void @archive3_symbol() local_unnamed_addr #0 {
|
||||
entry:
|
||||
ret void
|
||||
}
|
||||
10
lld/test/wasm/Inputs/archive3.s
Normal file
10
lld/test/wasm/Inputs/archive3.s
Normal file
@ -0,0 +1,10 @@
|
||||
.globl bar
|
||||
bar:
|
||||
.functype bar () -> (i32)
|
||||
i32.const 1
|
||||
end_function
|
||||
|
||||
.globl archive3_symbol
|
||||
archive3_symbol:
|
||||
.functype archive3_symbol () -> ()
|
||||
end_function
|
||||
@ -1,22 +1,19 @@
|
||||
Test that --export will also fetch lazy symbols from archives
|
||||
|
||||
RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/start.s -o %t.o
|
||||
RUN: llc -filetype=obj %S/Inputs/archive1.ll -o %t.a1.o
|
||||
RUN: llc -filetype=obj %S/Inputs/archive2.ll -o %t.a2.o
|
||||
RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %S/Inputs/archive1.s -o %t.a1.o
|
||||
RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %S/Inputs/archive2.s -o %t.a2.o
|
||||
RUN: rm -f %t.a
|
||||
RUN: llvm-ar rcs %t.a %t.a1.o %t.a2.o
|
||||
RUN: wasm-ld --export-dynamic --export=archive2_symbol -o %t.wasm %t.a %t.o
|
||||
RUN: obj2yaml %t.wasm | FileCheck %s
|
||||
RUN: wasm-ld --export-dynamic -o %t.wasm %t.a %t.o
|
||||
RUN: obj2yaml %t.wasm | FileCheck %s -check-prefix=NOEXPORT
|
||||
RUN: wasm-ld --export-dynamic -o %t.noexport.wasm %t.a %t.o
|
||||
RUN: obj2yaml %t.noexport.wasm | FileCheck %s -check-prefix=NOEXPORT
|
||||
|
||||
CHECK: Exports:
|
||||
CHECK-NEXT: - Name: memory
|
||||
CHECK-NEXT: Kind: MEMORY
|
||||
CHECK-NEXT: Index: 0
|
||||
CHECK-NEXT: - Name: __stack_pointer
|
||||
CHECK-NEXT: Kind: GLOBAL
|
||||
CHECK-NEXT: Index: 0
|
||||
CHECK-NEXT: - Name: foo
|
||||
CHECK-NEXT: Kind: FUNCTION
|
||||
CHECK-NEXT: Index: 1
|
||||
|
||||
@ -1,54 +0,0 @@
|
||||
; RUN: llc -filetype=obj %s -o %t.o
|
||||
; RUN: llc -filetype=obj %S/Inputs/archive1.ll -o %t.a1.o
|
||||
; RUN: llc -filetype=obj %S/Inputs/archive2.ll -o %t.a2.o
|
||||
; RUN: llc -filetype=obj %S/Inputs/archive3.ll -o %t.a3.o
|
||||
; RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/hello.s -o %t.hello.o
|
||||
; RUN: rm -f %t.a
|
||||
; RUN: llvm-ar rcs %t.a %t.a1.o %t.a2.o %t.a3.o %t.hello.o
|
||||
; RUN: rm -f %t.imports
|
||||
; RUN: not wasm-ld %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED %s
|
||||
|
||||
; CHECK-UNDEFINED: undefined symbol: missing_func
|
||||
|
||||
; RUN: echo 'missing_func' > %t.imports
|
||||
; RUN: wasm-ld -r %t.a %t.o -o %t.wasm
|
||||
|
||||
; RUN: llvm-nm -a %t.wasm | FileCheck %s
|
||||
|
||||
target triple = "wasm32-unknown-unknown"
|
||||
|
||||
declare i32 @foo() local_unnamed_addr #1
|
||||
declare i32 @missing_func() local_unnamed_addr #1
|
||||
|
||||
define void @_start() local_unnamed_addr #0 {
|
||||
entry:
|
||||
%call1 = call i32 @foo() #2
|
||||
%call2 = call i32 @missing_func() #2
|
||||
ret void
|
||||
}
|
||||
|
||||
; Verify that mutually dependant object files in an archive is handled
|
||||
; correctly. Since we're using llvm-nm, we must link with --relocatable.
|
||||
;
|
||||
; TODO(ncw): Update LLD so that the symbol table is written out for
|
||||
; non-relocatable output (with an option to strip it)
|
||||
|
||||
; CHECK: 00000016 T _start
|
||||
; CHECK-NEXT: 0000000a T archive2_symbol
|
||||
; CHECK-NEXT: 00000001 T bar
|
||||
; CHECK-NEXT: 0000000d T foo
|
||||
; CHECK-NEXT: U missing_func
|
||||
|
||||
; Verify that symbols from unused objects don't appear in the symbol table
|
||||
; CHECK-NOT: hello
|
||||
|
||||
; Specifying the same archive twice is allowed.
|
||||
; RUN: wasm-ld %t.a %t.a %t.o -o %t.wasm
|
||||
|
||||
; Verfiy errors include library name
|
||||
; RUN: not wasm-ld -u archive2_symbol -u archive3_symbol %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-DUP %s
|
||||
; And that this also works with --whole-archive
|
||||
; RUN: not wasm-ld -u archive2_symbol -u archive3_symbol --whole-archive %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-DUP %s
|
||||
; CHECK-DUP: error: duplicate symbol: bar
|
||||
; CHECK-DUP: >>> defined in {{.*}}.a({{.*}}.a2.o)
|
||||
; CHECK-DUP: >>> defined in {{.*}}.a({{.*}}.a3.o)
|
||||
53
lld/test/wasm/archive.s
Normal file
53
lld/test/wasm/archive.s
Normal file
@ -0,0 +1,53 @@
|
||||
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -filetype=obj %s -o %t.o
|
||||
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -filetype=obj %S/Inputs/archive1.s -o %t.a1.o
|
||||
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -filetype=obj %S/Inputs/archive2.s -o %t.a2.o
|
||||
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown -filetype=obj %S/Inputs/archive3.s -o %t.a3.o
|
||||
# RUN: llvm-mc -filetype=obj -triple=wasm32-unknown-unknown %p/Inputs/hello.s -o %t.hello.o
|
||||
# RUN: rm -f %t.a
|
||||
# RUN: llvm-ar rcs %t.a %t.a1.o %t.a2.o %t.a3.o %t.hello.o
|
||||
# RUN: rm -f %t.imports
|
||||
# RUN: not wasm-ld %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-UNDEFINED %s
|
||||
|
||||
# CHECK-UNDEFINED: undefined symbol: missing_func
|
||||
|
||||
# RUN: echo 'missing_func' > %t.imports
|
||||
# RUN: wasm-ld -r %t.a %t.o -o %t.wasm
|
||||
|
||||
# RUN: llvm-nm -a %t.wasm | FileCheck %s
|
||||
|
||||
.functype foo () -> (i32)
|
||||
.functype missing_func () -> ()
|
||||
|
||||
.globl _start
|
||||
_start:
|
||||
.functype _start () -> ()
|
||||
call foo
|
||||
drop
|
||||
call missing_func
|
||||
end_function
|
||||
|
||||
# Verify that mutually dependant object files in an archive is handled
|
||||
# correctly. Since we're using llvm-nm, we must link with --relocatable.
|
||||
#
|
||||
# TODO(ncw): Update LLD so that the symbol table is written out for
|
||||
# non-relocatable output (with an option to strip it)
|
||||
|
||||
# CHECK: 00000016 T _start
|
||||
# CHECK-NEXT: 0000000a T archive2_symbol
|
||||
# CHECK-NEXT: 00000001 T bar
|
||||
# CHECK-NEXT: 0000000d T foo
|
||||
# CHECK-NEXT: U missing_func
|
||||
|
||||
# Verify that symbols from unused objects don't appear in the symbol table
|
||||
# CHECK-NOT: hello
|
||||
|
||||
# Specifying the same archive twice is allowed.
|
||||
# RUN: wasm-ld %t.a %t.a %t.o -o %t.wasm
|
||||
|
||||
# Verfiy errors include library name
|
||||
# RUN: not wasm-ld -u archive2_symbol -u archive3_symbol %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-DUP %s
|
||||
# And that this also works with --whole-archive
|
||||
# RUN: not wasm-ld -u archive2_symbol -u archive3_symbol --whole-archive %t.a %t.o -o %t.wasm 2>&1 | FileCheck -check-prefix=CHECK-DUP %s
|
||||
# CHECK-DUP: error: duplicate symbol: bar
|
||||
# CHECK-DUP: >>> defined in {{.*}}.a({{.*}}.a2.o)
|
||||
# CHECK-DUP: >>> defined in {{.*}}.a({{.*}}.a3.o)
|
||||
Loading…
x
Reference in New Issue
Block a user