1(module 2 (import "wasi_snapshot_preview1" "fd_write" 3 (func $fd_write (param i32 i32 i32 i32) (result i32))) 4 5 (import "wasi_snapshot_preview1" "environ_get" 6 (func $environ_get (param i32 i32) (result i32))) 7 8 (memory (export "memory") 1) 9 10 (func (export "_start") 11 (local $envptrs i32) 12 (local $envmem i32) 13 (local $env i32) 14 15 (local.set $envptrs (i32.mul (memory.grow (i32.const 1)) (i32.const 65536))) 16 (local.set $envmem (i32.mul (memory.grow (i32.const 1)) (i32.const 65536))) 17 18 (if (i32.ne 19 (call $environ_get (local.get $envptrs) (local.get $envmem)) 20 (i32.const 0)) 21 (then (unreachable))) 22 23 (loop 24 (local.set $env (i32.load (local.get $envptrs))) 25 (local.set $envptrs (i32.add (local.get $envptrs) (i32.const 4))) 26 (if (i32.eq (local.get $env) (i32.const 0)) (then (return))) 27 28 (call $write_all (local.get $env) (call $strlen (local.get $env))) 29 (call $write_all (i32.const 10) (i32.const 1)) 30 br 0 31 ) 32 ) 33 34 (func $write_all (param $ptr i32) (param $len i32) 35 (local $rc i32) 36 (local $iov i32) 37 (local $written i32) 38 39 (local.set $written (i32.const 80)) 40 (local.set $iov (i32.const 100)) 41 42 (loop 43 (local.get $len) 44 if 45 (i32.store (local.get $iov) (local.get $ptr)) 46 (i32.store offset=4 (local.get $iov) (local.get $len)) 47 (local.set $rc 48 (call $fd_write 49 (i32.const 1) 50 (local.get $iov) 51 (i32.const 1) 52 (local.get $written))) 53 (if (i32.ne (local.get $rc) (i32.const 0)) (then (unreachable))) 54 55 (local.set $len (i32.sub (local.get $len) (i32.load (local.get $written)))) 56 (local.set $ptr (i32.add (local.get $ptr) (i32.load (local.get $written)))) 57 end 58 ) 59 ) 60 61 (func $strlen (param $ptr i32) (result i32) 62 (local $len i32) 63 (loop 64 (i32.load8_u (i32.add (local.get $ptr) (local.get $len))) 65 if 66 (local.set $len (i32.add (local.get $len) (i32.const 1))) 67 br 1 68 end 69 ) 70 local.get $len 71 ) 72 73 (data (i32.const 10) "\n") 74) 75 76 77