;;! target = "x86_64"
;;! test = "compile"
;;! flags = ["-Dguest-debug=yes"]
;;! objdump = "--funcs all"
(module
(func (export "main") (param i32 i32) (result i32)
local.get 0
local.get 1
i32.add))
;; wasm[0]::function[0]:
;; pushq %rbp
;; movq %rsp, %rbp
;; subq $0x30, %rsp
;; movq %rbx, 0x20(%rsp)
;; movl %edx, 8(%rsp)
;; movl %ecx, 0xc(%rsp)
;; movq 8(%rdi), %rax
;; movq 0x10(%rax), %rax
;; movq %rsp, %r8
;; cmpq %rax, %r8
;; jb 0x62
;; 29: movq %rdi, (%rsp)
;; nopl (%rax, %rax)
;; ├─╼ debug frame state (after previous inst): func key DefinedWasmFunction(StaticModuleIndex(0), DefinedFuncIndex(0)), wasm PC 36, slot at FP-0x30, locals I32 @ slot+0x8, I32 @ slot+0xc, stack
;; ╰─╼ breakpoint patch: wasm PC 36, patch bytes [232, 176, 1, 0, 0]
;; movl %edx, 0x10(%rsp)
;; nopl (%rax, %rax)
;; ├─╼ debug frame state (after previous inst): func key DefinedWasmFunction(StaticModuleIndex(0), DefinedFuncIndex(0)), wasm PC 38, slot at FP-0x30, locals I32 @ slot+0x8, I32 @ slot+0xc, stack I32 @ slot+0x10
;; ╰─╼ breakpoint patch: wasm PC 38, patch bytes [232, 167, 1, 0, 0]
;; movl %ecx, 0x14(%rsp)
;; nopl (%rax, %rax)
;; ├─╼ debug frame state (after previous inst): func key DefinedWasmFunction(StaticModuleIndex(0), DefinedFuncIndex(0)), wasm PC 40, slot at FP-0x30, locals I32 @ slot+0x8, I32 @ slot+0xc, stack I32 @ slot+0x10, I32 @ slot+0x14
;; ╰─╼ breakpoint patch: wasm PC 40, patch bytes [232, 158, 1, 0, 0]
;; leal (%rdx, %rcx), %eax
;; movl %eax, 0x10(%rsp)
;; nopl (%rax, %rax)
;; ├─╼ debug frame state (after previous inst): func key DefinedWasmFunction(StaticModuleIndex(0), DefinedFuncIndex(0)), wasm PC 41, slot at FP-0x30, locals I32 @ slot+0x8, I32 @ slot+0xc, stack I32 @ slot+0x10
;; ╰─╼ breakpoint patch: wasm PC 41, patch bytes [232, 146, 1, 0, 0]
;; movl %eax, 0x10(%rsp)
;; movq 0x20(%rsp), %rbx
;; addq $0x30, %rsp
;; movq %rbp, %rsp
;; popq %rbp
;; retq
;; 62: movq %rdi, %rbx
;; 65: xorl %esi, %esi
;; 67: callq 0x186
;; 6c: movq %rbx, %rdi
;; 6f: callq 0x1b6
;; 74: ud2
;;
;; wasm[0]::array_to_wasm_trampoline[0]:
;; pushq %rbp
;; movq %rsp, %rbp
;; subq $0x40, %rsp
;; movq %rbx, 0x10(%rsp)
;; movq %r12, 0x18(%rsp)
;; movq %r13, 0x20(%rsp)
;; movq %r14, 0x28(%rsp)
;; movq %r15, 0x30(%rsp)
;; movl (%rdx), %r10d
;; movl 0x10(%rdx), %ecx
;; movq %rdx, (%rsp)
;; movq 8(%rdi), %r11
;; movq %rbp, %rax
;; movq %rax, 0x40(%r11)
;; movq %rsp, %rax
;; movq %rax, 0x38(%r11)
;; leaq 0x39(%rip), %rax
;; movq %rax, 0x48(%r11)
;; movq %r10, %rdx
;; callq 0
;; ├─╼ exception frame offset: SP = FP - 0x40
;; ╰─╼ exception handler: default handler, no dynamic context, handler=0xf3
;; movq (%rsp), %rdx
;; movl %eax, (%rdx)
;; movl $1, %eax
;; movq 0x10(%rsp), %rbx
;; movq 0x18(%rsp), %r12
;; movq 0x20(%rsp), %r13
;; movq 0x28(%rsp), %r14
;; movq 0x30(%rsp), %r15
;; addq $0x40, %rsp
;; movq %rbp, %rsp
;; popq %rbp
;; retq
;; f3: xorl %eax, %eax
;; f5: movq 0x10(%rsp), %rbx
;; fa: movq 0x18(%rsp), %r12
;; ff: movq 0x20(%rsp), %r13
;; 104: movq 0x28(%rsp), %r14
;; 109: movq 0x30(%rsp), %r15
;; 10e: addq $0x40, %rsp
;; 112: movq %rbp, %rsp
;; 115: popq %rbp
;; 116: retq
;;
;; signatures[0]::wasm_to_array_trampoline:
;; pushq %rbp
;; movq %rsp, %rbp
;; subq $0x30, %rsp
;; movq %r14, 0x20(%rsp)
;; movq %rdx, %rax
;; movq 8(%rsi), %r9
;; movq %rbp, %r10
;; movq %r10, 0x28(%r9)
;; movq %rbp, %r10
;; movq 8(%r10), %r11
;; movq %r11, 0x30(%r9)
;; leaq (%rsp), %rdx
;; movq %rax, %r11
;; movl %r11d, (%rsp)
;; movl %ecx, 0x10(%rsp)
;; movq 8(%rdi), %r8
;; movl $2, %ecx
;; movq %rsi, %r14
;; callq *%r8
;; testb %al, %al
;; je 0x174
;; 163: movl (%rsp), %eax
;; movq 0x20(%rsp), %r14
;; addq $0x30, %rsp
;; movq %rbp, %rsp
;; popq %rbp
;; retq
;; 174: movq 0x10(%r14), %rcx
;; 178: movq 0x198(%rcx), %rcx
;; 17f: movq %r14, %rdi
;; 182: callq *%rcx
;; 184: ud2
;;
;; wasmtime_builtin_trap:
;; pushq %rbp
;; movq %rsp, %rbp
;; movq 8(%rdi), %rax
;; movq %rbp, %rcx
;; movq %rcx, 0x28(%rax)
;; movq %rbp, %rcx
;; movq 8(%rcx), %rcx
;; movq %rcx, 0x30(%rax)
;; movq 0x10(%rdi), %rax
;; movq 0x190(%rax), %rax
;; movzbq %sil, %rsi
;; callq *%rax
;; movq %rbp, %rsp
;; popq %rbp
;; retq
;;
;; wasmtime_builtin_raise:
;; pushq %rbp
;; movq %rsp, %rbp
;; movq 8(%rdi), %r10
;; movq %rbp, %r11
;; movq %r11, 0x28(%r10)
;; movq %rbp, %r11
;; movq 8(%r11), %rsi
;; movq %rsi, 0x30(%r10)
;; movq 0x10(%rdi), %rsi
;; movq 0x198(%rsi), %rsi
;; callq *%rsi
;; movq %rbp, %rsp
;; popq %rbp
;; retq
;;
;; wasmtime_patchable_builtin_breakpoint:
;; pushq %rbp
;; movq %rsp, %rbp
;; subq $0x150, %rsp
;; movq %rax, (%rsp)
;; movq %rcx, 8(%rsp)
;; movq %rdx, 0x10(%rsp)
;; movq %rbx, 0x18(%rsp)
;; movq %rsi, 0x20(%rsp)
;; movq %rdi, 0x28(%rsp)
;; movq %r8, 0x30(%rsp)
;; movq %r9, 0x38(%rsp)
;; movq %r10, 0x40(%rsp)
;; movq %r11, 0x48(%rsp)
;; movdqu %xmm0, 0x50(%rsp)
;; movdqu %xmm1, 0x60(%rsp)
;; movdqu %xmm2, 0x70(%rsp)
;; movdqu %xmm3, 0x80(%rsp)
;; movdqu %xmm4, 0x90(%rsp)
;; movdqu %xmm5, 0xa0(%rsp)
;; movdqu %xmm6, 0xb0(%rsp)
;; movdqu %xmm7, 0xc0(%rsp)
;; movdqu %xmm8, 0xd0(%rsp)
;; movdqu %xmm9, 0xe0(%rsp)
;; movdqu %xmm10, 0xf0(%rsp)
;; movdqu %xmm11, 0x100(%rsp)
;; movdqu %xmm12, 0x110(%rsp)
;; movdqu %xmm13, 0x120(%rsp)
;; movdqu %xmm14, 0x130(%rsp)
;; movdqu %xmm15, 0x140(%rsp)
;; movq 8(%rdi), %rax
;; movq %rbp, %rcx
;; movq %rcx, 0x28(%rax)
;; movq %rbp, %rcx
;; movq 8(%rcx), %rcx
;; movq %rcx, 0x30(%rax)
;; movq 0x10(%rdi), %rcx
;; movq 0x1c8(%rcx), %rcx
;; movq %rdi, %rbx
;; callq *%rcx
;; testb %al, %al
;; je 0x3a7
;; 2db: movq (%rsp), %rax
;; movq 8(%rsp), %rcx
;; movq 0x10(%rsp), %rdx
;; movq 0x18(%rsp), %rbx
;; movq 0x20(%rsp), %rsi
;; movq 0x28(%rsp), %rdi
;; movq 0x30(%rsp), %r8
;; movq 0x38(%rsp), %r9
;; movq 0x40(%rsp), %r10
;; movq 0x48(%rsp), %r11
;; movdqu 0x50(%rsp), %xmm0
;; movdqu 0x60(%rsp), %xmm1
;; movdqu 0x70(%rsp), %xmm2
;; movdqu 0x80(%rsp), %xmm3
;; movdqu 0x90(%rsp), %xmm4
;; movdqu 0xa0(%rsp), %xmm5
;; movdqu 0xb0(%rsp), %xmm6
;; movdqu 0xc0(%rsp), %xmm7
;; movdqu 0xd0(%rsp), %xmm8
;; movdqu 0xe0(%rsp), %xmm9
;; movdqu 0xf0(%rsp), %xmm10
;; movdqu 0x100(%rsp), %xmm11
;; movdqu 0x110(%rsp), %xmm12
;; movdqu 0x120(%rsp), %xmm13
;; movdqu 0x130(%rsp), %xmm14
;; movdqu 0x140(%rsp), %xmm15
;; addq $0x150, %rsp
;; movq %rbp, %rsp
;; popq %rbp
;; retq
;; 3a7: movq 0x10(%rbx), %r8
;; 3ab: movq 0x198(%r8), %r8
;; 3b2: movq %rbx, %rdi
;; 3b5: callq *%r8
;; 3b8: ud2