diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/lld/longjmp.c | 17 | ||||
-rw-r--r-- | test/lld/longjmp.wat | 136 | ||||
-rw-r--r-- | test/lld/longjmp.wat.out | 223 | ||||
-rw-r--r-- | test/lld/shared_longjmp.wat | 48 | ||||
-rw-r--r-- | test/lld/shared_longjmp.wat.out | 46 |
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 |