NAME=WASM: Wasm - open
FILE=bins/wasm/basic.wasm
CMDS=q!
EXPECT=<<EOF
EOF
RUN

NAME=WASM: Wasm - dotnet open
FILE=bins/wasm/dotnet.wasm
CMDS=<<EOF
i
EOF
EXPECT=<<EOF
fd       3
file     bins/wasm/dotnet.wasm
size     0x2ae89a
humansz  2.7M
mode     r-x
format   wasm
iorw     false
block    0x100
type     EXEC
arch     wasm
baddr    0x0
binsz    2812058
bintype  wasm
bits     32
canary   false
injprot  false
retguard false
class    module
crypto   false
endian   little
havecode true
laddr    0x0
linenum  false
lsyms    false
machine  wasm
nx       false
os       WebAssembly
pic      false
relocs   false
sanitize false
static   true
stripped false
subsys   wasm
va       false
EOF
RUN

NAME=WASM: Wasm - detection
FILE=bins/wasm/basic.wasm
CMDS=iI~os
EXPECT=<<EOF
os       WebAssembly
EOF
RUN

NAME=WASM: Wasm - entrypoint
FILE=bins/wasm/start.wasm
CMDS=ie~vaddr
EXPECT=<<EOF
vaddr=0x0000002d paddr=0x0000002d haddr=-1 type=program
EOF
RUN

NAME=WASM: Wasm - sections
FILE=bins/wasm/binary.wasm
CMDS=iS
EXPECT=<<EOF
[Sections]

nth paddr        size vaddr       vsize perm type name
------------------------------------------------------
0   0x0000000a   0x11 0x0000000a   0x11 ---- ---- type
1   0x0000001d   0x2d 0x0000001d   0x2d ---- ---- function
2   0x0000004d  0x1dd 0x0000004d  0x1dd ---- ---- export
3   0x0000022d  0x1f7 0x0000022d  0x1f7 ---- ---- code

EOF
RUN

NAME=WASM: Functions are renamed from custom name section
FILE=bins/wasm/sections.wasm
CMDS=aa;afl
EXPECT=<<EOF
0x00000207    1      3 entry0
0x00000516    1     19 sym.emscripten_stack_init
0x0000023d    4    209 sym.main
0x0000032d    2    126 sym.atoi_via_import
0x000003b9    2     54 sym.static_int_sum
0x000003f1    3     15 sym._start
0x000004ab    1      3 sym.__original_main
0x00000415    9    148 sym.__main_void
0x000004df    1     11 sym.exit
0x000004b0    1      1 sym.dummy
0x000004b5    5     40 sym.libc_exit_fini
0x000004ed    1      5 sym._Exit
0x00000403    1      7 sym.main_2e_1
0x000004f5    1      3 sym.stackSave
0x000004fa    1      5 sym.stackRestore
0x00000505    1     15 sym.stackAlloc
0x0000052b    1      6 sym.emscripten_stack_get_free
0x00000533    1      3 sym.emscripten_stack_get_base
0x00000538    1      3 sym.emscripten_stack_get_end
0x0000053d    1      4 sym.__errno_location
EOF
RUN

NAME=WASM Export functions with custom section
FILE=bins/wasm/sections.wasm
CMDS=iE
EXPECT=<<EOF
[Exports]
nth paddr      vaddr      bind   type size lib name                      demangled
----------------------------------------------------------------------------------
8   0x000003f1 0x000003f1 GLOBAL FUNC 16       _start
16  0x000004f5 0x000004f5 GLOBAL FUNC 3        stackSave
17  0x000004fa 0x000004fa GLOBAL FUNC 5        stackRestore
18  0x00000505 0x00000505 GLOBAL FUNC 15       stackAlloc
19  0x00000516 0x00000516 GLOBAL FUNC 19       emscripten_stack_init
20  0x0000052b 0x0000052b GLOBAL FUNC 6        emscripten_stack_get_free
21  0x00000533 0x00000533 GLOBAL FUNC 3        emscripten_stack_get_base
22  0x00000538 0x00000538 GLOBAL FUNC 3        emscripten_stack_get_end
23  0x0000053d 0x0000053d GLOBAL FUNC 4        __errno_location
EOF
RUN

