1;;! target = "x86_64" 2;;! test = "compile" 3;;! flags = ["-Dguest-debug=yes"] 4;;! objdump = "--funcs all" 5 6(module 7 (func (export "main") (param i32 i32) (result i32) 8 local.get 0 9 local.get 1 10 i32.add)) 11;; wasm[0]::function[0]: 12;; pushq %rbp 13;; movq %rsp, %rbp 14;; subq $0x30, %rsp 15;; movq %rbx, 0x20(%rsp) 16;; movl %edx, 8(%rsp) 17;; movl %ecx, 0xc(%rsp) 18;; movq 8(%rdi), %rax 19;; movq 0x10(%rax), %rax 20;; movq %rsp, %r8 21;; cmpq %rax, %r8 22;; jb 0x62 23;; 29: movq %rdi, (%rsp) 24;; nopl (%rax, %rax) 25;; ├─╼ 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 26;; ╰─╼ breakpoint patch: wasm PC 36, patch bytes [232, 176, 1, 0, 0] 27;; movl %edx, 0x10(%rsp) 28;; nopl (%rax, %rax) 29;; ├─╼ 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 30;; ╰─╼ breakpoint patch: wasm PC 38, patch bytes [232, 167, 1, 0, 0] 31;; movl %ecx, 0x14(%rsp) 32;; nopl (%rax, %rax) 33;; ├─╼ 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 34;; ╰─╼ breakpoint patch: wasm PC 40, patch bytes [232, 158, 1, 0, 0] 35;; leal (%rdx, %rcx), %eax 36;; movl %eax, 0x10(%rsp) 37;; nopl (%rax, %rax) 38;; ├─╼ 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 39;; ╰─╼ breakpoint patch: wasm PC 41, patch bytes [232, 146, 1, 0, 0] 40;; movl %eax, 0x10(%rsp) 41;; movq 0x20(%rsp), %rbx 42;; addq $0x30, %rsp 43;; movq %rbp, %rsp 44;; popq %rbp 45;; retq 46;; 62: movq %rdi, %rbx 47;; 65: xorl %esi, %esi 48;; 67: callq 0x186 49;; 6c: movq %rbx, %rdi 50;; 6f: callq 0x1b6 51;; 74: ud2 52;; 53;; wasm[0]::array_to_wasm_trampoline[0]: 54;; pushq %rbp 55;; movq %rsp, %rbp 56;; subq $0x40, %rsp 57;; movq %rbx, 0x10(%rsp) 58;; movq %r12, 0x18(%rsp) 59;; movq %r13, 0x20(%rsp) 60;; movq %r14, 0x28(%rsp) 61;; movq %r15, 0x30(%rsp) 62;; movl (%rdx), %r10d 63;; movl 0x10(%rdx), %ecx 64;; movq %rdx, (%rsp) 65;; movq 8(%rdi), %r11 66;; movq %rbp, %rax 67;; movq %rax, 0x40(%r11) 68;; movq %rsp, %rax 69;; movq %rax, 0x38(%r11) 70;; leaq 0x39(%rip), %rax 71;; movq %rax, 0x48(%r11) 72;; movq %r10, %rdx 73;; callq 0 74;; ├─╼ exception frame offset: SP = FP - 0x40 75;; ╰─╼ exception handler: default handler, no dynamic context, handler=0xf3 76;; movq (%rsp), %rdx 77;; movl %eax, (%rdx) 78;; movl $1, %eax 79;; movq 0x10(%rsp), %rbx 80;; movq 0x18(%rsp), %r12 81;; movq 0x20(%rsp), %r13 82;; movq 0x28(%rsp), %r14 83;; movq 0x30(%rsp), %r15 84;; addq $0x40, %rsp 85;; movq %rbp, %rsp 86;; popq %rbp 87;; retq 88;; f3: xorl %eax, %eax 89;; f5: movq 0x10(%rsp), %rbx 90;; fa: movq 0x18(%rsp), %r12 91;; ff: movq 0x20(%rsp), %r13 92;; 104: movq 0x28(%rsp), %r14 93;; 109: movq 0x30(%rsp), %r15 94;; 10e: addq $0x40, %rsp 95;; 112: movq %rbp, %rsp 96;; 115: popq %rbp 97;; 116: retq 98;; 99;; signatures[0]::wasm_to_array_trampoline: 100;; pushq %rbp 101;; movq %rsp, %rbp 102;; subq $0x30, %rsp 103;; movq %r14, 0x20(%rsp) 104;; movq %rdx, %rax 105;; movq 8(%rsi), %r9 106;; movq %rbp, %r10 107;; movq %r10, 0x28(%r9) 108;; movq %rbp, %r10 109;; movq 8(%r10), %r11 110;; movq %r11, 0x30(%r9) 111;; leaq (%rsp), %rdx 112;; movq %rax, %r11 113;; movl %r11d, (%rsp) 114;; movl %ecx, 0x10(%rsp) 115;; movq 8(%rdi), %r8 116;; movl $2, %ecx 117;; movq %rsi, %r14 118;; callq *%r8 119;; testb %al, %al 120;; je 0x174 121;; 163: movl (%rsp), %eax 122;; movq 0x20(%rsp), %r14 123;; addq $0x30, %rsp 124;; movq %rbp, %rsp 125;; popq %rbp 126;; retq 127;; 174: movq 0x10(%r14), %rcx 128;; 178: movq 0x198(%rcx), %rcx 129;; 17f: movq %r14, %rdi 130;; 182: callq *%rcx 131;; 184: ud2 132;; 133;; wasmtime_builtin_trap: 134;; pushq %rbp 135;; movq %rsp, %rbp 136;; movq 8(%rdi), %rax 137;; movq %rbp, %rcx 138;; movq %rcx, 0x28(%rax) 139;; movq %rbp, %rcx 140;; movq 8(%rcx), %rcx 141;; movq %rcx, 0x30(%rax) 142;; movq 0x10(%rdi), %rax 143;; movq 0x190(%rax), %rax 144;; movzbq %sil, %rsi 145;; callq *%rax 146;; movq %rbp, %rsp 147;; popq %rbp 148;; retq 149;; 150;; wasmtime_builtin_raise: 151;; pushq %rbp 152;; movq %rsp, %rbp 153;; movq 8(%rdi), %r10 154;; movq %rbp, %r11 155;; movq %r11, 0x28(%r10) 156;; movq %rbp, %r11 157;; movq 8(%r11), %rsi 158;; movq %rsi, 0x30(%r10) 159;; movq 0x10(%rdi), %rsi 160;; movq 0x198(%rsi), %rsi 161;; callq *%rsi 162;; movq %rbp, %rsp 163;; popq %rbp 164;; retq 165;; 166;; wasmtime_patchable_builtin_breakpoint: 167;; pushq %rbp 168;; movq %rsp, %rbp 169;; subq $0x150, %rsp 170;; movq %rax, (%rsp) 171;; movq %rcx, 8(%rsp) 172;; movq %rdx, 0x10(%rsp) 173;; movq %rbx, 0x18(%rsp) 174;; movq %rsi, 0x20(%rsp) 175;; movq %rdi, 0x28(%rsp) 176;; movq %r8, 0x30(%rsp) 177;; movq %r9, 0x38(%rsp) 178;; movq %r10, 0x40(%rsp) 179;; movq %r11, 0x48(%rsp) 180;; movdqu %xmm0, 0x50(%rsp) 181;; movdqu %xmm1, 0x60(%rsp) 182;; movdqu %xmm2, 0x70(%rsp) 183;; movdqu %xmm3, 0x80(%rsp) 184;; movdqu %xmm4, 0x90(%rsp) 185;; movdqu %xmm5, 0xa0(%rsp) 186;; movdqu %xmm6, 0xb0(%rsp) 187;; movdqu %xmm7, 0xc0(%rsp) 188;; movdqu %xmm8, 0xd0(%rsp) 189;; movdqu %xmm9, 0xe0(%rsp) 190;; movdqu %xmm10, 0xf0(%rsp) 191;; movdqu %xmm11, 0x100(%rsp) 192;; movdqu %xmm12, 0x110(%rsp) 193;; movdqu %xmm13, 0x120(%rsp) 194;; movdqu %xmm14, 0x130(%rsp) 195;; movdqu %xmm15, 0x140(%rsp) 196;; movq 8(%rdi), %rax 197;; movq %rbp, %rcx 198;; movq %rcx, 0x28(%rax) 199;; movq %rbp, %rcx 200;; movq 8(%rcx), %rcx 201;; movq %rcx, 0x30(%rax) 202;; movq 0x10(%rdi), %rcx 203;; movq 0x1c8(%rcx), %rcx 204;; movq %rdi, %rbx 205;; callq *%rcx 206;; testb %al, %al 207;; je 0x3a7 208;; 2db: movq (%rsp), %rax 209;; movq 8(%rsp), %rcx 210;; movq 0x10(%rsp), %rdx 211;; movq 0x18(%rsp), %rbx 212;; movq 0x20(%rsp), %rsi 213;; movq 0x28(%rsp), %rdi 214;; movq 0x30(%rsp), %r8 215;; movq 0x38(%rsp), %r9 216;; movq 0x40(%rsp), %r10 217;; movq 0x48(%rsp), %r11 218;; movdqu 0x50(%rsp), %xmm0 219;; movdqu 0x60(%rsp), %xmm1 220;; movdqu 0x70(%rsp), %xmm2 221;; movdqu 0x80(%rsp), %xmm3 222;; movdqu 0x90(%rsp), %xmm4 223;; movdqu 0xa0(%rsp), %xmm5 224;; movdqu 0xb0(%rsp), %xmm6 225;; movdqu 0xc0(%rsp), %xmm7 226;; movdqu 0xd0(%rsp), %xmm8 227;; movdqu 0xe0(%rsp), %xmm9 228;; movdqu 0xf0(%rsp), %xmm10 229;; movdqu 0x100(%rsp), %xmm11 230;; movdqu 0x110(%rsp), %xmm12 231;; movdqu 0x120(%rsp), %xmm13 232;; movdqu 0x130(%rsp), %xmm14 233;; movdqu 0x140(%rsp), %xmm15 234;; addq $0x150, %rsp 235;; movq %rbp, %rsp 236;; popq %rbp 237;; retq 238;; 3a7: movq 0x10(%rbx), %r8 239;; 3ab: movq 0x198(%r8), %r8 240;; 3b2: movq %rbx, %rdi 241;; 3b5: callq *%r8 242;; 3b8: ud2 243