summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/lld/longjmp.c17
-rw-r--r--test/lld/longjmp.wat136
-rw-r--r--test/lld/longjmp.wat.out223
-rw-r--r--test/lld/shared_longjmp.wat48
-rw-r--r--test/lld/shared_longjmp.wat.out46
5 files changed, 423 insertions, 47 deletions
diff --git a/test/lld/longjmp.c b/test/lld/longjmp.c
new file mode 100644
index 000000000..1df54f6f2
--- /dev/null
+++ b/test/lld/longjmp.c
@@ -0,0 +1,17 @@
+typedef struct jmp_buf_buf {
+ int thing;
+} jmp_buf;
+
+void longjmp(jmp_buf env, int val);
+int setjmp(jmp_buf env);
+
+int __THREW__;
+int __threwValue;
+
+int main() {
+ jmp_buf jmp;
+ if (setjmp(jmp) == 0) {
+ longjmp(jmp, 1);
+ }
+ return 0;
+}
diff --git a/test/lld/longjmp.wat b/test/lld/longjmp.wat
new file mode 100644
index 000000000..7241a298b
--- /dev/null
+++ b/test/lld/longjmp.wat
@@ -0,0 +1,136 @@
+(module
+ (type $i32_=>_none (func (param i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $none_=>_none (func))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
+ (import "env" "malloc" (func $fimport$0 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$1 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$2 (result i32)))
+ (import "env" "emscripten_longjmp_jmpbuf" (func $fimport$3 (param i32 i32)))
+ (import "env" "__invoke_void_i32_i32" (func $fimport$4 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$5 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$6 (param i32)))
+ (import "env" "free" (func $fimport$7 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$8 (param i32 i32)))
+ (memory $0 2)
+ (table $0 2 2 funcref)
+ (elem (i32.const 1) $fimport$3)
+ (global $global$0 (mut i32) (i32.const 66112))
+ (global $global$1 i32 (i32.const 576))
+ (export "memory" (memory $0))
+ (export "__wasm_call_ctors" (func $0))
+ (export "main" (func $2))
+ (export "__data_end" (global $global$1))
+ (func $0 (; 9 ;)
+ )
+ (func $1 (; 10 ;) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (i32.store
+ (local.tee $0
+ (call $fimport$0
+ (i32.const 40)
+ )
+ )
+ (i32.const 0)
+ )
+ (local.set $1
+ (call $fimport$1
+ (local.get $0)
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 4)
+ )
+ )
+ (local.set $2
+ (call $fimport$2)
+ )
+ (local.set $0
+ (i32.const 0)
+ )
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (br_if $label$2
+ (local.get $0)
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (call $fimport$4
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 1)
+ )
+ (local.set $0
+ (i32.load offset=568
+ (i32.const 0)
+ )
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (block $label$4
+ (br_if $label$4
+ (i32.eqz
+ (local.get $0)
+ )
+ )
+ (br_if $label$4
+ (i32.eqz
+ (local.tee $3
+ (i32.load offset=572
+ (i32.const 0)
+ )
+ )
+ )
+ )
+ (br_if $label$1
+ (i32.eqz
+ (call $fimport$5
+ (i32.load
+ (local.get $0)
+ )
+ (local.get $1)
+ (local.get $2)
+ )
+ )
+ )
+ (call $fimport$6
+ (local.get $3)
+ )
+ )
+ (local.set $0
+ (call $fimport$2)
+ )
+ (br $label$3)
+ )
+ )
+ (call $fimport$7
+ (local.get $1)
+ )
+ (return
+ (i32.const 0)
+ )
+ )
+ (call $fimport$8
+ (local.get $0)
+ (local.get $3)
+ )
+ (unreachable)
+ )
+ (func $2 (; 11 ;) (param $0 i32) (param $1 i32) (result i32)
+ (call $1)
+ )
+ ;; custom section "producers", size 112
+)
+
diff --git a/test/lld/longjmp.wat.out b/test/lld/longjmp.wat.out
new file mode 100644
index 000000000..1b6bbd341
--- /dev/null
+++ b/test/lld/longjmp.wat.out
@@ -0,0 +1,223 @@
+(module
+ (type $i32_=>_none (func (param i32)))
+ (type $none_=>_i32 (func (result i32)))
+ (type $i32_=>_i32 (func (param i32) (result i32)))
+ (type $i32_i32_=>_none (func (param i32 i32)))
+ (type $i32_i32_i32_=>_none (func (param i32 i32 i32)))
+ (type $none_=>_none (func))
+ (type $i32_i32_=>_i32 (func (param i32 i32) (result i32)))
+ (type $i32_i32_i32_=>_i32 (func (param i32 i32 i32) (result i32)))
+ (type $i32_i32_i32_i32_=>_i32 (func (param i32 i32 i32 i32) (result i32)))
+ (import "env" "malloc" (func $fimport$0 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$1 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$2 (result i32)))
+ (import "env" "invoke_vii" (func $fimport$4 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$5 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$6 (param i32)))
+ (import "env" "free" (func $fimport$7 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$8 (param i32 i32)))
+ (memory $0 2)
+ (table $0 2 2 funcref)
+ (elem (i32.const 1) $fimport$8)
+ (global $global$0 (mut i32) (i32.const 66112))
+ (global $global$1 i32 (i32.const 576))
+ (export "memory" (memory $0))
+ (export "__wasm_call_ctors" (func $0))
+ (export "main" (func $2))
+ (export "__data_end" (global $global$1))
+ (export "dynCall_vii" (func $dynCall_vii))
+ (export "stackSave" (func $stackSave))
+ (export "stackAlloc" (func $stackAlloc))
+ (export "stackRestore" (func $stackRestore))
+ (export "__growWasmMemory" (func $__growWasmMemory))
+ (func $0 (; 8 ;)
+ (nop)
+ )
+ (func $1 (; 9 ;) (result i32)
+ (local $0 i32)
+ (local $1 i32)
+ (local $2 i32)
+ (local $3 i32)
+ (i32.store
+ (local.tee $0
+ (call $fimport$0
+ (i32.const 40)
+ )
+ )
+ (i32.const 0)
+ )
+ (local.set $1
+ (call $fimport$1
+ (local.get $0)
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 4)
+ )
+ )
+ (local.set $2
+ (call $fimport$2)
+ )
+ (local.set $0
+ (i32.const 0)
+ )
+ (block $label$1
+ (block $label$2
+ (loop $label$3
+ (br_if $label$2
+ (local.get $0)
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (call $fimport$4
+ (i32.const 1)
+ (local.get $0)
+ (i32.const 1)
+ )
+ (local.set $0
+ (i32.load offset=568
+ (i32.const 0)
+ )
+ )
+ (i32.store offset=568
+ (i32.const 0)
+ (i32.const 0)
+ )
+ (block $label$4
+ (br_if $label$4
+ (i32.eqz
+ (local.get $0)
+ )
+ )
+ (br_if $label$4
+ (i32.eqz
+ (local.tee $3
+ (i32.load offset=572
+ (i32.const 0)
+ )
+ )
+ )
+ )
+ (br_if $label$1
+ (i32.eqz
+ (call $fimport$5
+ (i32.load
+ (local.get $0)
+ )
+ (local.get $1)
+ (local.get $2)
+ )
+ )
+ )
+ (call $fimport$6
+ (local.get $3)
+ )
+ )
+ (local.set $0
+ (call $fimport$2)
+ )
+ (br $label$3)
+ )
+ )
+ (call $fimport$7
+ (local.get $1)
+ )
+ (return
+ (i32.const 0)
+ )
+ )
+ (call $fimport$8
+ (local.get $0)
+ (local.get $3)
+ )
+ (unreachable)
+ )
+ (func $2 (; 10 ;) (param $0 i32) (param $1 i32) (result i32)
+ (call $1)
+ )
+ (func $dynCall_vii (; 11 ;) (param $fptr i32) (param $0 i32) (param $1 i32)
+ (call_indirect (type $i32_i32_=>_none)
+ (local.get $0)
+ (local.get $1)
+ (local.get $fptr)
+ )
+ )
+ (func $stackSave (; 12 ;) (result i32)
+ (global.get $global$0)
+ )
+ (func $stackAlloc (; 13 ;) (param $0 i32) (result i32)
+ (local $1 i32)
+ (global.set $global$0
+ (local.tee $1
+ (i32.and
+ (i32.sub
+ (global.get $global$0)
+ (local.get $0)
+ )
+ (i32.const -16)
+ )
+ )
+ )
+ (local.get $1)
+ )
+ (func $stackRestore (; 14 ;) (param $0 i32)
+ (global.set $global$0
+ (local.get $0)
+ )
+ )
+ (func $__growWasmMemory (; 15 ;) (param $newSize i32) (result i32)
+ (memory.grow
+ (local.get $newSize)
+ )
+ )
+)
+(;
+--BEGIN METADATA --
+{
+ "staticBump": 8,
+ "tableSize": 2,
+ "initializers": [
+ "__wasm_call_ctors"
+ ],
+ "declares": [
+ "malloc",
+ "saveSetjmp",
+ "getTempRet0",
+ "testSetjmp",
+ "setTempRet0",
+ "free",
+ "emscripten_longjmp"
+ ],
+ "externs": [
+ ],
+ "implementedFunctions": [
+ "___wasm_call_ctors",
+ "_main",
+ "_dynCall_vii",
+ "_stackSave",
+ "_stackAlloc",
+ "_stackRestore",
+ "___growWasmMemory"
+ ],
+ "exports": [
+ "__wasm_call_ctors",
+ "main",
+ "dynCall_vii",
+ "stackSave",
+ "stackAlloc",
+ "stackRestore",
+ "__growWasmMemory"
+ ],
+ "namedGlobals": {
+ "__data_end" : "576"
+ },
+ "invokeFuncs": [
+ "invoke_vii"
+ ],
+ "features": [
+ ],
+ "mainReadsParams": 0
+}
+-- END METADATA --
+;)
diff --git a/test/lld/shared_longjmp.wat b/test/lld/shared_longjmp.wat
index 235e1fadf..b5179676c 100644
--- a/test/lld/shared_longjmp.wat
+++ b/test/lld/shared_longjmp.wat
@@ -15,41 +15,41 @@
(import "GOT.mem" "__THREW__" (global $gimport$13 (mut i32)))
(import "GOT.func" "emscripten_longjmp_jmpbuf" (global $gimport$14 (mut i32)))
(import "GOT.mem" "__threwValue" (global $gimport$15 (mut i32)))
- (import "env" "malloc" (func $malloc (param i32) (result i32)))
- (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32)))
- (import "env" "getTempRet0" (func $getTempRet0 (result i32)))
- (import "env" "emscripten_longjmp_jmpbuf" (func $emscripten_longjmp_jmpbuf (param i32 i32)))
- (import "env" "__invoke_void_i32_i32" (func $__invoke_void_i32_i32 (param i32 i32 i32)))
- (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32)))
- (import "env" "setTempRet0" (func $setTempRet0 (param i32)))
- (import "env" "free" (func $free (param i32)))
- (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32)))
+ (import "env" "malloc" (func $fimport$4 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$5 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$6 (result i32)))
+ (import "env" "emscripten_longjmp_jmpbuf" (func $fimport$7 (param i32 i32)))
+ (import "env" "__invoke_void_i32_i32" (func $fimport$8 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$9 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$10 (param i32)))
+ (import "env" "free" (func $fimport$11 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$12 (param i32 i32)))
(global $global$0 i32 (i32.const 0))
(global $global$1 i32 (i32.const 4))
- (export "__wasm_call_ctors" (func $__wasm_call_ctors))
- (export "_start" (func $_start))
+ (export "__wasm_call_ctors" (func $0))
+ (export "_start" (func $2))
(export "__THREW__" (global $global$0))
(export "__threwValue" (global $global$1))
- (func $__wasm_call_ctors (; 9 ;) (type $7)
- (call $__wasm_apply_relocs)
+ (func $0 (; 9 ;) (type $7)
+ (call $1)
)
- (func $__wasm_apply_relocs (; 10 ;) (type $7)
+ (func $1 (; 10 ;) (type $7)
)
- (func $_start (; 11 ;) (type $7)
+ (func $2 (; 11 ;) (type $7)
(local $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(i32.store
(local.tee $0
- (call $malloc
+ (call $fimport$4
(i32.const 40)
)
)
(i32.const 0)
)
(local.set $1
- (call $saveSetjmp
+ (call $fimport$5
(local.get $0)
(i32.const 1)
(local.get $0)
@@ -57,7 +57,7 @@
)
)
(local.set $2
- (call $getTempRet0)
+ (call $fimport$6)
)
(local.set $0
(i32.const 0)
@@ -74,7 +74,7 @@
)
(i32.const 0)
)
- (call $__invoke_void_i32_i32
+ (call $fimport$8
(global.get $gimport$14)
(local.get $0)
(i32.const 1)
@@ -108,7 +108,7 @@
)
(br_if $label$1
(i32.eqz
- (call $testSetjmp
+ (call $fimport$9
(i32.load
(local.get $3)
)
@@ -117,22 +117,22 @@
)
)
)
- (call $setTempRet0
+ (call $fimport$10
(local.get $0)
)
)
(local.set $0
- (call $getTempRet0)
+ (call $fimport$6)
)
(br $label$3)
)
)
- (call $free
+ (call $fimport$11
(local.get $1)
)
(return)
)
- (call $emscripten_longjmp
+ (call $fimport$12
(local.get $3)
(local.get $0)
)
diff --git a/test/lld/shared_longjmp.wat.out b/test/lld/shared_longjmp.wat.out
index 083fcb3cc..871e26b27 100644
--- a/test/lld/shared_longjmp.wat.out
+++ b/test/lld/shared_longjmp.wat.out
@@ -12,14 +12,14 @@
(import "env" "table" (table $0 0 funcref))
(import "env" "__memory_base" (global $gimport$2 i32))
(import "env" "__table_base" (global $gimport$3 i32))
- (import "env" "malloc" (func $malloc (param i32) (result i32)))
- (import "env" "saveSetjmp" (func $saveSetjmp (param i32 i32 i32 i32) (result i32)))
- (import "env" "getTempRet0" (func $getTempRet0 (result i32)))
- (import "env" "invoke_vii" (func $invoke_vii (param i32 i32 i32)))
- (import "env" "testSetjmp" (func $testSetjmp (param i32 i32 i32) (result i32)))
- (import "env" "setTempRet0" (func $setTempRet0 (param i32)))
- (import "env" "free" (func $free (param i32)))
- (import "env" "emscripten_longjmp" (func $emscripten_longjmp (param i32 i32)))
+ (import "env" "malloc" (func $fimport$4 (param i32) (result i32)))
+ (import "env" "saveSetjmp" (func $fimport$5 (param i32 i32 i32 i32) (result i32)))
+ (import "env" "getTempRet0" (func $fimport$6 (result i32)))
+ (import "env" "invoke_vii" (func $fimport$8 (param i32 i32 i32)))
+ (import "env" "testSetjmp" (func $fimport$9 (param i32 i32 i32) (result i32)))
+ (import "env" "setTempRet0" (func $fimport$10 (param i32)))
+ (import "env" "free" (func $fimport$11 (param i32)))
+ (import "env" "emscripten_longjmp" (func $fimport$12 (param i32 i32)))
(import "env" "g$__THREW__" (func $g$__THREW__ (result i32)))
(import "env" "g$__threwValue" (func $g$__threwValue (result i32)))
(import "env" "fp$emscripten_longjmp$vii" (func $fp$emscripten_longjmp$vii (result i32)))
@@ -28,32 +28,32 @@
(global $gimport$15 (mut i32) (i32.const 0))
(global $global$0 i32 (i32.const 0))
(global $global$1 i32 (i32.const 4))
- (export "_start" (func $_start))
+ (export "_start" (func $2))
(export "__THREW__" (global $global$0))
(export "__threwValue" (global $global$1))
(export "dynCall_vii" (func $dynCall_vii))
(export "__post_instantiate" (func $__post_instantiate))
- (func $__wasm_call_ctors (; 11 ;)
- (call $__wasm_apply_relocs)
+ (func $0 (; 11 ;)
+ (call $1)
)
- (func $__wasm_apply_relocs (; 12 ;)
+ (func $1 (; 12 ;)
(nop)
)
- (func $_start (; 13 ;)
+ (func $2 (; 13 ;)
(local $0 i32)
(local $1 i32)
(local $2 i32)
(local $3 i32)
(i32.store
(local.tee $0
- (call $malloc
+ (call $fimport$4
(i32.const 40)
)
)
(i32.const 0)
)
(local.set $1
- (call $saveSetjmp
+ (call $fimport$5
(local.get $0)
(i32.const 1)
(local.get $0)
@@ -61,7 +61,7 @@
)
)
(local.set $2
- (call $getTempRet0)
+ (call $fimport$6)
)
(local.set $0
(i32.const 0)
@@ -78,7 +78,7 @@
)
(i32.const 0)
)
- (call $invoke_vii
+ (call $fimport$8
(global.get $gimport$14)
(local.get $0)
(i32.const 1)
@@ -112,7 +112,7 @@
)
(br_if $label$1
(i32.eqz
- (call $testSetjmp
+ (call $fimport$9
(i32.load
(local.get $3)
)
@@ -121,22 +121,22 @@
)
)
)
- (call $setTempRet0
+ (call $fimport$10
(local.get $0)
)
)
(local.set $0
- (call $getTempRet0)
+ (call $fimport$6)
)
(br $label$3)
)
)
- (call $free
+ (call $fimport$11
(local.get $1)
)
(return)
)
- (call $emscripten_longjmp
+ (call $fimport$12
(local.get $3)
(local.get $0)
)
@@ -151,7 +151,7 @@
)
(func $__post_instantiate (; 15 ;)
(call $__assign_got_enties)
- (call $__wasm_call_ctors)
+ (call $0)
)
(func $__assign_got_enties (; 16 ;)
(global.set $gimport$13