NAME=WASM Export functions w/o custom section
FILE=bins/wasm/unary.wasm
CMDS=iE
EXPECT=<<EOF
[Exports]
nth paddr      vaddr      bind   type size lib name                demangled
----------------------------------------------------------------------------
2   0x000001d2 0x000001d2 GLOBAL FUNC 5        i32_eqz_100
3   0x000001d9 0x000001d9 GLOBAL FUNC 4        i32_eqz_0
4   0x000001df 0x000001df GLOBAL FUNC 5        i32_clz
5   0x000001e6 0x000001e6 GLOBAL FUNC 5        i32_ctz
6   0x000001ed 0x000001ed GLOBAL FUNC 5        i32_popcnt
7   0x000001f4 0x000001f4 GLOBAL FUNC 5        i64_eqz_100
8   0x000001fb 0x000001fb GLOBAL FUNC 4        i64_eqz_0
9   0x00000201 0x00000201 GLOBAL FUNC 5        i64_clz
10  0x00000208 0x00000208 GLOBAL FUNC 5        i64_ctz
11  0x0000020f 0x0000020f GLOBAL FUNC 5        i64_popcnt
12  0x00000216 0x00000216 GLOBAL FUNC 7        f32_neg
13  0x0000021f 0x0000021f GLOBAL FUNC 7        f32_abs
14  0x00000228 0x00000228 GLOBAL FUNC 9        f32_sqrt_neg_is_nan
15  0x00000233 0x00000233 GLOBAL FUNC 7        f32_sqrt_100
16  0x0000023c 0x0000023c GLOBAL FUNC 7        f32_ceil
17  0x00000245 0x00000245 GLOBAL FUNC 7        f32_floor
18  0x0000024e 0x0000024e GLOBAL FUNC 7        f32_trunc
19  0x00000257 0x00000257 GLOBAL FUNC 7        f32_nearest_lo
20  0x00000260 0x00000260 GLOBAL FUNC 7        f32_nearest_hi
21  0x00000269 0x00000269 GLOBAL FUNC 11       f64_neg
22  0x00000276 0x00000276 GLOBAL FUNC 11       f64_abs
23  0x00000283 0x00000283 GLOBAL FUNC 13       f64_sqrt_neg_is_nan
24  0x00000292 0x00000292 GLOBAL FUNC 11       f64_sqrt_100
25  0x0000029f 0x0000029f GLOBAL FUNC 11       f64_ceil
26  0x000002ac 0x000002ac GLOBAL FUNC 11       f64_floor
27  0x000002b9 0x000002b9 GLOBAL FUNC 11       f64_trunc
28  0x000002c6 0x000002c6 GLOBAL FUNC 11       f64_nearest_lo
29  0x000002d3 0x000002d3 GLOBAL FUNC 11       f64_nearest_hi
EOF
RUN

NAME=WASM get function offset
FILE=bins/wasm/sections.wasm
CMDS=<<EOF
s 0x2e8
pd 2~sym.static_int_sum[4]
EOF
EXPECT=<<EOF
0x3b9
EOF
RUN

NAME=WASM check all symbols
FILE=bins/wasm/sections.wasm
CMDS=<<EOF
is
EOF
EXPECT=<<EOF
[Symbols]
nth paddr      vaddr      bind   type size lib                    name                         demangled
--------------------------------------------------------------------------------------------------------
0   ---------- ---------- NONE   FUNC 0    env                    imp.emscripten_asm_const_int
1   ---------- ---------- NONE   FUNC 0    wasi_snapshot_preview1 imp.args_sizes_get
2   ---------- ---------- NONE   FUNC 0    wasi_snapshot_preview1 imp.args_get
3   ---------- ---------- NONE   FUNC 0    wasi_snapshot_preview1 imp.proc_exit
4   0x00000207 0x00000207 NONE   FUNC 3                           __wasm_call_ctors
5   0x0000023d 0x0000023d NONE   FUNC 209                         main
6   0x0000032d 0x0000032d NONE   FUNC 126                         atoi_via_import
7   0x000003b9 0x000003b9 NONE   FUNC 54                          static_int_sum
8   0x000003f1 0x000003f1 GLOBAL FUNC 16                          _start
9   0x00000403 0x00000403 NONE   FUNC 7                           main_2e_1
10  0x00000415 0x00000415 NONE   FUNC 148                         __main_void
11  0x000004ab 0x000004ab NONE   FUNC 3                           __original_main
12  0x000004b0 0x000004b0 NONE   FUNC 1                           dummy
13  0x000004b5 0x000004b5 NONE   FUNC 40                          libc_exit_fini
14  0x000004df 0x000004df NONE   FUNC 12                          exit
15  0x000004ed 0x000004ed NONE   FUNC 6                           _Exit
16  0x000004f5 0x000004f5 GLOBAL FUNC 3                           stackSave
17  0x000004fa 0x000004fa GLOBAL FUNC 5                           stackRestore
18  0x00000505 0x00000505 GLOBAL FUNC 15                          stackAlloc
19  0x00000516 0x00000516 GLOBAL FUNC 19                          emscripten_stack_init
20  0x0000052b 0x0000052b GLOBAL FUNC 6                           emscripten_stack_get_free
21  0x00000533 0x00000533 GLOBAL FUNC 3                           emscripten_stack_get_base
22  0x00000538 0x00000538 GLOBAL FUNC 3                           emscripten_stack_get_end
23  0x0000053d 0x0000053d GLOBAL FUNC 4                           __errno_location
0   0x000000f8 0x000000f8 NONE   i32  4                           global.0
1   0x00000100 0x00000100 NONE   i32  4                           global.1
2   0x00000105 0x00000105 NONE   i32  4                           global.2
3   0x0000010a 0x0000010a NONE   i32  4                           global.3
4   0x00000110 0x00000110 NONE   i32  4                           global.4
EOF
RUN
