// 3bc480b524d1c776f6f7bb3d9ee65a20ad73c4639ba3cc8630ab943d6ca72cae // $ /usr/bin/python3.13 /builddir/build/BUILD/Python-3.13.0b1/Tools/jit/build.py x86_64-redhat-linux-gnu --debug void emit__BINARY_OP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX _PyEval_BinaryOps-0x4 // f: 48 8b 04 c1 movq (%rcx,%rax,8), %rax // 13: 48 85 c0 testq %rax, %rax // 16: 0f 84 b7 00 00 00 je 0xd3 <_JIT_ENTRY+0xd3> // 1c: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 20: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 24: 4c 89 ff movq %r15, %rdi // 27: 4c 89 f6 movq %r14, %rsi // 2a: ff d0 callq *%rax // 2c: 48 89 c3 movq %rax, %rbx // 2f: 49 8b 07 movq (%r15), %rax // 32: 48 85 c0 testq %rax, %rax // 35: 7e 06 jle 0x3d <_JIT_ENTRY+0x3d> // 37: 85 c0 testl %eax, %eax // 39: 79 1e jns 0x59 <_JIT_ENTRY+0x59> // 3b: eb 27 jmp 0x64 <_JIT_ENTRY+0x64> // 3d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_PC32 .L.str.1-0x4 // 44: be 3a 10 00 00 movl $0x103a, %esi # imm = 0x103A // 49: 4c 89 fa movq %r15, %rdx // 4c: ff 15 00 00 00 00 callq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 52: 49 8b 07 movq (%r15), %rax // 55: 85 c0 testl %eax, %eax // 57: 78 0b js 0x64 <_JIT_ENTRY+0x64> // 59: ff 15 00 00 00 00 callq *(%rip) # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5f: 49 ff 0f decq (%r15) // 62: 74 0e je 0x72 <_JIT_ENTRY+0x72> // 64: 49 8b 06 movq (%r14), %rax // 67: 48 85 c0 testq %rax, %rax // 6a: 7e 17 jle 0x83 <_JIT_ENTRY+0x83> // 6c: 85 c0 testl %eax, %eax // 6e: 79 2f jns 0x9f <_JIT_ENTRY+0x9f> // 70: eb 38 jmp 0xaa <_JIT_ENTRY+0xaa> // 72: 4c 89 ff movq %r15, %rdi // 75: ff 15 00 00 00 00 callq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 7b: 49 8b 06 movq (%r14), %rax // 7e: 48 85 c0 testq %rax, %rax // 81: 7f e9 jg 0x6c <_JIT_ENTRY+0x6c> // 83: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x8a <_JIT_ENTRY+0x8a> // 0000000000000086: R_X86_64_PC32 .L.str.1-0x4 // 8a: be 3b 10 00 00 movl $0x103b, %esi # imm = 0x103B // 8f: 4c 89 f2 movq %r14, %rdx // 92: ff 15 00 00 00 00 callq *(%rip) # 0x98 <_JIT_ENTRY+0x98> // 0000000000000094: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 98: 49 8b 06 movq (%r14), %rax // 9b: 85 c0 testl %eax, %eax // 9d: 78 0b js 0xaa <_JIT_ENTRY+0xaa> // 9f: ff 15 00 00 00 00 callq *(%rip) # 0xa5 <_JIT_ENTRY+0xa5> // 00000000000000a1: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // a5: 49 ff 0e decq (%r14) // a8: 74 14 je 0xbe <_JIT_ENTRY+0xbe> // aa: 48 85 db testq %rbx, %rbx // ad: 74 1d je 0xcc <_JIT_ENTRY+0xcc> // af: 48 89 5d f0 movq %rbx, -0x10(%rbp) // b3: 48 83 c5 f8 addq $-0x8, %rbp // b7: 58 popq %rax // b8: ff 25 00 00 00 00 jmpq *(%rip) # 0xbe <_JIT_ENTRY+0xbe> // 00000000000000ba: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // be: 4c 89 f7 movq %r14, %rdi // c1: ff 15 00 00 00 00 callq *(%rip) # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // c7: 48 85 db testq %rbx, %rbx // ca: 75 e3 jne 0xaf <_JIT_ENTRY+0xaf> // cc: 58 popq %rax // cd: ff 25 00 00 00 00 jmpq *(%rip) # 0xd3 <_JIT_ENTRY+0xd3> // 00000000000000cf: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // d3: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xda <_JIT_ENTRY+0xda> // 00000000000000d6: R_X86_64_PC32 .L.str.101-0x4 // da: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_PC32 .L.str.1-0x4 // e1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xe8 <_JIT_ENTRY+0xe8> // 00000000000000e4: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // e8: ba 38 10 00 00 movl $0x1038, %edx # imm = 0x1038 // ed: ff 15 00 00 00 00 callq *(%rip) # 0xf3 <_JIT_ENTRY+0xf3> // 00000000000000ef: R_X86_64_GOTPCRELX __assert_fail-0x4 // f3: const unsigned char code_body[243] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0xc1, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xb7, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xff, 0x4c, 0x89, 0xf6, 0xff, 0xd0, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x3a, 0x10, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x3b, 0x10, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x14, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x48, 0x89, 0x5d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x38, 0x10, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00_PyEval_BinaryOps[oparg]\x00' // a7: 00 // a8: OPARG // b0: &_PyEval_BinaryOps+0x0 // b8: &_Py_NegativeRefcount+0x0 // c0: &_Py_DECREF_DecRefTotal+0x0 // c8: &_Py_Dealloc+0x0 // d0: CONTINUE // d8: ERROR_TARGET // e0: &__assert_fail+0x0 const unsigned char data_body[232] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x45, 0x76, 0x61, 0x6c, 0x5f, 0x42, 0x69, 0x6e, 0x61, 0x72, 0x79, 0x4f, 0x70, 0x73, 0x5b, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, instruction->oparg); patch_64(data + 0xb0, (uintptr_t)&_PyEval_BinaryOps); patch_64(data + 0xb8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xc0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xc8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd8, instruction_starts[instruction->error_target]); patch_64(data + 0xe0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0xac); patch_32r(code + 0x40, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x5b, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0xc4); patch_32r(code + 0x86, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x94, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xa1, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0xba, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xc3, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0xcf, (uintptr_t)data + 0xd4); patch_32r(code + 0xd6, (uintptr_t)data + 0x8a); patch_32r(code + 0xdd, (uintptr_t)data + -0x4); patch_32r(code + 0xe4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xef, (uintptr_t)data + 0xdc); } void emit__BINARY_OP_ADD_FLOAT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP_ADD_FLOAT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 9: f2 41 0f 10 47 10 movsd 0x10(%r15), %xmm0 // f: f2 0f 58 43 10 addsd 0x10(%rbx), %xmm0 // 14: 49 83 3f 01 cmpq $0x1, (%r15) // 18: 75 44 jne 0x5e <_JIT_ENTRY+0x5e> // 1a: f2 41 0f 11 47 10 movsd %xmm0, 0x10(%r15) // 20: f6 43 03 80 testb $-0x80, 0x3(%rbx) // 24: 75 29 jne 0x4f <_JIT_ENTRY+0x4f> // 26: ff 15 00 00 00 00 callq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 2c: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 33: 48 8b 03 movq (%rbx), %rax // 36: 48 89 c1 movq %rax, %rcx // 39: 48 ff c9 decq %rcx // 3c: 48 89 0b movq %rcx, (%rbx) // 3f: 0f 84 db 00 00 00 je 0x120 <_JIT_ENTRY+0x120> // 45: 48 83 f8 01 cmpq $0x1, %rax // 49: 0f 8e 1d 01 00 00 jle 0x16c <_JIT_ENTRY+0x16c> // 4f: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 53: 48 83 c5 f8 addq $-0x8, %rbp // 57: 58 popq %rax // 58: ff 25 00 00 00 00 jmpq *(%rip) # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5e: 48 83 3b 01 cmpq $0x1, (%rbx) // 62: 75 32 jne 0x96 <_JIT_ENTRY+0x96> // 64: f2 0f 11 43 10 movsd %xmm0, 0x10(%rbx) // 69: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 6e: 0f 85 9a 00 00 00 jne 0x10e <_JIT_ENTRY+0x10e> // 74: ff 15 00 00 00 00 callq *(%rip) # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 7a: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 81: 49 8b 07 movq (%r15), %rax // 84: 48 8d 48 ff leaq -0x1(%rax), %rcx // 88: 49 89 0f movq %rcx, (%r15) // 8b: 49 89 df movq %rbx, %r15 // 8e: 48 83 f8 01 cmpq $0x1, %rax // 92: 7f bb jg 0x4f <_JIT_ENTRY+0x4f> // 94: eb 64 jmp 0xfa <_JIT_ENTRY+0xfa> // 96: ff 15 00 00 00 00 callq *(%rip) # 0x9c <_JIT_ENTRY+0x9c> // 0000000000000098: R_X86_64_GOTPCRELX PyFloat_FromDouble-0x4 // 9c: 48 85 c0 testq %rax, %rax // 9f: 0f 84 93 00 00 00 je 0x138 <_JIT_ENTRY+0x138> // a5: 49 89 c6 movq %rax, %r14 // a8: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // ad: 75 1d jne 0xcc <_JIT_ENTRY+0xcc> // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // b5: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // bc: 49 8b 07 movq (%r15), %rax // bf: 48 8d 48 ff leaq -0x1(%rax), %rcx // c3: 49 89 0f movq %rcx, (%r15) // c6: 48 83 f8 01 cmpq $0x1, %rax // ca: 7e 2e jle 0xfa <_JIT_ENTRY+0xfa> // cc: f6 43 03 80 testb $-0x80, 0x3(%rbx) // d0: 0f 85 84 00 00 00 jne 0x15a <_JIT_ENTRY+0x15a> // d6: ff 15 00 00 00 00 callq *(%rip) # 0xdc <_JIT_ENTRY+0xdc> // 00000000000000d8: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // dc: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // e3: 48 8b 03 movq (%rbx), %rax // e6: 48 8d 48 ff leaq -0x1(%rax), %rcx // ea: 48 89 0b movq %rcx, (%rbx) // ed: 4d 89 f7 movq %r14, %r15 // f0: 48 83 f8 01 cmpq $0x1, %rax // f4: 0f 8f 55 ff ff ff jg 0x4f <_JIT_ENTRY+0x4f> // fa: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x101 <_JIT_ENTRY+0x101> // 00000000000000fd: R_X86_64_PC32 .L__func__._Py_DECREF_NO_DEALLOC-0x4 // 101: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x108 <_JIT_ENTRY+0x108> // 0000000000000104: R_X86_64_PC32 .L.str.119-0x4 // 108: ff 15 00 00 00 00 callq *(%rip) # 0x10e <_JIT_ENTRY+0x10e> // 000000000000010a: R_X86_64_GOTPCRELX _Py_FatalRefcountErrorFunc-0x4 // 10e: 49 89 df movq %rbx, %r15 // 111: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 115: 48 83 c5 f8 addq $-0x8, %rbp // 119: 58 popq %rax // 11a: ff 25 00 00 00 00 jmpq *(%rip) # 0x120 <_JIT_ENTRY+0x120> // 000000000000011c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 120: 48 89 df movq %rbx, %rdi // 123: ff 15 00 00 00 00 callq *(%rip) # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_GOTPCRELX _PyFloat_ExactDealloc-0x4 // 129: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 12d: 48 83 c5 f8 addq $-0x8, %rbp // 131: 58 popq %rax // 132: ff 25 00 00 00 00 jmpq *(%rip) # 0x138 <_JIT_ENTRY+0x138> // 0000000000000134: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 138: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x13f <_JIT_ENTRY+0x13f> // 000000000000013b: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 13f: 49 89 84 24 10 01 00 00 movq %rax, 0x110(%r12) // 147: 4c 29 ed subq %r13, %rbp // 14a: 48 83 c5 b8 addq $-0x48, %rbp // 14e: 48 c1 ed 03 shrq $0x3, %rbp // 152: 41 89 6d 40 movl %ebp, 0x40(%r13) // 156: 31 c0 xorl %eax, %eax // 158: 59 popq %rcx // 159: c3 retq // 15a: 4d 89 f7 movq %r14, %r15 // 15d: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 161: 48 83 c5 f8 addq $-0x8, %rbp // 165: 58 popq %rax // 166: ff 25 00 00 00 00 jmpq *(%rip) # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 16c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_PC32 .L.str.117-0x4 // 173: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_PC32 .L.str.118-0x4 // 17a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x181 <_JIT_ENTRY+0x181> // 000000000000017d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 181: ba bd 00 00 00 movl $0xbd, %edx // 186: ff 15 00 00 00 00 callq *(%rip) # 0x18c <_JIT_ENTRY+0x18c> // 0000000000000188: R_X86_64_GOTPCRELX __assert_fail-0x4 // 18c: const unsigned char code_body[396] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0xf2, 0x41, 0x0f, 0x10, 0x47, 0x10, 0xf2, 0x0f, 0x58, 0x43, 0x10, 0x49, 0x83, 0x3f, 0x01, 0x75, 0x44, 0xf2, 0x41, 0x0f, 0x11, 0x47, 0x10, 0xf6, 0x43, 0x03, 0x80, 0x75, 0x29, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x48, 0x89, 0x0b, 0x0f, 0x84, 0xdb, 0x00, 0x00, 0x00, 0x48, 0x83, 0xf8, 0x01, 0x0f, 0x8e, 0x1d, 0x01, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3b, 0x01, 0x75, 0x32, 0xf2, 0x0f, 0x11, 0x43, 0x10, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x0f, 0x85, 0x9a, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x8d, 0x48, 0xff, 0x49, 0x89, 0x0f, 0x49, 0x89, 0xdf, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0xbb, 0xeb, 0x64, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x93, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x1d, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x8d, 0x48, 0xff, 0x49, 0x89, 0x0f, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x2e, 0xf6, 0x43, 0x03, 0x80, 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x8d, 0x48, 0xff, 0x48, 0x89, 0x0b, 0x4d, 0x89, 0xf7, 0x48, 0x83, 0xf8, 0x01, 0x0f, 0x8f, 0x55, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xdf, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x31, 0xc0, 0x59, 0xc3, 0x4d, 0x89, 0xf7, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00_Py_DECREF_NO_DEALLOC\x00Expected a positive remaining refcount\x00' // d0: // d0: &PyInterpreterState_Get+0x0 // d8: CONTINUE // e0: &PyFloat_FromDouble+0x0 // e8: &_Py_FatalRefcountErrorFunc+0x0 // f0: &_PyFloat_ExactDealloc+0x0 // f8: EXECUTOR // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x00, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xd0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0xd8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe0, (uintptr_t)&PyFloat_FromDouble); patch_64(data + 0xe8, (uintptr_t)&_Py_FatalRefcountErrorFunc); patch_64(data + 0xf0, (uintptr_t)&_PyFloat_ExactDealloc); patch_64(data + 0xf8, (uintptr_t)executor); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x98, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xd8, (uintptr_t)data + 0xcc); patch_32r(code + 0xfd, (uintptr_t)data + 0x8f); patch_32r(code + 0x104, (uintptr_t)data + 0xa5); patch_x86_64_32rx(code + 0x10a, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x11c, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x125, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x134, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x13b, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x168, (uintptr_t)data + 0xd4); patch_32r(code + 0x16f, (uintptr_t)data + -0x4); patch_32r(code + 0x176, (uintptr_t)data + 0xe); patch_32r(code + 0x17d, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0x188, (uintptr_t)data + 0xfc); } void emit__BINARY_OP_ADD_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP_ADD_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f0 movq -0x10(%rbp), %r14 // 5: 4c 8b 7d f8 movq -0x8(%rbp), %r15 // 9: 4c 89 f7 movq %r14, %rdi // c: 4c 89 fe movq %r15, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX _PyLong_Add-0x4 // 15: 48 89 c3 movq %rax, %rbx // 18: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 1d: 75 21 jne 0x40 <_JIT_ENTRY+0x40> // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 25: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 2c: 49 8b 07 movq (%r15), %rax // 2f: 48 89 c1 movq %rax, %rcx // 32: 48 ff c9 decq %rcx // 35: 49 89 0f movq %rcx, (%r15) // 38: 74 4e je 0x88 <_JIT_ENTRY+0x88> // 3a: 48 83 f8 01 cmpq $0x1, %rax // 3e: 7e 28 jle 0x68 <_JIT_ENTRY+0x68> // 40: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 45: 75 51 jne 0x98 <_JIT_ENTRY+0x98> // 47: ff 15 00 00 00 00 callq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 4d: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 54: 49 8b 06 movq (%r14), %rax // 57: 48 89 c1 movq %rax, %rcx // 5a: 48 ff c9 decq %rcx // 5d: 49 89 0e movq %rcx, (%r14) // 60: 74 4a je 0xac <_JIT_ENTRY+0xac> // 62: 48 83 f8 01 cmpq $0x1, %rax // 66: 7f 30 jg 0x98 <_JIT_ENTRY+0x98> // 68: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_PC32 .L.str.117-0x4 // 6f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_PC32 .L.str.118-0x4 // 76: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x7d <_JIT_ENTRY+0x7d> // 0000000000000079: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 7d: ba bd 00 00 00 movl $0xbd, %edx // 82: ff 15 00 00 00 00 callq *(%rip) # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_GOTPCRELX __assert_fail-0x4 // 88: 4c 89 ff movq %r15, %rdi // 8b: ff 15 00 00 00 00 callq *(%rip) # 0x91 <_JIT_ENTRY+0x91> // 000000000000008d: R_X86_64_GOTPCRELX PyObject_Free-0x4 // 91: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 96: 74 af je 0x47 <_JIT_ENTRY+0x47> // 98: 48 85 db testq %rbx, %rbx // 9b: 74 1d je 0xba <_JIT_ENTRY+0xba> // 9d: 48 89 5d f0 movq %rbx, -0x10(%rbp) // a1: 48 83 c5 f8 addq $-0x8, %rbp // a5: 58 popq %rax // a6: ff 25 00 00 00 00 jmpq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ac: 4c 89 f7 movq %r14, %rdi // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX PyObject_Free-0x4 // b5: 48 85 db testq %rbx, %rbx // b8: 75 e3 jne 0x9d <_JIT_ENTRY+0x9d> // ba: 58 popq %rax // bb: ff 25 00 00 00 00 jmpq *(%rip) # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // c1: const unsigned char code_body[193] = { 0x50, 0x4c, 0x8b, 0x75, 0xf0, 0x4c, 0x8b, 0x7d, 0xf8, 0x4c, 0x89, 0xf7, 0x4c, 0x89, 0xfe, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x21, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0f, 0x74, 0x4e, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x28, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x51, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x4a, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x74, 0xaf, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x48, 0x89, 0x5d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00' // 93: 00 00 00 00 00 // 98: &_PyLong_Add+0x0 // a0: &PyInterpreterState_Get+0x0 // a8: &__assert_fail+0x0 // b0: &PyObject_Free+0x0 // b8: CONTINUE // c0: ERROR_TARGET const unsigned char data_body[200] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x98, (uintptr_t)&_PyLong_Add); patch_64(data + 0xa0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0xa8, (uintptr_t)&__assert_fail); patch_64(data + 0xb0, (uintptr_t)&PyObject_Free); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x9c); patch_32r(code + 0x6b, (uintptr_t)data + -0x4); patch_32r(code + 0x72, (uintptr_t)data + 0xe); patch_32r(code + 0x79, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0x84, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x8d, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0xbc); } void emit__BINARY_OP_ADD_UNICODE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP_ADD_UNICODE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 9: 4c 89 ff movq %r15, %rdi // c: 4c 89 f6 movq %r14, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX PyUnicode_Concat-0x4 // 15: 48 89 c3 movq %rax, %rbx // 18: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 1d: 75 21 jne 0x40 <_JIT_ENTRY+0x40> // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 25: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 2c: 49 8b 07 movq (%r15), %rax // 2f: 48 89 c1 movq %rax, %rcx // 32: 48 ff c9 decq %rcx // 35: 49 89 0f movq %rcx, (%r15) // 38: 74 4e je 0x88 <_JIT_ENTRY+0x88> // 3a: 48 83 f8 01 cmpq $0x1, %rax // 3e: 7e 28 jle 0x68 <_JIT_ENTRY+0x68> // 40: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 45: 75 51 jne 0x98 <_JIT_ENTRY+0x98> // 47: ff 15 00 00 00 00 callq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 4d: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 54: 49 8b 06 movq (%r14), %rax // 57: 48 89 c1 movq %rax, %rcx // 5a: 48 ff c9 decq %rcx // 5d: 49 89 0e movq %rcx, (%r14) // 60: 74 4a je 0xac <_JIT_ENTRY+0xac> // 62: 48 83 f8 01 cmpq $0x1, %rax // 66: 7f 30 jg 0x98 <_JIT_ENTRY+0x98> // 68: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_PC32 .L.str.117-0x4 // 6f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_PC32 .L.str.118-0x4 // 76: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x7d <_JIT_ENTRY+0x7d> // 0000000000000079: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 7d: ba bd 00 00 00 movl $0xbd, %edx // 82: ff 15 00 00 00 00 callq *(%rip) # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_GOTPCRELX __assert_fail-0x4 // 88: 4c 89 ff movq %r15, %rdi // 8b: ff 15 00 00 00 00 callq *(%rip) # 0x91 <_JIT_ENTRY+0x91> // 000000000000008d: R_X86_64_GOTPCRELX _PyUnicode_ExactDealloc-0x4 // 91: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 96: 74 af je 0x47 <_JIT_ENTRY+0x47> // 98: 48 85 db testq %rbx, %rbx // 9b: 74 1d je 0xba <_JIT_ENTRY+0xba> // 9d: 48 89 5d f0 movq %rbx, -0x10(%rbp) // a1: 48 83 c5 f8 addq $-0x8, %rbp // a5: 58 popq %rax // a6: ff 25 00 00 00 00 jmpq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ac: 4c 89 f7 movq %r14, %rdi // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX _PyUnicode_ExactDealloc-0x4 // b5: 48 85 db testq %rbx, %rbx // b8: 75 e3 jne 0x9d <_JIT_ENTRY+0x9d> // ba: 58 popq %rax // bb: ff 25 00 00 00 00 jmpq *(%rip) # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // c1: const unsigned char code_body[193] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xff, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x21, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0f, 0x74, 0x4e, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x28, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x51, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x4a, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x74, 0xaf, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x48, 0x89, 0x5d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00' // 93: 00 00 00 00 00 // 98: &PyUnicode_Concat+0x0 // a0: &PyInterpreterState_Get+0x0 // a8: &__assert_fail+0x0 // b0: &_PyUnicode_ExactDealloc+0x0 // b8: CONTINUE // c0: ERROR_TARGET const unsigned char data_body[200] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x98, (uintptr_t)&PyUnicode_Concat); patch_64(data + 0xa0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0xa8, (uintptr_t)&__assert_fail); patch_64(data + 0xb0, (uintptr_t)&_PyUnicode_ExactDealloc); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x9c); patch_32r(code + 0x6b, (uintptr_t)data + -0x4); patch_32r(code + 0x72, (uintptr_t)data + 0xe); patch_32r(code + 0x79, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0x84, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x8d, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0xbc); } void emit__BINARY_OP_MULTIPLY_FLOAT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP_MULTIPLY_FLOAT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 9: f2 41 0f 10 47 10 movsd 0x10(%r15), %xmm0 // f: f2 0f 59 43 10 mulsd 0x10(%rbx), %xmm0 // 14: 49 83 3f 01 cmpq $0x1, (%r15) // 18: 75 44 jne 0x5e <_JIT_ENTRY+0x5e> // 1a: f2 41 0f 11 47 10 movsd %xmm0, 0x10(%r15) // 20: f6 43 03 80 testb $-0x80, 0x3(%rbx) // 24: 75 29 jne 0x4f <_JIT_ENTRY+0x4f> // 26: ff 15 00 00 00 00 callq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 2c: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 33: 48 8b 03 movq (%rbx), %rax // 36: 48 89 c1 movq %rax, %rcx // 39: 48 ff c9 decq %rcx // 3c: 48 89 0b movq %rcx, (%rbx) // 3f: 0f 84 db 00 00 00 je 0x120 <_JIT_ENTRY+0x120> // 45: 48 83 f8 01 cmpq $0x1, %rax // 49: 0f 8e 1d 01 00 00 jle 0x16c <_JIT_ENTRY+0x16c> // 4f: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 53: 48 83 c5 f8 addq $-0x8, %rbp // 57: 58 popq %rax // 58: ff 25 00 00 00 00 jmpq *(%rip) # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5e: 48 83 3b 01 cmpq $0x1, (%rbx) // 62: 75 32 jne 0x96 <_JIT_ENTRY+0x96> // 64: f2 0f 11 43 10 movsd %xmm0, 0x10(%rbx) // 69: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 6e: 0f 85 9a 00 00 00 jne 0x10e <_JIT_ENTRY+0x10e> // 74: ff 15 00 00 00 00 callq *(%rip) # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 7a: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 81: 49 8b 07 movq (%r15), %rax // 84: 48 8d 48 ff leaq -0x1(%rax), %rcx // 88: 49 89 0f movq %rcx, (%r15) // 8b: 49 89 df movq %rbx, %r15 // 8e: 48 83 f8 01 cmpq $0x1, %rax // 92: 7f bb jg 0x4f <_JIT_ENTRY+0x4f> // 94: eb 64 jmp 0xfa <_JIT_ENTRY+0xfa> // 96: ff 15 00 00 00 00 callq *(%rip) # 0x9c <_JIT_ENTRY+0x9c> // 0000000000000098: R_X86_64_GOTPCRELX PyFloat_FromDouble-0x4 // 9c: 48 85 c0 testq %rax, %rax // 9f: 0f 84 93 00 00 00 je 0x138 <_JIT_ENTRY+0x138> // a5: 49 89 c6 movq %rax, %r14 // a8: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // ad: 75 1d jne 0xcc <_JIT_ENTRY+0xcc> // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // b5: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // bc: 49 8b 07 movq (%r15), %rax // bf: 48 8d 48 ff leaq -0x1(%rax), %rcx // c3: 49 89 0f movq %rcx, (%r15) // c6: 48 83 f8 01 cmpq $0x1, %rax // ca: 7e 2e jle 0xfa <_JIT_ENTRY+0xfa> // cc: f6 43 03 80 testb $-0x80, 0x3(%rbx) // d0: 0f 85 84 00 00 00 jne 0x15a <_JIT_ENTRY+0x15a> // d6: ff 15 00 00 00 00 callq *(%rip) # 0xdc <_JIT_ENTRY+0xdc> // 00000000000000d8: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // dc: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // e3: 48 8b 03 movq (%rbx), %rax // e6: 48 8d 48 ff leaq -0x1(%rax), %rcx // ea: 48 89 0b movq %rcx, (%rbx) // ed: 4d 89 f7 movq %r14, %r15 // f0: 48 83 f8 01 cmpq $0x1, %rax // f4: 0f 8f 55 ff ff ff jg 0x4f <_JIT_ENTRY+0x4f> // fa: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x101 <_JIT_ENTRY+0x101> // 00000000000000fd: R_X86_64_PC32 .L__func__._Py_DECREF_NO_DEALLOC-0x4 // 101: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x108 <_JIT_ENTRY+0x108> // 0000000000000104: R_X86_64_PC32 .L.str.119-0x4 // 108: ff 15 00 00 00 00 callq *(%rip) # 0x10e <_JIT_ENTRY+0x10e> // 000000000000010a: R_X86_64_GOTPCRELX _Py_FatalRefcountErrorFunc-0x4 // 10e: 49 89 df movq %rbx, %r15 // 111: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 115: 48 83 c5 f8 addq $-0x8, %rbp // 119: 58 popq %rax // 11a: ff 25 00 00 00 00 jmpq *(%rip) # 0x120 <_JIT_ENTRY+0x120> // 000000000000011c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 120: 48 89 df movq %rbx, %rdi // 123: ff 15 00 00 00 00 callq *(%rip) # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_GOTPCRELX _PyFloat_ExactDealloc-0x4 // 129: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 12d: 48 83 c5 f8 addq $-0x8, %rbp // 131: 58 popq %rax // 132: ff 25 00 00 00 00 jmpq *(%rip) # 0x138 <_JIT_ENTRY+0x138> // 0000000000000134: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 138: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x13f <_JIT_ENTRY+0x13f> // 000000000000013b: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 13f: 49 89 84 24 10 01 00 00 movq %rax, 0x110(%r12) // 147: 4c 29 ed subq %r13, %rbp // 14a: 48 83 c5 b8 addq $-0x48, %rbp // 14e: 48 c1 ed 03 shrq $0x3, %rbp // 152: 41 89 6d 40 movl %ebp, 0x40(%r13) // 156: 31 c0 xorl %eax, %eax // 158: 59 popq %rcx // 159: c3 retq // 15a: 4d 89 f7 movq %r14, %r15 // 15d: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 161: 48 83 c5 f8 addq $-0x8, %rbp // 165: 58 popq %rax // 166: ff 25 00 00 00 00 jmpq *(%rip) # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 16c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_PC32 .L.str.117-0x4 // 173: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_PC32 .L.str.118-0x4 // 17a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x181 <_JIT_ENTRY+0x181> // 000000000000017d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 181: ba bd 00 00 00 movl $0xbd, %edx // 186: ff 15 00 00 00 00 callq *(%rip) # 0x18c <_JIT_ENTRY+0x18c> // 0000000000000188: R_X86_64_GOTPCRELX __assert_fail-0x4 // 18c: const unsigned char code_body[396] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0xf2, 0x41, 0x0f, 0x10, 0x47, 0x10, 0xf2, 0x0f, 0x59, 0x43, 0x10, 0x49, 0x83, 0x3f, 0x01, 0x75, 0x44, 0xf2, 0x41, 0x0f, 0x11, 0x47, 0x10, 0xf6, 0x43, 0x03, 0x80, 0x75, 0x29, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x48, 0x89, 0x0b, 0x0f, 0x84, 0xdb, 0x00, 0x00, 0x00, 0x48, 0x83, 0xf8, 0x01, 0x0f, 0x8e, 0x1d, 0x01, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3b, 0x01, 0x75, 0x32, 0xf2, 0x0f, 0x11, 0x43, 0x10, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x0f, 0x85, 0x9a, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x8d, 0x48, 0xff, 0x49, 0x89, 0x0f, 0x49, 0x89, 0xdf, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0xbb, 0xeb, 0x64, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x93, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x1d, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x8d, 0x48, 0xff, 0x49, 0x89, 0x0f, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x2e, 0xf6, 0x43, 0x03, 0x80, 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x8d, 0x48, 0xff, 0x48, 0x89, 0x0b, 0x4d, 0x89, 0xf7, 0x48, 0x83, 0xf8, 0x01, 0x0f, 0x8f, 0x55, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xdf, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x31, 0xc0, 0x59, 0xc3, 0x4d, 0x89, 0xf7, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00_Py_DECREF_NO_DEALLOC\x00Expected a positive remaining refcount\x00' // d0: // d0: &PyInterpreterState_Get+0x0 // d8: CONTINUE // e0: &PyFloat_FromDouble+0x0 // e8: &_Py_FatalRefcountErrorFunc+0x0 // f0: &_PyFloat_ExactDealloc+0x0 // f8: EXECUTOR // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x00, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xd0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0xd8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe0, (uintptr_t)&PyFloat_FromDouble); patch_64(data + 0xe8, (uintptr_t)&_Py_FatalRefcountErrorFunc); patch_64(data + 0xf0, (uintptr_t)&_PyFloat_ExactDealloc); patch_64(data + 0xf8, (uintptr_t)executor); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x98, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xd8, (uintptr_t)data + 0xcc); patch_32r(code + 0xfd, (uintptr_t)data + 0x8f); patch_32r(code + 0x104, (uintptr_t)data + 0xa5); patch_x86_64_32rx(code + 0x10a, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x11c, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x125, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x134, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x13b, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x168, (uintptr_t)data + 0xd4); patch_32r(code + 0x16f, (uintptr_t)data + -0x4); patch_32r(code + 0x176, (uintptr_t)data + 0xe); patch_32r(code + 0x17d, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0x188, (uintptr_t)data + 0xfc); } void emit__BINARY_OP_MULTIPLY_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP_MULTIPLY_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f0 movq -0x10(%rbp), %r14 // 5: 4c 8b 7d f8 movq -0x8(%rbp), %r15 // 9: 4c 89 f7 movq %r14, %rdi // c: 4c 89 fe movq %r15, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX _PyLong_Multiply-0x4 // 15: 48 89 c3 movq %rax, %rbx // 18: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 1d: 75 21 jne 0x40 <_JIT_ENTRY+0x40> // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 25: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 2c: 49 8b 07 movq (%r15), %rax // 2f: 48 89 c1 movq %rax, %rcx // 32: 48 ff c9 decq %rcx // 35: 49 89 0f movq %rcx, (%r15) // 38: 74 4e je 0x88 <_JIT_ENTRY+0x88> // 3a: 48 83 f8 01 cmpq $0x1, %rax // 3e: 7e 28 jle 0x68 <_JIT_ENTRY+0x68> // 40: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 45: 75 51 jne 0x98 <_JIT_ENTRY+0x98> // 47: ff 15 00 00 00 00 callq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 4d: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 54: 49 8b 06 movq (%r14), %rax // 57: 48 89 c1 movq %rax, %rcx // 5a: 48 ff c9 decq %rcx // 5d: 49 89 0e movq %rcx, (%r14) // 60: 74 4a je 0xac <_JIT_ENTRY+0xac> // 62: 48 83 f8 01 cmpq $0x1, %rax // 66: 7f 30 jg 0x98 <_JIT_ENTRY+0x98> // 68: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_PC32 .L.str.117-0x4 // 6f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_PC32 .L.str.118-0x4 // 76: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x7d <_JIT_ENTRY+0x7d> // 0000000000000079: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 7d: ba bd 00 00 00 movl $0xbd, %edx // 82: ff 15 00 00 00 00 callq *(%rip) # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_GOTPCRELX __assert_fail-0x4 // 88: 4c 89 ff movq %r15, %rdi // 8b: ff 15 00 00 00 00 callq *(%rip) # 0x91 <_JIT_ENTRY+0x91> // 000000000000008d: R_X86_64_GOTPCRELX PyObject_Free-0x4 // 91: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 96: 74 af je 0x47 <_JIT_ENTRY+0x47> // 98: 48 85 db testq %rbx, %rbx // 9b: 74 1d je 0xba <_JIT_ENTRY+0xba> // 9d: 48 89 5d f0 movq %rbx, -0x10(%rbp) // a1: 48 83 c5 f8 addq $-0x8, %rbp // a5: 58 popq %rax // a6: ff 25 00 00 00 00 jmpq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ac: 4c 89 f7 movq %r14, %rdi // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX PyObject_Free-0x4 // b5: 48 85 db testq %rbx, %rbx // b8: 75 e3 jne 0x9d <_JIT_ENTRY+0x9d> // ba: 58 popq %rax // bb: ff 25 00 00 00 00 jmpq *(%rip) # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // c1: const unsigned char code_body[193] = { 0x50, 0x4c, 0x8b, 0x75, 0xf0, 0x4c, 0x8b, 0x7d, 0xf8, 0x4c, 0x89, 0xf7, 0x4c, 0x89, 0xfe, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x21, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0f, 0x74, 0x4e, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x28, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x51, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x4a, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x74, 0xaf, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x48, 0x89, 0x5d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00' // 93: 00 00 00 00 00 // 98: &_PyLong_Multiply+0x0 // a0: &PyInterpreterState_Get+0x0 // a8: &__assert_fail+0x0 // b0: &PyObject_Free+0x0 // b8: CONTINUE // c0: ERROR_TARGET const unsigned char data_body[200] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x98, (uintptr_t)&_PyLong_Multiply); patch_64(data + 0xa0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0xa8, (uintptr_t)&__assert_fail); patch_64(data + 0xb0, (uintptr_t)&PyObject_Free); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x9c); patch_32r(code + 0x6b, (uintptr_t)data + -0x4); patch_32r(code + 0x72, (uintptr_t)data + 0xe); patch_32r(code + 0x79, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0x84, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x8d, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0xbc); } void emit__BINARY_OP_SUBTRACT_FLOAT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP_SUBTRACT_FLOAT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 9: f2 41 0f 10 47 10 movsd 0x10(%r15), %xmm0 // f: f2 0f 5c 43 10 subsd 0x10(%rbx), %xmm0 // 14: 49 83 3f 01 cmpq $0x1, (%r15) // 18: 75 44 jne 0x5e <_JIT_ENTRY+0x5e> // 1a: f2 41 0f 11 47 10 movsd %xmm0, 0x10(%r15) // 20: f6 43 03 80 testb $-0x80, 0x3(%rbx) // 24: 75 29 jne 0x4f <_JIT_ENTRY+0x4f> // 26: ff 15 00 00 00 00 callq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 2c: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 33: 48 8b 03 movq (%rbx), %rax // 36: 48 89 c1 movq %rax, %rcx // 39: 48 ff c9 decq %rcx // 3c: 48 89 0b movq %rcx, (%rbx) // 3f: 0f 84 db 00 00 00 je 0x120 <_JIT_ENTRY+0x120> // 45: 48 83 f8 01 cmpq $0x1, %rax // 49: 0f 8e 1d 01 00 00 jle 0x16c <_JIT_ENTRY+0x16c> // 4f: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 53: 48 83 c5 f8 addq $-0x8, %rbp // 57: 58 popq %rax // 58: ff 25 00 00 00 00 jmpq *(%rip) # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5e: 48 83 3b 01 cmpq $0x1, (%rbx) // 62: 75 32 jne 0x96 <_JIT_ENTRY+0x96> // 64: f2 0f 11 43 10 movsd %xmm0, 0x10(%rbx) // 69: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 6e: 0f 85 9a 00 00 00 jne 0x10e <_JIT_ENTRY+0x10e> // 74: ff 15 00 00 00 00 callq *(%rip) # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 7a: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 81: 49 8b 07 movq (%r15), %rax // 84: 48 8d 48 ff leaq -0x1(%rax), %rcx // 88: 49 89 0f movq %rcx, (%r15) // 8b: 49 89 df movq %rbx, %r15 // 8e: 48 83 f8 01 cmpq $0x1, %rax // 92: 7f bb jg 0x4f <_JIT_ENTRY+0x4f> // 94: eb 64 jmp 0xfa <_JIT_ENTRY+0xfa> // 96: ff 15 00 00 00 00 callq *(%rip) # 0x9c <_JIT_ENTRY+0x9c> // 0000000000000098: R_X86_64_GOTPCRELX PyFloat_FromDouble-0x4 // 9c: 48 85 c0 testq %rax, %rax // 9f: 0f 84 93 00 00 00 je 0x138 <_JIT_ENTRY+0x138> // a5: 49 89 c6 movq %rax, %r14 // a8: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // ad: 75 1d jne 0xcc <_JIT_ENTRY+0xcc> // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // b5: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // bc: 49 8b 07 movq (%r15), %rax // bf: 48 8d 48 ff leaq -0x1(%rax), %rcx // c3: 49 89 0f movq %rcx, (%r15) // c6: 48 83 f8 01 cmpq $0x1, %rax // ca: 7e 2e jle 0xfa <_JIT_ENTRY+0xfa> // cc: f6 43 03 80 testb $-0x80, 0x3(%rbx) // d0: 0f 85 84 00 00 00 jne 0x15a <_JIT_ENTRY+0x15a> // d6: ff 15 00 00 00 00 callq *(%rip) # 0xdc <_JIT_ENTRY+0xdc> // 00000000000000d8: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // dc: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // e3: 48 8b 03 movq (%rbx), %rax // e6: 48 8d 48 ff leaq -0x1(%rax), %rcx // ea: 48 89 0b movq %rcx, (%rbx) // ed: 4d 89 f7 movq %r14, %r15 // f0: 48 83 f8 01 cmpq $0x1, %rax // f4: 0f 8f 55 ff ff ff jg 0x4f <_JIT_ENTRY+0x4f> // fa: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x101 <_JIT_ENTRY+0x101> // 00000000000000fd: R_X86_64_PC32 .L__func__._Py_DECREF_NO_DEALLOC-0x4 // 101: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x108 <_JIT_ENTRY+0x108> // 0000000000000104: R_X86_64_PC32 .L.str.119-0x4 // 108: ff 15 00 00 00 00 callq *(%rip) # 0x10e <_JIT_ENTRY+0x10e> // 000000000000010a: R_X86_64_GOTPCRELX _Py_FatalRefcountErrorFunc-0x4 // 10e: 49 89 df movq %rbx, %r15 // 111: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 115: 48 83 c5 f8 addq $-0x8, %rbp // 119: 58 popq %rax // 11a: ff 25 00 00 00 00 jmpq *(%rip) # 0x120 <_JIT_ENTRY+0x120> // 000000000000011c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 120: 48 89 df movq %rbx, %rdi // 123: ff 15 00 00 00 00 callq *(%rip) # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_GOTPCRELX _PyFloat_ExactDealloc-0x4 // 129: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 12d: 48 83 c5 f8 addq $-0x8, %rbp // 131: 58 popq %rax // 132: ff 25 00 00 00 00 jmpq *(%rip) # 0x138 <_JIT_ENTRY+0x138> // 0000000000000134: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 138: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x13f <_JIT_ENTRY+0x13f> // 000000000000013b: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 13f: 49 89 84 24 10 01 00 00 movq %rax, 0x110(%r12) // 147: 4c 29 ed subq %r13, %rbp // 14a: 48 83 c5 b8 addq $-0x48, %rbp // 14e: 48 c1 ed 03 shrq $0x3, %rbp // 152: 41 89 6d 40 movl %ebp, 0x40(%r13) // 156: 31 c0 xorl %eax, %eax // 158: 59 popq %rcx // 159: c3 retq // 15a: 4d 89 f7 movq %r14, %r15 // 15d: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 161: 48 83 c5 f8 addq $-0x8, %rbp // 165: 58 popq %rax // 166: ff 25 00 00 00 00 jmpq *(%rip) # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 16c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_PC32 .L.str.117-0x4 // 173: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_PC32 .L.str.118-0x4 // 17a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x181 <_JIT_ENTRY+0x181> // 000000000000017d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 181: ba bd 00 00 00 movl $0xbd, %edx // 186: ff 15 00 00 00 00 callq *(%rip) # 0x18c <_JIT_ENTRY+0x18c> // 0000000000000188: R_X86_64_GOTPCRELX __assert_fail-0x4 // 18c: const unsigned char code_body[396] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0xf2, 0x41, 0x0f, 0x10, 0x47, 0x10, 0xf2, 0x0f, 0x5c, 0x43, 0x10, 0x49, 0x83, 0x3f, 0x01, 0x75, 0x44, 0xf2, 0x41, 0x0f, 0x11, 0x47, 0x10, 0xf6, 0x43, 0x03, 0x80, 0x75, 0x29, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x48, 0x89, 0x0b, 0x0f, 0x84, 0xdb, 0x00, 0x00, 0x00, 0x48, 0x83, 0xf8, 0x01, 0x0f, 0x8e, 0x1d, 0x01, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3b, 0x01, 0x75, 0x32, 0xf2, 0x0f, 0x11, 0x43, 0x10, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x0f, 0x85, 0x9a, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x8d, 0x48, 0xff, 0x49, 0x89, 0x0f, 0x49, 0x89, 0xdf, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0xbb, 0xeb, 0x64, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x93, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x1d, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x8d, 0x48, 0xff, 0x49, 0x89, 0x0f, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x2e, 0xf6, 0x43, 0x03, 0x80, 0x0f, 0x85, 0x84, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x8d, 0x48, 0xff, 0x48, 0x89, 0x0b, 0x4d, 0x89, 0xf7, 0x48, 0x83, 0xf8, 0x01, 0x0f, 0x8f, 0x55, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xdf, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x31, 0xc0, 0x59, 0xc3, 0x4d, 0x89, 0xf7, 0x4c, 0x89, 0x7d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00_Py_DECREF_NO_DEALLOC\x00Expected a positive remaining refcount\x00' // d0: // d0: &PyInterpreterState_Get+0x0 // d8: CONTINUE // e0: &PyFloat_FromDouble+0x0 // e8: &_Py_FatalRefcountErrorFunc+0x0 // f0: &_PyFloat_ExactDealloc+0x0 // f8: EXECUTOR // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x4e, 0x4f, 0x5f, 0x44, 0x45, 0x41, 0x4c, 0x4c, 0x4f, 0x43, 0x00, 0x45, 0x78, 0x70, 0x65, 0x63, 0x74, 0x65, 0x64, 0x20, 0x61, 0x20, 0x70, 0x6f, 0x73, 0x69, 0x74, 0x69, 0x76, 0x65, 0x20, 0x72, 0x65, 0x6d, 0x61, 0x69, 0x6e, 0x69, 0x6e, 0x67, 0x20, 0x72, 0x65, 0x66, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xd0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0xd8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe0, (uintptr_t)&PyFloat_FromDouble); patch_64(data + 0xe8, (uintptr_t)&_Py_FatalRefcountErrorFunc); patch_64(data + 0xf0, (uintptr_t)&_PyFloat_ExactDealloc); patch_64(data + 0xf8, (uintptr_t)executor); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x98, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xd8, (uintptr_t)data + 0xcc); patch_32r(code + 0xfd, (uintptr_t)data + 0x8f); patch_32r(code + 0x104, (uintptr_t)data + 0xa5); patch_x86_64_32rx(code + 0x10a, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x11c, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x125, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x134, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x13b, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x168, (uintptr_t)data + 0xd4); patch_32r(code + 0x16f, (uintptr_t)data + -0x4); patch_32r(code + 0x176, (uintptr_t)data + 0xe); patch_32r(code + 0x17d, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0x188, (uintptr_t)data + 0xfc); } void emit__BINARY_OP_SUBTRACT_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_OP_SUBTRACT_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f0 movq -0x10(%rbp), %r14 // 5: 4c 8b 7d f8 movq -0x8(%rbp), %r15 // 9: 4c 89 f7 movq %r14, %rdi // c: 4c 89 fe movq %r15, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX _PyLong_Subtract-0x4 // 15: 48 89 c3 movq %rax, %rbx // 18: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 1d: 75 21 jne 0x40 <_JIT_ENTRY+0x40> // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 25: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 2c: 49 8b 07 movq (%r15), %rax // 2f: 48 89 c1 movq %rax, %rcx // 32: 48 ff c9 decq %rcx // 35: 49 89 0f movq %rcx, (%r15) // 38: 74 4e je 0x88 <_JIT_ENTRY+0x88> // 3a: 48 83 f8 01 cmpq $0x1, %rax // 3e: 7e 28 jle 0x68 <_JIT_ENTRY+0x68> // 40: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 45: 75 51 jne 0x98 <_JIT_ENTRY+0x98> // 47: ff 15 00 00 00 00 callq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 4d: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 54: 49 8b 06 movq (%r14), %rax // 57: 48 89 c1 movq %rax, %rcx // 5a: 48 ff c9 decq %rcx // 5d: 49 89 0e movq %rcx, (%r14) // 60: 74 4a je 0xac <_JIT_ENTRY+0xac> // 62: 48 83 f8 01 cmpq $0x1, %rax // 66: 7f 30 jg 0x98 <_JIT_ENTRY+0x98> // 68: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_PC32 .L.str.117-0x4 // 6f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_PC32 .L.str.118-0x4 // 76: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x7d <_JIT_ENTRY+0x7d> // 0000000000000079: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 7d: ba bd 00 00 00 movl $0xbd, %edx // 82: ff 15 00 00 00 00 callq *(%rip) # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_GOTPCRELX __assert_fail-0x4 // 88: 4c 89 ff movq %r15, %rdi // 8b: ff 15 00 00 00 00 callq *(%rip) # 0x91 <_JIT_ENTRY+0x91> // 000000000000008d: R_X86_64_GOTPCRELX PyObject_Free-0x4 // 91: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 96: 74 af je 0x47 <_JIT_ENTRY+0x47> // 98: 48 85 db testq %rbx, %rbx // 9b: 74 1d je 0xba <_JIT_ENTRY+0xba> // 9d: 48 89 5d f0 movq %rbx, -0x10(%rbp) // a1: 48 83 c5 f8 addq $-0x8, %rbp // a5: 58 popq %rax // a6: ff 25 00 00 00 00 jmpq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ac: 4c 89 f7 movq %r14, %rdi // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX PyObject_Free-0x4 // b5: 48 85 db testq %rbx, %rbx // b8: 75 e3 jne 0x9d <_JIT_ENTRY+0x9d> // ba: 58 popq %rax // bb: ff 25 00 00 00 00 jmpq *(%rip) # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // c1: const unsigned char code_body[193] = { 0x50, 0x4c, 0x8b, 0x75, 0xf0, 0x4c, 0x8b, 0x7d, 0xf8, 0x4c, 0x89, 0xf7, 0x4c, 0x89, 0xfe, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x21, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0f, 0x74, 0x4e, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x28, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x51, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x4a, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x74, 0xaf, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x48, 0x89, 0x5d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00' // 93: 00 00 00 00 00 // 98: &_PyLong_Subtract+0x0 // a0: &PyInterpreterState_Get+0x0 // a8: &__assert_fail+0x0 // b0: &PyObject_Free+0x0 // b8: CONTINUE // c0: ERROR_TARGET const unsigned char data_body[200] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x98, (uintptr_t)&_PyLong_Subtract); patch_64(data + 0xa0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0xa8, (uintptr_t)&__assert_fail); patch_64(data + 0xb0, (uintptr_t)&PyObject_Free); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x9c); patch_32r(code + 0x6b, (uintptr_t)data + -0x4); patch_32r(code + 0x72, (uintptr_t)data + 0xe); patch_32r(code + 0x79, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0x84, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x8d, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0xbc); } void emit__BINARY_SLICE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_SLICE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 75 f8 movq -0x8(%rbp), %rsi // 5: 48 8b 5d e8 movq -0x18(%rbp), %rbx // 9: 48 8b 7d f0 movq -0x10(%rbp), %rdi // d: ff 15 00 00 00 00 callq *(%rip) # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_GOTPCRELX _PyBuildSlice_ConsumeRefs-0x4 // 13: 48 85 c0 testq %rax, %rax // 16: 74 20 je 0x38 <_JIT_ENTRY+0x38> // 18: 49 89 c7 movq %rax, %r15 // 1b: 48 89 df movq %rbx, %rdi // 1e: 48 89 c6 movq %rax, %rsi // 21: ff 15 00 00 00 00 callq *(%rip) # 0x27 <_JIT_ENTRY+0x27> // 0000000000000023: R_X86_64_GOTPCRELX PyObject_GetItem-0x4 // 27: 49 89 c6 movq %rax, %r14 // 2a: 49 8b 07 movq (%r15), %rax // 2d: 48 85 c0 testq %rax, %rax // 30: 7e 13 jle 0x45 <_JIT_ENTRY+0x45> // 32: 85 c0 testl %eax, %eax // 34: 79 2b jns 0x61 <_JIT_ENTRY+0x61> // 36: eb 34 jmp 0x6c <_JIT_ENTRY+0x6c> // 38: 45 31 f6 xorl %r14d, %r14d // 3b: 48 8b 03 movq (%rbx), %rax // 3e: 48 85 c0 testq %rax, %rax // 41: 7f 31 jg 0x74 <_JIT_ENTRY+0x74> // 43: eb 46 jmp 0x8b <_JIT_ENTRY+0x8b> // 45: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_PC32 .L.str.1-0x4 // 4c: be 99 02 00 00 movl $0x299, %esi # imm = 0x299 // 51: 4c 89 fa movq %r15, %rdx // 54: ff 15 00 00 00 00 callq *(%rip) # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 5a: 49 8b 07 movq (%r15), %rax // 5d: 85 c0 testl %eax, %eax // 5f: 78 0b js 0x6c <_JIT_ENTRY+0x6c> // 61: ff 15 00 00 00 00 callq *(%rip) # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 67: 49 ff 0f decq (%r15) // 6a: 74 0e je 0x7a <_JIT_ENTRY+0x7a> // 6c: 48 8b 03 movq (%rbx), %rax // 6f: 48 85 c0 testq %rax, %rax // 72: 7e 17 jle 0x8b <_JIT_ENTRY+0x8b> // 74: 85 c0 testl %eax, %eax // 76: 79 2f jns 0xa7 <_JIT_ENTRY+0xa7> // 78: eb 38 jmp 0xb2 <_JIT_ENTRY+0xb2> // 7a: 4c 89 ff movq %r15, %rdi // 7d: ff 15 00 00 00 00 callq *(%rip) # 0x83 <_JIT_ENTRY+0x83> // 000000000000007f: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 83: 48 8b 03 movq (%rbx), %rax // 86: 48 85 c0 testq %rax, %rax // 89: 7f e9 jg 0x74 <_JIT_ENTRY+0x74> // 8b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_PC32 .L.str.1-0x4 // 92: be 9b 02 00 00 movl $0x29b, %esi # imm = 0x29B // 97: 48 89 da movq %rbx, %rdx // 9a: ff 15 00 00 00 00 callq *(%rip) # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // a0: 48 8b 03 movq (%rbx), %rax // a3: 85 c0 testl %eax, %eax // a5: 78 0b js 0xb2 <_JIT_ENTRY+0xb2> // a7: ff 15 00 00 00 00 callq *(%rip) # 0xad <_JIT_ENTRY+0xad> // 00000000000000a9: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ad: 48 ff 0b decq (%rbx) // b0: 74 14 je 0xc6 <_JIT_ENTRY+0xc6> // b2: 4d 85 f6 testq %r14, %r14 // b5: 74 1d je 0xd4 <_JIT_ENTRY+0xd4> // b7: 4c 89 75 e8 movq %r14, -0x18(%rbp) // bb: 48 83 c5 f0 addq $-0x10, %rbp // bf: 58 popq %rax // c0: ff 25 00 00 00 00 jmpq *(%rip) # 0xc6 <_JIT_ENTRY+0xc6> // 00000000000000c2: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c6: 48 89 df movq %rbx, %rdi // c9: ff 15 00 00 00 00 callq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // cf: 4d 85 f6 testq %r14, %r14 // d2: 75 e3 jne 0xb7 <_JIT_ENTRY+0xb7> // d4: 58 popq %rax // d5: ff 25 00 00 00 00 jmpq *(%rip) # 0xdb <_JIT_ENTRY+0xdb> // 00000000000000d7: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // db: const unsigned char code_body[219] = { 0x50, 0x48, 0x8b, 0x75, 0xf8, 0x48, 0x8b, 0x5d, 0xe8, 0x48, 0x8b, 0x7d, 0xf0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x20, 0x49, 0x89, 0xc7, 0x48, 0x89, 0xdf, 0x48, 0x89, 0xc6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x13, 0x85, 0xc0, 0x79, 0x2b, 0xeb, 0x34, 0x45, 0x31, 0xf6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x31, 0xeb, 0x46, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x99, 0x02, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9b, 0x02, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x14, 0x4d, 0x85, 0xf6, 0x74, 0x1d, 0x4c, 0x89, 0x75, 0xe8, 0x48, 0x83, 0xc5, 0xf0, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_PyBuildSlice_ConsumeRefs+0x0 // 48: &PyObject_GetItem+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: &_Py_Dealloc+0x0 // 68: CONTINUE // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_PyBuildSlice_ConsumeRefs); patch_64(data + 0x48, (uintptr_t)&PyObject_GetItem); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x68, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x23, (uintptr_t)data + 0x44); patch_32r(code + 0x48, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x63, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x7f, (uintptr_t)data + 0x5c); patch_32r(code + 0x8e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x9c, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xa9, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xc2, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0xcb, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xd7, (uintptr_t)data + 0x6c); } void emit__BINARY_SUBSCR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_SUBSCR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 9: 4c 89 ff movq %r15, %rdi // c: 4c 89 f6 movq %r14, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX PyObject_GetItem-0x4 // 15: 48 89 c3 movq %rax, %rbx // 18: 49 8b 07 movq (%r15), %rax // 1b: 48 85 c0 testq %rax, %rax // 1e: 7e 06 jle 0x26 <_JIT_ENTRY+0x26> // 20: 85 c0 testl %eax, %eax // 22: 79 1e jns 0x42 <_JIT_ENTRY+0x42> // 24: eb 27 jmp 0x4d <_JIT_ENTRY+0x4d> // 26: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_PC32 .L.str.1-0x4 // 2d: be 81 02 00 00 movl $0x281, %esi # imm = 0x281 // 32: 4c 89 fa movq %r15, %rdx // 35: ff 15 00 00 00 00 callq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 3b: 49 8b 07 movq (%r15), %rax // 3e: 85 c0 testl %eax, %eax // 40: 78 0b js 0x4d <_JIT_ENTRY+0x4d> // 42: ff 15 00 00 00 00 callq *(%rip) # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 48: 49 ff 0f decq (%r15) // 4b: 74 0e je 0x5b <_JIT_ENTRY+0x5b> // 4d: 49 8b 06 movq (%r14), %rax // 50: 48 85 c0 testq %rax, %rax // 53: 7e 17 jle 0x6c <_JIT_ENTRY+0x6c> // 55: 85 c0 testl %eax, %eax // 57: 79 2f jns 0x88 <_JIT_ENTRY+0x88> // 59: eb 38 jmp 0x93 <_JIT_ENTRY+0x93> // 5b: 4c 89 ff movq %r15, %rdi // 5e: ff 15 00 00 00 00 callq *(%rip) # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 64: 49 8b 06 movq (%r14), %rax // 67: 48 85 c0 testq %rax, %rax // 6a: 7f e9 jg 0x55 <_JIT_ENTRY+0x55> // 6c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_PC32 .L.str.1-0x4 // 73: be 82 02 00 00 movl $0x282, %esi # imm = 0x282 // 78: 4c 89 f2 movq %r14, %rdx // 7b: ff 15 00 00 00 00 callq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 81: 49 8b 06 movq (%r14), %rax // 84: 85 c0 testl %eax, %eax // 86: 78 0b js 0x93 <_JIT_ENTRY+0x93> // 88: ff 15 00 00 00 00 callq *(%rip) # 0x8e <_JIT_ENTRY+0x8e> // 000000000000008a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 8e: 49 ff 0e decq (%r14) // 91: 74 14 je 0xa7 <_JIT_ENTRY+0xa7> // 93: 48 85 db testq %rbx, %rbx // 96: 74 1d je 0xb5 <_JIT_ENTRY+0xb5> // 98: 48 89 5d f0 movq %rbx, -0x10(%rbp) // 9c: 48 83 c5 f8 addq $-0x8, %rbp // a0: 58 popq %rax // a1: ff 25 00 00 00 00 jmpq *(%rip) # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // a7: 4c 89 f7 movq %r14, %rdi // aa: ff 15 00 00 00 00 callq *(%rip) # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // b0: 48 85 db testq %rbx, %rbx // b3: 75 e3 jne 0x98 <_JIT_ENTRY+0x98> // b5: 58 popq %rax // b6: ff 25 00 00 00 00 jmpq *(%rip) # 0xbc <_JIT_ENTRY+0xbc> // 00000000000000b8: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // bc: const unsigned char code_body[188] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xff, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x81, 0x02, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x82, 0x02, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x14, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x48, 0x89, 0x5d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyObject_GetItem+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 // 60: CONTINUE // 68: ERROR_TARGET const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyObject_GetItem); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x3c); patch_32r(code + 0x29, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x37, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x44, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x60, (uintptr_t)data + 0x54); patch_32r(code + 0x6f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x8a, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xa3, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xac, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xb8, (uintptr_t)data + 0x64); } void emit__BINARY_SUBSCR_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_SUBSCR_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 49 8b 47 08 movq 0x8(%r15), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 10: 74 07 je 0x19 <_JIT_ENTRY+0x19> // 12: 58 popq %rax // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 1d: 48 89 e2 movq %rsp, %rdx // 20: 4c 89 ff movq %r15, %rdi // 23: 48 89 de movq %rbx, %rsi // 26: ff 15 00 00 00 00 callq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX PyDict_GetItemRef-0x4 // 2c: 41 89 c6 movl %eax, %r14d // 2f: 85 c0 testl %eax, %eax // 31: 74 0e je 0x41 <_JIT_ENTRY+0x41> // 33: 49 8b 07 movq (%r15), %rax // 36: 48 85 c0 testq %rax, %rax // 39: 7e 17 jle 0x52 <_JIT_ENTRY+0x52> // 3b: 85 c0 testl %eax, %eax // 3d: 79 2f jns 0x6e <_JIT_ENTRY+0x6e> // 3f: eb 38 jmp 0x79 <_JIT_ENTRY+0x79> // 41: 48 89 df movq %rbx, %rdi // 44: ff 15 00 00 00 00 callq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _PyErr_SetKeyError-0x4 // 4a: 49 8b 07 movq (%r15), %rax // 4d: 48 85 c0 testq %rax, %rax // 50: 7f e9 jg 0x3b <_JIT_ENTRY+0x3b> // 52: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_PC32 .L.str.1-0x4 // 59: be 36 03 00 00 movl $0x336, %esi # imm = 0x336 // 5e: 4c 89 fa movq %r15, %rdx // 61: ff 15 00 00 00 00 callq *(%rip) # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 67: 49 8b 07 movq (%r15), %rax // 6a: 85 c0 testl %eax, %eax // 6c: 78 0b js 0x79 <_JIT_ENTRY+0x79> // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 74: 49 ff 0f decq (%r15) // 77: 74 0e je 0x87 <_JIT_ENTRY+0x87> // 79: 48 8b 03 movq (%rbx), %rax // 7c: 48 85 c0 testq %rax, %rax // 7f: 7e 17 jle 0x98 <_JIT_ENTRY+0x98> // 81: 85 c0 testl %eax, %eax // 83: 79 2f jns 0xb4 <_JIT_ENTRY+0xb4> // 85: eb 38 jmp 0xbf <_JIT_ENTRY+0xbf> // 87: 4c 89 ff movq %r15, %rdi // 8a: ff 15 00 00 00 00 callq *(%rip) # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 90: 48 8b 03 movq (%rbx), %rax // 93: 48 85 c0 testq %rax, %rax // 96: 7f e9 jg 0x81 <_JIT_ENTRY+0x81> // 98: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9f <_JIT_ENTRY+0x9f> // 000000000000009b: R_X86_64_PC32 .L.str.1-0x4 // 9f: be 37 03 00 00 movl $0x337, %esi # imm = 0x337 // a4: 48 89 da movq %rbx, %rdx // a7: ff 15 00 00 00 00 callq *(%rip) # 0xad <_JIT_ENTRY+0xad> // 00000000000000a9: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // ad: 48 8b 03 movq (%rbx), %rax // b0: 85 c0 testl %eax, %eax // b2: 78 0b js 0xbf <_JIT_ENTRY+0xbf> // b4: ff 15 00 00 00 00 callq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ba: 48 ff 0b decq (%rbx) // bd: 74 18 je 0xd7 <_JIT_ENTRY+0xd7> // bf: 45 85 f6 testl %r14d, %r14d // c2: 7e 21 jle 0xe5 <_JIT_ENTRY+0xe5> // c4: 48 8b 04 24 movq (%rsp), %rax // c8: 48 89 45 f0 movq %rax, -0x10(%rbp) // cc: 48 83 c5 f8 addq $-0x8, %rbp // d0: 58 popq %rax // d1: ff 25 00 00 00 00 jmpq *(%rip) # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // d7: 48 89 df movq %rbx, %rdi // da: ff 15 00 00 00 00 callq *(%rip) # 0xe0 <_JIT_ENTRY+0xe0> // 00000000000000dc: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // e0: 45 85 f6 testl %r14d, %r14d // e3: 7f df jg 0xc4 <_JIT_ENTRY+0xc4> // e5: 58 popq %rax // e6: ff 25 00 00 00 00 jmpq *(%rip) # 0xec <_JIT_ENTRY+0xec> // 00000000000000e8: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // ec: const unsigned char code_body[236] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x49, 0x8b, 0x47, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x89, 0xe2, 0x4c, 0x89, 0xff, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x85, 0xc0, 0x74, 0x0e, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x36, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x37, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x18, 0x45, 0x85, 0xf6, 0x7e, 0x21, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x89, 0x45, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x7f, 0xdf, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyDict_Type+0x0 // 48: JUMP_TARGET // 50: &PyDict_GetItemRef+0x0 // 58: &_PyErr_SetKeyError+0x0 // 60: &_Py_NegativeRefcount+0x0 // 68: &_Py_DECREF_DecRefTotal+0x0 // 70: &_Py_Dealloc+0x0 // 78: CONTINUE // 80: ERROR_TARGET const unsigned char data_body[136] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyDict_Type); patch_64(data + 0x48, instruction_starts[instruction->jump_target]); patch_64(data + 0x50, (uintptr_t)&PyDict_GetItemRef); patch_64(data + 0x58, (uintptr_t)&_PyErr_SetKeyError); patch_64(data + 0x60, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x68, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x70, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x78, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x80, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0x54); patch_32r(code + 0x55, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x63, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x8c, (uintptr_t)data + 0x6c); patch_32r(code + 0x9b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xa9, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0xd3, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0xdc, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0xe8, (uintptr_t)data + 0x7c); } void emit__BINARY_SUBSCR_LIST_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_SUBSCR_LIST_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 49 8b 46 08 movq 0x8(%r14), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 10: 0f 85 bb 00 00 00 jne 0xd1 <_JIT_ENTRY+0xd1> // 16: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 1a: 48 8b 43 08 movq 0x8(%rbx), %rax // 1e: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_REX_GOTPCRELX PyList_Type-0x4 // 25: 0f 85 a6 00 00 00 jne 0xd1 <_JIT_ENTRY+0xd1> // 2b: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: f6 80 ab 00 00 00 01 testb $0x1, 0xab(%rax) // 39: 0f 84 ec 00 00 00 je 0x12b <_JIT_ENTRY+0x12b> // 3f: 49 83 7e 10 09 cmpq $0x9, 0x10(%r14) // 44: 0f 83 87 00 00 00 jae 0xd1 <_JIT_ENTRY+0xd1> // 4a: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_REX_GOTPCRELX PyList_Type-0x4 // 51: f6 80 ab 00 00 00 02 testb $0x2, 0xab(%rax) // 58: 0f 84 ed 00 00 00 je 0x14b <_JIT_ENTRY+0x14b> // 5e: 41 8b 46 18 movl 0x18(%r14), %eax // 62: 48 39 43 10 cmpq %rax, 0x10(%rbx) // 66: 7e 69 jle 0xd1 <_JIT_ENTRY+0xd1> // 68: 48 8b 4b 18 movq 0x18(%rbx), %rcx // 6c: 4c 8b 3c c1 movq (%rcx,%rax,8), %r15 // 70: 4d 85 ff testq %r15, %r15 // 73: 0f 84 f2 00 00 00 je 0x16b <_JIT_ENTRY+0x16b> // 79: 41 8b 07 movl (%r15), %eax // 7c: ff c0 incl %eax // 7e: 74 09 je 0x89 <_JIT_ENTRY+0x89> // 80: 41 89 07 movl %eax, (%r15) // 83: ff 15 00 00 00 00 callq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 89: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 8e: 75 51 jne 0xe1 <_JIT_ENTRY+0xe1> // 90: ff 15 00 00 00 00 callq *(%rip) # 0x96 <_JIT_ENTRY+0x96> // 0000000000000092: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 96: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 9d: 49 8b 06 movq (%r14), %rax // a0: 48 89 c1 movq %rax, %rcx // a3: 48 ff c9 decq %rcx // a6: 49 89 0e movq %rcx, (%r14) // a9: 74 2d je 0xd8 <_JIT_ENTRY+0xd8> // ab: 48 83 f8 01 cmpq $0x1, %rax // af: 7f 30 jg 0xe1 <_JIT_ENTRY+0xe1> // b1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb8 <_JIT_ENTRY+0xb8> // 00000000000000b4: R_X86_64_PC32 .L.str.117-0x4 // b8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xbf <_JIT_ENTRY+0xbf> // 00000000000000bb: R_X86_64_PC32 .L.str.118-0x4 // bf: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc6 <_JIT_ENTRY+0xc6> // 00000000000000c2: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // c6: ba bd 00 00 00 movl $0xbd, %edx // cb: ff 15 00 00 00 00 callq *(%rip) # 0xd1 <_JIT_ENTRY+0xd1> // 00000000000000cd: R_X86_64_GOTPCRELX __assert_fail-0x4 // d1: 58 popq %rax // d2: ff 25 00 00 00 00 jmpq *(%rip) # 0xd8 <_JIT_ENTRY+0xd8> // 00000000000000d4: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // d8: 4c 89 f7 movq %r14, %rdi // db: ff 15 00 00 00 00 callq *(%rip) # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_GOTPCRELX PyObject_Free-0x4 // e1: 48 8b 03 movq (%rbx), %rax // e4: 48 85 c0 testq %rax, %rax // e7: 7f 18 jg 0x101 <_JIT_ENTRY+0x101> // e9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.1-0x4 // f0: be d8 02 00 00 movl $0x2d8, %esi # imm = 0x2D8 // f5: 48 89 da movq %rbx, %rdx // f8: ff 15 00 00 00 00 callq *(%rip) # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // fe: 48 8b 03 movq (%rbx), %rax // 101: 4c 8d 75 f8 leaq -0x8(%rbp), %r14 // 105: 85 c0 testl %eax, %eax // 107: 78 14 js 0x11d <_JIT_ENTRY+0x11d> // 109: ff 15 00 00 00 00 callq *(%rip) # 0x10f <_JIT_ENTRY+0x10f> // 000000000000010b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 10f: 48 ff 0b decq (%rbx) // 112: 75 09 jne 0x11d <_JIT_ENTRY+0x11d> // 114: 48 89 df movq %rbx, %rdi // 117: ff 15 00 00 00 00 callq *(%rip) # 0x11d <_JIT_ENTRY+0x11d> // 0000000000000119: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 11d: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 121: 4c 89 f5 movq %r14, %rbp // 124: 58 popq %rax // 125: ff 25 00 00 00 00 jmpq *(%rip) # 0x12b <_JIT_ENTRY+0x12b> // 0000000000000127: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 12b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_PC32 .L.str.120-0x4 // 132: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x139 <_JIT_ENTRY+0x139> // 0000000000000135: R_X86_64_PC32 .L.str.121-0x4 // 139: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyLong_IsNonNegativeCompact-0x4 // 140: ba cc 00 00 00 movl $0xcc, %edx // 145: ff 15 00 00 00 00 callq *(%rip) # 0x14b <_JIT_ENTRY+0x14b> // 0000000000000147: R_X86_64_GOTPCRELX __assert_fail-0x4 // 14b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x152 <_JIT_ENTRY+0x152> // 000000000000014e: R_X86_64_PC32 .L.str.122-0x4 // 152: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x159 <_JIT_ENTRY+0x159> // 0000000000000155: R_X86_64_PC32 .L.str.123-0x4 // 159: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x160 <_JIT_ENTRY+0x160> // 000000000000015c: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyList_GET_SIZE-0x4 // 160: ba 1f 00 00 00 movl $0x1f, %edx // 165: ff 15 00 00 00 00 callq *(%rip) # 0x16b <_JIT_ENTRY+0x16b> // 0000000000000167: R_X86_64_GOTPCRELX __assert_fail-0x4 // 16b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x172 <_JIT_ENTRY+0x172> // 000000000000016e: R_X86_64_PC32 .L.str.9-0x4 // 172: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x179 <_JIT_ENTRY+0x179> // 0000000000000175: R_X86_64_PC32 .L.str.1-0x4 // 179: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x180 <_JIT_ENTRY+0x180> // 000000000000017c: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 180: ba d5 02 00 00 movl $0x2d5, %edx # imm = 0x2D5 // 185: ff 15 00 00 00 00 callq *(%rip) # 0x18b <_JIT_ENTRY+0x18b> // 0000000000000187: R_X86_64_GOTPCRELX __assert_fail-0x4 // 18b: const unsigned char code_body[395] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x49, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xbb, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf0, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xa6, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x84, 0xec, 0x00, 0x00, 0x00, 0x49, 0x83, 0x7e, 0x10, 0x09, 0x0f, 0x83, 0x87, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x84, 0xed, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x46, 0x18, 0x48, 0x39, 0x43, 0x10, 0x7e, 0x69, 0x48, 0x8b, 0x4b, 0x18, 0x4c, 0x8b, 0x3c, 0xc1, 0x4d, 0x85, 0xff, 0x0f, 0x84, 0xf2, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x51, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x2d, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xd8, 0x02, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8d, 0x75, 0xf8, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x4c, 0x89, 0xf5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcc, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1f, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xd5, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00res != NULL\x00op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00PyLong_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_long.h\x00int _PyLong_IsNonNegativeCompact(const PyLongObject *)\x00PyList_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/listobject.h\x00Py_ssize_t PyList_GET_SIZE(PyObject *)\x00' // 235: 00 00 00 // 238: &PyLong_Type+0x0 // 240: &PyList_Type+0x0 // 248: &_Py_INCREF_IncRefTotal+0x0 // 250: &PyInterpreterState_Get+0x0 // 258: &__assert_fail+0x0 // 260: JUMP_TARGET // 268: &PyObject_Free+0x0 // 270: &_Py_NegativeRefcount+0x0 // 278: &_Py_DECREF_DecRefTotal+0x0 // 280: &_Py_Dealloc+0x0 // 288: CONTINUE const unsigned char data_body[656] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x68, 0x00, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x49, 0x73, 0x4e, 0x6f, 0x6e, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x238, (uintptr_t)&PyLong_Type); patch_64(data + 0x240, (uintptr_t)&PyList_Type); patch_64(data + 0x248, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x250, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0x258, (uintptr_t)&__assert_fail); patch_64(data + 0x260, instruction_starts[instruction->jump_target]); patch_64(data + 0x268, (uintptr_t)&PyObject_Free); patch_64(data + 0x270, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x278, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x280, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x288, (uintptr_t)code + sizeof(code_body)); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x23c); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x23c); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0x244); patch_x86_64_32rx(code + 0x92, (uintptr_t)data + 0x24c); patch_32r(code + 0xb4, (uintptr_t)data + 0x96); patch_32r(code + 0xbb, (uintptr_t)data + 0xa8); patch_32r(code + 0xc2, (uintptr_t)data + 0xef); patch_x86_64_32rx(code + 0xcd, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0xd4, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0xdd, (uintptr_t)data + 0x264); patch_32r(code + 0xec, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xfa, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0x10b, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x119, (uintptr_t)data + 0x27c); patch_x86_64_32rx(code + 0x127, (uintptr_t)data + 0x284); patch_32r(code + 0x12e, (uintptr_t)data + 0x129); patch_32r(code + 0x135, (uintptr_t)data + 0x13a); patch_32r(code + 0x13c, (uintptr_t)data + 0x17f); patch_x86_64_32rx(code + 0x147, (uintptr_t)data + 0x254); patch_32r(code + 0x14e, (uintptr_t)data + 0x1b6); patch_32r(code + 0x155, (uintptr_t)data + 0x1c7); patch_32r(code + 0x15c, (uintptr_t)data + 0x20a); patch_x86_64_32rx(code + 0x167, (uintptr_t)data + 0x254); patch_32r(code + 0x16e, (uintptr_t)data + 0x8a); patch_32r(code + 0x175, (uintptr_t)data + -0x4); patch_32r(code + 0x17c, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x187, (uintptr_t)data + 0x254); } void emit__BINARY_SUBSCR_STR_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_SUBSCR_STR_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 49 8b 46 08 movq 0x8(%r14), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 10: 0f 85 23 01 00 00 jne 0x139 <_JIT_ENTRY+0x139> // 16: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 1a: 48 8b 43 08 movq 0x8(%rbx), %rax // 1e: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_REX_GOTPCRELX PyUnicode_Type-0x4 // 25: 0f 85 0e 01 00 00 jne 0x139 <_JIT_ENTRY+0x139> // 2b: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: f6 80 ab 00 00 00 01 testb $0x1, 0xab(%rax) // 39: 0f 84 b7 01 00 00 je 0x1f6 <_JIT_ENTRY+0x1f6> // 3f: 49 83 7e 10 09 cmpq $0x9, 0x10(%r14) // 44: 0f 83 ef 00 00 00 jae 0x139 <_JIT_ENTRY+0x139> // 4a: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_REX_GOTPCRELX PyUnicode_Type-0x4 // 51: f6 80 ab 00 00 00 10 testb $0x10, 0xab(%rax) // 58: 0f 84 b8 01 00 00 je 0x216 <_JIT_ENTRY+0x216> // 5e: 41 8b 46 18 movl 0x18(%r14), %eax // 62: 48 39 43 10 cmpq %rax, 0x10(%rbx) // 66: 0f 8e cd 00 00 00 jle 0x139 <_JIT_ENTRY+0x139> // 6c: 8b 4b 20 movl 0x20(%rbx), %ecx // 6f: 89 ca movl %ecx, %edx // 71: c1 ea 02 shrl $0x2, %edx // 74: 83 e2 07 andl $0x7, %edx // 77: 83 fa 04 cmpl $0x4, %edx // 7a: 74 3b je 0xb7 <_JIT_ENTRY+0xb7> // 7c: 83 fa 02 cmpl $0x2, %edx // 7f: 74 21 je 0xa2 <_JIT_ENTRY+0xa2> // 81: 83 fa 01 cmpl $0x1, %edx // 84: 0f 85 ac 01 00 00 jne 0x236 <_JIT_ENTRY+0x236> // 8a: f6 c1 20 testb $0x20, %cl // 8d: 0f 85 85 00 00 00 jne 0x118 <_JIT_ENTRY+0x118> // 93: 48 8b 4b 38 movq 0x38(%rbx), %rcx // 97: 48 85 c9 testq %rcx, %rcx // 9a: 0f 85 8b 00 00 00 jne 0x12b <_JIT_ENTRY+0x12b> // a0: eb 23 jmp 0xc5 <_JIT_ENTRY+0xc5> // a2: f6 c1 20 testb $0x20, %cl // a5: 75 3e jne 0xe5 <_JIT_ENTRY+0xe5> // a7: 48 8b 4b 38 movq 0x38(%rbx), %rcx // ab: 48 85 c9 testq %rcx, %rcx // ae: 74 15 je 0xc5 <_JIT_ENTRY+0xc5> // b0: 44 0f b7 3c 41 movzwl (%rcx,%rax,2), %r15d // b5: eb 79 jmp 0x130 <_JIT_ENTRY+0x130> // b7: f6 c1 20 testb $0x20, %cl // ba: 75 43 jne 0xff <_JIT_ENTRY+0xff> // bc: 48 8b 4b 38 movq 0x38(%rbx), %rcx // c0: 48 85 c9 testq %rcx, %rcx // c3: 75 4d jne 0x112 <_JIT_ENTRY+0x112> // c5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_PC32 .L.str.131-0x4 // cc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd3 <_JIT_ENTRY+0xd3> // 00000000000000cf: R_X86_64_PC32 .L.str.125-0x4 // d3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xda <_JIT_ENTRY+0xda> // 00000000000000d6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyUnicode_NONCOMPACT_DATA-0x4 // da: ba 01 01 00 00 movl $0x101, %edx # imm = 0x101 // df: ff 15 00 00 00 00 callq *(%rip) # 0xe5 <_JIT_ENTRY+0xe5> // 00000000000000e1: R_X86_64_GOTPCRELX __assert_fail-0x4 // e5: 31 d2 xorl %edx, %edx // e7: f6 c1 40 testb $0x40, %cl // ea: 0f 94 c2 sete %dl // ed: c1 e2 04 shll $0x4, %edx // f0: 48 8d 0c 13 leaq (%rbx,%rdx), %rcx // f4: 48 83 c1 28 addq $0x28, %rcx // f8: 44 0f b7 3c 41 movzwl (%rcx,%rax,2), %r15d // fd: eb 31 jmp 0x130 <_JIT_ENTRY+0x130> // ff: 31 d2 xorl %edx, %edx // 101: f6 c1 40 testb $0x40, %cl // 104: 0f 94 c2 sete %dl // 107: c1 e2 04 shll $0x4, %edx // 10a: 48 8d 0c 13 leaq (%rbx,%rdx), %rcx // 10e: 48 83 c1 28 addq $0x28, %rcx // 112: 44 8b 3c 81 movl (%rcx,%rax,4), %r15d // 116: eb 18 jmp 0x130 <_JIT_ENTRY+0x130> // 118: 31 d2 xorl %edx, %edx // 11a: f6 c1 40 testb $0x40, %cl // 11d: 0f 94 c2 sete %dl // 120: c1 e2 04 shll $0x4, %edx // 123: 48 8d 0c 13 leaq (%rbx,%rdx), %rcx // 127: 48 83 c1 28 addq $0x28, %rcx // 12b: 44 0f b6 3c 01 movzbl (%rcx,%rax), %r15d // 130: 41 81 ff 80 00 00 00 cmpl $0x80, %r15d // 137: 72 07 jb 0x140 <_JIT_ENTRY+0x140> // 139: 58 popq %rax // 13a: ff 25 00 00 00 00 jmpq *(%rip) # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 140: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 145: 75 4a jne 0x191 <_JIT_ENTRY+0x191> // 147: ff 15 00 00 00 00 callq *(%rip) # 0x14d <_JIT_ENTRY+0x14d> // 0000000000000149: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 14d: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 154: 49 8b 06 movq (%r14), %rax // 157: 48 89 c1 movq %rax, %rcx // 15a: 48 ff c9 decq %rcx // 15d: 49 89 0e movq %rcx, (%r14) // 160: 74 26 je 0x188 <_JIT_ENTRY+0x188> // 162: 48 83 f8 01 cmpq $0x1, %rax // 166: 7f 29 jg 0x191 <_JIT_ENTRY+0x191> // 168: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x16f <_JIT_ENTRY+0x16f> // 000000000000016b: R_X86_64_PC32 .L.str.117-0x4 // 16f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x176 <_JIT_ENTRY+0x176> // 0000000000000172: R_X86_64_PC32 .L.str.118-0x4 // 176: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x17d <_JIT_ENTRY+0x17d> // 0000000000000179: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 17d: ba bd 00 00 00 movl $0xbd, %edx // 182: ff 15 00 00 00 00 callq *(%rip) # 0x188 <_JIT_ENTRY+0x188> // 0000000000000184: R_X86_64_GOTPCRELX __assert_fail-0x4 // 188: 4c 89 f7 movq %r14, %rdi // 18b: ff 15 00 00 00 00 callq *(%rip) # 0x191 <_JIT_ENTRY+0x191> // 000000000000018d: R_X86_64_GOTPCRELX PyObject_Free-0x4 // 191: 48 8b 03 movq (%rbx), %rax // 194: 48 85 c0 testq %rax, %rax // 197: 7f 18 jg 0x1b1 <_JIT_ENTRY+0x1b1> // 199: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a0 <_JIT_ENTRY+0x1a0> // 000000000000019c: R_X86_64_PC32 .L.str.1-0x4 // 1a0: be fe 02 00 00 movl $0x2fe, %esi # imm = 0x2FE // 1a5: 48 89 da movq %rbx, %rdx // 1a8: ff 15 00 00 00 00 callq *(%rip) # 0x1ae <_JIT_ENTRY+0x1ae> // 00000000000001aa: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 1ae: 48 8b 03 movq (%rbx), %rax // 1b1: 4c 8d 75 f8 leaq -0x8(%rbp), %r14 // 1b5: 85 c0 testl %eax, %eax // 1b7: 78 14 js 0x1cd <_JIT_ENTRY+0x1cd> // 1b9: ff 15 00 00 00 00 callq *(%rip) # 0x1bf <_JIT_ENTRY+0x1bf> // 00000000000001bb: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 1bf: 48 ff 0b decq (%rbx) // 1c2: 75 09 jne 0x1cd <_JIT_ENTRY+0x1cd> // 1c4: 48 89 df movq %rbx, %rdi // 1c7: ff 15 00 00 00 00 callq *(%rip) # 0x1cd <_JIT_ENTRY+0x1cd> // 00000000000001c9: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 1cd: 44 89 f8 movl %r15d, %eax // 1d0: 48 8d 04 40 leaq (%rax,%rax,2), %rax // 1d4: 48 c1 e0 04 shlq $0x4, %rax // 1d8: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x1df <_JIT_ENTRY+0x1df> // 00000000000001db: R_X86_64_REX_GOTPCRELX _PyRuntime-0x4 // 1df: 48 01 c8 addq %rcx, %rax // 1e2: 48 05 f8 53 01 00 addq $0x153f8, %rax # imm = 0x153F8 // 1e8: 48 89 45 f0 movq %rax, -0x10(%rbp) // 1ec: 4c 89 f5 movq %r14, %rbp // 1ef: 58 popq %rax // 1f0: ff 25 00 00 00 00 jmpq *(%rip) # 0x1f6 <_JIT_ENTRY+0x1f6> // 00000000000001f2: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1f6: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1fd <_JIT_ENTRY+0x1fd> // 00000000000001f9: R_X86_64_PC32 .L.str.120-0x4 // 1fd: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x204 <_JIT_ENTRY+0x204> // 0000000000000200: R_X86_64_PC32 .L.str.121-0x4 // 204: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x20b <_JIT_ENTRY+0x20b> // 0000000000000207: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyLong_IsNonNegativeCompact-0x4 // 20b: ba cc 00 00 00 movl $0xcc, %edx // 210: ff 15 00 00 00 00 callq *(%rip) # 0x216 <_JIT_ENTRY+0x216> // 0000000000000212: R_X86_64_GOTPCRELX __assert_fail-0x4 // 216: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x21d <_JIT_ENTRY+0x21d> // 0000000000000219: R_X86_64_PC32 .L.str.124-0x4 // 21d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x224 <_JIT_ENTRY+0x224> // 0000000000000220: R_X86_64_PC32 .L.str.125-0x4 // 224: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x22b <_JIT_ENTRY+0x22b> // 0000000000000227: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyUnicode_GET_LENGTH-0x4 // 22b: ba 18 01 00 00 movl $0x118, %edx # imm = 0x118 // 230: ff 15 00 00 00 00 callq *(%rip) # 0x236 <_JIT_ENTRY+0x236> // 0000000000000232: R_X86_64_GOTPCRELX __assert_fail-0x4 // 236: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x23d <_JIT_ENTRY+0x23d> // 0000000000000239: R_X86_64_PC32 .L.str.129-0x4 // 23d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x244 <_JIT_ENTRY+0x244> // 0000000000000240: R_X86_64_PC32 .L.str.125-0x4 // 244: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x24b <_JIT_ENTRY+0x24b> // 0000000000000247: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyUnicode_READ_CHAR-0x4 // 24b: ba 5e 01 00 00 movl $0x15e, %edx # imm = 0x15E // 250: ff 15 00 00 00 00 callq *(%rip) # 0x256 <_JIT_ENTRY+0x256> // 0000000000000252: R_X86_64_GOTPCRELX __assert_fail-0x4 // 256: const unsigned char code_body[598] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x49, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x23, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf0, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x0e, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x84, 0xb7, 0x01, 0x00, 0x00, 0x49, 0x83, 0x7e, 0x10, 0x09, 0x0f, 0x83, 0xef, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x10, 0x0f, 0x84, 0xb8, 0x01, 0x00, 0x00, 0x41, 0x8b, 0x46, 0x18, 0x48, 0x39, 0x43, 0x10, 0x0f, 0x8e, 0xcd, 0x00, 0x00, 0x00, 0x8b, 0x4b, 0x20, 0x89, 0xca, 0xc1, 0xea, 0x02, 0x83, 0xe2, 0x07, 0x83, 0xfa, 0x04, 0x74, 0x3b, 0x83, 0xfa, 0x02, 0x74, 0x21, 0x83, 0xfa, 0x01, 0x0f, 0x85, 0xac, 0x01, 0x00, 0x00, 0xf6, 0xc1, 0x20, 0x0f, 0x85, 0x85, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4b, 0x38, 0x48, 0x85, 0xc9, 0x0f, 0x85, 0x8b, 0x00, 0x00, 0x00, 0xeb, 0x23, 0xf6, 0xc1, 0x20, 0x75, 0x3e, 0x48, 0x8b, 0x4b, 0x38, 0x48, 0x85, 0xc9, 0x74, 0x15, 0x44, 0x0f, 0xb7, 0x3c, 0x41, 0xeb, 0x79, 0xf6, 0xc1, 0x20, 0x75, 0x43, 0x48, 0x8b, 0x4b, 0x38, 0x48, 0x85, 0xc9, 0x75, 0x4d, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x01, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x31, 0xd2, 0xf6, 0xc1, 0x40, 0x0f, 0x94, 0xc2, 0xc1, 0xe2, 0x04, 0x48, 0x8d, 0x0c, 0x13, 0x48, 0x83, 0xc1, 0x28, 0x44, 0x0f, 0xb7, 0x3c, 0x41, 0xeb, 0x31, 0x31, 0xd2, 0xf6, 0xc1, 0x40, 0x0f, 0x94, 0xc2, 0xc1, 0xe2, 0x04, 0x48, 0x8d, 0x0c, 0x13, 0x48, 0x83, 0xc1, 0x28, 0x44, 0x8b, 0x3c, 0x81, 0xeb, 0x18, 0x31, 0xd2, 0xf6, 0xc1, 0x40, 0x0f, 0x94, 0xc2, 0xc1, 0xe2, 0x04, 0x48, 0x8d, 0x0c, 0x13, 0x48, 0x83, 0xc1, 0x28, 0x44, 0x0f, 0xb6, 0x3c, 0x01, 0x41, 0x81, 0xff, 0x80, 0x00, 0x00, 0x00, 0x72, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x4a, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x26, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x29, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xfe, 0x02, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8d, 0x75, 0xf8, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0xf8, 0x48, 0x8d, 0x04, 0x40, 0x48, 0xc1, 0xe0, 0x04, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xc8, 0x48, 0x05, 0xf8, 0x53, 0x01, 0x00, 0x48, 0x89, 0x45, 0xf0, 0x4c, 0x89, 0xf5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcc, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x18, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5e, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00PyLong_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_long.h\x00int _PyLong_IsNonNegativeCompact(const PyLongObject *)\x00PyUnicode_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/unicodeobject.h\x00Py_ssize_t PyUnicode_GET_LENGTH(PyObject *)\x00Py_UCS4 PyUnicode_READ_CHAR(PyObject *, Py_ssize_t)\x00kind == PyUnicode_4BYTE_KIND\x00void *_PyUnicode_NONCOMPACT_DATA(PyObject *)\x00data != NULL\x00' // 271: 00 00 00 00 00 00 00 // 278: &PyLong_Type+0x0 // 280: &PyUnicode_Type+0x0 // 288: &__assert_fail+0x0 // 290: JUMP_TARGET // 298: &PyInterpreterState_Get+0x0 // 2a0: &PyObject_Free+0x0 // 2a8: &_Py_NegativeRefcount+0x0 // 2b0: &_Py_DECREF_DecRefTotal+0x0 // 2b8: &_Py_Dealloc+0x0 // 2c0: &_PyRuntime+0x0 // 2c8: CONTINUE const unsigned char data_body[720] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x68, 0x00, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x49, 0x73, 0x4e, 0x6f, 0x6e, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x75, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x4c, 0x45, 0x4e, 0x47, 0x54, 0x48, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x55, 0x43, 0x53, 0x34, 0x20, 0x50, 0x79, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x52, 0x45, 0x41, 0x44, 0x5f, 0x43, 0x48, 0x41, 0x52, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x50, 0x79, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x34, 0x42, 0x59, 0x54, 0x45, 0x5f, 0x4b, 0x49, 0x4e, 0x44, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x5f, 0x4e, 0x4f, 0x4e, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x43, 0x54, 0x5f, 0x44, 0x41, 0x54, 0x41, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x64, 0x61, 0x74, 0x61, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x278, (uintptr_t)&PyLong_Type); patch_64(data + 0x280, (uintptr_t)&PyUnicode_Type); patch_64(data + 0x288, (uintptr_t)&__assert_fail); patch_64(data + 0x290, instruction_starts[instruction->jump_target]); patch_64(data + 0x298, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0x2a0, (uintptr_t)&PyObject_Free); patch_64(data + 0x2a8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x2b0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x2b8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x2c0, (uintptr_t)&_PyRuntime); patch_64(data + 0x2c8, (uintptr_t)code + sizeof(code_body)); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x27c); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x27c); patch_32r(code + 0xc8, (uintptr_t)data + 0x260); patch_32r(code + 0xcf, (uintptr_t)data + 0x170); patch_32r(code + 0xd6, (uintptr_t)data + 0x233); patch_x86_64_32rx(code + 0xe1, (uintptr_t)data + 0x284); patch_x86_64_32rx(code + 0x13c, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x149, (uintptr_t)data + 0x294); patch_32r(code + 0x16b, (uintptr_t)data + 0x3c); patch_32r(code + 0x172, (uintptr_t)data + 0x4e); patch_32r(code + 0x179, (uintptr_t)data + 0x95); patch_x86_64_32rx(code + 0x184, (uintptr_t)data + 0x284); patch_x86_64_32rx(code + 0x18d, (uintptr_t)data + 0x29c); patch_32r(code + 0x19c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1aa, (uintptr_t)data + 0x2a4); patch_x86_64_32rx(code + 0x1bb, (uintptr_t)data + 0x2ac); patch_x86_64_32rx(code + 0x1c9, (uintptr_t)data + 0x2b4); patch_x86_64_32rx(code + 0x1db, (uintptr_t)data + 0x2bc); patch_x86_64_32rx(code + 0x1f2, (uintptr_t)data + 0x2c4); patch_32r(code + 0x1f9, (uintptr_t)data + 0xcf); patch_32r(code + 0x200, (uintptr_t)data + 0xe0); patch_32r(code + 0x207, (uintptr_t)data + 0x125); patch_x86_64_32rx(code + 0x212, (uintptr_t)data + 0x284); patch_32r(code + 0x219, (uintptr_t)data + 0x15c); patch_32r(code + 0x220, (uintptr_t)data + 0x170); patch_32r(code + 0x227, (uintptr_t)data + 0x1b6); patch_x86_64_32rx(code + 0x232, (uintptr_t)data + 0x284); patch_32r(code + 0x239, (uintptr_t)data + 0x216); patch_32r(code + 0x240, (uintptr_t)data + 0x170); patch_32r(code + 0x247, (uintptr_t)data + 0x1e2); patch_x86_64_32rx(code + 0x252, (uintptr_t)data + 0x284); } void emit__BINARY_SUBSCR_TUPLE_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BINARY_SUBSCR_TUPLE_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 49 8b 46 08 movq 0x8(%r14), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 10: 0f 85 b8 00 00 00 jne 0xce <_JIT_ENTRY+0xce> // 16: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 1a: 48 8b 43 08 movq 0x8(%rbx), %rax // 1e: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 25: 0f 85 a3 00 00 00 jne 0xce <_JIT_ENTRY+0xce> // 2b: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: f6 80 ab 00 00 00 01 testb $0x1, 0xab(%rax) // 39: 0f 84 e9 00 00 00 je 0x128 <_JIT_ENTRY+0x128> // 3f: 49 83 7e 10 09 cmpq $0x9, 0x10(%r14) // 44: 0f 83 84 00 00 00 jae 0xce <_JIT_ENTRY+0xce> // 4a: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 51: f6 80 ab 00 00 00 04 testb $0x4, 0xab(%rax) // 58: 0f 84 ea 00 00 00 je 0x148 <_JIT_ENTRY+0x148> // 5e: 41 8b 46 18 movl 0x18(%r14), %eax // 62: 48 39 43 10 cmpq %rax, 0x10(%rbx) // 66: 7e 66 jle 0xce <_JIT_ENTRY+0xce> // 68: 4c 8b 7c c3 18 movq 0x18(%rbx,%rax,8), %r15 // 6d: 4d 85 ff testq %r15, %r15 // 70: 0f 84 f2 00 00 00 je 0x168 <_JIT_ENTRY+0x168> // 76: 41 8b 07 movl (%r15), %eax // 79: ff c0 incl %eax // 7b: 74 09 je 0x86 <_JIT_ENTRY+0x86> // 7d: 41 89 07 movl %eax, (%r15) // 80: ff 15 00 00 00 00 callq *(%rip) # 0x86 <_JIT_ENTRY+0x86> // 0000000000000082: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 86: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 8b: 75 51 jne 0xde <_JIT_ENTRY+0xde> // 8d: ff 15 00 00 00 00 callq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 93: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 9a: 49 8b 06 movq (%r14), %rax // 9d: 48 89 c1 movq %rax, %rcx // a0: 48 ff c9 decq %rcx // a3: 49 89 0e movq %rcx, (%r14) // a6: 74 2d je 0xd5 <_JIT_ENTRY+0xd5> // a8: 48 83 f8 01 cmpq $0x1, %rax // ac: 7f 30 jg 0xde <_JIT_ENTRY+0xde> // ae: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_PC32 .L.str.117-0x4 // b5: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xbc <_JIT_ENTRY+0xbc> // 00000000000000b8: R_X86_64_PC32 .L.str.118-0x4 // bc: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc3 <_JIT_ENTRY+0xc3> // 00000000000000bf: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // c3: ba bd 00 00 00 movl $0xbd, %edx // c8: ff 15 00 00 00 00 callq *(%rip) # 0xce <_JIT_ENTRY+0xce> // 00000000000000ca: R_X86_64_GOTPCRELX __assert_fail-0x4 // ce: 58 popq %rax // cf: ff 25 00 00 00 00 jmpq *(%rip) # 0xd5 <_JIT_ENTRY+0xd5> // 00000000000000d1: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // d5: 4c 89 f7 movq %r14, %rdi // d8: ff 15 00 00 00 00 callq *(%rip) # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_GOTPCRELX PyObject_Free-0x4 // de: 48 8b 03 movq (%rbx), %rax // e1: 48 85 c0 testq %rax, %rax // e4: 7f 18 jg 0xfe <_JIT_ENTRY+0xfe> // e6: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xed <_JIT_ENTRY+0xed> // 00000000000000e9: R_X86_64_PC32 .L.str.1-0x4 // ed: be 21 03 00 00 movl $0x321, %esi # imm = 0x321 // f2: 48 89 da movq %rbx, %rdx // f5: ff 15 00 00 00 00 callq *(%rip) # 0xfb <_JIT_ENTRY+0xfb> // 00000000000000f7: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // fb: 48 8b 03 movq (%rbx), %rax // fe: 4c 8d 75 f8 leaq -0x8(%rbp), %r14 // 102: 85 c0 testl %eax, %eax // 104: 78 14 js 0x11a <_JIT_ENTRY+0x11a> // 106: ff 15 00 00 00 00 callq *(%rip) # 0x10c <_JIT_ENTRY+0x10c> // 0000000000000108: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 10c: 48 ff 0b decq (%rbx) // 10f: 75 09 jne 0x11a <_JIT_ENTRY+0x11a> // 111: 48 89 df movq %rbx, %rdi // 114: ff 15 00 00 00 00 callq *(%rip) # 0x11a <_JIT_ENTRY+0x11a> // 0000000000000116: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 11a: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 11e: 4c 89 f5 movq %r14, %rbp // 121: 58 popq %rax // 122: ff 25 00 00 00 00 jmpq *(%rip) # 0x128 <_JIT_ENTRY+0x128> // 0000000000000124: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 128: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12f <_JIT_ENTRY+0x12f> // 000000000000012b: R_X86_64_PC32 .L.str.120-0x4 // 12f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x136 <_JIT_ENTRY+0x136> // 0000000000000132: R_X86_64_PC32 .L.str.121-0x4 // 136: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x13d <_JIT_ENTRY+0x13d> // 0000000000000139: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyLong_IsNonNegativeCompact-0x4 // 13d: ba cc 00 00 00 movl $0xcc, %edx // 142: ff 15 00 00 00 00 callq *(%rip) # 0x148 <_JIT_ENTRY+0x148> // 0000000000000144: R_X86_64_GOTPCRELX __assert_fail-0x4 // 148: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x14f <_JIT_ENTRY+0x14f> // 000000000000014b: R_X86_64_PC32 .L.str.132-0x4 // 14f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x156 <_JIT_ENTRY+0x156> // 0000000000000152: R_X86_64_PC32 .L.str.133-0x4 // 156: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x15d <_JIT_ENTRY+0x15d> // 0000000000000159: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyTuple_GET_SIZE-0x4 // 15d: ba 16 00 00 00 movl $0x16, %edx // 162: ff 15 00 00 00 00 callq *(%rip) # 0x168 <_JIT_ENTRY+0x168> // 0000000000000164: R_X86_64_GOTPCRELX __assert_fail-0x4 // 168: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x16f <_JIT_ENTRY+0x16f> // 000000000000016b: R_X86_64_PC32 .L.str.9-0x4 // 16f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x176 <_JIT_ENTRY+0x176> // 0000000000000172: R_X86_64_PC32 .L.str.1-0x4 // 176: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x17d <_JIT_ENTRY+0x17d> // 0000000000000179: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 17d: ba 1e 03 00 00 movl $0x31e, %edx # imm = 0x31E // 182: ff 15 00 00 00 00 callq *(%rip) # 0x188 <_JIT_ENTRY+0x188> // 0000000000000184: R_X86_64_GOTPCRELX __assert_fail-0x4 // 188: const unsigned char code_body[392] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x49, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf0, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xa3, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x84, 0xe9, 0x00, 0x00, 0x00, 0x49, 0x83, 0x7e, 0x10, 0x09, 0x0f, 0x83, 0x84, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xea, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x46, 0x18, 0x48, 0x39, 0x43, 0x10, 0x7e, 0x66, 0x4c, 0x8b, 0x7c, 0xc3, 0x18, 0x4d, 0x85, 0xff, 0x0f, 0x84, 0xf2, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x51, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x2d, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x21, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8d, 0x75, 0xf8, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x4c, 0x89, 0xf5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcc, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x16, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1e, 0x03, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00res != NULL\x00op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00PyLong_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_long.h\x00int _PyLong_IsNonNegativeCompact(const PyLongObject *)\x00PyTuple_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/tupleobject.h\x00Py_ssize_t PyTuple_GET_SIZE(PyObject *)\x00' // 238: // 238: &PyLong_Type+0x0 // 240: &PyTuple_Type+0x0 // 248: &_Py_INCREF_IncRefTotal+0x0 // 250: &PyInterpreterState_Get+0x0 // 258: &__assert_fail+0x0 // 260: JUMP_TARGET // 268: &PyObject_Free+0x0 // 270: &_Py_NegativeRefcount+0x0 // 278: &_Py_DECREF_DecRefTotal+0x0 // 280: &_Py_Dealloc+0x0 // 288: CONTINUE const unsigned char data_body[656] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x68, 0x00, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x49, 0x73, 0x4e, 0x6f, 0x6e, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x238, (uintptr_t)&PyLong_Type); patch_64(data + 0x240, (uintptr_t)&PyTuple_Type); patch_64(data + 0x248, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x250, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0x258, (uintptr_t)&__assert_fail); patch_64(data + 0x260, instruction_starts[instruction->jump_target]); patch_64(data + 0x268, (uintptr_t)&PyObject_Free); patch_64(data + 0x270, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x278, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x280, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x288, (uintptr_t)code + sizeof(code_body)); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x23c); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x23c); patch_x86_64_32rx(code + 0x82, (uintptr_t)data + 0x244); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0x24c); patch_32r(code + 0xb1, (uintptr_t)data + 0x96); patch_32r(code + 0xb8, (uintptr_t)data + 0xa8); patch_32r(code + 0xbf, (uintptr_t)data + 0xef); patch_x86_64_32rx(code + 0xca, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0xd1, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0xda, (uintptr_t)data + 0x264); patch_32r(code + 0xe9, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xf7, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0x108, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x116, (uintptr_t)data + 0x27c); patch_x86_64_32rx(code + 0x124, (uintptr_t)data + 0x284); patch_32r(code + 0x12b, (uintptr_t)data + 0x129); patch_32r(code + 0x132, (uintptr_t)data + 0x13a); patch_32r(code + 0x139, (uintptr_t)data + 0x17f); patch_x86_64_32rx(code + 0x144, (uintptr_t)data + 0x254); patch_32r(code + 0x14b, (uintptr_t)data + 0x1b6); patch_32r(code + 0x152, (uintptr_t)data + 0x1c8); patch_32r(code + 0x159, (uintptr_t)data + 0x20c); patch_x86_64_32rx(code + 0x164, (uintptr_t)data + 0x254); patch_32r(code + 0x16b, (uintptr_t)data + 0x8a); patch_32r(code + 0x172, (uintptr_t)data + -0x4); patch_32r(code + 0x179, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x184, (uintptr_t)data + 0x254); } void emit__BUILD_CONST_KEY_MAP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BUILD_CONST_KEY_MAP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 38 subq $0x38, %rsp // 4: 48 8b 4d f8 movq -0x8(%rbp), %rcx // 8: 48 8b 41 08 movq 0x8(%rcx), %rax // c: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 13: 0f 85 88 01 00 00 jne 0x1a1 <_JIT_ENTRY+0x1a1> // 19: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 20: f6 80 ab 00 00 00 04 testb $0x4, 0xab(%rax) // 27: 0f 84 94 01 00 00 je 0x1c1 <_JIT_ENTRY+0x1c1> // 2d: 4c 89 6c 24 28 movq %r13, 0x28(%rsp) // 32: 4c 89 64 24 30 movq %r12, 0x30(%rsp) // 37: 4c 8b 71 10 movq 0x10(%rcx), %r14 // 3b: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 42: 49 39 c6 cmpq %rax, %r14 // 45: 0f 85 96 01 00 00 jne 0x1e1 <_JIT_ENTRY+0x1e1> // 4b: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 52: 89 44 24 04 movl %eax, 0x4(%rsp) // 56: f7 d0 notl %eax // 58: 48 98 cltq // 5a: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 5f: 48 8d 54 c5 00 leaq (%rbp,%rax,8), %rdx // 64: 48 89 4c 24 20 movq %rcx, 0x20(%rsp) // 69: 48 8d 79 18 leaq 0x18(%rcx), %rdi // 6d: be 01 00 00 00 movl $0x1, %esi // 72: b9 01 00 00 00 movl $0x1, %ecx // 77: 48 89 54 24 10 movq %rdx, 0x10(%rsp) // 7c: 4d 89 f0 movq %r14, %r8 // 7f: ff 15 00 00 00 00 callq *(%rip) # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_GOTPCRELX _PyDict_FromItems-0x4 // 85: 48 89 44 24 18 movq %rax, 0x18(%rsp) // 8a: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x91 <_JIT_ENTRY+0x91> // 000000000000008d: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 91: 66 85 c0 testw %ax, %ax // 94: 0f 84 7e 00 00 00 je 0x118 <_JIT_ENTRY+0x118> // 9a: 49 ff c6 incq %r14 // 9d: 8b 44 24 04 movl 0x4(%rsp), %eax // a1: f7 d8 negl %eax // a3: 48 98 cltq // a5: 48 8b 4c 24 08 movq 0x8(%rsp), %rcx // aa: 4c 8d 3c c1 leaq (%rcx,%rax,8), %r15 // ae: 49 83 c7 f0 addq $-0x10, %r15 // b2: 4c 8d 25 00 00 00 00 leaq (%rip), %r12 # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_PC32 .L.str.1-0x4 // b9: 48 8b 2d 00 00 00 00 movq (%rip), %rbp # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_REX_GOTPCRELX _Py_NegativeRefcount-0x4 // c0: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_REX_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // c7: eb 10 jmp 0xd9 <_JIT_ENTRY+0xd9> // c9: 0f 1f 80 00 00 00 00 nopl (%rax) // d0: 49 ff ce decq %r14 // d3: 49 83 fe 01 cmpq $0x1, %r14 // d7: 76 3f jbe 0x118 <_JIT_ENTRY+0x118> // d9: 4f 8b 6c f7 f8 movq -0x8(%r15,%r14,8), %r13 // de: 49 8b 45 00 movq (%r13), %rax // e2: 48 85 c0 testq %rax, %rax // e5: 7e 09 jle 0xf0 <_JIT_ENTRY+0xf0> // e7: 85 c0 testl %eax, %eax // e9: 78 e5 js 0xd0 <_JIT_ENTRY+0xd0> // eb: eb 18 jmp 0x105 <_JIT_ENTRY+0x105> // ed: 0f 1f 00 nopl (%rax) // f0: 4c 89 e7 movq %r12, %rdi // f3: be f7 06 00 00 movl $0x6f7, %esi # imm = 0x6F7 // f8: 4c 89 ea movq %r13, %rdx // fb: ff d5 callq *%rbp // fd: 49 8b 45 00 movq (%r13), %rax // 101: 85 c0 testl %eax, %eax // 103: 78 cb js 0xd0 <_JIT_ENTRY+0xd0> // 105: ff d3 callq *%rbx // 107: 49 ff 4d 00 decq (%r13) // 10b: 75 c3 jne 0xd0 <_JIT_ENTRY+0xd0> // 10d: 4c 89 ef movq %r13, %rdi // 110: ff 15 00 00 00 00 callq *(%rip) # 0x116 <_JIT_ENTRY+0x116> // 0000000000000112: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 116: eb b8 jmp 0xd0 <_JIT_ENTRY+0xd0> // 118: 48 8b 5c 24 20 movq 0x20(%rsp), %rbx // 11d: 48 8b 03 movq (%rbx), %rax // 120: 48 85 c0 testq %rax, %rax // 123: 7f 18 jg 0x13d <_JIT_ENTRY+0x13d> // 125: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12c <_JIT_ENTRY+0x12c> // 0000000000000128: R_X86_64_PC32 .L.str.1-0x4 // 12c: be f9 06 00 00 movl $0x6f9, %esi # imm = 0x6F9 // 131: 48 89 da movq %rbx, %rdx // 134: ff 15 00 00 00 00 callq *(%rip) # 0x13a <_JIT_ENTRY+0x13a> // 0000000000000136: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 13a: 48 8b 03 movq (%rbx), %rax // 13d: 85 c0 testl %eax, %eax // 13f: 4c 8b 64 24 30 movq 0x30(%rsp), %r12 // 144: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // 149: 4c 8b 6c 24 28 movq 0x28(%rsp), %r13 // 14e: 78 0b js 0x15b <_JIT_ENTRY+0x15b> // 150: ff 15 00 00 00 00 callq *(%rip) # 0x156 <_JIT_ENTRY+0x156> // 0000000000000152: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 156: 48 ff 0b decq (%rbx) // 159: 74 29 je 0x184 <_JIT_ENTRY+0x184> // 15b: 48 8b 4c 24 18 movq 0x18(%rsp), %rcx // 160: 48 85 c9 testq %rcx, %rcx // 163: 74 32 je 0x197 <_JIT_ENTRY+0x197> // 165: 48 8b 44 24 10 movq 0x10(%rsp), %rax // 16a: 48 89 08 movq %rcx, (%rax) // 16d: 8b 44 24 04 movl 0x4(%rsp), %eax // 171: f7 d8 negl %eax // 173: 48 98 cltq // 175: 48 8d 6c c5 00 leaq (%rbp,%rax,8), %rbp // 17a: 48 83 c4 38 addq $0x38, %rsp // 17e: ff 25 00 00 00 00 jmpq *(%rip) # 0x184 <_JIT_ENTRY+0x184> // 0000000000000180: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 184: 48 89 df movq %rbx, %rdi // 187: ff 15 00 00 00 00 callq *(%rip) # 0x18d <_JIT_ENTRY+0x18d> // 0000000000000189: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 18d: 48 8b 4c 24 18 movq 0x18(%rsp), %rcx // 192: 48 85 c9 testq %rcx, %rcx // 195: 75 ce jne 0x165 <_JIT_ENTRY+0x165> // 197: 48 83 c4 38 addq $0x38, %rsp // 19b: ff 25 00 00 00 00 jmpq *(%rip) # 0x1a1 <_JIT_ENTRY+0x1a1> // 000000000000019d: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1a1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a8 <_JIT_ENTRY+0x1a8> // 00000000000001a4: R_X86_64_PC32 .L.str.39-0x4 // 1a8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1af <_JIT_ENTRY+0x1af> // 00000000000001ab: R_X86_64_PC32 .L.str.1-0x4 // 1af: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1b6 <_JIT_ENTRY+0x1b6> // 00000000000001b2: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1b6: ba f1 06 00 00 movl $0x6f1, %edx # imm = 0x6F1 // 1bb: ff 15 00 00 00 00 callq *(%rip) # 0x1c1 <_JIT_ENTRY+0x1c1> // 00000000000001bd: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1c1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1c8 <_JIT_ENTRY+0x1c8> // 00000000000001c4: R_X86_64_PC32 .L.str.132-0x4 // 1c8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1cf <_JIT_ENTRY+0x1cf> // 00000000000001cb: R_X86_64_PC32 .L.str.133-0x4 // 1cf: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1d6 <_JIT_ENTRY+0x1d6> // 00000000000001d2: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyTuple_GET_SIZE-0x4 // 1d6: ba 16 00 00 00 movl $0x16, %edx // 1db: ff 15 00 00 00 00 callq *(%rip) # 0x1e1 <_JIT_ENTRY+0x1e1> // 00000000000001dd: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1e1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1e8 <_JIT_ENTRY+0x1e8> // 00000000000001e4: R_X86_64_PC32 .L.str.40-0x4 // 1e8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1ef <_JIT_ENTRY+0x1ef> // 00000000000001eb: R_X86_64_PC32 .L.str.1-0x4 // 1ef: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1f6 <_JIT_ENTRY+0x1f6> // 00000000000001f2: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1f6: ba f2 06 00 00 movl $0x6f2, %edx # imm = 0x6F2 // 1fb: ff 15 00 00 00 00 callq *(%rip) # 0x201 <_JIT_ENTRY+0x201> // 00000000000001fd: R_X86_64_GOTPCRELX __assert_fail-0x4 // 201: const unsigned char code_body[513] = { 0x48, 0x83, 0xec, 0x38, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x88, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x94, 0x01, 0x00, 0x00, 0x4c, 0x89, 0x6c, 0x24, 0x28, 0x4c, 0x89, 0x64, 0x24, 0x30, 0x4c, 0x8b, 0x71, 0x10, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x39, 0xc6, 0x0f, 0x85, 0x96, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x89, 0x44, 0x24, 0x04, 0xf7, 0xd0, 0x48, 0x98, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x48, 0x8d, 0x54, 0xc5, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x20, 0x48, 0x8d, 0x79, 0x18, 0xbe, 0x01, 0x00, 0x00, 0x00, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x48, 0x89, 0x54, 0x24, 0x10, 0x4d, 0x89, 0xf0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x18, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x0f, 0x84, 0x7e, 0x00, 0x00, 0x00, 0x49, 0xff, 0xc6, 0x8b, 0x44, 0x24, 0x04, 0xf7, 0xd8, 0x48, 0x98, 0x48, 0x8b, 0x4c, 0x24, 0x08, 0x4c, 0x8d, 0x3c, 0xc1, 0x49, 0x83, 0xc7, 0xf0, 0x4c, 0x8d, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x10, 0x0f, 0x1f, 0x80, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0xce, 0x49, 0x83, 0xfe, 0x01, 0x76, 0x3f, 0x4f, 0x8b, 0x6c, 0xf7, 0xf8, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x85, 0xc0, 0x7e, 0x09, 0x85, 0xc0, 0x78, 0xe5, 0xeb, 0x18, 0x0f, 0x1f, 0x00, 0x4c, 0x89, 0xe7, 0xbe, 0xf7, 0x06, 0x00, 0x00, 0x4c, 0x89, 0xea, 0xff, 0xd5, 0x49, 0x8b, 0x45, 0x00, 0x85, 0xc0, 0x78, 0xcb, 0xff, 0xd3, 0x49, 0xff, 0x4d, 0x00, 0x75, 0xc3, 0x4c, 0x89, 0xef, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xb8, 0x48, 0x8b, 0x5c, 0x24, 0x20, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf9, 0x06, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x4c, 0x8b, 0x64, 0x24, 0x30, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x6c, 0x24, 0x28, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x29, 0x48, 0x8b, 0x4c, 0x24, 0x18, 0x48, 0x85, 0xc9, 0x74, 0x32, 0x48, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x89, 0x08, 0x8b, 0x44, 0x24, 0x04, 0xf7, 0xd8, 0x48, 0x98, 0x48, 0x8d, 0x6c, 0xc5, 0x00, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x18, 0x48, 0x85, 0xc9, 0x75, 0xce, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf1, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x16, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf2, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyTuple_CheckExact(keys)\x00PyTuple_GET_SIZE(keys) == (Py_ssize_t)oparg\x00PyTuple_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/tupleobject.h\x00Py_ssize_t PyTuple_GET_SIZE(PyObject *)\x00' // 151: 00 00 00 00 00 00 00 // 158: &PyTuple_Type+0x0 // 160: OPARG // 168: &_PyDict_FromItems+0x0 // 170: &_Py_NegativeRefcount+0x0 // 178: &_Py_DECREF_DecRefTotal+0x0 // 180: &_Py_Dealloc+0x0 // 188: CONTINUE // 190: ERROR_TARGET // 198: &__assert_fail+0x0 const unsigned char data_body[416] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x63, 0x74, 0x28, 0x6b, 0x65, 0x79, 0x73, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x6b, 0x65, 0x79, 0x73, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x28, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x158, (uintptr_t)&PyTuple_Type); patch_64(data + 0x160, instruction->oparg); patch_64(data + 0x168, (uintptr_t)&_PyDict_FromItems); patch_64(data + 0x170, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x178, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x180, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x188, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x190, instruction_starts[instruction->error_target]); patch_64(data + 0x198, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0x154); patch_32r(code + 0x3e, (uintptr_t)data + 0x15c); patch_32r(code + 0x4e, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x81, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x8d, (uintptr_t)data + 0x15c); patch_32r(code + 0xb5, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xbc, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0xc3, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x112, (uintptr_t)data + 0x17c); patch_32r(code + 0x128, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x136, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x152, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x180, (uintptr_t)data + 0x184); patch_x86_64_32rx(code + 0x189, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x19d, (uintptr_t)data + 0x18c); patch_32r(code + 0x1a4, (uintptr_t)data + 0x8a); patch_32r(code + 0x1ab, (uintptr_t)data + -0x4); patch_32r(code + 0x1b2, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1bd, (uintptr_t)data + 0x194); patch_32r(code + 0x1c4, (uintptr_t)data + 0xcf); patch_32r(code + 0x1cb, (uintptr_t)data + 0xe1); patch_32r(code + 0x1d2, (uintptr_t)data + 0x125); patch_x86_64_32rx(code + 0x1dd, (uintptr_t)data + 0x194); patch_32r(code + 0x1e4, (uintptr_t)data + 0xa3); patch_32r(code + 0x1eb, (uintptr_t)data + -0x4); patch_32r(code + 0x1f2, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1fd, (uintptr_t)data + 0x194); } void emit__BUILD_LIST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BUILD_LIST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 41 0f b7 f6 movzwl %r14w, %esi // c: 8d 04 f5 00 00 00 00 leal (,%rsi,8), %eax // 13: 48 89 eb movq %rbp, %rbx // 16: 48 29 c3 subq %rax, %rbx // 19: 48 89 df movq %rbx, %rdi // 1c: ff 15 00 00 00 00 callq *(%rip) # 0x22 <_JIT_ENTRY+0x22> // 000000000000001e: R_X86_64_GOTPCRELX _PyList_FromArraySteal-0x4 // 22: 48 85 c0 testq %rax, %rax // 25: 74 1c je 0x43 <_JIT_ENTRY+0x43> // 27: 41 0f b7 ce movzwl %r14w, %ecx // 2b: 48 89 03 movq %rax, (%rbx) // 2e: b8 01 00 00 00 movl $0x1, %eax // 33: 29 c8 subl %ecx, %eax // 35: 48 98 cltq // 37: 48 8d 6c c5 00 leaq (%rbp,%rax,8), %rbp // 3c: 58 popq %rax // 3d: ff 25 00 00 00 00 jmpq *(%rip) # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 43: 58 popq %rax // 44: ff 25 00 00 00 00 jmpq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 4a: const unsigned char code_body[74] = { 0x50, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb7, 0xf6, 0x8d, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xeb, 0x48, 0x29, 0xc3, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x1c, 0x41, 0x0f, 0xb7, 0xce, 0x48, 0x89, 0x03, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x29, 0xc8, 0x48, 0x98, 0x48, 0x8d, 0x6c, 0xc5, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPARG // 8: &_PyList_FromArraySteal+0x0 // 10: CONTINUE // 18: ERROR_TARGET const unsigned char data_body[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); patch_64(data + 0x8, (uintptr_t)&_PyList_FromArraySteal); patch_64(data + 0x10, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x18, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1e, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0x14); } void emit__BUILD_MAP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BUILD_MAP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 4c 89 64 24 18 movq %r12, 0x18(%rsp) // 9: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // e: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 15: 0f b7 c8 movzwl %ax, %ecx // 18: 01 c9 addl %ecx, %ecx // 1a: 89 4c 24 04 movl %ecx, 0x4(%rsp) // 1e: f7 d9 negl %ecx // 20: 48 63 c9 movslq %ecx, %rcx // 23: 48 8d 1c cd 00 00 00 00 leaq (,%rcx,8), %rbx // 2b: 48 01 eb addq %rbp, %rbx // 2e: 48 89 6c 24 10 movq %rbp, 0x10(%rsp) // 33: 48 8d 54 cd 08 leaq 0x8(%rbp,%rcx,8), %rdx // 38: 44 0f b7 f0 movzwl %ax, %r14d // 3c: be 02 00 00 00 movl $0x2, %esi // 41: b9 02 00 00 00 movl $0x2, %ecx // 46: 48 89 df movq %rbx, %rdi // 49: 4d 89 f0 movq %r14, %r8 // 4c: ff 15 00 00 00 00 callq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _PyDict_FromItems-0x4 // 52: 48 89 44 24 20 movq %rax, 0x20(%rsp) // 57: 66 45 85 f6 testw %r14w, %r14w // 5b: 75 39 jne 0x96 <_JIT_ENTRY+0x96> // 5d: 48 8b 44 24 20 movq 0x20(%rsp), %rax // 62: 48 85 c0 testq %rax, %rax // 65: 0f 84 9c 00 00 00 je 0x107 <_JIT_ENTRY+0x107> // 6b: 48 89 03 movq %rax, (%rbx) // 6e: b8 01 00 00 00 movl $0x1, %eax // 73: 2b 44 24 04 subl 0x4(%rsp), %eax // 77: 48 98 cltq // 79: 48 8b 4c 24 10 movq 0x10(%rsp), %rcx // 7e: 48 8d 2c c1 leaq (%rcx,%rax,8), %rbp // 82: 4c 8b 6c 24 08 movq 0x8(%rsp), %r13 // 87: 4c 8b 64 24 18 movq 0x18(%rsp), %r12 // 8c: 48 83 c4 28 addq $0x28, %rsp // 90: ff 25 00 00 00 00 jmpq *(%rip) # 0x96 <_JIT_ENTRY+0x96> // 0000000000000092: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 96: 4e 8d 2c 75 01 00 00 00 leaq 0x1(,%r14,2), %r13 // 9e: 4c 8d 3d 00 00 00 00 leaq (%rip), %r15 # 0xa5 <_JIT_ENTRY+0xa5> // 00000000000000a1: R_X86_64_PC32 .L.str.1-0x4 // a5: 4c 8b 25 00 00 00 00 movq (%rip), %r12 # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_REX_GOTPCRELX _Py_NegativeRefcount-0x4 // ac: 48 8b 2d 00 00 00 00 movq (%rip), %rbp # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_REX_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // b3: eb 14 jmp 0xc9 <_JIT_ENTRY+0xc9> // b5: 66 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // c0: 49 ff cd decq %r13 // c3: 49 83 fd 01 cmpq $0x1, %r13 // c7: 76 94 jbe 0x5d <_JIT_ENTRY+0x5d> // c9: 4e 8b 74 eb f0 movq -0x10(%rbx,%r13,8), %r14 // ce: 49 8b 06 movq (%r14), %rax // d1: 48 85 c0 testq %rax, %rax // d4: 7e 0a jle 0xe0 <_JIT_ENTRY+0xe0> // d6: 85 c0 testl %eax, %eax // d8: 78 e6 js 0xc0 <_JIT_ENTRY+0xc0> // da: eb 19 jmp 0xf5 <_JIT_ENTRY+0xf5> // dc: 0f 1f 40 00 nopl (%rax) // e0: 4c 89 ff movq %r15, %rdi // e3: be ca 06 00 00 movl $0x6ca, %esi # imm = 0x6CA // e8: 4c 89 f2 movq %r14, %rdx // eb: 41 ff d4 callq *%r12 // ee: 49 8b 06 movq (%r14), %rax // f1: 85 c0 testl %eax, %eax // f3: 78 cb js 0xc0 <_JIT_ENTRY+0xc0> // f5: ff d5 callq *%rbp // f7: 49 ff 0e decq (%r14) // fa: 75 c4 jne 0xc0 <_JIT_ENTRY+0xc0> // fc: 4c 89 f7 movq %r14, %rdi // ff: ff 15 00 00 00 00 callq *(%rip) # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 105: eb b9 jmp 0xc0 <_JIT_ENTRY+0xc0> // 107: 4c 8b 6c 24 08 movq 0x8(%rsp), %r13 // 10c: 48 8b 6c 24 10 movq 0x10(%rsp), %rbp // 111: 4c 8b 64 24 18 movq 0x18(%rsp), %r12 // 116: 48 83 c4 28 addq $0x28, %rsp // 11a: ff 25 00 00 00 00 jmpq *(%rip) # 0x120 <_JIT_ENTRY+0x120> // 000000000000011c: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 120: const unsigned char code_body[288] = { 0x48, 0x83, 0xec, 0x28, 0x4c, 0x89, 0x64, 0x24, 0x18, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc8, 0x01, 0xc9, 0x89, 0x4c, 0x24, 0x04, 0xf7, 0xd9, 0x48, 0x63, 0xc9, 0x48, 0x8d, 0x1c, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xeb, 0x48, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x8d, 0x54, 0xcd, 0x08, 0x44, 0x0f, 0xb7, 0xf0, 0xbe, 0x02, 0x00, 0x00, 0x00, 0xb9, 0x02, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0x4d, 0x89, 0xf0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0x66, 0x45, 0x85, 0xf6, 0x75, 0x39, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, 0x48, 0x89, 0x03, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x2b, 0x44, 0x24, 0x04, 0x48, 0x98, 0x48, 0x8b, 0x4c, 0x24, 0x10, 0x48, 0x8d, 0x2c, 0xc1, 0x4c, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x64, 0x24, 0x18, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x8d, 0x2c, 0x75, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x2d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x14, 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0xcd, 0x49, 0x83, 0xfd, 0x01, 0x76, 0x94, 0x4e, 0x8b, 0x74, 0xeb, 0xf0, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x0a, 0x85, 0xc0, 0x78, 0xe6, 0xeb, 0x19, 0x0f, 0x1f, 0x40, 0x00, 0x4c, 0x89, 0xff, 0xbe, 0xca, 0x06, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0x41, 0xff, 0xd4, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0xcb, 0xff, 0xd5, 0x49, 0xff, 0x0e, 0x75, 0xc4, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xb9, 0x4c, 0x8b, 0x6c, 0x24, 0x08, 0x48, 0x8b, 0x6c, 0x24, 0x10, 0x4c, 0x8b, 0x64, 0x24, 0x18, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_PyDict_FromItems+0x0 // 50: CONTINUE // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_PyDict_FromItems); patch_64(data + 0x50, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x92, (uintptr_t)data + 0x4c); patch_32r(code + 0xa1, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x101, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x11c, (uintptr_t)data + 0x6c); } void emit__BUILD_SLICE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BUILD_SLICE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 4c 89 64 24 08 movq %r12, 0x8(%rsp) // 9: 4c 89 2c 24 movq %r13, (%rsp) // d: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x14 <_JIT_ENTRY+0x14> // 0000000000000010: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 14: 66 83 f8 03 cmpw $0x3, %ax // 18: 75 0d jne 0x27 <_JIT_ENTRY+0x27> // 1a: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 1e: 48 c7 c1 fd ff ff ff movq $-0x3, %rcx // 25: eb 09 jmp 0x30 <_JIT_ENTRY+0x30> // 27: 48 c7 c1 fe ff ff ff movq $-0x2, %rcx // 2e: 31 db xorl %ebx, %ebx // 30: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 37: 45 31 ed xorl %r13d, %r13d // 3a: 66 83 f8 03 cmpw $0x3, %ax // 3e: 41 0f 94 c5 sete %r13b // 42: 49 f7 d5 notq %r13 // 45: 4e 8b 7c ed 00 movq (%rbp,%r13,8), %r15 // 4a: 48 89 4c 24 10 movq %rcx, 0x10(%rsp) // 4f: 4c 8b 74 cd 00 movq (%rbp,%rcx,8), %r14 // 54: 4c 89 f7 movq %r14, %rdi // 57: 4c 89 fe movq %r15, %rsi // 5a: 48 89 da movq %rbx, %rdx // 5d: ff 15 00 00 00 00 callq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX PySlice_New-0x4 // 63: 49 89 c4 movq %rax, %r12 // 66: 49 8b 06 movq (%r14), %rax // 69: 48 85 c0 testq %rax, %rax // 6c: 7e 06 jle 0x74 <_JIT_ENTRY+0x74> // 6e: 85 c0 testl %eax, %eax // 70: 79 1e jns 0x90 <_JIT_ENTRY+0x90> // 72: eb 27 jmp 0x9b <_JIT_ENTRY+0x9b> // 74: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: be ec 0f 00 00 movl $0xfec, %esi # imm = 0xFEC // 80: 4c 89 f2 movq %r14, %rdx // 83: ff 15 00 00 00 00 callq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 89: 49 8b 06 movq (%r14), %rax // 8c: 85 c0 testl %eax, %eax // 8e: 78 0b js 0x9b <_JIT_ENTRY+0x9b> // 90: ff 15 00 00 00 00 callq *(%rip) # 0x96 <_JIT_ENTRY+0x96> // 0000000000000092: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 96: 49 ff 0e decq (%r14) // 99: 74 0e je 0xa9 <_JIT_ENTRY+0xa9> // 9b: 49 8b 07 movq (%r15), %rax // 9e: 48 85 c0 testq %rax, %rax // a1: 7e 17 jle 0xba <_JIT_ENTRY+0xba> // a3: 85 c0 testl %eax, %eax // a5: 79 2f jns 0xd6 <_JIT_ENTRY+0xd6> // a7: eb 41 jmp 0xea <_JIT_ENTRY+0xea> // a9: 4c 89 f7 movq %r14, %rdi // ac: ff 15 00 00 00 00 callq *(%rip) # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // b2: 49 8b 07 movq (%r15), %rax // b5: 48 85 c0 testq %rax, %rax // b8: 7f e9 jg 0xa3 <_JIT_ENTRY+0xa3> // ba: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_PC32 .L.str.1-0x4 // c1: be ed 0f 00 00 movl $0xfed, %esi # imm = 0xFED // c6: 4c 89 fa movq %r15, %rdx // c9: ff 15 00 00 00 00 callq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // cf: 49 8b 07 movq (%r15), %rax // d2: 85 c0 testl %eax, %eax // d4: 78 14 js 0xea <_JIT_ENTRY+0xea> // d6: ff 15 00 00 00 00 callq *(%rip) # 0xdc <_JIT_ENTRY+0xdc> // 00000000000000d8: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // dc: 49 ff 0f decq (%r15) // df: 75 09 jne 0xea <_JIT_ENTRY+0xea> // e1: 4c 89 ff movq %r15, %rdi // e4: ff 15 00 00 00 00 callq *(%rip) # 0xea <_JIT_ENTRY+0xea> // 00000000000000e6: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // ea: 48 85 db testq %rbx, %rbx // ed: 74 35 je 0x124 <_JIT_ENTRY+0x124> // ef: 48 8b 03 movq (%rbx), %rax // f2: 48 85 c0 testq %rax, %rax // f5: 7e 06 jle 0xfd <_JIT_ENTRY+0xfd> // f7: 85 c0 testl %eax, %eax // f9: 79 1e jns 0x119 <_JIT_ENTRY+0x119> // fb: eb 27 jmp 0x124 <_JIT_ENTRY+0x124> // fd: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x104 <_JIT_ENTRY+0x104> // 0000000000000100: R_X86_64_PC32 .L.str.114-0x4 // 104: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 109: 48 89 da movq %rbx, %rdx // 10c: ff 15 00 00 00 00 callq *(%rip) # 0x112 <_JIT_ENTRY+0x112> // 000000000000010e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 112: 48 8b 03 movq (%rbx), %rax // 115: 85 c0 testl %eax, %eax // 117: 78 0b js 0x124 <_JIT_ENTRY+0x124> // 119: ff 15 00 00 00 00 callq *(%rip) # 0x11f <_JIT_ENTRY+0x11f> // 000000000000011b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 11f: 48 ff 0b decq (%rbx) // 122: 74 30 je 0x154 <_JIT_ENTRY+0x154> // 124: 4d 85 e4 testq %r12, %r12 // 127: 74 39 je 0x162 <_JIT_ENTRY+0x162> // 129: 4a 8d 04 ed 00 00 00 00 leaq (,%r13,8), %rax // 131: 48 01 e8 addq %rbp, %rax // 134: 48 8b 4c 24 10 movq 0x10(%rsp), %rcx // 139: 4c 89 64 cd 00 movq %r12, (%rbp,%rcx,8) // 13e: 4c 8b 2c 24 movq (%rsp), %r13 // 142: 48 89 c5 movq %rax, %rbp // 145: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // 14a: 48 83 c4 18 addq $0x18, %rsp // 14e: ff 25 00 00 00 00 jmpq *(%rip) # 0x154 <_JIT_ENTRY+0x154> // 0000000000000150: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 154: 48 89 df movq %rbx, %rdi // 157: ff 15 00 00 00 00 callq *(%rip) # 0x15d <_JIT_ENTRY+0x15d> // 0000000000000159: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 15d: 4d 85 e4 testq %r12, %r12 // 160: 75 c7 jne 0x129 <_JIT_ENTRY+0x129> // 162: 4c 8b 2c 24 movq (%rsp), %r13 // 166: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // 16b: 48 83 c4 18 addq $0x18, %rsp // 16f: ff 25 00 00 00 00 jmpq *(%rip) # 0x175 <_JIT_ENTRY+0x175> // 0000000000000171: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 175: const unsigned char code_body[373] = { 0x48, 0x83, 0xec, 0x18, 0x4c, 0x89, 0x64, 0x24, 0x08, 0x4c, 0x89, 0x2c, 0x24, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x03, 0x75, 0x0d, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0xc7, 0xc1, 0xfd, 0xff, 0xff, 0xff, 0xeb, 0x09, 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, 0x31, 0xdb, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x45, 0x31, 0xed, 0x66, 0x83, 0xf8, 0x03, 0x41, 0x0f, 0x94, 0xc5, 0x49, 0xf7, 0xd5, 0x4e, 0x8b, 0x7c, 0xed, 0x00, 0x48, 0x89, 0x4c, 0x24, 0x10, 0x4c, 0x8b, 0x74, 0xcd, 0x00, 0x4c, 0x89, 0xf7, 0x4c, 0x89, 0xfe, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc4, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xec, 0x0f, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x0e, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x41, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xed, 0x0f, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x35, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x30, 0x4d, 0x85, 0xe4, 0x74, 0x39, 0x4a, 0x8d, 0x04, 0xed, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x48, 0x8b, 0x4c, 0x24, 0x10, 0x4c, 0x89, 0x64, 0xcd, 0x00, 0x4c, 0x8b, 0x2c, 0x24, 0x48, 0x89, 0xc5, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xe4, 0x75, 0xc7, 0x4c, 0x8b, 0x2c, 0x24, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // 77: 00 // 78: OPARG // 80: &PySlice_New+0x0 // 88: &_Py_NegativeRefcount+0x0 // 90: &_Py_DECREF_DecRefTotal+0x0 // 98: &_Py_Dealloc+0x0 // a0: CONTINUE // a8: ERROR_TARGET const unsigned char data_body[176] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x78, instruction->oparg); patch_64(data + 0x80, (uintptr_t)&PySlice_New); patch_64(data + 0x88, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x90, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x98, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xa0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xa8, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x10, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0x7c); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x92, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0xae, (uintptr_t)data + 0x94); patch_32r(code + 0xbd, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xcb, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0xd8, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0xe6, (uintptr_t)data + 0x94); patch_32r(code + 0x100, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x10e, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x11b, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0x150, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x159, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x171, (uintptr_t)data + 0xa4); } void emit__BUILD_STRING( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BUILD_STRING.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 4c 89 64 24 18 movq %r12, 0x18(%rsp) // 9: 48 89 eb movq %rbp, %rbx // c: 4c 89 6c 24 10 movq %r13, 0x10(%rsp) // 11: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 18: 44 0f b7 f0 movzwl %ax, %r14d // 1c: 42 8d 04 f5 00 00 00 00 leal (,%r14,8), %eax // 24: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 29: 48 29 c3 subq %rax, %rbx // 2c: bf a0 ba 00 00 movl $0xbaa0, %edi # imm = 0xBAA0 // 31: 48 03 3d 00 00 00 00 addq (%rip), %rdi # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_REX_GOTPCRELX _PyRuntime-0x4 // 38: 48 89 de movq %rbx, %rsi // 3b: 4c 89 f2 movq %r14, %rdx // 3e: ff 15 00 00 00 00 callq *(%rip) # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_GOTPCRELX _PyUnicode_JoinArray-0x4 // 44: 48 89 44 24 20 movq %rax, 0x20(%rsp) // 49: 66 45 85 f6 testw %r14w, %r14w // 4d: 74 6c je 0xbb <_JIT_ENTRY+0xbb> // 4f: 4d 8d 66 01 leaq 0x1(%r14), %r12 // 53: 48 8b 44 24 08 movq 0x8(%rsp), %rax // 58: 4c 8d 68 f8 leaq -0x8(%rax), %r13 // 5c: 4c 8b 3d 00 00 00 00 movq (%rip), %r15 # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_REX_GOTPCRELX _Py_NegativeRefcount-0x4 // 63: 48 8b 2d 00 00 00 00 movq (%rip), %rbp # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_REX_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 6a: eb 11 jmp 0x7d <_JIT_ENTRY+0x7d> // 6c: 0f 1f 40 00 nopl (%rax) // 70: 49 ff cc decq %r12 // 73: 49 83 c5 f8 addq $-0x8, %r13 // 77: 49 83 fc 01 cmpq $0x1, %r12 // 7b: 76 3e jbe 0xbb <_JIT_ENTRY+0xbb> // 7d: 4d 8b 75 00 movq (%r13), %r14 // 81: 49 8b 06 movq (%r14), %rax // 84: 48 85 c0 testq %rax, %rax // 87: 7e 07 jle 0x90 <_JIT_ENTRY+0x90> // 89: 85 c0 testl %eax, %eax // 8b: 78 e3 js 0x70 <_JIT_ENTRY+0x70> // 8d: eb 1a jmp 0xa9 <_JIT_ENTRY+0xa9> // 8f: 90 nop // 90: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_PC32 .L.str.1-0x4 // 97: be 78 06 00 00 movl $0x678, %esi # imm = 0x678 // 9c: 4c 89 f2 movq %r14, %rdx // 9f: 41 ff d7 callq *%r15 // a2: 49 8b 06 movq (%r14), %rax // a5: 85 c0 testl %eax, %eax // a7: 78 c7 js 0x70 <_JIT_ENTRY+0x70> // a9: ff d5 callq *%rbp // ab: 49 ff 0e decq (%r14) // ae: 75 c0 jne 0x70 <_JIT_ENTRY+0x70> // b0: 4c 89 f7 movq %r14, %rdi // b3: ff 15 00 00 00 00 callq *(%rip) # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // b9: eb b5 jmp 0x70 <_JIT_ENTRY+0x70> // bb: 48 8b 4c 24 20 movq 0x20(%rsp), %rcx // c0: 48 85 c9 testq %rcx, %rcx // c3: 74 34 je 0xf9 <_JIT_ENTRY+0xf9> // c5: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // cc: 0f b7 c0 movzwl %ax, %eax // cf: 48 89 0b movq %rcx, (%rbx) // d2: b9 01 00 00 00 movl $0x1, %ecx // d7: 29 c1 subl %eax, %ecx // d9: 48 63 c1 movslq %ecx, %rax // dc: 48 8b 4c 24 08 movq 0x8(%rsp), %rcx // e1: 48 8d 2c c1 leaq (%rcx,%rax,8), %rbp // e5: 4c 8b 6c 24 10 movq 0x10(%rsp), %r13 // ea: 4c 8b 64 24 18 movq 0x18(%rsp), %r12 // ef: 48 83 c4 28 addq $0x28, %rsp // f3: ff 25 00 00 00 00 jmpq *(%rip) # 0xf9 <_JIT_ENTRY+0xf9> // 00000000000000f5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // f9: 4c 8b 6c 24 10 movq 0x10(%rsp), %r13 // fe: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // 103: 4c 8b 64 24 18 movq 0x18(%rsp), %r12 // 108: 48 83 c4 28 addq $0x28, %rsp // 10c: ff 25 00 00 00 00 jmpq *(%rip) # 0x112 <_JIT_ENTRY+0x112> // 000000000000010e: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 112: const unsigned char code_body[274] = { 0x48, 0x83, 0xec, 0x28, 0x4c, 0x89, 0x64, 0x24, 0x18, 0x48, 0x89, 0xeb, 0x4c, 0x89, 0x6c, 0x24, 0x10, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0xf0, 0x42, 0x8d, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x48, 0x29, 0xc3, 0xbf, 0xa0, 0xba, 0x00, 0x00, 0x48, 0x03, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xde, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x20, 0x66, 0x45, 0x85, 0xf6, 0x74, 0x6c, 0x4d, 0x8d, 0x66, 0x01, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x4c, 0x8d, 0x68, 0xf8, 0x4c, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x2d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x11, 0x0f, 0x1f, 0x40, 0x00, 0x49, 0xff, 0xcc, 0x49, 0x83, 0xc5, 0xf8, 0x49, 0x83, 0xfc, 0x01, 0x76, 0x3e, 0x4d, 0x8b, 0x75, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x07, 0x85, 0xc0, 0x78, 0xe3, 0xeb, 0x1a, 0x90, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x78, 0x06, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0x41, 0xff, 0xd7, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0xc7, 0xff, 0xd5, 0x49, 0xff, 0x0e, 0x75, 0xc0, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xb5, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x48, 0x85, 0xc9, 0x74, 0x34, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0x48, 0x89, 0x0b, 0xb9, 0x01, 0x00, 0x00, 0x00, 0x29, 0xc1, 0x48, 0x63, 0xc1, 0x48, 0x8b, 0x4c, 0x24, 0x08, 0x48, 0x8d, 0x2c, 0xc1, 0x4c, 0x8b, 0x6c, 0x24, 0x10, 0x4c, 0x8b, 0x64, 0x24, 0x18, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x6c, 0x24, 0x10, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x64, 0x24, 0x18, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_PyRuntime+0x0 // 50: &_PyUnicode_JoinArray+0x0 // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 // 70: CONTINUE // 78: ERROR_TARGET const unsigned char data_body[128] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_PyRuntime); patch_64(data + 0x50, (uintptr_t)&_PyUnicode_JoinArray); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x78, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x40, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x66, (uintptr_t)data + 0x5c); patch_32r(code + 0x93, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xb5, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0xc8, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xf5, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x10e, (uintptr_t)data + 0x74); } void emit__BUILD_TUPLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_BUILD_TUPLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 41 0f b7 f6 movzwl %r14w, %esi // c: 8d 04 f5 00 00 00 00 leal (,%rsi,8), %eax // 13: 48 89 eb movq %rbp, %rbx // 16: 48 29 c3 subq %rax, %rbx // 19: 48 89 df movq %rbx, %rdi // 1c: ff 15 00 00 00 00 callq *(%rip) # 0x22 <_JIT_ENTRY+0x22> // 000000000000001e: R_X86_64_GOTPCRELX _PyTuple_FromArraySteal-0x4 // 22: 48 85 c0 testq %rax, %rax // 25: 74 1c je 0x43 <_JIT_ENTRY+0x43> // 27: 41 0f b7 ce movzwl %r14w, %ecx // 2b: 48 89 03 movq %rax, (%rbx) // 2e: b8 01 00 00 00 movl $0x1, %eax // 33: 29 c8 subl %ecx, %eax // 35: 48 98 cltq // 37: 48 8d 6c c5 00 leaq (%rbp,%rax,8), %rbp // 3c: 58 popq %rax // 3d: ff 25 00 00 00 00 jmpq *(%rip) # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 43: 58 popq %rax // 44: ff 25 00 00 00 00 jmpq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 4a: const unsigned char code_body[74] = { 0x50, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb7, 0xf6, 0x8d, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xeb, 0x48, 0x29, 0xc3, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x1c, 0x41, 0x0f, 0xb7, 0xce, 0x48, 0x89, 0x03, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x29, 0xc8, 0x48, 0x98, 0x48, 0x8d, 0x6c, 0xc5, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPARG // 8: &_PyTuple_FromArraySteal+0x0 // 10: CONTINUE // 18: ERROR_TARGET const unsigned char data_body[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); patch_64(data + 0x8, (uintptr_t)&_PyTuple_FromArraySteal); patch_64(data + 0x10, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x18, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1e, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0x14); } void emit__CALL_BUILTIN_CLASS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_BUILTIN_CLASS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 38 subq $0x38, %rsp // 4: 0f b7 1d 00 00 00 00 movzwl (%rip), %ebx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 d8 movl %ebx, %eax // d: f7 d0 notl %eax // f: 48 63 f0 movslq %eax, %rsi // 12: b8 fe ff ff ff movl $0xfffffffe, %eax # imm = 0xFFFFFFFE // 17: 29 d8 subl %ebx, %eax // 19: 4c 63 c0 movslq %eax, %r8 // 1c: 4a 8b 7c c5 00 movq (%rbp,%r8,8), %rdi // 21: 31 c9 xorl %ecx, %ecx // 23: 48 83 7c f5 00 00 cmpq $0x0, (%rbp,%rsi,8) // 29: 0f 95 c2 setne %dl // 2c: 48 8b 47 08 movq 0x8(%rdi), %rax // 30: f6 80 ab 00 00 00 80 testb $-0x80, 0xab(%rax) // 37: 0f 84 b3 00 00 00 je 0xf0 <_JIT_ENTRY+0xf0> // 3d: 48 8b 87 90 01 00 00 movq 0x190(%rdi), %rax // 44: 48 85 c0 testq %rax, %rax // 47: 0f 84 a3 00 00 00 je 0xf0 <_JIT_ENTRY+0xf0> // 4d: 4c 89 44 24 18 movq %r8, 0x18(%rsp) // 52: 48 89 74 24 20 movq %rsi, 0x20(%rsp) // 57: 4c 89 6c 24 28 movq %r13, 0x28(%rsp) // 5c: 4c 89 64 24 30 movq %r12, 0x30(%rsp) // 61: 8d 34 dd 00 00 00 00 leal (,%rbx,8), %esi // 68: 49 89 ef movq %rbp, %r15 // 6b: 49 29 f7 subq %rsi, %r15 // 6e: 88 d1 movb %dl, %cl // 70: 01 cb addl %ecx, %ebx // 72: c1 e1 03 shll $0x3, %ecx // 75: 49 29 cf subq %rcx, %r15 // 78: 41 89 de movl %ebx, %r14d // 7b: 48 89 7c 24 08 movq %rdi, 0x8(%rsp) // 80: 4c 89 fe movq %r15, %rsi // 83: 4c 89 f2 movq %r14, %rdx // 86: 31 c9 xorl %ecx, %ecx // 88: ff d0 callq *%rax // 8a: 48 89 44 24 10 movq %rax, 0x10(%rsp) // 8f: 85 db testl %ebx, %ebx // 91: 74 67 je 0xfa <_JIT_ENTRY+0xfa> // 93: 45 31 ed xorl %r13d, %r13d // 96: 48 8d 1d 00 00 00 00 leaq (%rip), %rbx # 0x9d <_JIT_ENTRY+0x9d> // 0000000000000099: R_X86_64_PC32 .L.str.1-0x4 // 9d: eb 09 jmp 0xa8 <_JIT_ENTRY+0xa8> // 9f: 90 nop // a0: 49 ff c5 incq %r13 // a3: 4d 39 ee cmpq %r13, %r14 // a6: 74 52 je 0xfa <_JIT_ENTRY+0xfa> // a8: 4f 8b 24 ef movq (%r15,%r13,8), %r12 // ac: 49 8b 04 24 movq (%r12), %rax // b0: 48 85 c0 testq %rax, %rax // b3: 7e 0b jle 0xc0 <_JIT_ENTRY+0xc0> // b5: 85 c0 testl %eax, %eax // b7: 78 e7 js 0xa0 <_JIT_ENTRY+0xa0> // b9: eb 1e jmp 0xd9 <_JIT_ENTRY+0xd9> // bb: 0f 1f 44 00 00 nopl (%rax,%rax) // c0: 48 89 df movq %rbx, %rdi // c3: be df 0d 00 00 movl $0xddf, %esi # imm = 0xDDF // c8: 4c 89 e2 movq %r12, %rdx // cb: ff 15 00 00 00 00 callq *(%rip) # 0xd1 <_JIT_ENTRY+0xd1> // 00000000000000cd: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // d1: 49 8b 04 24 movq (%r12), %rax // d5: 85 c0 testl %eax, %eax // d7: 78 c7 js 0xa0 <_JIT_ENTRY+0xa0> // d9: ff 15 00 00 00 00 callq *(%rip) # 0xdf <_JIT_ENTRY+0xdf> // 00000000000000db: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // df: 49 ff 0c 24 decq (%r12) // e3: 75 bb jne 0xa0 <_JIT_ENTRY+0xa0> // e5: 4c 89 e7 movq %r12, %rdi // e8: ff 15 00 00 00 00 callq *(%rip) # 0xee <_JIT_ENTRY+0xee> // 00000000000000ea: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // ee: eb b0 jmp 0xa0 <_JIT_ENTRY+0xa0> // f0: 48 83 c4 38 addq $0x38, %rsp // f4: ff 25 00 00 00 00 jmpq *(%rip) # 0xfa <_JIT_ENTRY+0xfa> // 00000000000000f6: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // fa: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // ff: 48 8b 02 movq (%rdx), %rax // 102: 48 85 c0 testq %rax, %rax // 105: 7f 1a jg 0x121 <_JIT_ENTRY+0x121> // 107: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x10e <_JIT_ENTRY+0x10e> // 000000000000010a: R_X86_64_PC32 .L.str.1-0x4 // 10e: be e1 0d 00 00 movl $0xde1, %esi # imm = 0xDE1 // 113: ff 15 00 00 00 00 callq *(%rip) # 0x119 <_JIT_ENTRY+0x119> // 0000000000000115: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 119: 48 8b 44 24 08 movq 0x8(%rsp), %rax // 11e: 48 8b 00 movq (%rax), %rax // 121: 85 c0 testl %eax, %eax // 123: 4c 8b 64 24 30 movq 0x30(%rsp), %r12 // 128: 4c 8b 6c 24 28 movq 0x28(%rsp), %r13 // 12d: 48 8b 5c 24 20 movq 0x20(%rsp), %rbx // 132: 4c 8b 74 24 18 movq 0x18(%rsp), %r14 // 137: 4c 8b 7c 24 10 movq 0x10(%rsp), %r15 // 13c: 78 10 js 0x14e <_JIT_ENTRY+0x14e> // 13e: ff 15 00 00 00 00 callq *(%rip) # 0x144 <_JIT_ENTRY+0x144> // 0000000000000140: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 144: 48 8b 7c 24 08 movq 0x8(%rsp), %rdi // 149: 48 ff 0f decq (%rdi) // 14c: 74 22 je 0x170 <_JIT_ENTRY+0x170> // 14e: 4d 85 ff testq %r15, %r15 // 151: 74 28 je 0x17b <_JIT_ENTRY+0x17b> // 153: 48 8d 04 dd 00 00 00 00 leaq (,%rbx,8), %rax // 15b: 48 01 e8 addq %rbp, %rax // 15e: 4e 89 7c f5 00 movq %r15, (%rbp,%r14,8) // 163: 48 89 c5 movq %rax, %rbp // 166: 48 83 c4 38 addq $0x38, %rsp // 16a: ff 25 00 00 00 00 jmpq *(%rip) # 0x170 <_JIT_ENTRY+0x170> // 000000000000016c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 170: ff 15 00 00 00 00 callq *(%rip) # 0x176 <_JIT_ENTRY+0x176> // 0000000000000172: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 176: 4d 85 ff testq %r15, %r15 // 179: 75 d8 jne 0x153 <_JIT_ENTRY+0x153> // 17b: 48 83 c4 38 addq $0x38, %rsp // 17f: ff 25 00 00 00 00 jmpq *(%rip) # 0x185 <_JIT_ENTRY+0x185> // 0000000000000181: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 185: const unsigned char code_body[389] = { 0x48, 0x83, 0xec, 0x38, 0x0f, 0xb7, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xd8, 0xf7, 0xd0, 0x48, 0x63, 0xf0, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xd8, 0x4c, 0x63, 0xc0, 0x4a, 0x8b, 0x7c, 0xc5, 0x00, 0x31, 0xc9, 0x48, 0x83, 0x7c, 0xf5, 0x00, 0x00, 0x0f, 0x95, 0xc2, 0x48, 0x8b, 0x47, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x80, 0x0f, 0x84, 0xb3, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x87, 0x90, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xa3, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x44, 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x4c, 0x89, 0x6c, 0x24, 0x28, 0x4c, 0x89, 0x64, 0x24, 0x30, 0x8d, 0x34, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xef, 0x49, 0x29, 0xf7, 0x88, 0xd1, 0x01, 0xcb, 0xc1, 0xe1, 0x03, 0x49, 0x29, 0xcf, 0x41, 0x89, 0xde, 0x48, 0x89, 0x7c, 0x24, 0x08, 0x4c, 0x89, 0xfe, 0x4c, 0x89, 0xf2, 0x31, 0xc9, 0xff, 0xd0, 0x48, 0x89, 0x44, 0x24, 0x10, 0x85, 0xdb, 0x74, 0x67, 0x45, 0x31, 0xed, 0x48, 0x8d, 0x1d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x09, 0x90, 0x49, 0xff, 0xc5, 0x4d, 0x39, 0xee, 0x74, 0x52, 0x4f, 0x8b, 0x24, 0xef, 0x49, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x78, 0xe7, 0xeb, 0x1e, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xbe, 0xdf, 0x0d, 0x00, 0x00, 0x4c, 0x89, 0xe2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x04, 0x24, 0x85, 0xc0, 0x78, 0xc7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0c, 0x24, 0x75, 0xbb, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xb0, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x48, 0x8b, 0x02, 0x48, 0x85, 0xc0, 0x7f, 0x1a, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xe1, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x8b, 0x00, 0x85, 0xc0, 0x4c, 0x8b, 0x64, 0x24, 0x30, 0x4c, 0x8b, 0x6c, 0x24, 0x28, 0x48, 0x8b, 0x5c, 0x24, 0x20, 0x4c, 0x8b, 0x74, 0x24, 0x18, 0x4c, 0x8b, 0x7c, 0x24, 0x10, 0x78, 0x10, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x7c, 0x24, 0x08, 0x48, 0xff, 0x0f, 0x74, 0x22, 0x4d, 0x85, 0xff, 0x74, 0x28, 0x48, 0x8d, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x4e, 0x89, 0x7c, 0xf5, 0x00, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xff, 0x75, 0xd8, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 // 60: JUMP_TARGET // 68: CONTINUE // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x60, instruction_starts[instruction->jump_target]); patch_64(data + 0x68, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0x3c); patch_32r(code + 0x99, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xcd, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0xdb, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xea, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xf6, (uintptr_t)data + 0x5c); patch_32r(code + 0x10a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x115, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x140, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x16c, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x172, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x181, (uintptr_t)data + 0x6c); } void emit__CALL_BUILTIN_FAST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_BUILTIN_FAST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 0f b7 1d 00 00 00 00 movzwl (%rip), %ebx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 d8 movl %ebx, %eax // d: f7 d0 notl %eax // f: 48 63 f0 movslq %eax, %rsi // 12: b8 fe ff ff ff movl $0xfffffffe, %eax # imm = 0xFFFFFFFE // 17: 29 d8 subl %ebx, %eax // 19: 48 63 f8 movslq %eax, %rdi // 1c: 4c 8b 44 fd 00 movq (%rbp,%rdi,8), %r8 // 21: 31 c9 xorl %ecx, %ecx // 23: 48 83 7c f5 00 00 cmpq $0x0, (%rbp,%rsi,8) // 29: 0f 95 c2 setne %dl // 2c: 49 8b 40 08 movq 0x8(%r8), %rax // 30: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_REX_GOTPCRELX PyCFunction_Type-0x4 // 37: 0f 85 e7 00 00 00 jne 0x124 <_JIT_ENTRY+0x124> // 3d: 49 8b 40 10 movq 0x10(%r8), %rax // 41: 81 78 10 80 00 00 00 cmpl $0x80, 0x10(%rax) // 48: 0f 85 d6 00 00 00 jne 0x124 <_JIT_ENTRY+0x124> // 4e: 48 89 7c 24 18 movq %rdi, 0x18(%rsp) // 53: 48 89 74 24 20 movq %rsi, 0x20(%rsp) // 58: 8d 34 dd 00 00 00 00 leal (,%rbx,8), %esi // 5f: 49 89 ef movq %rbp, %r15 // 62: 49 29 f7 subq %rsi, %r15 // 65: 88 d1 movb %dl, %cl // 67: 01 cb addl %ecx, %ebx // 69: c1 e1 03 shll $0x3, %ecx // 6c: 49 29 cf subq %rcx, %r15 // 6f: 4c 89 44 24 10 movq %r8, 0x10(%rsp) // 74: 49 8b 78 18 movq 0x18(%r8), %rdi // 78: 41 89 de movl %ebx, %r14d // 7b: 4c 89 fe movq %r15, %rsi // 7e: 4c 89 f2 movq %r14, %rdx // 81: ff 50 08 callq *0x8(%rax) // 84: 48 89 04 24 movq %rax, (%rsp) // 88: 4d 85 e4 testq %r12, %r12 // 8b: 0f 84 44 01 00 00 je 0x1d5 <_JIT_ENTRY+0x1d5> // 91: 49 8b 44 24 70 movq 0x70(%r12), %rax // 96: 48 85 c0 testq %rax, %rax // 99: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // 9e: 0f 84 fc 00 00 00 je 0x1a0 <_JIT_ENTRY+0x1a0> // a4: 48 83 3c 24 00 cmpq $0x0, (%rsp) // a9: 0f 95 c1 setne %cl // ac: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // b1: 0f 95 c0 setne %al // b4: 30 c8 xorb %cl, %al // b6: 0f 84 ef 00 00 00 je 0x1ab <_JIT_ENTRY+0x1ab> // bc: 85 db testl %ebx, %ebx // be: 74 6e je 0x12e <_JIT_ENTRY+0x12e> // c0: 31 db xorl %ebx, %ebx // c2: eb 14 jmp 0xd8 <_JIT_ENTRY+0xd8> // c4: 66 66 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // d0: 48 ff c3 incq %rbx // d3: 49 39 de cmpq %rbx, %r14 // d6: 74 56 je 0x12e <_JIT_ENTRY+0x12e> // d8: 4d 8b 2c df movq (%r15,%rbx,8), %r13 // dc: 49 8b 45 00 movq (%r13), %rax // e0: 48 85 c0 testq %rax, %rax // e3: 7e 0b jle 0xf0 <_JIT_ENTRY+0xf0> // e5: 85 c0 testl %eax, %eax // e7: 78 e7 js 0xd0 <_JIT_ENTRY+0xd0> // e9: eb 22 jmp 0x10d <_JIT_ENTRY+0x10d> // eb: 0f 1f 44 00 00 nopl (%rax,%rax) // f0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L.str.1-0x4 // f7: be 38 0e 00 00 movl $0xe38, %esi # imm = 0xE38 // fc: 4c 89 ea movq %r13, %rdx // ff: ff 15 00 00 00 00 callq *(%rip) # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 105: 49 8b 45 00 movq (%r13), %rax // 109: 85 c0 testl %eax, %eax // 10b: 78 c3 js 0xd0 <_JIT_ENTRY+0xd0> // 10d: ff 15 00 00 00 00 callq *(%rip) # 0x113 <_JIT_ENTRY+0x113> // 000000000000010f: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 113: 49 ff 4d 00 decq (%r13) // 117: 75 b7 jne 0xd0 <_JIT_ENTRY+0xd0> // 119: 4c 89 ef movq %r13, %rdi // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 122: eb ac jmp 0xd0 <_JIT_ENTRY+0xd0> // 124: 48 83 c4 28 addq $0x28, %rsp // 128: ff 25 00 00 00 00 jmpq *(%rip) # 0x12e <_JIT_ENTRY+0x12e> // 000000000000012a: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 12e: 4c 8b 7c 24 10 movq 0x10(%rsp), %r15 // 133: 49 8b 07 movq (%r15), %rax // 136: 48 85 c0 testq %rax, %rax // 139: 7f 18 jg 0x153 <_JIT_ENTRY+0x153> // 13b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x142 <_JIT_ENTRY+0x142> // 000000000000013e: R_X86_64_PC32 .L.str.1-0x4 // 142: be 3a 0e 00 00 movl $0xe3a, %esi # imm = 0xE3A // 147: 4c 89 fa movq %r15, %rdx // 14a: ff 15 00 00 00 00 callq *(%rip) # 0x150 <_JIT_ENTRY+0x150> // 000000000000014c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 150: 49 8b 07 movq (%r15), %rax // 153: 85 c0 testl %eax, %eax // 155: 4c 8b 6c 24 08 movq 0x8(%rsp), %r13 // 15a: 48 8b 5c 24 20 movq 0x20(%rsp), %rbx // 15f: 4c 8b 74 24 18 movq 0x18(%rsp), %r14 // 164: 78 14 js 0x17a <_JIT_ENTRY+0x17a> // 166: ff 15 00 00 00 00 callq *(%rip) # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 16c: 49 ff 0f decq (%r15) // 16f: 75 09 jne 0x17a <_JIT_ENTRY+0x17a> // 171: 4c 89 ff movq %r15, %rdi // 174: ff 15 00 00 00 00 callq *(%rip) # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 17a: 48 8b 0c 24 movq (%rsp), %rcx // 17e: 48 85 c9 testq %rcx, %rcx // 181: 74 48 je 0x1cb <_JIT_ENTRY+0x1cb> // 183: 48 8d 04 dd 00 00 00 00 leaq (,%rbx,8), %rax // 18b: 48 01 e8 addq %rbp, %rax // 18e: 4a 89 4c f5 00 movq %rcx, (%rbp,%r14,8) // 193: 48 89 c5 movq %rax, %rbp // 196: 48 83 c4 28 addq $0x28, %rsp // 19a: ff 25 00 00 00 00 jmpq *(%rip) # 0x1a0 <_JIT_ENTRY+0x1a0> // 000000000000019c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1a0: 48 83 3c 24 00 cmpq $0x0, (%rsp) // 1a5: 0f 85 11 ff ff ff jne 0xbc <_JIT_ENTRY+0xbc> // 1ab: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1b2 <_JIT_ENTRY+0x1b2> // 00000000000001ae: R_X86_64_PC32 .L.str.85-0x4 // 1b2: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_PC32 .L.str.1-0x4 // 1b9: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1c0 <_JIT_ENTRY+0x1c0> // 00000000000001bc: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1c0: ba 35 0e 00 00 movl $0xe35, %edx # imm = 0xE35 // 1c5: ff 15 00 00 00 00 callq *(%rip) # 0x1cb <_JIT_ENTRY+0x1cb> // 00000000000001c7: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1cb: 48 83 c4 28 addq $0x28, %rsp // 1cf: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d5 <_JIT_ENTRY+0x1d5> // 00000000000001d1: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1d5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1dc <_JIT_ENTRY+0x1dc> // 00000000000001d8: R_X86_64_PC32 .L.str.143-0x4 // 1dc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1e3 <_JIT_ENTRY+0x1e3> // 00000000000001df: R_X86_64_PC32 .L.str.144-0x4 // 1e3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ea <_JIT_ENTRY+0x1ea> // 00000000000001e6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 1ea: ba 4b 00 00 00 movl $0x4b, %edx // 1ef: ff 15 00 00 00 00 callq *(%rip) # 0x1f5 <_JIT_ENTRY+0x1f5> // 00000000000001f1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1f5: const unsigned char code_body[501] = { 0x48, 0x83, 0xec, 0x28, 0x0f, 0xb7, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xd8, 0xf7, 0xd0, 0x48, 0x63, 0xf0, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xd8, 0x48, 0x63, 0xf8, 0x4c, 0x8b, 0x44, 0xfd, 0x00, 0x31, 0xc9, 0x48, 0x83, 0x7c, 0xf5, 0x00, 0x00, 0x0f, 0x95, 0xc2, 0x49, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xe7, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x40, 0x10, 0x81, 0x78, 0x10, 0x80, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xd6, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x8d, 0x34, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xef, 0x49, 0x29, 0xf7, 0x88, 0xd1, 0x01, 0xcb, 0xc1, 0xe1, 0x03, 0x49, 0x29, 0xcf, 0x4c, 0x89, 0x44, 0x24, 0x10, 0x49, 0x8b, 0x78, 0x18, 0x41, 0x89, 0xde, 0x4c, 0x89, 0xfe, 0x4c, 0x89, 0xf2, 0xff, 0x50, 0x08, 0x48, 0x89, 0x04, 0x24, 0x4d, 0x85, 0xe4, 0x0f, 0x84, 0x44, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x85, 0xc0, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x0f, 0x84, 0xfc, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x78, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xef, 0x00, 0x00, 0x00, 0x85, 0xdb, 0x74, 0x6e, 0x31, 0xdb, 0xeb, 0x14, 0x66, 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc3, 0x49, 0x39, 0xde, 0x74, 0x56, 0x4d, 0x8b, 0x2c, 0xdf, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x78, 0xe7, 0xeb, 0x22, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x38, 0x0e, 0x00, 0x00, 0x4c, 0x89, 0xea, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x45, 0x00, 0x85, 0xc0, 0x78, 0xc3, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x4d, 0x00, 0x75, 0xb7, 0x4c, 0x89, 0xef, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xac, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7c, 0x24, 0x10, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x3a, 0x0e, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x4c, 0x8b, 0x6c, 0x24, 0x08, 0x48, 0x8b, 0x5c, 0x24, 0x20, 0x4c, 0x8b, 0x74, 0x24, 0x18, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0c, 0x24, 0x48, 0x85, 0xc9, 0x74, 0x48, 0x48, 0x8d, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x4a, 0x89, 0x4c, 0xf5, 0x00, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x0f, 0x85, 0x11, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x35, 0x0e, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00' // 143: 00 00 00 00 00 // 148: OPARG // 150: &PyCFunction_Type+0x0 // 158: &_Py_NegativeRefcount+0x0 // 160: &_Py_DECREF_DecRefTotal+0x0 // 168: &_Py_Dealloc+0x0 // 170: JUMP_TARGET // 178: CONTINUE // 180: &__assert_fail+0x0 // 188: ERROR_TARGET const unsigned char data_body[400] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x148, instruction->oparg); patch_64(data + 0x150, (uintptr_t)&PyCFunction_Type); patch_64(data + 0x158, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x160, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x168, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x170, instruction_starts[instruction->jump_target]); patch_64(data + 0x178, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x180, (uintptr_t)&__assert_fail); patch_64(data + 0x188, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0x14c); patch_32r(code + 0xf3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x101, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x10f, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x12a, (uintptr_t)data + 0x16c); patch_32r(code + 0x13e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x14c, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x168, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x176, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x19c, (uintptr_t)data + 0x174); patch_32r(code + 0x1ae, (uintptr_t)data + 0x8a); patch_32r(code + 0x1b5, (uintptr_t)data + -0x4); patch_32r(code + 0x1bc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1c7, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x1d1, (uintptr_t)data + 0x184); patch_32r(code + 0x1d8, (uintptr_t)data + 0xbc); patch_32r(code + 0x1df, (uintptr_t)data + 0xcb); patch_32r(code + 0x1e6, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x1f1, (uintptr_t)data + 0x17c); } void emit__CALL_BUILTIN_FAST_WITH_KEYWORDS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_BUILTIN_FAST_WITH_KEYWORDS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 0f b7 1d 00 00 00 00 movzwl (%rip), %ebx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 d8 movl %ebx, %eax // d: f7 d0 notl %eax // f: 48 63 f0 movslq %eax, %rsi // 12: b8 fe ff ff ff movl $0xfffffffe, %eax # imm = 0xFFFFFFFE // 17: 29 d8 subl %ebx, %eax // 19: 48 63 f8 movslq %eax, %rdi // 1c: 4c 8b 44 fd 00 movq (%rbp,%rdi,8), %r8 // 21: 31 c9 xorl %ecx, %ecx // 23: 48 83 7c f5 00 00 cmpq $0x0, (%rbp,%rsi,8) // 29: 0f 95 c2 setne %dl // 2c: 49 8b 40 08 movq 0x8(%r8), %rax // 30: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_REX_GOTPCRELX PyCFunction_Type-0x4 // 37: 0f 85 e7 00 00 00 jne 0x124 <_JIT_ENTRY+0x124> // 3d: 49 8b 40 10 movq 0x10(%r8), %rax // 41: 81 78 10 82 00 00 00 cmpl $0x82, 0x10(%rax) // 48: 0f 85 d6 00 00 00 jne 0x124 <_JIT_ENTRY+0x124> // 4e: 48 89 7c 24 18 movq %rdi, 0x18(%rsp) // 53: 48 89 74 24 20 movq %rsi, 0x20(%rsp) // 58: 8d 34 dd 00 00 00 00 leal (,%rbx,8), %esi // 5f: 49 89 ef movq %rbp, %r15 // 62: 49 29 f7 subq %rsi, %r15 // 65: 88 d1 movb %dl, %cl // 67: 01 cb addl %ecx, %ebx // 69: c1 e1 03 shll $0x3, %ecx // 6c: 49 29 cf subq %rcx, %r15 // 6f: 4c 89 44 24 10 movq %r8, 0x10(%rsp) // 74: 49 8b 78 18 movq 0x18(%r8), %rdi // 78: 41 89 de movl %ebx, %r14d // 7b: 4c 89 fe movq %r15, %rsi // 7e: 4c 89 f2 movq %r14, %rdx // 81: 31 c9 xorl %ecx, %ecx // 83: ff 50 08 callq *0x8(%rax) // 86: 48 89 04 24 movq %rax, (%rsp) // 8a: 4d 85 e4 testq %r12, %r12 // 8d: 0f 84 42 01 00 00 je 0x1d5 <_JIT_ENTRY+0x1d5> // 93: 49 8b 44 24 70 movq 0x70(%r12), %rax // 98: 48 85 c0 testq %rax, %rax // 9b: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // a0: 0f 84 fa 00 00 00 je 0x1a0 <_JIT_ENTRY+0x1a0> // a6: 48 83 3c 24 00 cmpq $0x0, (%rsp) // ab: 0f 95 c1 setne %cl // ae: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // b3: 0f 95 c0 setne %al // b6: 30 c8 xorb %cl, %al // b8: 0f 84 ed 00 00 00 je 0x1ab <_JIT_ENTRY+0x1ab> // be: 85 db testl %ebx, %ebx // c0: 74 6c je 0x12e <_JIT_ENTRY+0x12e> // c2: 31 db xorl %ebx, %ebx // c4: eb 12 jmp 0xd8 <_JIT_ENTRY+0xd8> // c6: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // d0: 48 ff c3 incq %rbx // d3: 49 39 de cmpq %rbx, %r14 // d6: 74 56 je 0x12e <_JIT_ENTRY+0x12e> // d8: 4d 8b 2c df movq (%r15,%rbx,8), %r13 // dc: 49 8b 45 00 movq (%r13), %rax // e0: 48 85 c0 testq %rax, %rax // e3: 7e 0b jle 0xf0 <_JIT_ENTRY+0xf0> // e5: 85 c0 testl %eax, %eax // e7: 78 e7 js 0xd0 <_JIT_ENTRY+0xd0> // e9: eb 22 jmp 0x10d <_JIT_ENTRY+0x10d> // eb: 0f 1f 44 00 00 nopl (%rax,%rax) // f0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L.str.1-0x4 // f7: be 61 0e 00 00 movl $0xe61, %esi # imm = 0xE61 // fc: 4c 89 ea movq %r13, %rdx // ff: ff 15 00 00 00 00 callq *(%rip) # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 105: 49 8b 45 00 movq (%r13), %rax // 109: 85 c0 testl %eax, %eax // 10b: 78 c3 js 0xd0 <_JIT_ENTRY+0xd0> // 10d: ff 15 00 00 00 00 callq *(%rip) # 0x113 <_JIT_ENTRY+0x113> // 000000000000010f: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 113: 49 ff 4d 00 decq (%r13) // 117: 75 b7 jne 0xd0 <_JIT_ENTRY+0xd0> // 119: 4c 89 ef movq %r13, %rdi // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 122: eb ac jmp 0xd0 <_JIT_ENTRY+0xd0> // 124: 48 83 c4 28 addq $0x28, %rsp // 128: ff 25 00 00 00 00 jmpq *(%rip) # 0x12e <_JIT_ENTRY+0x12e> // 000000000000012a: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 12e: 4c 8b 7c 24 10 movq 0x10(%rsp), %r15 // 133: 49 8b 07 movq (%r15), %rax // 136: 48 85 c0 testq %rax, %rax // 139: 7f 18 jg 0x153 <_JIT_ENTRY+0x153> // 13b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x142 <_JIT_ENTRY+0x142> // 000000000000013e: R_X86_64_PC32 .L.str.1-0x4 // 142: be 63 0e 00 00 movl $0xe63, %esi # imm = 0xE63 // 147: 4c 89 fa movq %r15, %rdx // 14a: ff 15 00 00 00 00 callq *(%rip) # 0x150 <_JIT_ENTRY+0x150> // 000000000000014c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 150: 49 8b 07 movq (%r15), %rax // 153: 85 c0 testl %eax, %eax // 155: 4c 8b 6c 24 08 movq 0x8(%rsp), %r13 // 15a: 48 8b 5c 24 20 movq 0x20(%rsp), %rbx // 15f: 4c 8b 74 24 18 movq 0x18(%rsp), %r14 // 164: 78 14 js 0x17a <_JIT_ENTRY+0x17a> // 166: ff 15 00 00 00 00 callq *(%rip) # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 16c: 49 ff 0f decq (%r15) // 16f: 75 09 jne 0x17a <_JIT_ENTRY+0x17a> // 171: 4c 89 ff movq %r15, %rdi // 174: ff 15 00 00 00 00 callq *(%rip) # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 17a: 48 8b 0c 24 movq (%rsp), %rcx // 17e: 48 85 c9 testq %rcx, %rcx // 181: 74 48 je 0x1cb <_JIT_ENTRY+0x1cb> // 183: 48 8d 04 dd 00 00 00 00 leaq (,%rbx,8), %rax // 18b: 48 01 e8 addq %rbp, %rax // 18e: 4a 89 4c f5 00 movq %rcx, (%rbp,%r14,8) // 193: 48 89 c5 movq %rax, %rbp // 196: 48 83 c4 28 addq $0x28, %rsp // 19a: ff 25 00 00 00 00 jmpq *(%rip) # 0x1a0 <_JIT_ENTRY+0x1a0> // 000000000000019c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1a0: 48 83 3c 24 00 cmpq $0x0, (%rsp) // 1a5: 0f 85 13 ff ff ff jne 0xbe <_JIT_ENTRY+0xbe> // 1ab: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1b2 <_JIT_ENTRY+0x1b2> // 00000000000001ae: R_X86_64_PC32 .L.str.85-0x4 // 1b2: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_PC32 .L.str.1-0x4 // 1b9: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1c0 <_JIT_ENTRY+0x1c0> // 00000000000001bc: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1c0: ba 5e 0e 00 00 movl $0xe5e, %edx # imm = 0xE5E // 1c5: ff 15 00 00 00 00 callq *(%rip) # 0x1cb <_JIT_ENTRY+0x1cb> // 00000000000001c7: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1cb: 48 83 c4 28 addq $0x28, %rsp // 1cf: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d5 <_JIT_ENTRY+0x1d5> // 00000000000001d1: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1d5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1dc <_JIT_ENTRY+0x1dc> // 00000000000001d8: R_X86_64_PC32 .L.str.143-0x4 // 1dc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1e3 <_JIT_ENTRY+0x1e3> // 00000000000001df: R_X86_64_PC32 .L.str.144-0x4 // 1e3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ea <_JIT_ENTRY+0x1ea> // 00000000000001e6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 1ea: ba 4b 00 00 00 movl $0x4b, %edx // 1ef: ff 15 00 00 00 00 callq *(%rip) # 0x1f5 <_JIT_ENTRY+0x1f5> // 00000000000001f1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1f5: const unsigned char code_body[501] = { 0x48, 0x83, 0xec, 0x28, 0x0f, 0xb7, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xd8, 0xf7, 0xd0, 0x48, 0x63, 0xf0, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xd8, 0x48, 0x63, 0xf8, 0x4c, 0x8b, 0x44, 0xfd, 0x00, 0x31, 0xc9, 0x48, 0x83, 0x7c, 0xf5, 0x00, 0x00, 0x0f, 0x95, 0xc2, 0x49, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xe7, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x40, 0x10, 0x81, 0x78, 0x10, 0x82, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xd6, 0x00, 0x00, 0x00, 0x48, 0x89, 0x7c, 0x24, 0x18, 0x48, 0x89, 0x74, 0x24, 0x20, 0x8d, 0x34, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xef, 0x49, 0x29, 0xf7, 0x88, 0xd1, 0x01, 0xcb, 0xc1, 0xe1, 0x03, 0x49, 0x29, 0xcf, 0x4c, 0x89, 0x44, 0x24, 0x10, 0x49, 0x8b, 0x78, 0x18, 0x41, 0x89, 0xde, 0x4c, 0x89, 0xfe, 0x4c, 0x89, 0xf2, 0x31, 0xc9, 0xff, 0x50, 0x08, 0x48, 0x89, 0x04, 0x24, 0x4d, 0x85, 0xe4, 0x0f, 0x84, 0x42, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x85, 0xc0, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x0f, 0x84, 0xfa, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x78, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xed, 0x00, 0x00, 0x00, 0x85, 0xdb, 0x74, 0x6c, 0x31, 0xdb, 0xeb, 0x12, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc3, 0x49, 0x39, 0xde, 0x74, 0x56, 0x4d, 0x8b, 0x2c, 0xdf, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x78, 0xe7, 0xeb, 0x22, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x61, 0x0e, 0x00, 0x00, 0x4c, 0x89, 0xea, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x45, 0x00, 0x85, 0xc0, 0x78, 0xc3, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x4d, 0x00, 0x75, 0xb7, 0x4c, 0x89, 0xef, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xac, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7c, 0x24, 0x10, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x63, 0x0e, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x4c, 0x8b, 0x6c, 0x24, 0x08, 0x48, 0x8b, 0x5c, 0x24, 0x20, 0x4c, 0x8b, 0x74, 0x24, 0x18, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0c, 0x24, 0x48, 0x85, 0xc9, 0x74, 0x48, 0x48, 0x8d, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x4a, 0x89, 0x4c, 0xf5, 0x00, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x0f, 0x85, 0x13, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5e, 0x0e, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00' // 143: 00 00 00 00 00 // 148: OPARG // 150: &PyCFunction_Type+0x0 // 158: &_Py_NegativeRefcount+0x0 // 160: &_Py_DECREF_DecRefTotal+0x0 // 168: &_Py_Dealloc+0x0 // 170: JUMP_TARGET // 178: CONTINUE // 180: &__assert_fail+0x0 // 188: ERROR_TARGET const unsigned char data_body[400] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x148, instruction->oparg); patch_64(data + 0x150, (uintptr_t)&PyCFunction_Type); patch_64(data + 0x158, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x160, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x168, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x170, instruction_starts[instruction->jump_target]); patch_64(data + 0x178, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x180, (uintptr_t)&__assert_fail); patch_64(data + 0x188, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0x14c); patch_32r(code + 0xf3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x101, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x10f, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x12a, (uintptr_t)data + 0x16c); patch_32r(code + 0x13e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x14c, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x168, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x176, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x19c, (uintptr_t)data + 0x174); patch_32r(code + 0x1ae, (uintptr_t)data + 0x8a); patch_32r(code + 0x1b5, (uintptr_t)data + -0x4); patch_32r(code + 0x1bc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1c7, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x1d1, (uintptr_t)data + 0x184); patch_32r(code + 0x1d8, (uintptr_t)data + 0xbc); patch_32r(code + 0x1df, (uintptr_t)data + 0xcb); patch_32r(code + 0x1e6, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x1f1, (uintptr_t)data + 0x17c); } void emit__CALL_BUILTIN_O( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_BUILTIN_O.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c8 movl %ecx, %eax // d: f7 d0 notl %eax // f: 4c 63 f0 movslq %eax, %r14 // 12: 31 c0 xorl %eax, %eax // 14: 4a 83 7c f5 00 00 cmpq $0x0, (%rbp,%r14,8) // 1a: 0f 95 c0 setne %al // 1d: 8d 14 08 leal (%rax,%rcx), %edx // 20: 83 fa 01 cmpl $0x1, %edx // 23: 0f 85 3b 01 00 00 jne 0x164 <_JIT_ENTRY+0x164> // 29: ba fe ff ff ff movl $0xfffffffe, %edx # imm = 0xFFFFFFFE // 2e: 29 ca subl %ecx, %edx // 30: 4c 63 fa movslq %edx, %r15 // 33: 4a 8b 5c fd 00 movq (%rbp,%r15,8), %rbx // 38: 48 8b 53 08 movq 0x8(%rbx), %rdx // 3c: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_REX_GOTPCRELX PyCFunction_Type-0x4 // 43: 0f 85 1b 01 00 00 jne 0x164 <_JIT_ENTRY+0x164> // 49: 48 8b 53 10 movq 0x10(%rbx), %rdx // 4d: 83 7a 10 08 cmpl $0x8, 0x10(%rdx) // 51: 0f 85 0d 01 00 00 jne 0x164 <_JIT_ENTRY+0x164> // 57: 45 8b 44 24 34 movl 0x34(%r12), %r8d // 5c: 45 85 c0 testl %r8d, %r8d // 5f: 0f 8e ff 00 00 00 jle 0x164 <_JIT_ENTRY+0x164> // 65: c1 e1 03 shll $0x3, %ecx // 68: 48 89 ef movq %rbp, %rdi // 6b: 48 29 cf subq %rcx, %rdi // 6e: 48 f7 d8 negq %rax // 71: 48 8b 4a 08 movq 0x8(%rdx), %rcx // 75: 48 8b 34 c7 movq (%rdi,%rax,8), %rsi // 79: 41 ff c8 decl %r8d // 7c: 45 89 44 24 34 movl %r8d, 0x34(%r12) // 81: 48 8b 7b 18 movq 0x18(%rbx), %rdi // 85: 48 89 74 24 08 movq %rsi, 0x8(%rsp) // 8a: ff d1 callq *%rcx // 8c: 41 ff 44 24 34 incl 0x34(%r12) // 91: 49 8b 54 24 70 movq 0x70(%r12), %rdx // 96: 48 85 d2 testq %rdx, %rdx // 99: 48 89 44 24 10 movq %rax, 0x10(%rsp) // 9e: 0f 84 ca 00 00 00 je 0x16e <_JIT_ENTRY+0x16e> // a4: 48 85 c0 testq %rax, %rax // a7: 0f 95 c1 setne %cl // aa: 48 83 7a 08 00 cmpq $0x0, 0x8(%rdx) // af: 0f 95 c0 setne %al // b2: 30 c8 xorb %cl, %al // b4: 0f 84 bd 00 00 00 je 0x177 <_JIT_ENTRY+0x177> // ba: 48 8b 44 24 08 movq 0x8(%rsp), %rax // bf: 48 8b 00 movq (%rax), %rax // c2: 48 85 c0 testq %rax, %rax // c5: 7f 1f jg 0xe6 <_JIT_ENTRY+0xe6> // c7: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xce <_JIT_ENTRY+0xce> // 00000000000000ca: R_X86_64_PC32 .L.str.1-0x4 // ce: be 0f 0e 00 00 movl $0xe0f, %esi # imm = 0xE0F // d3: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // d8: ff 15 00 00 00 00 callq *(%rip) # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // de: 48 8b 44 24 08 movq 0x8(%rsp), %rax // e3: 48 8b 00 movq (%rax), %rax // e6: 85 c0 testl %eax, %eax // e8: 78 1b js 0x105 <_JIT_ENTRY+0x105> // ea: ff 15 00 00 00 00 callq *(%rip) # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // f0: 48 8b 44 24 08 movq 0x8(%rsp), %rax // f5: 48 ff 08 decq (%rax) // f8: 75 0b jne 0x105 <_JIT_ENTRY+0x105> // fa: 48 8b 7c 24 08 movq 0x8(%rsp), %rdi // ff: ff 15 00 00 00 00 callq *(%rip) # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 105: 48 8b 03 movq (%rbx), %rax // 108: 48 85 c0 testq %rax, %rax // 10b: 7f 18 jg 0x125 <_JIT_ENTRY+0x125> // 10d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x114 <_JIT_ENTRY+0x114> // 0000000000000110: R_X86_64_PC32 .L.str.1-0x4 // 114: be 10 0e 00 00 movl $0xe10, %esi # imm = 0xE10 // 119: 48 89 da movq %rbx, %rdx // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 122: 48 8b 03 movq (%rbx), %rax // 125: 85 c0 testl %eax, %eax // 127: 78 14 js 0x13d <_JIT_ENTRY+0x13d> // 129: ff 15 00 00 00 00 callq *(%rip) # 0x12f <_JIT_ENTRY+0x12f> // 000000000000012b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 12f: 48 ff 0b decq (%rbx) // 132: 75 09 jne 0x13d <_JIT_ENTRY+0x13d> // 134: 48 89 df movq %rbx, %rdi // 137: ff 15 00 00 00 00 callq *(%rip) # 0x13d <_JIT_ENTRY+0x13d> // 0000000000000139: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 13d: 48 8b 4c 24 10 movq 0x10(%rsp), %rcx // 142: 48 85 c9 testq %rcx, %rcx // 145: 74 50 je 0x197 <_JIT_ENTRY+0x197> // 147: 4a 8d 04 f5 00 00 00 00 leaq (,%r14,8), %rax // 14f: 48 01 e8 addq %rbp, %rax // 152: 4a 89 4c fd 00 movq %rcx, (%rbp,%r15,8) // 157: 48 89 c5 movq %rax, %rbp // 15a: 48 83 c4 18 addq $0x18, %rsp // 15e: ff 25 00 00 00 00 jmpq *(%rip) # 0x164 <_JIT_ENTRY+0x164> // 0000000000000160: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 164: 48 83 c4 18 addq $0x18, %rsp // 168: ff 25 00 00 00 00 jmpq *(%rip) # 0x16e <_JIT_ENTRY+0x16e> // 000000000000016a: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 16e: 48 85 c0 testq %rax, %rax // 171: 0f 85 43 ff ff ff jne 0xba <_JIT_ENTRY+0xba> // 177: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x17e <_JIT_ENTRY+0x17e> // 000000000000017a: R_X86_64_PC32 .L.str.85-0x4 // 17e: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x185 <_JIT_ENTRY+0x185> // 0000000000000181: R_X86_64_PC32 .L.str.1-0x4 // 185: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x18c <_JIT_ENTRY+0x18c> // 0000000000000188: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 18c: ba 0e 0e 00 00 movl $0xe0e, %edx # imm = 0xE0E // 191: ff 15 00 00 00 00 callq *(%rip) # 0x197 <_JIT_ENTRY+0x197> // 0000000000000193: R_X86_64_GOTPCRELX __assert_fail-0x4 // 197: 48 83 c4 18 addq $0x18, %rsp // 19b: ff 25 00 00 00 00 jmpq *(%rip) # 0x1a1 <_JIT_ENTRY+0x1a1> // 000000000000019d: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1a1: const unsigned char code_body[417] = { 0x48, 0x83, 0xec, 0x18, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc8, 0xf7, 0xd0, 0x4c, 0x63, 0xf0, 0x31, 0xc0, 0x4a, 0x83, 0x7c, 0xf5, 0x00, 0x00, 0x0f, 0x95, 0xc0, 0x8d, 0x14, 0x08, 0x83, 0xfa, 0x01, 0x0f, 0x85, 0x3b, 0x01, 0x00, 0x00, 0xba, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xca, 0x4c, 0x63, 0xfa, 0x4a, 0x8b, 0x5c, 0xfd, 0x00, 0x48, 0x8b, 0x53, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x1b, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x53, 0x10, 0x83, 0x7a, 0x10, 0x08, 0x0f, 0x85, 0x0d, 0x01, 0x00, 0x00, 0x45, 0x8b, 0x44, 0x24, 0x34, 0x45, 0x85, 0xc0, 0x0f, 0x8e, 0xff, 0x00, 0x00, 0x00, 0xc1, 0xe1, 0x03, 0x48, 0x89, 0xef, 0x48, 0x29, 0xcf, 0x48, 0xf7, 0xd8, 0x48, 0x8b, 0x4a, 0x08, 0x48, 0x8b, 0x34, 0xc7, 0x41, 0xff, 0xc8, 0x45, 0x89, 0x44, 0x24, 0x34, 0x48, 0x8b, 0x7b, 0x18, 0x48, 0x89, 0x74, 0x24, 0x08, 0xff, 0xd1, 0x41, 0xff, 0x44, 0x24, 0x34, 0x49, 0x8b, 0x54, 0x24, 0x70, 0x48, 0x85, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x10, 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x7a, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xbd, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x7f, 0x1f, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x0f, 0x0e, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x8b, 0x00, 0x85, 0xc0, 0x78, 0x1b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0xff, 0x08, 0x75, 0x0b, 0x48, 0x8b, 0x7c, 0x24, 0x08, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x0e, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x10, 0x48, 0x85, 0xc9, 0x74, 0x50, 0x4a, 0x8d, 0x04, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x4a, 0x89, 0x4c, 0xfd, 0x00, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x85, 0x43, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x0e, 0x0e, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00' // c0: // c0: OPARG // c8: &PyCFunction_Type+0x0 // d0: &_Py_NegativeRefcount+0x0 // d8: &_Py_DECREF_DecRefTotal+0x0 // e0: &_Py_Dealloc+0x0 // e8: CONTINUE // f0: JUMP_TARGET // f8: &__assert_fail+0x0 // 100: ERROR_TARGET const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc0, instruction->oparg); patch_64(data + 0xc8, (uintptr_t)&PyCFunction_Type); patch_64(data + 0xd0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xd8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xe0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, instruction_starts[instruction->jump_target]); patch_64(data + 0xf8, (uintptr_t)&__assert_fail); patch_64(data + 0x100, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0xc4); patch_32r(code + 0xca, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xda, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xec, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x101, (uintptr_t)data + 0xdc); patch_32r(code + 0x110, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x12b, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x139, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x160, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x16a, (uintptr_t)data + 0xec); patch_32r(code + 0x17a, (uintptr_t)data + 0x8a); patch_32r(code + 0x181, (uintptr_t)data + -0x4); patch_32r(code + 0x188, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x193, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x19d, (uintptr_t)data + 0xfc); } void emit__CALL_INTRINSIC_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_INTRINSIC_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 0c cmpw $0xc, %ax // c: 73 7b jae 0x89 <_JIT_ENTRY+0x89> // e: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 12: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 19: c1 e0 04 shll $0x4, %eax // 1c: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_REX_GOTPCRELX _PyIntrinsics_UnaryFunctions-0x4 // 23: 4c 89 e7 movq %r12, %rdi // 26: 48 89 de movq %rbx, %rsi // 29: ff 14 01 callq *(%rcx,%rax) // 2c: 49 89 c6 movq %rax, %r14 // 2f: 48 8b 03 movq (%rbx), %rax // 32: 48 85 c0 testq %rax, %rax // 35: 7e 06 jle 0x3d <_JIT_ENTRY+0x3d> // 37: 85 c0 testl %eax, %eax // 39: 79 1e jns 0x59 <_JIT_ENTRY+0x59> // 3b: eb 27 jmp 0x64 <_JIT_ENTRY+0x64> // 3d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_PC32 .L.str.1-0x4 // 44: be b7 03 00 00 movl $0x3b7, %esi # imm = 0x3B7 // 49: 48 89 da movq %rbx, %rdx // 4c: ff 15 00 00 00 00 callq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 52: 48 8b 03 movq (%rbx), %rax // 55: 85 c0 testl %eax, %eax // 57: 78 0b js 0x64 <_JIT_ENTRY+0x64> // 59: ff 15 00 00 00 00 callq *(%rip) # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5f: 48 ff 0b decq (%rbx) // 62: 74 10 je 0x74 <_JIT_ENTRY+0x74> // 64: 4d 85 f6 testq %r14, %r14 // 67: 74 19 je 0x82 <_JIT_ENTRY+0x82> // 69: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 6d: 58 popq %rax // 6e: ff 25 00 00 00 00 jmpq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 74: 48 89 df movq %rbx, %rdi // 77: ff 15 00 00 00 00 callq *(%rip) # 0x7d <_JIT_ENTRY+0x7d> // 0000000000000079: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 7d: 4d 85 f6 testq %r14, %r14 // 80: 75 e7 jne 0x69 <_JIT_ENTRY+0x69> // 82: 58 popq %rax // 83: ff 25 00 00 00 00 jmpq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 89: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_PC32 .L.str.12-0x4 // 90: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_PC32 .L.str.1-0x4 // 97: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 9e: ba b5 03 00 00 movl $0x3b5, %edx # imm = 0x3B5 // a3: ff 15 00 00 00 00 callq *(%rip) # 0xa9 <_JIT_ENTRY+0xa9> // 00000000000000a5: R_X86_64_GOTPCRELX __assert_fail-0x4 // a9: const unsigned char code_body[169] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x0c, 0x73, 0x7b, 0x48, 0x8b, 0x5d, 0xf8, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x04, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xde, 0xff, 0x14, 0x01, 0x49, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb7, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x10, 0x4d, 0x85, 0xf6, 0x74, 0x19, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x75, 0xe7, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb5, 0x03, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg <= MAX_INTRINSIC_1\x00' // a7: 00 // a8: OPARG // b0: &_PyIntrinsics_UnaryFunctions+0x0 // b8: &_Py_NegativeRefcount+0x0 // c0: &_Py_DECREF_DecRefTotal+0x0 // c8: CONTINUE // d0: &_Py_Dealloc+0x0 // d8: ERROR_TARGET // e0: &__assert_fail+0x0 const unsigned char data_body[232] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3c, 0x3d, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x49, 0x4e, 0x54, 0x52, 0x49, 0x4e, 0x53, 0x49, 0x43, 0x5f, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, instruction->oparg); patch_64(data + 0xb0, (uintptr_t)&_PyIntrinsics_UnaryFunctions); patch_64(data + 0xb8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xc0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd8, instruction_starts[instruction->error_target]); patch_64(data + 0xe0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xa4); patch_32r(code + 0x15, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x1f, (uintptr_t)data + 0xac); patch_32r(code + 0x40, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x5b, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x79, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0xd4); patch_32r(code + 0x8c, (uintptr_t)data + 0x8a); patch_32r(code + 0x93, (uintptr_t)data + -0x4); patch_32r(code + 0x9a, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xa5, (uintptr_t)data + 0xdc); } void emit__CALL_INTRINSIC_2( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_INTRINSIC_2.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 06 cmpw $0x6, %ax // c: 0f 83 cc 00 00 00 jae 0xde <_JIT_ENTRY+0xde> // 12: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 16: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 1a: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 21: c1 e0 04 shll $0x4, %eax // 24: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x2b <_JIT_ENTRY+0x2b> // 0000000000000027: R_X86_64_REX_GOTPCRELX _PyIntrinsics_BinaryFunctions-0x4 // 2b: 4c 89 e7 movq %r12, %rdi // 2e: 4c 89 fe movq %r15, %rsi // 31: 48 89 da movq %rbx, %rdx // 34: ff 14 01 callq *(%rcx,%rax) // 37: 49 89 c6 movq %rax, %r14 // 3a: 49 8b 07 movq (%r15), %rax // 3d: 48 85 c0 testq %rax, %rax // 40: 7e 06 jle 0x48 <_JIT_ENTRY+0x48> // 42: 85 c0 testl %eax, %eax // 44: 79 1e jns 0x64 <_JIT_ENTRY+0x64> // 46: eb 27 jmp 0x6f <_JIT_ENTRY+0x6f> // 48: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_PC32 .L.str.1-0x4 // 4f: be c6 03 00 00 movl $0x3c6, %esi # imm = 0x3C6 // 54: 4c 89 fa movq %r15, %rdx // 57: ff 15 00 00 00 00 callq *(%rip) # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 5d: 49 8b 07 movq (%r15), %rax // 60: 85 c0 testl %eax, %eax // 62: 78 0b js 0x6f <_JIT_ENTRY+0x6f> // 64: ff 15 00 00 00 00 callq *(%rip) # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 6a: 49 ff 0f decq (%r15) // 6d: 74 0e je 0x7d <_JIT_ENTRY+0x7d> // 6f: 48 8b 03 movq (%rbx), %rax // 72: 48 85 c0 testq %rax, %rax // 75: 7e 17 jle 0x8e <_JIT_ENTRY+0x8e> // 77: 85 c0 testl %eax, %eax // 79: 79 2f jns 0xaa <_JIT_ENTRY+0xaa> // 7b: eb 38 jmp 0xb5 <_JIT_ENTRY+0xb5> // 7d: 4c 89 ff movq %r15, %rdi // 80: ff 15 00 00 00 00 callq *(%rip) # 0x86 <_JIT_ENTRY+0x86> // 0000000000000082: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 86: 48 8b 03 movq (%rbx), %rax // 89: 48 85 c0 testq %rax, %rax // 8c: 7f e9 jg 0x77 <_JIT_ENTRY+0x77> // 8e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_PC32 .L.str.1-0x4 // 95: be c7 03 00 00 movl $0x3c7, %esi # imm = 0x3C7 // 9a: 48 89 da movq %rbx, %rdx // 9d: ff 15 00 00 00 00 callq *(%rip) # 0xa3 <_JIT_ENTRY+0xa3> // 000000000000009f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // a3: 48 8b 03 movq (%rbx), %rax // a6: 85 c0 testl %eax, %eax // a8: 78 0b js 0xb5 <_JIT_ENTRY+0xb5> // aa: ff 15 00 00 00 00 callq *(%rip) # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // b0: 48 ff 0b decq (%rbx) // b3: 74 14 je 0xc9 <_JIT_ENTRY+0xc9> // b5: 4d 85 f6 testq %r14, %r14 // b8: 74 1d je 0xd7 <_JIT_ENTRY+0xd7> // ba: 4c 89 75 f0 movq %r14, -0x10(%rbp) // be: 48 83 c5 f8 addq $-0x8, %rbp // c2: 58 popq %rax // c3: ff 25 00 00 00 00 jmpq *(%rip) # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c9: 48 89 df movq %rbx, %rdi // cc: ff 15 00 00 00 00 callq *(%rip) # 0xd2 <_JIT_ENTRY+0xd2> // 00000000000000ce: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // d2: 4d 85 f6 testq %r14, %r14 // d5: 75 e3 jne 0xba <_JIT_ENTRY+0xba> // d7: 58 popq %rax // d8: ff 25 00 00 00 00 jmpq *(%rip) # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // de: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe5 <_JIT_ENTRY+0xe5> // 00000000000000e1: R_X86_64_PC32 .L.str.13-0x4 // e5: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xec <_JIT_ENTRY+0xec> // 00000000000000e8: R_X86_64_PC32 .L.str.1-0x4 // ec: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xf3 <_JIT_ENTRY+0xf3> // 00000000000000ef: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // f3: ba c4 03 00 00 movl $0x3c4, %edx # imm = 0x3C4 // f8: ff 15 00 00 00 00 callq *(%rip) # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_GOTPCRELX __assert_fail-0x4 // fe: const unsigned char code_body[254] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x06, 0x0f, 0x83, 0xcc, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x04, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x4c, 0x89, 0xfe, 0x48, 0x89, 0xda, 0xff, 0x14, 0x01, 0x49, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xc6, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xc7, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x14, 0x4d, 0x85, 0xf6, 0x74, 0x1d, 0x4c, 0x89, 0x75, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc4, 0x03, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg <= MAX_INTRINSIC_2\x00' // a7: 00 // a8: OPARG // b0: &_PyIntrinsics_BinaryFunctions+0x0 // b8: &_Py_NegativeRefcount+0x0 // c0: &_Py_DECREF_DecRefTotal+0x0 // c8: &_Py_Dealloc+0x0 // d0: CONTINUE // d8: ERROR_TARGET // e0: &__assert_fail+0x0 const unsigned char data_body[232] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3c, 0x3d, 0x20, 0x4d, 0x41, 0x58, 0x5f, 0x49, 0x4e, 0x54, 0x52, 0x49, 0x4e, 0x53, 0x49, 0x43, 0x5f, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, instruction->oparg); patch_64(data + 0xb0, (uintptr_t)&_PyIntrinsics_BinaryFunctions); patch_64(data + 0xb8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xc0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xc8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd8, instruction_starts[instruction->error_target]); patch_64(data + 0xe0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xa4); patch_32r(code + 0x1d, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x27, (uintptr_t)data + 0xac); patch_32r(code + 0x4b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x66, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x82, (uintptr_t)data + 0xc4); patch_32r(code + 0x91, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x9f, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xac, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0xc5, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xce, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0xda, (uintptr_t)data + 0xd4); patch_32r(code + 0xe1, (uintptr_t)data + 0x8a); patch_32r(code + 0xe8, (uintptr_t)data + -0x4); patch_32r(code + 0xef, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xfa, (uintptr_t)data + 0xdc); } void emit__CALL_ISINSTANCE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_ISINSTANCE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c8 movl %ecx, %eax // d: f7 d0 notl %eax // f: 4c 63 f8 movslq %eax, %r15 // 12: 31 c0 xorl %eax, %eax // 14: 4a 83 7c fd 00 00 cmpq $0x0, (%rbp,%r15,8) // 1a: 0f 95 c0 setne %al // 1d: 8d 14 08 leal (%rax,%rcx), %edx // 20: 83 fa 02 cmpl $0x2, %edx // 23: 75 1d jne 0x42 <_JIT_ENTRY+0x42> // 25: ba fe ff ff ff movl $0xfffffffe, %edx # imm = 0xFFFFFFFE // 2a: 29 ca subl %ecx, %edx // 2c: 48 63 f2 movslq %edx, %rsi // 2f: 48 8b 5c f5 00 movq (%rbp,%rsi,8), %rbx // 34: 49 8b 54 24 10 movq 0x10(%r12), %rdx // 39: 48 3b 9a 10 ea 02 00 cmpq 0x2ea10(%rdx), %rbx // 40: 74 0a je 0x4c <_JIT_ENTRY+0x4c> // 42: 48 83 c4 18 addq $0x18, %rsp // 46: ff 25 00 00 00 00 jmpq *(%rip) # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 4c: 48 89 74 24 10 movq %rsi, 0x10(%rsp) // 51: c1 e1 03 shll $0x3, %ecx // 54: 48 89 ea movq %rbp, %rdx // 57: 48 29 ca subq %rcx, %rdx // 5a: 48 f7 d8 negq %rax // 5d: 4c 8b 34 c2 movq (%rdx,%rax,8), %r14 // 61: 48 8b 74 c2 08 movq 0x8(%rdx,%rax,8), %rsi // 66: 4c 89 f7 movq %r14, %rdi // 69: 48 89 74 24 08 movq %rsi, 0x8(%rsp) // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX PyObject_IsInstance-0x4 // 74: 85 c0 testl %eax, %eax // 76: 78 52 js 0xca <_JIT_ENTRY+0xca> // 78: 89 c7 movl %eax, %edi // 7a: ff 15 00 00 00 00 callq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX PyBool_FromLong-0x4 // 80: 49 8b 54 24 70 movq 0x70(%r12), %rdx // 85: 48 85 d2 testq %rdx, %rdx // 88: 74 4a je 0xd4 <_JIT_ENTRY+0xd4> // 8a: 48 85 c0 testq %rax, %rax // 8d: 0f 95 c1 setne %cl // 90: 48 83 7a 08 00 cmpq $0x0, 0x8(%rdx) // 95: 0f 95 c2 setne %dl // 98: 30 ca xorb %cl, %dl // 9a: 0f 84 14 01 00 00 je 0x1b4 <_JIT_ENTRY+0x1b4> // a0: 48 85 c0 testq %rax, %rax // a3: 75 38 jne 0xdd <_JIT_ENTRY+0xdd> // a5: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // ac: 49 89 84 24 10 01 00 00 movq %rax, 0x110(%r12) // b4: 4c 29 ed subq %r13, %rbp // b7: 48 83 c5 b8 addq $-0x48, %rbp // bb: 48 c1 ed 03 shrq $0x3, %rbp // bf: 41 89 6d 40 movl %ebp, 0x40(%r13) // c3: 31 c0 xorl %eax, %eax // c5: 48 83 c4 18 addq $0x18, %rsp // c9: c3 retq // ca: 48 83 c4 18 addq $0x18, %rsp // ce: ff 25 00 00 00 00 jmpq *(%rip) # 0xd4 <_JIT_ENTRY+0xd4> // 00000000000000d0: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // d4: 48 85 c0 testq %rax, %rax // d7: 0f 84 d7 00 00 00 je 0x1b4 <_JIT_ENTRY+0x1b4> // dd: 48 89 04 24 movq %rax, (%rsp) // e1: 49 8b 06 movq (%r14), %rax // e4: 48 85 c0 testq %rax, %rax // e7: 7f 18 jg 0x101 <_JIT_ENTRY+0x101> // e9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.1-0x4 // f0: be b8 0e 00 00 movl $0xeb8, %esi # imm = 0xEB8 // f5: 4c 89 f2 movq %r14, %rdx // f8: ff 15 00 00 00 00 callq *(%rip) # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // fe: 49 8b 06 movq (%r14), %rax // 101: 85 c0 testl %eax, %eax // 103: 78 14 js 0x119 <_JIT_ENTRY+0x119> // 105: ff 15 00 00 00 00 callq *(%rip) # 0x10b <_JIT_ENTRY+0x10b> // 0000000000000107: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 10b: 49 ff 0e decq (%r14) // 10e: 75 09 jne 0x119 <_JIT_ENTRY+0x119> // 110: 4c 89 f7 movq %r14, %rdi // 113: ff 15 00 00 00 00 callq *(%rip) # 0x119 <_JIT_ENTRY+0x119> // 0000000000000115: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 119: 4c 8b 74 24 08 movq 0x8(%rsp), %r14 // 11e: 49 8b 06 movq (%r14), %rax // 121: 48 85 c0 testq %rax, %rax // 124: 7f 18 jg 0x13e <_JIT_ENTRY+0x13e> // 126: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_PC32 .L.str.1-0x4 // 12d: be b9 0e 00 00 movl $0xeb9, %esi # imm = 0xEB9 // 132: 4c 89 f2 movq %r14, %rdx // 135: ff 15 00 00 00 00 callq *(%rip) # 0x13b <_JIT_ENTRY+0x13b> // 0000000000000137: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 13b: 49 8b 06 movq (%r14), %rax // 13e: 85 c0 testl %eax, %eax // 140: 78 14 js 0x156 <_JIT_ENTRY+0x156> // 142: ff 15 00 00 00 00 callq *(%rip) # 0x148 <_JIT_ENTRY+0x148> // 0000000000000144: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 148: 49 ff 0e decq (%r14) // 14b: 75 09 jne 0x156 <_JIT_ENTRY+0x156> // 14d: 4c 89 f7 movq %r14, %rdi // 150: ff 15 00 00 00 00 callq *(%rip) # 0x156 <_JIT_ENTRY+0x156> // 0000000000000152: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 156: 48 8b 03 movq (%rbx), %rax // 159: 48 85 c0 testq %rax, %rax // 15c: 7f 18 jg 0x176 <_JIT_ENTRY+0x176> // 15e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x165 <_JIT_ENTRY+0x165> // 0000000000000161: R_X86_64_PC32 .L.str.1-0x4 // 165: be ba 0e 00 00 movl $0xeba, %esi # imm = 0xEBA // 16a: 48 89 da movq %rbx, %rdx // 16d: ff 15 00 00 00 00 callq *(%rip) # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 173: 48 8b 03 movq (%rbx), %rax // 176: 4e 8d 34 fd 00 00 00 00 leaq (,%r15,8), %r14 // 17e: 49 01 ee addq %rbp, %r14 // 181: 85 c0 testl %eax, %eax // 183: 78 14 js 0x199 <_JIT_ENTRY+0x199> // 185: ff 15 00 00 00 00 callq *(%rip) # 0x18b <_JIT_ENTRY+0x18b> // 0000000000000187: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 18b: 48 ff 0b decq (%rbx) // 18e: 75 09 jne 0x199 <_JIT_ENTRY+0x199> // 190: 48 89 df movq %rbx, %rdi // 193: ff 15 00 00 00 00 callq *(%rip) # 0x199 <_JIT_ENTRY+0x199> // 0000000000000195: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 199: 48 8b 44 24 10 movq 0x10(%rsp), %rax // 19e: 48 8b 0c 24 movq (%rsp), %rcx // 1a2: 48 89 4c c5 00 movq %rcx, (%rbp,%rax,8) // 1a7: 4c 89 f5 movq %r14, %rbp // 1aa: 48 83 c4 18 addq $0x18, %rsp // 1ae: ff 25 00 00 00 00 jmpq *(%rip) # 0x1b4 <_JIT_ENTRY+0x1b4> // 00000000000001b0: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1b4: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1bb <_JIT_ENTRY+0x1bb> // 00000000000001b7: R_X86_64_PC32 .L.str.85-0x4 // 1bb: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1c2 <_JIT_ENTRY+0x1c2> // 00000000000001be: R_X86_64_PC32 .L.str.1-0x4 // 1c2: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1c9 <_JIT_ENTRY+0x1c9> // 00000000000001c5: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1c9: ba b4 0e 00 00 movl $0xeb4, %edx # imm = 0xEB4 // 1ce: ff 15 00 00 00 00 callq *(%rip) # 0x1d4 <_JIT_ENTRY+0x1d4> // 00000000000001d0: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1d4: const unsigned char code_body[468] = { 0x48, 0x83, 0xec, 0x18, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc8, 0xf7, 0xd0, 0x4c, 0x63, 0xf8, 0x31, 0xc0, 0x4a, 0x83, 0x7c, 0xfd, 0x00, 0x00, 0x0f, 0x95, 0xc0, 0x8d, 0x14, 0x08, 0x83, 0xfa, 0x02, 0x75, 0x1d, 0xba, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xca, 0x48, 0x63, 0xf2, 0x48, 0x8b, 0x5c, 0xf5, 0x00, 0x49, 0x8b, 0x54, 0x24, 0x10, 0x48, 0x3b, 0x9a, 0x10, 0xea, 0x02, 0x00, 0x74, 0x0a, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x74, 0x24, 0x10, 0xc1, 0xe1, 0x03, 0x48, 0x89, 0xea, 0x48, 0x29, 0xca, 0x48, 0xf7, 0xd8, 0x4c, 0x8b, 0x34, 0xc2, 0x48, 0x8b, 0x74, 0xc2, 0x08, 0x4c, 0x89, 0xf7, 0x48, 0x89, 0x74, 0x24, 0x08, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x52, 0x89, 0xc7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x54, 0x24, 0x70, 0x48, 0x85, 0xd2, 0x74, 0x4a, 0x48, 0x85, 0xc0, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x7a, 0x08, 0x00, 0x0f, 0x95, 0xc2, 0x30, 0xca, 0x0f, 0x84, 0x14, 0x01, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x38, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x31, 0xc0, 0x48, 0x83, 0xc4, 0x18, 0xc3, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xd7, 0x00, 0x00, 0x00, 0x48, 0x89, 0x04, 0x24, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb8, 0x0e, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x74, 0x24, 0x08, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb9, 0x0e, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xba, 0x0e, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4e, 0x8d, 0x34, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x01, 0xee, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x8b, 0x0c, 0x24, 0x48, 0x89, 0x4c, 0xc5, 0x00, 0x4c, 0x89, 0xf5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb4, 0x0e, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00' // c0: // c0: OPARG // c8: JUMP_TARGET // d0: &PyObject_IsInstance+0x0 // d8: &PyBool_FromLong+0x0 // e0: EXECUTOR // e8: ERROR_TARGET // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: CONTINUE // 110: &__assert_fail+0x0 const unsigned char data_body[280] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc0, instruction->oparg); patch_64(data + 0xc8, instruction_starts[instruction->jump_target]); patch_64(data + 0xd0, (uintptr_t)&PyObject_IsInstance); patch_64(data + 0xd8, (uintptr_t)&PyBool_FromLong); patch_64(data + 0xe0, (uintptr_t)executor); patch_64(data + 0xe8, instruction_starts[instruction->error_target]); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x110, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x7c, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0xd0, (uintptr_t)data + 0xe4); patch_32r(code + 0xec, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xfa, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x107, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x115, (uintptr_t)data + 0xfc); patch_32r(code + 0x129, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x137, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x144, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x152, (uintptr_t)data + 0xfc); patch_32r(code + 0x161, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x16f, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x187, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x195, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x1b0, (uintptr_t)data + 0x104); patch_32r(code + 0x1b7, (uintptr_t)data + 0x8a); patch_32r(code + 0x1be, (uintptr_t)data + -0x4); patch_32r(code + 0x1c5, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1d0, (uintptr_t)data + 0x10c); } void emit__CALL_LEN( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_LEN.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c1 movl %eax, %ecx // d: f7 d1 notl %ecx // f: 48 63 d9 movslq %ecx, %rbx // 12: 31 c9 xorl %ecx, %ecx // 14: 48 83 7c dd 00 00 cmpq $0x0, (%rbp,%rbx,8) // 1a: 0f 95 c1 setne %cl // 1d: 8d 14 01 leal (%rcx,%rax), %edx // 20: 83 fa 01 cmpl $0x1, %edx // 23: 75 1d jne 0x42 <_JIT_ENTRY+0x42> // 25: ba fe ff ff ff movl $0xfffffffe, %edx # imm = 0xFFFFFFFE // 2a: 29 c2 subl %eax, %edx // 2c: 4c 63 f2 movslq %edx, %r14 // 2f: 4e 8b 7c f5 00 movq (%rbp,%r14,8), %r15 // 34: 49 8b 54 24 10 movq 0x10(%r12), %rdx // 39: 4c 3b ba 18 ea 02 00 cmpq 0x2ea18(%rdx), %r15 // 40: 74 0a je 0x4c <_JIT_ENTRY+0x4c> // 42: 48 83 c4 18 addq $0x18, %rsp // 46: ff 25 00 00 00 00 jmpq *(%rip) # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 4c: c1 e0 03 shll $0x3, %eax // 4f: 48 89 ea movq %rbp, %rdx // 52: 48 29 c2 subq %rax, %rdx // 55: 48 f7 d9 negq %rcx // 58: 48 8b 3c ca movq (%rdx,%rcx,8), %rdi // 5c: 48 89 7c 24 10 movq %rdi, 0x10(%rsp) // 61: ff 15 00 00 00 00 callq *(%rip) # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_GOTPCRELX PyObject_Size-0x4 // 67: 48 85 c0 testq %rax, %rax // 6a: 78 56 js 0xc2 <_JIT_ENTRY+0xc2> // 6c: 48 89 c7 movq %rax, %rdi // 6f: ff 15 00 00 00 00 callq *(%rip) # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_GOTPCRELX PyLong_FromSsize_t-0x4 // 75: 48 89 c2 movq %rax, %rdx // 78: 49 8b 44 24 70 movq 0x70(%r12), %rax // 7d: 48 85 c0 testq %rax, %rax // 80: 74 4a je 0xcc <_JIT_ENTRY+0xcc> // 82: 48 85 d2 testq %rdx, %rdx // 85: 0f 95 c1 setne %cl // 88: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // 8d: 0f 95 c0 setne %al // 90: 30 c8 xorb %cl, %al // 92: 0f 84 fe 00 00 00 je 0x196 <_JIT_ENTRY+0x196> // 98: 48 85 d2 testq %rdx, %rdx // 9b: 75 38 jne 0xd5 <_JIT_ENTRY+0xd5> // 9d: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xa4 <_JIT_ENTRY+0xa4> // 00000000000000a0: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // a4: 49 89 84 24 10 01 00 00 movq %rax, 0x110(%r12) // ac: 4c 29 ed subq %r13, %rbp // af: 48 83 c5 b8 addq $-0x48, %rbp // b3: 48 c1 ed 03 shrq $0x3, %rbp // b7: 41 89 6d 40 movl %ebp, 0x40(%r13) // bb: 31 c0 xorl %eax, %eax // bd: 48 83 c4 18 addq $0x18, %rsp // c1: c3 retq // c2: 48 83 c4 18 addq $0x18, %rsp // c6: ff 25 00 00 00 00 jmpq *(%rip) # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // cc: 48 85 d2 testq %rdx, %rdx // cf: 0f 84 c1 00 00 00 je 0x196 <_JIT_ENTRY+0x196> // d5: 49 8b 07 movq (%r15), %rax // d8: 48 85 c0 testq %rax, %rax // db: 48 89 54 24 08 movq %rdx, 0x8(%rsp) // e0: 7f 1d jg 0xff <_JIT_ENTRY+0xff> // e2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_PC32 .L.str.1-0x4 // e9: be 8d 0e 00 00 movl $0xe8d, %esi # imm = 0xE8D // ee: 4c 89 fa movq %r15, %rdx // f1: ff 15 00 00 00 00 callq *(%rip) # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // f7: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // fc: 49 8b 07 movq (%r15), %rax // ff: 85 c0 testl %eax, %eax // 101: 78 1e js 0x121 <_JIT_ENTRY+0x121> // 103: ff 15 00 00 00 00 callq *(%rip) # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 109: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 10e: 49 ff 0f decq (%r15) // 111: 75 0e jne 0x121 <_JIT_ENTRY+0x121> // 113: 4c 89 ff movq %r15, %rdi // 116: ff 15 00 00 00 00 callq *(%rip) # 0x11c <_JIT_ENTRY+0x11c> // 0000000000000118: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 11c: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 121: 48 8b 44 24 10 movq 0x10(%rsp), %rax // 126: 48 8b 00 movq (%rax), %rax // 129: 48 85 c0 testq %rax, %rax // 12c: 7f 22 jg 0x150 <_JIT_ENTRY+0x150> // 12e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x135 <_JIT_ENTRY+0x135> // 0000000000000131: R_X86_64_PC32 .L.str.1-0x4 // 135: be 8e 0e 00 00 movl $0xe8e, %esi # imm = 0xE8E // 13a: 4c 8b 7c 24 10 movq 0x10(%rsp), %r15 // 13f: 4c 89 fa movq %r15, %rdx // 142: ff 15 00 00 00 00 callq *(%rip) # 0x148 <_JIT_ENTRY+0x148> // 0000000000000144: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 148: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 14d: 49 8b 07 movq (%r15), %rax // 150: 4c 8d 3c dd 00 00 00 00 leaq (,%rbx,8), %r15 // 158: 49 01 ef addq %rbp, %r15 // 15b: 85 c0 testl %eax, %eax // 15d: 78 25 js 0x184 <_JIT_ENTRY+0x184> // 15f: ff 15 00 00 00 00 callq *(%rip) # 0x165 <_JIT_ENTRY+0x165> // 0000000000000161: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 165: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 16a: 48 8b 44 24 10 movq 0x10(%rsp), %rax // 16f: 48 ff 08 decq (%rax) // 172: 75 10 jne 0x184 <_JIT_ENTRY+0x184> // 174: 48 8b 7c 24 10 movq 0x10(%rsp), %rdi // 179: ff 15 00 00 00 00 callq *(%rip) # 0x17f <_JIT_ENTRY+0x17f> // 000000000000017b: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 17f: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 184: 4a 89 54 f5 00 movq %rdx, (%rbp,%r14,8) // 189: 4c 89 fd movq %r15, %rbp // 18c: 48 83 c4 18 addq $0x18, %rsp // 190: ff 25 00 00 00 00 jmpq *(%rip) # 0x196 <_JIT_ENTRY+0x196> // 0000000000000192: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 196: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x19d <_JIT_ENTRY+0x19d> // 0000000000000199: R_X86_64_PC32 .L.str.85-0x4 // 19d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a4 <_JIT_ENTRY+0x1a4> // 00000000000001a0: R_X86_64_PC32 .L.str.1-0x4 // 1a4: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ab <_JIT_ENTRY+0x1ab> // 00000000000001a7: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1ab: ba 89 0e 00 00 movl $0xe89, %edx # imm = 0xE89 // 1b0: ff 15 00 00 00 00 callq *(%rip) # 0x1b6 <_JIT_ENTRY+0x1b6> // 00000000000001b2: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b6: const unsigned char code_body[438] = { 0x48, 0x83, 0xec, 0x18, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc1, 0xf7, 0xd1, 0x48, 0x63, 0xd9, 0x31, 0xc9, 0x48, 0x83, 0x7c, 0xdd, 0x00, 0x00, 0x0f, 0x95, 0xc1, 0x8d, 0x14, 0x01, 0x83, 0xfa, 0x01, 0x75, 0x1d, 0xba, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc2, 0x4c, 0x63, 0xf2, 0x4e, 0x8b, 0x7c, 0xf5, 0x00, 0x49, 0x8b, 0x54, 0x24, 0x10, 0x4c, 0x3b, 0xba, 0x18, 0xea, 0x02, 0x00, 0x74, 0x0a, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x03, 0x48, 0x89, 0xea, 0x48, 0x29, 0xc2, 0x48, 0xf7, 0xd9, 0x48, 0x8b, 0x3c, 0xca, 0x48, 0x89, 0x7c, 0x24, 0x10, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x78, 0x56, 0x48, 0x89, 0xc7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc2, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x85, 0xc0, 0x74, 0x4a, 0x48, 0x85, 0xd2, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x78, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xfe, 0x00, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x75, 0x38, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x31, 0xc0, 0x48, 0x83, 0xc4, 0x18, 0xc3, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xd2, 0x0f, 0x84, 0xc1, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x48, 0x89, 0x54, 0x24, 0x08, 0x7f, 0x1d, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x8d, 0x0e, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x1e, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x49, 0xff, 0x0f, 0x75, 0x0e, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x48, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x7f, 0x22, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x8e, 0x0e, 0x00, 0x00, 0x4c, 0x8b, 0x7c, 0x24, 0x10, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x49, 0x8b, 0x07, 0x4c, 0x8d, 0x3c, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x01, 0xef, 0x85, 0xc0, 0x78, 0x25, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x48, 0x8b, 0x44, 0x24, 0x10, 0x48, 0xff, 0x08, 0x75, 0x10, 0x48, 0x8b, 0x7c, 0x24, 0x10, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x4a, 0x89, 0x54, 0xf5, 0x00, 0x4c, 0x89, 0xfd, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x89, 0x0e, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00' // c0: // c0: OPARG // c8: JUMP_TARGET // d0: &PyObject_Size+0x0 // d8: &PyLong_FromSsize_t+0x0 // e0: EXECUTOR // e8: ERROR_TARGET // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: CONTINUE // 110: &__assert_fail+0x0 const unsigned char data_body[280] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc0, instruction->oparg); patch_64(data + 0xc8, instruction_starts[instruction->jump_target]); patch_64(data + 0xd0, (uintptr_t)&PyObject_Size); patch_64(data + 0xd8, (uintptr_t)&PyLong_FromSsize_t); patch_64(data + 0xe0, (uintptr_t)executor); patch_64(data + 0xe8, instruction_starts[instruction->error_target]); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x110, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x63, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0xa0, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0xc8, (uintptr_t)data + 0xe4); patch_32r(code + 0xe5, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xf3, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x105, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x118, (uintptr_t)data + 0xfc); patch_32r(code + 0x131, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x144, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x161, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x17b, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x192, (uintptr_t)data + 0x104); patch_32r(code + 0x199, (uintptr_t)data + 0x8a); patch_32r(code + 0x1a0, (uintptr_t)data + -0x4); patch_32r(code + 0x1a7, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1b2, (uintptr_t)data + 0x10c); } void emit__CALL_METHOD_DESCRIPTOR_FAST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_METHOD_DESCRIPTOR_FAST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c1 movl %eax, %ecx // d: f7 d1 notl %ecx // f: 4c 63 f9 movslq %ecx, %r15 // 12: b9 fe ff ff ff movl $0xfffffffe, %ecx # imm = 0xFFFFFFFE // 17: 29 c1 subl %eax, %ecx // 19: 48 63 f1 movslq %ecx, %rsi // 1c: 48 8b 7c f5 00 movq (%rbp,%rsi,8), %rdi // 21: 45 31 f6 xorl %r14d, %r14d // 24: 4a 83 7c fd 00 00 cmpq $0x0, (%rbp,%r15,8) // 2a: 0f 95 c2 setne %dl // 2d: 48 8b 4f 08 movq 0x8(%rdi), %rcx // 31: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_REX_GOTPCRELX PyMethodDescr_Type-0x4 // 38: 75 3d jne 0x77 <_JIT_ENTRY+0x77> // 3a: 48 8b 4f 28 movq 0x28(%rdi), %rcx // 3e: 81 79 10 80 00 00 00 cmpl $0x80, 0x10(%rcx) // 45: 75 30 jne 0x77 <_JIT_ENTRY+0x77> // 47: 48 89 74 24 20 movq %rsi, 0x20(%rsp) // 4c: 8d 34 c5 00 00 00 00 leal (,%rax,8), %esi // 53: 49 89 f8 movq %rdi, %r8 // 56: 48 89 eb movq %rbp, %rbx // 59: 48 29 f3 subq %rsi, %rbx // 5c: 41 88 d6 movb %dl, %r14b // 5f: 42 8d 14 f5 00 00 00 00 leal (,%r14,8), %edx // 67: 48 29 d3 subq %rdx, %rbx // 6a: 48 8b 3b movq (%rbx), %rdi // 6d: 48 8b 57 08 movq 0x8(%rdi), %rdx // 71: 49 3b 50 10 cmpq 0x10(%r8), %rdx // 75: 74 0a je 0x81 <_JIT_ENTRY+0x81> // 77: 48 83 c4 28 addq $0x28, %rsp // 7b: ff 25 00 00 00 00 jmpq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 81: 4c 89 04 24 movq %r8, (%rsp) // 85: 41 01 c6 addl %eax, %r14d // 88: 41 8d 46 ff leal -0x1(%r14), %eax // 8c: 48 8d 73 08 leaq 0x8(%rbx), %rsi // 90: 48 63 d0 movslq %eax, %rdx // 93: ff 51 08 callq *0x8(%rcx) // 96: 48 89 44 24 08 movq %rax, 0x8(%rsp) // 9b: 4d 85 e4 testq %r12, %r12 // 9e: 0f 84 4b 01 00 00 je 0x1ef <_JIT_ENTRY+0x1ef> // a4: 49 8b 44 24 70 movq 0x70(%r12), %rax // a9: 48 85 c0 testq %rax, %rax // ac: 4c 89 64 24 18 movq %r12, 0x18(%rsp) // b1: 4c 89 7c 24 10 movq %r15, 0x10(%rsp) // b6: 0f 84 fd 00 00 00 je 0x1b9 <_JIT_ENTRY+0x1b9> // bc: 48 83 7c 24 08 00 cmpq $0x0, 0x8(%rsp) // c2: 0f 95 c1 setne %cl // c5: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // ca: 0f 95 c0 setne %al // cd: 30 c8 xorb %cl, %al // cf: 0f 84 f0 00 00 00 je 0x1c5 <_JIT_ENTRY+0x1c5> // d5: 45 85 f6 testl %r14d, %r14d // d8: 74 68 je 0x142 <_JIT_ENTRY+0x142> // da: 45 89 f4 movl %r14d, %r12d // dd: 45 31 ff xorl %r15d, %r15d // e0: eb 16 jmp 0xf8 <_JIT_ENTRY+0xf8> // e2: 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // f0: 49 ff c7 incq %r15 // f3: 4d 39 fc cmpq %r15, %r12 // f6: 74 4a je 0x142 <_JIT_ENTRY+0x142> // f8: 4e 8b 34 fb movq (%rbx,%r15,8), %r14 // fc: 49 8b 06 movq (%r14), %rax // ff: 48 85 c0 testq %rax, %rax // 102: 7e 0c jle 0x110 <_JIT_ENTRY+0x110> // 104: 85 c0 testl %eax, %eax // 106: 78 e8 js 0xf0 <_JIT_ENTRY+0xf0> // 108: eb 22 jmp 0x12c <_JIT_ENTRY+0x12c> // 10a: 66 0f 1f 44 00 00 nopw (%rax,%rax) // 110: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L.str.1-0x4 // 117: be 80 0f 00 00 movl $0xf80, %esi # imm = 0xF80 // 11c: 4c 89 f2 movq %r14, %rdx // 11f: ff 15 00 00 00 00 callq *(%rip) # 0x125 <_JIT_ENTRY+0x125> // 0000000000000121: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 125: 49 8b 06 movq (%r14), %rax // 128: 85 c0 testl %eax, %eax // 12a: 78 c4 js 0xf0 <_JIT_ENTRY+0xf0> // 12c: ff 15 00 00 00 00 callq *(%rip) # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 132: 49 ff 0e decq (%r14) // 135: 75 b9 jne 0xf0 <_JIT_ENTRY+0xf0> // 137: 4c 89 f7 movq %r14, %rdi // 13a: ff 15 00 00 00 00 callq *(%rip) # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 140: eb ae jmp 0xf0 <_JIT_ENTRY+0xf0> // 142: 48 8b 1c 24 movq (%rsp), %rbx // 146: 48 8b 03 movq (%rbx), %rax // 149: 48 85 c0 testq %rax, %rax // 14c: 7f 18 jg 0x166 <_JIT_ENTRY+0x166> // 14e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x155 <_JIT_ENTRY+0x155> // 0000000000000151: R_X86_64_PC32 .L.str.1-0x4 // 155: be 82 0f 00 00 movl $0xf82, %esi # imm = 0xF82 // 15a: 48 89 da movq %rbx, %rdx // 15d: ff 15 00 00 00 00 callq *(%rip) # 0x163 <_JIT_ENTRY+0x163> // 000000000000015f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 163: 48 8b 03 movq (%rbx), %rax // 166: 85 c0 testl %eax, %eax // 168: 4c 8b 64 24 18 movq 0x18(%rsp), %r12 // 16d: 48 8b 5c 24 10 movq 0x10(%rsp), %rbx // 172: 4c 8b 74 24 08 movq 0x8(%rsp), %r14 // 177: 78 19 js 0x192 <_JIT_ENTRY+0x192> // 179: ff 15 00 00 00 00 callq *(%rip) # 0x17f <_JIT_ENTRY+0x17f> // 000000000000017b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 17f: 48 8b 04 24 movq (%rsp), %rax // 183: 48 ff 08 decq (%rax) // 186: 75 0a jne 0x192 <_JIT_ENTRY+0x192> // 188: 48 8b 3c 24 movq (%rsp), %rdi // 18c: ff 15 00 00 00 00 callq *(%rip) # 0x192 <_JIT_ENTRY+0x192> // 000000000000018e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 192: 4d 85 f6 testq %r14, %r14 // 195: 74 4e je 0x1e5 <_JIT_ENTRY+0x1e5> // 197: 48 8d 04 dd 00 00 00 00 leaq (,%rbx,8), %rax // 19f: 48 01 e8 addq %rbp, %rax // 1a2: 48 8b 4c 24 20 movq 0x20(%rsp), %rcx // 1a7: 4c 89 74 cd 00 movq %r14, (%rbp,%rcx,8) // 1ac: 48 89 c5 movq %rax, %rbp // 1af: 48 83 c4 28 addq $0x28, %rsp // 1b3: ff 25 00 00 00 00 jmpq *(%rip) # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1b9: 48 83 7c 24 08 00 cmpq $0x0, 0x8(%rsp) // 1bf: 0f 85 10 ff ff ff jne 0xd5 <_JIT_ENTRY+0xd5> // 1c5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1cc <_JIT_ENTRY+0x1cc> // 00000000000001c8: R_X86_64_PC32 .L.str.85-0x4 // 1cc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1d3 <_JIT_ENTRY+0x1d3> // 00000000000001cf: R_X86_64_PC32 .L.str.1-0x4 // 1d3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1da <_JIT_ENTRY+0x1da> // 00000000000001d6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1da: ba 7d 0f 00 00 movl $0xf7d, %edx # imm = 0xF7D // 1df: ff 15 00 00 00 00 callq *(%rip) # 0x1e5 <_JIT_ENTRY+0x1e5> // 00000000000001e1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1e5: 48 83 c4 28 addq $0x28, %rsp // 1e9: ff 25 00 00 00 00 jmpq *(%rip) # 0x1ef <_JIT_ENTRY+0x1ef> // 00000000000001eb: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1ef: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1f6 <_JIT_ENTRY+0x1f6> // 00000000000001f2: R_X86_64_PC32 .L.str.143-0x4 // 1f6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1fd <_JIT_ENTRY+0x1fd> // 00000000000001f9: R_X86_64_PC32 .L.str.144-0x4 // 1fd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x204 <_JIT_ENTRY+0x204> // 0000000000000200: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 204: ba 4b 00 00 00 movl $0x4b, %edx // 209: ff 15 00 00 00 00 callq *(%rip) # 0x20f <_JIT_ENTRY+0x20f> // 000000000000020b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 20f: const unsigned char code_body[527] = { 0x48, 0x83, 0xec, 0x28, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc1, 0xf7, 0xd1, 0x4c, 0x63, 0xf9, 0xb9, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc1, 0x48, 0x63, 0xf1, 0x48, 0x8b, 0x7c, 0xf5, 0x00, 0x45, 0x31, 0xf6, 0x4a, 0x83, 0x7c, 0xfd, 0x00, 0x00, 0x0f, 0x95, 0xc2, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x3d, 0x48, 0x8b, 0x4f, 0x28, 0x81, 0x79, 0x10, 0x80, 0x00, 0x00, 0x00, 0x75, 0x30, 0x48, 0x89, 0x74, 0x24, 0x20, 0x8d, 0x34, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xf8, 0x48, 0x89, 0xeb, 0x48, 0x29, 0xf3, 0x41, 0x88, 0xd6, 0x42, 0x8d, 0x14, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x29, 0xd3, 0x48, 0x8b, 0x3b, 0x48, 0x8b, 0x57, 0x08, 0x49, 0x3b, 0x50, 0x10, 0x74, 0x0a, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x04, 0x24, 0x41, 0x01, 0xc6, 0x41, 0x8d, 0x46, 0xff, 0x48, 0x8d, 0x73, 0x08, 0x48, 0x63, 0xd0, 0xff, 0x51, 0x08, 0x48, 0x89, 0x44, 0x24, 0x08, 0x4d, 0x85, 0xe4, 0x0f, 0x84, 0x4b, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x85, 0xc0, 0x4c, 0x89, 0x64, 0x24, 0x18, 0x4c, 0x89, 0x7c, 0x24, 0x10, 0x0f, 0x84, 0xfd, 0x00, 0x00, 0x00, 0x48, 0x83, 0x7c, 0x24, 0x08, 0x00, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x78, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xf0, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x74, 0x68, 0x45, 0x89, 0xf4, 0x45, 0x31, 0xff, 0xeb, 0x16, 0x66, 0x66, 0x66, 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0xc7, 0x4d, 0x39, 0xfc, 0x74, 0x4a, 0x4e, 0x8b, 0x34, 0xfb, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x0c, 0x85, 0xc0, 0x78, 0xe8, 0xeb, 0x22, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x80, 0x0f, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0xc4, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0xb9, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xae, 0x48, 0x8b, 0x1c, 0x24, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x82, 0x0f, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x4c, 0x8b, 0x64, 0x24, 0x18, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x4c, 0x8b, 0x74, 0x24, 0x08, 0x78, 0x19, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0xff, 0x08, 0x75, 0x0a, 0x48, 0x8b, 0x3c, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0x4e, 0x48, 0x8d, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x4c, 0x89, 0x74, 0xcd, 0x00, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x7c, 0x24, 0x08, 0x00, 0x0f, 0x85, 0x10, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x7d, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00' // 143: 00 00 00 00 00 // 148: OPARG // 150: &PyMethodDescr_Type+0x0 // 158: JUMP_TARGET // 160: &_Py_NegativeRefcount+0x0 // 168: &_Py_DECREF_DecRefTotal+0x0 // 170: &_Py_Dealloc+0x0 // 178: CONTINUE // 180: &__assert_fail+0x0 // 188: ERROR_TARGET const unsigned char data_body[400] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x148, instruction->oparg); patch_64(data + 0x150, (uintptr_t)&PyMethodDescr_Type); patch_64(data + 0x158, instruction_starts[instruction->jump_target]); patch_64(data + 0x160, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x168, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x170, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x178, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x180, (uintptr_t)&__assert_fail); patch_64(data + 0x188, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x154); patch_32r(code + 0x113, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x121, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x12e, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x13c, (uintptr_t)data + 0x16c); patch_32r(code + 0x151, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x15f, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x17b, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x18e, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x1b5, (uintptr_t)data + 0x174); patch_32r(code + 0x1c8, (uintptr_t)data + 0x8a); patch_32r(code + 0x1cf, (uintptr_t)data + -0x4); patch_32r(code + 0x1d6, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1e1, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x1eb, (uintptr_t)data + 0x184); patch_32r(code + 0x1f2, (uintptr_t)data + 0xbc); patch_32r(code + 0x1f9, (uintptr_t)data + 0xcb); patch_32r(code + 0x200, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x20b, (uintptr_t)data + 0x17c); } void emit__CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c1 movl %eax, %ecx // d: f7 d1 notl %ecx // f: 4c 63 f9 movslq %ecx, %r15 // 12: b9 fe ff ff ff movl $0xfffffffe, %ecx # imm = 0xFFFFFFFE // 17: 29 c1 subl %eax, %ecx // 19: 48 63 f1 movslq %ecx, %rsi // 1c: 48 8b 7c f5 00 movq (%rbp,%rsi,8), %rdi // 21: 45 31 f6 xorl %r14d, %r14d // 24: 4a 83 7c fd 00 00 cmpq $0x0, (%rbp,%r15,8) // 2a: 0f 95 c1 setne %cl // 2d: 48 8b 57 08 movq 0x8(%rdi), %rdx // 31: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_REX_GOTPCRELX PyMethodDescr_Type-0x4 // 38: 75 3e jne 0x78 <_JIT_ENTRY+0x78> // 3a: 4c 8b 47 28 movq 0x28(%rdi), %r8 // 3e: 41 81 78 10 82 00 00 00 cmpl $0x82, 0x10(%r8) // 46: 75 30 jne 0x78 <_JIT_ENTRY+0x78> // 48: 48 89 74 24 20 movq %rsi, 0x20(%rsp) // 4d: 8d 14 c5 00 00 00 00 leal (,%rax,8), %edx // 54: 48 89 fe movq %rdi, %rsi // 57: 48 89 eb movq %rbp, %rbx // 5a: 48 29 d3 subq %rdx, %rbx // 5d: 41 88 ce movb %cl, %r14b // 60: 42 8d 0c f5 00 00 00 00 leal (,%r14,8), %ecx // 68: 48 29 cb subq %rcx, %rbx // 6b: 48 8b 3b movq (%rbx), %rdi // 6e: 48 8b 4f 08 movq 0x8(%rdi), %rcx // 72: 48 3b 4e 10 cmpq 0x10(%rsi), %rcx // 76: 74 0a je 0x82 <_JIT_ENTRY+0x82> // 78: 48 83 c4 28 addq $0x28, %rsp // 7c: ff 25 00 00 00 00 jmpq *(%rip) # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 82: 48 89 34 24 movq %rsi, (%rsp) // 86: 41 01 c6 addl %eax, %r14d // 89: 41 8d 46 ff leal -0x1(%r14), %eax // 8d: 48 8d 73 08 leaq 0x8(%rbx), %rsi // 91: 48 63 d0 movslq %eax, %rdx // 94: 31 c9 xorl %ecx, %ecx // 96: 41 ff 50 08 callq *0x8(%r8) // 9a: 48 89 44 24 08 movq %rax, 0x8(%rsp) // 9f: 4d 85 e4 testq %r12, %r12 // a2: 0f 84 47 01 00 00 je 0x1ef <_JIT_ENTRY+0x1ef> // a8: 49 8b 44 24 70 movq 0x70(%r12), %rax // ad: 48 85 c0 testq %rax, %rax // b0: 4c 89 64 24 18 movq %r12, 0x18(%rsp) // b5: 4c 89 7c 24 10 movq %r15, 0x10(%rsp) // ba: 0f 84 f9 00 00 00 je 0x1b9 <_JIT_ENTRY+0x1b9> // c0: 48 83 7c 24 08 00 cmpq $0x0, 0x8(%rsp) // c6: 0f 95 c1 setne %cl // c9: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // ce: 0f 95 c0 setne %al // d1: 30 c8 xorb %cl, %al // d3: 0f 84 ec 00 00 00 je 0x1c5 <_JIT_ENTRY+0x1c5> // d9: 45 85 f6 testl %r14d, %r14d // dc: 74 64 je 0x142 <_JIT_ENTRY+0x142> // de: 45 89 f4 movl %r14d, %r12d // e1: 45 31 ff xorl %r15d, %r15d // e4: eb 12 jmp 0xf8 <_JIT_ENTRY+0xf8> // e6: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // f0: 49 ff c7 incq %r15 // f3: 4d 39 fc cmpq %r15, %r12 // f6: 74 4a je 0x142 <_JIT_ENTRY+0x142> // f8: 4e 8b 34 fb movq (%rbx,%r15,8), %r14 // fc: 49 8b 06 movq (%r14), %rax // ff: 48 85 c0 testq %rax, %rax // 102: 7e 0c jle 0x110 <_JIT_ENTRY+0x110> // 104: 85 c0 testl %eax, %eax // 106: 78 e8 js 0xf0 <_JIT_ENTRY+0xf0> // 108: eb 22 jmp 0x12c <_JIT_ENTRY+0x12c> // 10a: 66 0f 1f 44 00 00 nopw (%rax,%rax) // 110: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L.str.1-0x4 // 117: be 1c 0f 00 00 movl $0xf1c, %esi # imm = 0xF1C // 11c: 4c 89 f2 movq %r14, %rdx // 11f: ff 15 00 00 00 00 callq *(%rip) # 0x125 <_JIT_ENTRY+0x125> // 0000000000000121: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 125: 49 8b 06 movq (%r14), %rax // 128: 85 c0 testl %eax, %eax // 12a: 78 c4 js 0xf0 <_JIT_ENTRY+0xf0> // 12c: ff 15 00 00 00 00 callq *(%rip) # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 132: 49 ff 0e decq (%r14) // 135: 75 b9 jne 0xf0 <_JIT_ENTRY+0xf0> // 137: 4c 89 f7 movq %r14, %rdi // 13a: ff 15 00 00 00 00 callq *(%rip) # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 140: eb ae jmp 0xf0 <_JIT_ENTRY+0xf0> // 142: 48 8b 1c 24 movq (%rsp), %rbx // 146: 48 8b 03 movq (%rbx), %rax // 149: 48 85 c0 testq %rax, %rax // 14c: 7f 18 jg 0x166 <_JIT_ENTRY+0x166> // 14e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x155 <_JIT_ENTRY+0x155> // 0000000000000151: R_X86_64_PC32 .L.str.1-0x4 // 155: be 1e 0f 00 00 movl $0xf1e, %esi # imm = 0xF1E // 15a: 48 89 da movq %rbx, %rdx // 15d: ff 15 00 00 00 00 callq *(%rip) # 0x163 <_JIT_ENTRY+0x163> // 000000000000015f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 163: 48 8b 03 movq (%rbx), %rax // 166: 85 c0 testl %eax, %eax // 168: 4c 8b 64 24 18 movq 0x18(%rsp), %r12 // 16d: 48 8b 5c 24 10 movq 0x10(%rsp), %rbx // 172: 4c 8b 74 24 08 movq 0x8(%rsp), %r14 // 177: 78 19 js 0x192 <_JIT_ENTRY+0x192> // 179: ff 15 00 00 00 00 callq *(%rip) # 0x17f <_JIT_ENTRY+0x17f> // 000000000000017b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 17f: 48 8b 04 24 movq (%rsp), %rax // 183: 48 ff 08 decq (%rax) // 186: 75 0a jne 0x192 <_JIT_ENTRY+0x192> // 188: 48 8b 3c 24 movq (%rsp), %rdi // 18c: ff 15 00 00 00 00 callq *(%rip) # 0x192 <_JIT_ENTRY+0x192> // 000000000000018e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 192: 4d 85 f6 testq %r14, %r14 // 195: 74 4e je 0x1e5 <_JIT_ENTRY+0x1e5> // 197: 48 8d 04 dd 00 00 00 00 leaq (,%rbx,8), %rax // 19f: 48 01 e8 addq %rbp, %rax // 1a2: 48 8b 4c 24 20 movq 0x20(%rsp), %rcx // 1a7: 4c 89 74 cd 00 movq %r14, (%rbp,%rcx,8) // 1ac: 48 89 c5 movq %rax, %rbp // 1af: 48 83 c4 28 addq $0x28, %rsp // 1b3: ff 25 00 00 00 00 jmpq *(%rip) # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1b9: 48 83 7c 24 08 00 cmpq $0x0, 0x8(%rsp) // 1bf: 0f 85 14 ff ff ff jne 0xd9 <_JIT_ENTRY+0xd9> // 1c5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1cc <_JIT_ENTRY+0x1cc> // 00000000000001c8: R_X86_64_PC32 .L.str.85-0x4 // 1cc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1d3 <_JIT_ENTRY+0x1d3> // 00000000000001cf: R_X86_64_PC32 .L.str.1-0x4 // 1d3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1da <_JIT_ENTRY+0x1da> // 00000000000001d6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1da: ba 19 0f 00 00 movl $0xf19, %edx # imm = 0xF19 // 1df: ff 15 00 00 00 00 callq *(%rip) # 0x1e5 <_JIT_ENTRY+0x1e5> // 00000000000001e1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1e5: 48 83 c4 28 addq $0x28, %rsp // 1e9: ff 25 00 00 00 00 jmpq *(%rip) # 0x1ef <_JIT_ENTRY+0x1ef> // 00000000000001eb: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1ef: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1f6 <_JIT_ENTRY+0x1f6> // 00000000000001f2: R_X86_64_PC32 .L.str.143-0x4 // 1f6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1fd <_JIT_ENTRY+0x1fd> // 00000000000001f9: R_X86_64_PC32 .L.str.144-0x4 // 1fd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x204 <_JIT_ENTRY+0x204> // 0000000000000200: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 204: ba 4b 00 00 00 movl $0x4b, %edx // 209: ff 15 00 00 00 00 callq *(%rip) # 0x20f <_JIT_ENTRY+0x20f> // 000000000000020b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 20f: const unsigned char code_body[527] = { 0x48, 0x83, 0xec, 0x28, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc1, 0xf7, 0xd1, 0x4c, 0x63, 0xf9, 0xb9, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc1, 0x48, 0x63, 0xf1, 0x48, 0x8b, 0x7c, 0xf5, 0x00, 0x45, 0x31, 0xf6, 0x4a, 0x83, 0x7c, 0xfd, 0x00, 0x00, 0x0f, 0x95, 0xc1, 0x48, 0x8b, 0x57, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x3e, 0x4c, 0x8b, 0x47, 0x28, 0x41, 0x81, 0x78, 0x10, 0x82, 0x00, 0x00, 0x00, 0x75, 0x30, 0x48, 0x89, 0x74, 0x24, 0x20, 0x8d, 0x14, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xfe, 0x48, 0x89, 0xeb, 0x48, 0x29, 0xd3, 0x41, 0x88, 0xce, 0x42, 0x8d, 0x0c, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x29, 0xcb, 0x48, 0x8b, 0x3b, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x3b, 0x4e, 0x10, 0x74, 0x0a, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x34, 0x24, 0x41, 0x01, 0xc6, 0x41, 0x8d, 0x46, 0xff, 0x48, 0x8d, 0x73, 0x08, 0x48, 0x63, 0xd0, 0x31, 0xc9, 0x41, 0xff, 0x50, 0x08, 0x48, 0x89, 0x44, 0x24, 0x08, 0x4d, 0x85, 0xe4, 0x0f, 0x84, 0x47, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x85, 0xc0, 0x4c, 0x89, 0x64, 0x24, 0x18, 0x4c, 0x89, 0x7c, 0x24, 0x10, 0x0f, 0x84, 0xf9, 0x00, 0x00, 0x00, 0x48, 0x83, 0x7c, 0x24, 0x08, 0x00, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x78, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xec, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x74, 0x64, 0x45, 0x89, 0xf4, 0x45, 0x31, 0xff, 0xeb, 0x12, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0xc7, 0x4d, 0x39, 0xfc, 0x74, 0x4a, 0x4e, 0x8b, 0x34, 0xfb, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x0c, 0x85, 0xc0, 0x78, 0xe8, 0xeb, 0x22, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x1c, 0x0f, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0xc4, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0xb9, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xae, 0x48, 0x8b, 0x1c, 0x24, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x1e, 0x0f, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x4c, 0x8b, 0x64, 0x24, 0x18, 0x48, 0x8b, 0x5c, 0x24, 0x10, 0x4c, 0x8b, 0x74, 0x24, 0x08, 0x78, 0x19, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0xff, 0x08, 0x75, 0x0a, 0x48, 0x8b, 0x3c, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0x4e, 0x48, 0x8d, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x48, 0x8b, 0x4c, 0x24, 0x20, 0x4c, 0x89, 0x74, 0xcd, 0x00, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x7c, 0x24, 0x08, 0x00, 0x0f, 0x85, 0x14, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00' // 143: 00 00 00 00 00 // 148: OPARG // 150: &PyMethodDescr_Type+0x0 // 158: JUMP_TARGET // 160: &_Py_NegativeRefcount+0x0 // 168: &_Py_DECREF_DecRefTotal+0x0 // 170: &_Py_Dealloc+0x0 // 178: CONTINUE // 180: &__assert_fail+0x0 // 188: ERROR_TARGET const unsigned char data_body[400] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x148, instruction->oparg); patch_64(data + 0x150, (uintptr_t)&PyMethodDescr_Type); patch_64(data + 0x158, instruction_starts[instruction->jump_target]); patch_64(data + 0x160, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x168, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x170, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x178, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x180, (uintptr_t)&__assert_fail); patch_64(data + 0x188, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x7e, (uintptr_t)data + 0x154); patch_32r(code + 0x113, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x121, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x12e, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x13c, (uintptr_t)data + 0x16c); patch_32r(code + 0x151, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x15f, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x17b, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x18e, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x1b5, (uintptr_t)data + 0x174); patch_32r(code + 0x1c8, (uintptr_t)data + 0x8a); patch_32r(code + 0x1cf, (uintptr_t)data + -0x4); patch_32r(code + 0x1d6, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1e1, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x1eb, (uintptr_t)data + 0x184); patch_32r(code + 0x1f2, (uintptr_t)data + 0xbc); patch_32r(code + 0x1f9, (uintptr_t)data + 0xcb); patch_32r(code + 0x200, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x20b, (uintptr_t)data + 0x17c); } void emit__CALL_METHOD_DESCRIPTOR_NOARGS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_METHOD_DESCRIPTOR_NOARGS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // b: 0f b7 c1 movzwl %cx, %eax // e: ba fe ff ff ff movl $0xfffffffe, %edx # imm = 0xFFFFFFFE // 13: 29 c2 subl %eax, %edx // 15: 4c 63 fa movslq %edx, %r15 // 18: 4a 8b 5c fd 00 movq (%rbp,%r15,8), %rbx // 1d: 66 85 c9 testw %cx, %cx // 20: 74 11 je 0x33 <_JIT_ENTRY+0x33> // 22: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x29 <_JIT_ENTRY+0x29> // 0000000000000025: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 29: 66 83 f9 01 cmpw $0x1, %cx // 2d: 0f 85 90 01 00 00 jne 0x1c3 <_JIT_ENTRY+0x1c3> // 33: 89 c1 movl %eax, %ecx // 35: f7 d1 notl %ecx // 37: 48 63 c9 movslq %ecx, %rcx // 3a: 4c 8d 34 cd 00 00 00 00 leaq (,%rcx,8), %r14 // 42: 49 01 ee addq %rbp, %r14 // 45: 31 c9 xorl %ecx, %ecx // 47: 49 83 3e 00 cmpq $0x0, (%r14) // 4b: 0f 95 c1 setne %cl // 4e: 8d 14 01 leal (%rcx,%rax), %edx // 51: 83 fa 01 cmpl $0x1, %edx // 54: 0f 85 2c 01 00 00 jne 0x186 <_JIT_ENTRY+0x186> // 5a: 48 8b 53 08 movq 0x8(%rbx), %rdx // 5e: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_REX_GOTPCRELX PyMethodDescr_Type-0x4 // 65: 0f 85 1b 01 00 00 jne 0x186 <_JIT_ENTRY+0x186> // 6b: f7 d8 negl %eax // 6d: 48 98 cltq // 6f: 48 8d 04 c5 00 00 00 00 leaq (,%rax,8), %rax // 77: 48 01 e8 addq %rbp, %rax // 7a: 48 f7 d9 negq %rcx // 7d: 48 8b 3c c8 movq (%rax,%rcx,8), %rdi // 81: 48 8b 47 08 movq 0x8(%rdi), %rax // 85: 48 3b 43 10 cmpq 0x10(%rbx), %rax // 89: 0f 85 f7 00 00 00 jne 0x186 <_JIT_ENTRY+0x186> // 8f: 48 8b 43 28 movq 0x28(%rbx), %rax // 93: 83 78 10 04 cmpl $0x4, 0x10(%rax) // 97: 0f 85 e9 00 00 00 jne 0x186 <_JIT_ENTRY+0x186> // 9d: 41 8b 4c 24 34 movl 0x34(%r12), %ecx // a2: 85 c9 testl %ecx, %ecx // a4: 0f 8e dc 00 00 00 jle 0x186 <_JIT_ENTRY+0x186> // aa: 48 8b 40 08 movq 0x8(%rax), %rax // ae: ff c9 decl %ecx // b0: 41 89 4c 24 34 movl %ecx, 0x34(%r12) // b5: 48 89 7c 24 08 movq %rdi, 0x8(%rsp) // ba: 31 f6 xorl %esi, %esi // bc: ff d0 callq *%rax // be: 41 ff 44 24 34 incl 0x34(%r12) // c3: 49 8b 54 24 70 movq 0x70(%r12), %rdx // c8: 48 85 d2 testq %rdx, %rdx // cb: 48 89 44 24 10 movq %rax, 0x10(%rsp) // d0: 0f 84 ba 00 00 00 je 0x190 <_JIT_ENTRY+0x190> // d6: 48 85 c0 testq %rax, %rax // d9: 0f 95 c1 setne %cl // dc: 48 83 7a 08 00 cmpq $0x0, 0x8(%rdx) // e1: 0f 95 c0 setne %al // e4: 30 c8 xorb %cl, %al // e6: 0f 84 ad 00 00 00 je 0x199 <_JIT_ENTRY+0x199> // ec: 48 8b 44 24 08 movq 0x8(%rsp), %rax // f1: 48 8b 00 movq (%rax), %rax // f4: 48 85 c0 testq %rax, %rax // f7: 7f 1f jg 0x118 <_JIT_ENTRY+0x118> // f9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x100 <_JIT_ENTRY+0x100> // 00000000000000fc: R_X86_64_PC32 .L.str.1-0x4 // 100: be 52 0f 00 00 movl $0xf52, %esi # imm = 0xF52 // 105: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 10a: ff 15 00 00 00 00 callq *(%rip) # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 110: 48 8b 44 24 08 movq 0x8(%rsp), %rax // 115: 48 8b 00 movq (%rax), %rax // 118: 85 c0 testl %eax, %eax // 11a: 78 16 js 0x132 <_JIT_ENTRY+0x132> // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 122: 48 8b 7c 24 08 movq 0x8(%rsp), %rdi // 127: 48 ff 0f decq (%rdi) // 12a: 75 06 jne 0x132 <_JIT_ENTRY+0x132> // 12c: ff 15 00 00 00 00 callq *(%rip) # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 132: 48 8b 03 movq (%rbx), %rax // 135: 48 85 c0 testq %rax, %rax // 138: 7f 18 jg 0x152 <_JIT_ENTRY+0x152> // 13a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x141 <_JIT_ENTRY+0x141> // 000000000000013d: R_X86_64_PC32 .L.str.1-0x4 // 141: be 53 0f 00 00 movl $0xf53, %esi # imm = 0xF53 // 146: 48 89 da movq %rbx, %rdx // 149: ff 15 00 00 00 00 callq *(%rip) # 0x14f <_JIT_ENTRY+0x14f> // 000000000000014b: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 14f: 48 8b 03 movq (%rbx), %rax // 152: 85 c0 testl %eax, %eax // 154: 78 14 js 0x16a <_JIT_ENTRY+0x16a> // 156: ff 15 00 00 00 00 callq *(%rip) # 0x15c <_JIT_ENTRY+0x15c> // 0000000000000158: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 15c: 48 ff 0b decq (%rbx) // 15f: 75 09 jne 0x16a <_JIT_ENTRY+0x16a> // 161: 48 89 df movq %rbx, %rdi // 164: ff 15 00 00 00 00 callq *(%rip) # 0x16a <_JIT_ENTRY+0x16a> // 0000000000000166: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 16a: 48 8b 44 24 10 movq 0x10(%rsp), %rax // 16f: 48 85 c0 testq %rax, %rax // 172: 74 45 je 0x1b9 <_JIT_ENTRY+0x1b9> // 174: 4a 89 44 fd 00 movq %rax, (%rbp,%r15,8) // 179: 4c 89 f5 movq %r14, %rbp // 17c: 48 83 c4 18 addq $0x18, %rsp // 180: ff 25 00 00 00 00 jmpq *(%rip) # 0x186 <_JIT_ENTRY+0x186> // 0000000000000182: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 186: 48 83 c4 18 addq $0x18, %rsp // 18a: ff 25 00 00 00 00 jmpq *(%rip) # 0x190 <_JIT_ENTRY+0x190> // 000000000000018c: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 190: 48 85 c0 testq %rax, %rax // 193: 0f 85 53 ff ff ff jne 0xec <_JIT_ENTRY+0xec> // 199: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a0 <_JIT_ENTRY+0x1a0> // 000000000000019c: R_X86_64_PC32 .L.str.85-0x4 // 1a0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a7 <_JIT_ENTRY+0x1a7> // 00000000000001a3: R_X86_64_PC32 .L.str.1-0x4 // 1a7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ae <_JIT_ENTRY+0x1ae> // 00000000000001aa: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1ae: ba 51 0f 00 00 movl $0xf51, %edx # imm = 0xF51 // 1b3: ff 15 00 00 00 00 callq *(%rip) # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b9: 48 83 c4 18 addq $0x18, %rsp // 1bd: ff 25 00 00 00 00 jmpq *(%rip) # 0x1c3 <_JIT_ENTRY+0x1c3> // 00000000000001bf: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1c3: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1ca <_JIT_ENTRY+0x1ca> // 00000000000001c6: R_X86_64_PC32 .L.str.20-0x4 // 1ca: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1d1 <_JIT_ENTRY+0x1d1> // 00000000000001cd: R_X86_64_PC32 .L.str.1-0x4 // 1d1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1d8 <_JIT_ENTRY+0x1d8> // 00000000000001d4: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1d8: ba 2e 0f 00 00 movl $0xf2e, %edx # imm = 0xF2E // 1dd: ff 15 00 00 00 00 callq *(%rip) # 0x1e3 <_JIT_ENTRY+0x1e3> // 00000000000001df: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1e3: const unsigned char code_body[483] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc1, 0xba, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc2, 0x4c, 0x63, 0xfa, 0x4a, 0x8b, 0x5c, 0xfd, 0x00, 0x66, 0x85, 0xc9, 0x74, 0x11, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf9, 0x01, 0x0f, 0x85, 0x90, 0x01, 0x00, 0x00, 0x89, 0xc1, 0xf7, 0xd1, 0x48, 0x63, 0xc9, 0x4c, 0x8d, 0x34, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x49, 0x01, 0xee, 0x31, 0xc9, 0x49, 0x83, 0x3e, 0x00, 0x0f, 0x95, 0xc1, 0x8d, 0x14, 0x01, 0x83, 0xfa, 0x01, 0x0f, 0x85, 0x2c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x53, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x1b, 0x01, 0x00, 0x00, 0xf7, 0xd8, 0x48, 0x98, 0x48, 0x8d, 0x04, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x48, 0xf7, 0xd9, 0x48, 0x8b, 0x3c, 0xc8, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x3b, 0x43, 0x10, 0x0f, 0x85, 0xf7, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x28, 0x83, 0x78, 0x10, 0x04, 0x0f, 0x85, 0xe9, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x4c, 0x24, 0x34, 0x85, 0xc9, 0x0f, 0x8e, 0xdc, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x08, 0xff, 0xc9, 0x41, 0x89, 0x4c, 0x24, 0x34, 0x48, 0x89, 0x7c, 0x24, 0x08, 0x31, 0xf6, 0xff, 0xd0, 0x41, 0xff, 0x44, 0x24, 0x34, 0x49, 0x8b, 0x54, 0x24, 0x70, 0x48, 0x85, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x10, 0x0f, 0x84, 0xba, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x7a, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xad, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x7f, 0x1f, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x52, 0x0f, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x8b, 0x00, 0x85, 0xc0, 0x78, 0x16, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x7c, 0x24, 0x08, 0x48, 0xff, 0x0f, 0x75, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x53, 0x0f, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x85, 0xc0, 0x74, 0x45, 0x4a, 0x89, 0x44, 0xfd, 0x00, 0x4c, 0x89, 0xf5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x85, 0x53, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x51, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x2e, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == 0 || oparg == 1\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00' // d9: 00 00 00 00 00 00 00 // e0: OPARG // e8: &PyMethodDescr_Type+0x0 // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: CONTINUE // 110: JUMP_TARGET // 118: &__assert_fail+0x0 // 120: ERROR_TARGET const unsigned char data_body[296] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)&PyMethodDescr_Type); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x110, instruction_starts[instruction->jump_target]); patch_64(data + 0x118, (uintptr_t)&__assert_fail); patch_64(data + 0x120, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x25, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x61, (uintptr_t)data + 0xe4); patch_32r(code + 0xfc, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x10c, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x12e, (uintptr_t)data + 0xfc); patch_32r(code + 0x13d, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x14b, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x158, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x166, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x182, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x18c, (uintptr_t)data + 0x10c); patch_32r(code + 0x19c, (uintptr_t)data + 0xa3); patch_32r(code + 0x1a3, (uintptr_t)data + -0x4); patch_32r(code + 0x1aa, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1b5, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x1bf, (uintptr_t)data + 0x11c); patch_32r(code + 0x1c6, (uintptr_t)data + 0x8a); patch_32r(code + 0x1cd, (uintptr_t)data + -0x4); patch_32r(code + 0x1d4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1df, (uintptr_t)data + 0x114); } void emit__CALL_METHOD_DESCRIPTOR_O( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_METHOD_DESCRIPTOR_O.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c8 movl %ecx, %eax // d: f7 d0 notl %eax // f: 4c 63 f8 movslq %eax, %r15 // 12: 31 c0 xorl %eax, %eax // 14: 4a 83 7c fd 00 00 cmpq $0x0, (%rbp,%r15,8) // 1a: 0f 95 c0 setne %al // 1d: 8d 14 08 leal (%rax,%rcx), %edx // 20: 83 fa 02 cmpl $0x2, %edx // 23: 75 4a jne 0x6f <_JIT_ENTRY+0x6f> // 25: ba fe ff ff ff movl $0xfffffffe, %edx # imm = 0xFFFFFFFE // 2a: 29 ca subl %ecx, %edx // 2c: 4c 63 f2 movslq %edx, %r14 // 2f: 4a 8b 5c f5 00 movq (%rbp,%r14,8), %rbx // 34: 48 8b 53 08 movq 0x8(%rbx), %rdx // 38: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyMethodDescr_Type-0x4 // 3f: 75 2e jne 0x6f <_JIT_ENTRY+0x6f> // 41: 48 8b 53 28 movq 0x28(%rbx), %rdx // 45: 83 7a 10 08 cmpl $0x8, 0x10(%rdx) // 49: 75 24 jne 0x6f <_JIT_ENTRY+0x6f> // 4b: 45 8b 44 24 34 movl 0x34(%r12), %r8d // 50: 45 85 c0 testl %r8d, %r8d // 53: 7e 1a jle 0x6f <_JIT_ENTRY+0x6f> // 55: c1 e1 03 shll $0x3, %ecx // 58: 48 89 ee movq %rbp, %rsi // 5b: 48 29 ce subq %rcx, %rsi // 5e: 48 f7 d8 negq %rax // 61: 48 8b 3c c6 movq (%rsi,%rax,8), %rdi // 65: 48 8b 4f 08 movq 0x8(%rdi), %rcx // 69: 48 3b 4b 10 cmpq 0x10(%rbx), %rcx // 6d: 74 0a je 0x79 <_JIT_ENTRY+0x79> // 6f: 48 83 c4 18 addq $0x18, %rsp // 73: ff 25 00 00 00 00 jmpq *(%rip) # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 79: 48 8b 74 c6 08 movq 0x8(%rsi,%rax,8), %rsi // 7e: 48 8b 42 08 movq 0x8(%rdx), %rax // 82: 41 ff c8 decl %r8d // 85: 45 89 44 24 34 movl %r8d, 0x34(%r12) // 8a: 48 89 7c 24 08 movq %rdi, 0x8(%rsp) // 8f: 48 89 34 24 movq %rsi, (%rsp) // 93: ff d0 callq *%rax // 95: 41 ff 44 24 34 incl 0x34(%r12) // 9a: 49 8b 54 24 70 movq 0x70(%r12), %rdx // 9f: 48 85 d2 testq %rdx, %rdx // a2: 48 89 44 24 10 movq %rax, 0x10(%rsp) // a7: 0f 84 fc 00 00 00 je 0x1a9 <_JIT_ENTRY+0x1a9> // ad: 48 85 c0 testq %rax, %rax // b0: 0f 95 c1 setne %cl // b3: 48 83 7a 08 00 cmpq $0x0, 0x8(%rdx) // b8: 0f 95 c0 setne %al // bb: 30 c8 xorb %cl, %al // bd: 0f 84 ef 00 00 00 je 0x1b2 <_JIT_ENTRY+0x1b2> // c3: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // c8: 48 8b 02 movq (%rdx), %rax // cb: 48 85 c0 testq %rax, %rax // ce: 7f 1a jg 0xea <_JIT_ENTRY+0xea> // d0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L.str.1-0x4 // d7: be ed 0e 00 00 movl $0xeed, %esi # imm = 0xEED // dc: ff 15 00 00 00 00 callq *(%rip) # 0xe2 <_JIT_ENTRY+0xe2> // 00000000000000de: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // e2: 48 8b 44 24 08 movq 0x8(%rsp), %rax // e7: 48 8b 00 movq (%rax), %rax // ea: 85 c0 testl %eax, %eax // ec: 78 16 js 0x104 <_JIT_ENTRY+0x104> // ee: ff 15 00 00 00 00 callq *(%rip) # 0xf4 <_JIT_ENTRY+0xf4> // 00000000000000f0: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // f4: 48 8b 7c 24 08 movq 0x8(%rsp), %rdi // f9: 48 ff 0f decq (%rdi) // fc: 75 06 jne 0x104 <_JIT_ENTRY+0x104> // fe: ff 15 00 00 00 00 callq *(%rip) # 0x104 <_JIT_ENTRY+0x104> // 0000000000000100: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 104: 48 8b 04 24 movq (%rsp), %rax // 108: 48 8b 00 movq (%rax), %rax // 10b: 48 85 c0 testq %rax, %rax // 10e: 7f 1d jg 0x12d <_JIT_ENTRY+0x12d> // 110: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L.str.1-0x4 // 117: be ee 0e 00 00 movl $0xeee, %esi # imm = 0xEEE // 11c: 48 8b 14 24 movq (%rsp), %rdx // 120: ff 15 00 00 00 00 callq *(%rip) # 0x126 <_JIT_ENTRY+0x126> // 0000000000000122: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 126: 48 8b 04 24 movq (%rsp), %rax // 12a: 48 8b 00 movq (%rax), %rax // 12d: 85 c0 testl %eax, %eax // 12f: 78 19 js 0x14a <_JIT_ENTRY+0x14a> // 131: ff 15 00 00 00 00 callq *(%rip) # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 137: 48 8b 04 24 movq (%rsp), %rax // 13b: 48 ff 08 decq (%rax) // 13e: 75 0a jne 0x14a <_JIT_ENTRY+0x14a> // 140: 48 8b 3c 24 movq (%rsp), %rdi // 144: ff 15 00 00 00 00 callq *(%rip) # 0x14a <_JIT_ENTRY+0x14a> // 0000000000000146: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 14a: 48 8b 03 movq (%rbx), %rax // 14d: 48 85 c0 testq %rax, %rax // 150: 7f 18 jg 0x16a <_JIT_ENTRY+0x16a> // 152: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x159 <_JIT_ENTRY+0x159> // 0000000000000155: R_X86_64_PC32 .L.str.1-0x4 // 159: be ef 0e 00 00 movl $0xeef, %esi # imm = 0xEEF // 15e: 48 89 da movq %rbx, %rdx // 161: ff 15 00 00 00 00 callq *(%rip) # 0x167 <_JIT_ENTRY+0x167> // 0000000000000163: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 167: 48 8b 03 movq (%rbx), %rax // 16a: 85 c0 testl %eax, %eax // 16c: 78 14 js 0x182 <_JIT_ENTRY+0x182> // 16e: ff 15 00 00 00 00 callq *(%rip) # 0x174 <_JIT_ENTRY+0x174> // 0000000000000170: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 174: 48 ff 0b decq (%rbx) // 177: 75 09 jne 0x182 <_JIT_ENTRY+0x182> // 179: 48 89 df movq %rbx, %rdi // 17c: ff 15 00 00 00 00 callq *(%rip) # 0x182 <_JIT_ENTRY+0x182> // 000000000000017e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 182: 48 8b 4c 24 10 movq 0x10(%rsp), %rcx // 187: 48 85 c9 testq %rcx, %rcx // 18a: 74 46 je 0x1d2 <_JIT_ENTRY+0x1d2> // 18c: 4a 8d 04 fd 00 00 00 00 leaq (,%r15,8), %rax // 194: 48 01 e8 addq %rbp, %rax // 197: 4a 89 4c f5 00 movq %rcx, (%rbp,%r14,8) // 19c: 48 89 c5 movq %rax, %rbp // 19f: 48 83 c4 18 addq $0x18, %rsp // 1a3: ff 25 00 00 00 00 jmpq *(%rip) # 0x1a9 <_JIT_ENTRY+0x1a9> // 00000000000001a5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1a9: 48 85 c0 testq %rax, %rax // 1ac: 0f 85 11 ff ff ff jne 0xc3 <_JIT_ENTRY+0xc3> // 1b2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_PC32 .L.str.85-0x4 // 1b9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1c0 <_JIT_ENTRY+0x1c0> // 00000000000001bc: R_X86_64_PC32 .L.str.1-0x4 // 1c0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1c7 <_JIT_ENTRY+0x1c7> // 00000000000001c3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1c7: ba ec 0e 00 00 movl $0xeec, %edx # imm = 0xEEC // 1cc: ff 15 00 00 00 00 callq *(%rip) # 0x1d2 <_JIT_ENTRY+0x1d2> // 00000000000001ce: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1d2: 48 83 c4 18 addq $0x18, %rsp // 1d6: ff 25 00 00 00 00 jmpq *(%rip) # 0x1dc <_JIT_ENTRY+0x1dc> // 00000000000001d8: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1dc: const unsigned char code_body[476] = { 0x48, 0x83, 0xec, 0x18, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc8, 0xf7, 0xd0, 0x4c, 0x63, 0xf8, 0x31, 0xc0, 0x4a, 0x83, 0x7c, 0xfd, 0x00, 0x00, 0x0f, 0x95, 0xc0, 0x8d, 0x14, 0x08, 0x83, 0xfa, 0x02, 0x75, 0x4a, 0xba, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xca, 0x4c, 0x63, 0xf2, 0x4a, 0x8b, 0x5c, 0xf5, 0x00, 0x48, 0x8b, 0x53, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x2e, 0x48, 0x8b, 0x53, 0x28, 0x83, 0x7a, 0x10, 0x08, 0x75, 0x24, 0x45, 0x8b, 0x44, 0x24, 0x34, 0x45, 0x85, 0xc0, 0x7e, 0x1a, 0xc1, 0xe1, 0x03, 0x48, 0x89, 0xee, 0x48, 0x29, 0xce, 0x48, 0xf7, 0xd8, 0x48, 0x8b, 0x3c, 0xc6, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x3b, 0x4b, 0x10, 0x74, 0x0a, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x74, 0xc6, 0x08, 0x48, 0x8b, 0x42, 0x08, 0x41, 0xff, 0xc8, 0x45, 0x89, 0x44, 0x24, 0x34, 0x48, 0x89, 0x7c, 0x24, 0x08, 0x48, 0x89, 0x34, 0x24, 0xff, 0xd0, 0x41, 0xff, 0x44, 0x24, 0x34, 0x49, 0x8b, 0x54, 0x24, 0x70, 0x48, 0x85, 0xd2, 0x48, 0x89, 0x44, 0x24, 0x10, 0x0f, 0x84, 0xfc, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x7a, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x0f, 0x84, 0xef, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x48, 0x8b, 0x02, 0x48, 0x85, 0xc0, 0x7f, 0x1a, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xed, 0x0e, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x8b, 0x00, 0x85, 0xc0, 0x78, 0x16, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x7c, 0x24, 0x08, 0x48, 0xff, 0x0f, 0x75, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x7f, 0x1d, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xee, 0x0e, 0x00, 0x00, 0x48, 0x8b, 0x14, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x8b, 0x00, 0x85, 0xc0, 0x78, 0x19, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0xff, 0x08, 0x75, 0x0a, 0x48, 0x8b, 0x3c, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xef, 0x0e, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4c, 0x24, 0x10, 0x48, 0x85, 0xc9, 0x74, 0x46, 0x4a, 0x8d, 0x04, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x4a, 0x89, 0x4c, 0xf5, 0x00, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x85, 0x11, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xec, 0x0e, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00' // c0: // c0: OPARG // c8: &PyMethodDescr_Type+0x0 // d0: JUMP_TARGET // d8: &_Py_NegativeRefcount+0x0 // e0: &_Py_DECREF_DecRefTotal+0x0 // e8: &_Py_Dealloc+0x0 // f0: CONTINUE // f8: &__assert_fail+0x0 // 100: ERROR_TARGET const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc0, instruction->oparg); patch_64(data + 0xc8, (uintptr_t)&PyMethodDescr_Type); patch_64(data + 0xd0, instruction_starts[instruction->jump_target]); patch_64(data + 0xd8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xe0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xe8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xf0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf8, (uintptr_t)&__assert_fail); patch_64(data + 0x100, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x75, (uintptr_t)data + 0xcc); patch_32r(code + 0xd3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xde, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0xf0, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x100, (uintptr_t)data + 0xe4); patch_32r(code + 0x113, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x122, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x133, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x146, (uintptr_t)data + 0xe4); patch_32r(code + 0x155, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x163, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x170, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x17e, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x1a5, (uintptr_t)data + 0xec); patch_32r(code + 0x1b5, (uintptr_t)data + 0x8a); patch_32r(code + 0x1bc, (uintptr_t)data + -0x4); patch_32r(code + 0x1c3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1ce, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x1d8, (uintptr_t)data + 0xfc); } void emit__CALL_NON_PY_GENERAL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_NON_PY_GENERAL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 38 subq $0x38, %rsp // 4: 4c 89 6c 24 10 movq %r13, 0x10(%rsp) // 9: 4d 89 e5 movq %r12, %r13 // c: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 13: 44 0f b7 f8 movzwl %ax, %r15d // 17: 0f b7 d8 movzwl %ax, %ebx // 1a: 8d 04 dd 00 00 00 00 leal (,%rbx,8), %eax // 21: 48 89 ee movq %rbp, %rsi // 24: 48 29 c6 subq %rax, %rsi // 27: 44 89 f8 movl %r15d, %eax // 2a: f7 d0 notl %eax // 2c: 48 98 cltq // 2e: 48 89 44 24 28 movq %rax, 0x28(%rsp) // 33: 48 8b 4c c5 00 movq (%rbp,%rax,8), %rcx // 38: b8 fe ff ff ff movl $0xfffffffe, %eax # imm = 0xFFFFFFFE // 3d: 44 29 f8 subl %r15d, %eax // 40: 48 98 cltq // 42: 48 89 2c 24 movq %rbp, (%rsp) // 46: 48 89 44 24 20 movq %rax, 0x20(%rsp) // 4b: 4c 8b 74 c5 00 movq (%rbp,%rax,8), %r14 // 50: 45 31 e4 xorl %r12d, %r12d // 53: 48 89 4c 24 18 movq %rcx, 0x18(%rsp) // 58: 48 85 c9 testq %rcx, %rcx // 5b: 41 0f 95 c4 setne %r12b // 5f: 45 01 e7 addl %r12d, %r15d // 62: 42 8d 04 e5 00 00 00 00 leal (,%r12,8), %eax // 6a: 48 29 c6 subq %rax, %rsi // 6d: 48 ba 00 00 00 00 00 00 00 80 movabsq $-0x8000000000000000, %rdx # imm = 0x8000000000000000 // 77: 4c 09 fa orq %r15, %rdx // 7a: 4c 89 f7 movq %r14, %rdi // 7d: 31 c9 xorl %ecx, %ecx // 7f: ff 15 00 00 00 00 callq *(%rip) # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_GOTPCRELX PyObject_Vectorcall-0x4 // 85: 4d 85 ed testq %r13, %r13 // 88: 0f 84 69 01 00 00 je 0x1f7 <_JIT_ENTRY+0x1f7> // 8e: 48 89 c5 movq %rax, %rbp // 91: 49 8b 45 70 movq 0x70(%r13), %rax // 95: 48 85 c0 testq %rax, %rax // 98: 74 2a je 0xc4 <_JIT_ENTRY+0xc4> // 9a: 48 85 ed testq %rbp, %rbp // 9d: 0f 95 c1 setne %cl // a0: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // a5: 0f 95 c0 setne %al // a8: 30 c8 xorb %cl, %al // aa: 74 1d je 0xc9 <_JIT_ENTRY+0xc9> // ac: 49 8b 06 movq (%r14), %rax // af: 48 85 c0 testq %rax, %rax // b2: 7e 35 jle 0xe9 <_JIT_ENTRY+0xe9> // b4: 48 89 6c 24 30 movq %rbp, 0x30(%rsp) // b9: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // be: 85 c0 testl %eax, %eax // c0: 79 4d jns 0x10f <_JIT_ENTRY+0x10f> // c2: eb 5f jmp 0x123 <_JIT_ENTRY+0x123> // c4: 48 85 ed testq %rbp, %rbp // c7: 75 e3 jne 0xac <_JIT_ENTRY+0xac> // c9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L.str.85-0x4 // d0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L.str.1-0x4 // d7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // de: ba 65 0c 00 00 movl $0xc65, %edx # imm = 0xC65 // e3: ff 15 00 00 00 00 callq *(%rip) # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_GOTPCRELX __assert_fail-0x4 // e9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.1-0x4 // f0: be 66 0c 00 00 movl $0xc66, %esi # imm = 0xC66 // f5: 4c 89 f2 movq %r14, %rdx // f8: ff 15 00 00 00 00 callq *(%rip) # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // fe: 49 8b 06 movq (%r14), %rax // 101: 48 89 6c 24 30 movq %rbp, 0x30(%rsp) // 106: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // 10b: 85 c0 testl %eax, %eax // 10d: 78 14 js 0x123 <_JIT_ENTRY+0x123> // 10f: ff 15 00 00 00 00 callq *(%rip) # 0x115 <_JIT_ENTRY+0x115> // 0000000000000111: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 115: 49 ff 0e decq (%r14) // 118: 75 09 jne 0x123 <_JIT_ENTRY+0x123> // 11a: 4c 89 f7 movq %r14, %rdi // 11d: ff 15 00 00 00 00 callq *(%rip) # 0x123 <_JIT_ENTRY+0x123> // 000000000000011f: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 123: 45 85 ff testl %r15d, %r15d // 126: 0f 84 7f 00 00 00 je 0x1ab <_JIT_ENTRY+0x1ab> // 12c: 48 f7 db negq %rbx // 12f: 49 f7 dc negq %r12 // 132: 45 31 ed xorl %r13d, %r13d // 135: 48 83 7c 24 18 00 cmpq $0x0, 0x18(%rsp) // 13b: 41 0f 95 c5 setne %r13b // 13f: 48 8b 04 24 movq (%rsp), %rax // 143: 4e 8d 24 e0 leaq (%rax,%r12,8), %r12 // 147: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x14e <_JIT_ENTRY+0x14e> // 000000000000014a: R_X86_64_REX_GOTPCRELX _Py_NegativeRefcount-0x4 // 14e: 48 8b 2d 00 00 00 00 movq (%rip), %rbp # 0x155 <_JIT_ENTRY+0x155> // 0000000000000151: R_X86_64_REX_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 155: eb 11 jmp 0x168 <_JIT_ENTRY+0x168> // 157: 66 0f 1f 84 00 00 00 00 00 nopw (%rax,%rax) // 160: 48 ff c3 incq %rbx // 163: 49 39 dd cmpq %rbx, %r13 // 166: 74 43 je 0x1ab <_JIT_ENTRY+0x1ab> // 168: 4d 8b 3c dc movq (%r12,%rbx,8), %r15 // 16c: 49 8b 07 movq (%r15), %rax // 16f: 48 85 c0 testq %rax, %rax // 172: 7e 0c jle 0x180 <_JIT_ENTRY+0x180> // 174: 85 c0 testl %eax, %eax // 176: 78 e8 js 0x160 <_JIT_ENTRY+0x160> // 178: eb 1f jmp 0x199 <_JIT_ENTRY+0x199> // 17a: 66 0f 1f 44 00 00 nopw (%rax,%rax) // 180: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x187 <_JIT_ENTRY+0x187> // 0000000000000183: R_X86_64_PC32 .L.str.1-0x4 // 187: be 68 0c 00 00 movl $0xc68, %esi # imm = 0xC68 // 18c: 4c 89 fa movq %r15, %rdx // 18f: 41 ff d6 callq *%r14 // 192: 49 8b 07 movq (%r15), %rax // 195: 85 c0 testl %eax, %eax // 197: 78 c7 js 0x160 <_JIT_ENTRY+0x160> // 199: ff d5 callq *%rbp // 19b: 49 ff 0f decq (%r15) // 19e: 75 c0 jne 0x160 <_JIT_ENTRY+0x160> // 1a0: 4c 89 ff movq %r15, %rdi // 1a3: ff 15 00 00 00 00 callq *(%rip) # 0x1a9 <_JIT_ENTRY+0x1a9> // 00000000000001a5: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 1a9: eb b5 jmp 0x160 <_JIT_ENTRY+0x160> // 1ab: 48 8b 74 24 30 movq 0x30(%rsp), %rsi // 1b0: 48 85 f6 testq %rsi, %rsi // 1b3: 74 2a je 0x1df <_JIT_ENTRY+0x1df> // 1b5: 48 8b 0c 24 movq (%rsp), %rcx // 1b9: 48 8b 44 24 28 movq 0x28(%rsp), %rax // 1be: 48 8d 2c c1 leaq (%rcx,%rax,8), %rbp // 1c2: 48 8b 54 24 20 movq 0x20(%rsp), %rdx // 1c7: 48 89 34 d1 movq %rsi, (%rcx,%rdx,8) // 1cb: 4c 8b 6c 24 10 movq 0x10(%rsp), %r13 // 1d0: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // 1d5: 48 83 c4 38 addq $0x38, %rsp // 1d9: ff 25 00 00 00 00 jmpq *(%rip) # 0x1df <_JIT_ENTRY+0x1df> // 00000000000001db: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1df: 4c 8b 6c 24 10 movq 0x10(%rsp), %r13 // 1e4: 48 8b 2c 24 movq (%rsp), %rbp // 1e8: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // 1ed: 48 83 c4 38 addq $0x38, %rsp // 1f1: ff 25 00 00 00 00 jmpq *(%rip) # 0x1f7 <_JIT_ENTRY+0x1f7> // 00000000000001f3: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1f7: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1fe <_JIT_ENTRY+0x1fe> // 00000000000001fa: R_X86_64_PC32 .L.str.143-0x4 // 1fe: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x205 <_JIT_ENTRY+0x205> // 0000000000000201: R_X86_64_PC32 .L.str.144-0x4 // 205: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x20c <_JIT_ENTRY+0x20c> // 0000000000000208: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 20c: ba 4b 00 00 00 movl $0x4b, %edx // 211: ff 15 00 00 00 00 callq *(%rip) # 0x217 <_JIT_ENTRY+0x217> // 0000000000000213: R_X86_64_GOTPCRELX __assert_fail-0x4 // 217: const unsigned char code_body[535] = { 0x48, 0x83, 0xec, 0x38, 0x4c, 0x89, 0x6c, 0x24, 0x10, 0x4d, 0x89, 0xe5, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0xf8, 0x0f, 0xb7, 0xd8, 0x8d, 0x04, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xee, 0x48, 0x29, 0xc6, 0x44, 0x89, 0xf8, 0xf7, 0xd0, 0x48, 0x98, 0x48, 0x89, 0x44, 0x24, 0x28, 0x48, 0x8b, 0x4c, 0xc5, 0x00, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0x44, 0x29, 0xf8, 0x48, 0x98, 0x48, 0x89, 0x2c, 0x24, 0x48, 0x89, 0x44, 0x24, 0x20, 0x4c, 0x8b, 0x74, 0xc5, 0x00, 0x45, 0x31, 0xe4, 0x48, 0x89, 0x4c, 0x24, 0x18, 0x48, 0x85, 0xc9, 0x41, 0x0f, 0x95, 0xc4, 0x45, 0x01, 0xe7, 0x42, 0x8d, 0x04, 0xe5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x29, 0xc6, 0x48, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x4c, 0x09, 0xfa, 0x4c, 0x89, 0xf7, 0x31, 0xc9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xed, 0x0f, 0x84, 0x69, 0x01, 0x00, 0x00, 0x48, 0x89, 0xc5, 0x49, 0x8b, 0x45, 0x70, 0x48, 0x85, 0xc0, 0x74, 0x2a, 0x48, 0x85, 0xed, 0x0f, 0x95, 0xc1, 0x48, 0x83, 0x78, 0x08, 0x00, 0x0f, 0x95, 0xc0, 0x30, 0xc8, 0x74, 0x1d, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x35, 0x48, 0x89, 0x6c, 0x24, 0x30, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x85, 0xc0, 0x79, 0x4d, 0xeb, 0x5f, 0x48, 0x85, 0xed, 0x75, 0xe3, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x65, 0x0c, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x66, 0x0c, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0x6c, 0x24, 0x30, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xff, 0x0f, 0x84, 0x7f, 0x00, 0x00, 0x00, 0x48, 0xf7, 0xdb, 0x49, 0xf7, 0xdc, 0x45, 0x31, 0xed, 0x48, 0x83, 0x7c, 0x24, 0x18, 0x00, 0x41, 0x0f, 0x95, 0xc5, 0x48, 0x8b, 0x04, 0x24, 0x4e, 0x8d, 0x24, 0xe0, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x2d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x11, 0x66, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc3, 0x49, 0x39, 0xdd, 0x74, 0x43, 0x4d, 0x8b, 0x3c, 0xdc, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x0c, 0x85, 0xc0, 0x78, 0xe8, 0xeb, 0x1f, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x68, 0x0c, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0x41, 0xff, 0xd6, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0xc7, 0xff, 0xd5, 0x49, 0xff, 0x0f, 0x75, 0xc0, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xb5, 0x48, 0x8b, 0x74, 0x24, 0x30, 0x48, 0x85, 0xf6, 0x74, 0x2a, 0x48, 0x8b, 0x0c, 0x24, 0x48, 0x8b, 0x44, 0x24, 0x28, 0x48, 0x8d, 0x2c, 0xc1, 0x48, 0x8b, 0x54, 0x24, 0x20, 0x48, 0x89, 0x34, 0xd1, 0x4c, 0x8b, 0x6c, 0x24, 0x10, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x6c, 0x24, 0x10, 0x48, 0x8b, 0x2c, 0x24, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(res != NULL) ^ (_PyErr_Occurred(tstate) != NULL)\x00tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00' // 143: 00 00 00 00 00 // 148: OPARG // 150: &PyObject_Vectorcall+0x0 // 158: &__assert_fail+0x0 // 160: &_Py_NegativeRefcount+0x0 // 168: &_Py_DECREF_DecRefTotal+0x0 // 170: &_Py_Dealloc+0x0 // 178: CONTINUE // 180: ERROR_TARGET const unsigned char data_body[392] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x72, 0x65, 0x73, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x5e, 0x20, 0x28, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x29, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x148, instruction->oparg); patch_64(data + 0x150, (uintptr_t)&PyObject_Vectorcall); patch_64(data + 0x158, (uintptr_t)&__assert_fail); patch_64(data + 0x160, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x168, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x170, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x178, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x180, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x81, (uintptr_t)data + 0x14c); patch_32r(code + 0xcc, (uintptr_t)data + 0x8a); patch_32r(code + 0xd3, (uintptr_t)data + -0x4); patch_32r(code + 0xda, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xe5, (uintptr_t)data + 0x154); patch_32r(code + 0xec, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xfa, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x111, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x11f, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x14a, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x151, (uintptr_t)data + 0x164); patch_32r(code + 0x183, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1a5, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x1db, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x1f3, (uintptr_t)data + 0x17c); patch_32r(code + 0x1fa, (uintptr_t)data + 0xbc); patch_32r(code + 0x201, (uintptr_t)data + 0xcb); patch_32r(code + 0x208, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x213, (uintptr_t)data + 0x154); } void emit__CALL_STR_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_STR_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 01 cmpw $0x1, %ax // c: 0f 85 80 00 00 00 jne 0x92 <_JIT_ENTRY+0x92> // 12: 48 8d 5d f0 leaq -0x10(%rbp), %rbx // 16: 48 83 3b 00 cmpq $0x0, (%rbx) // 1a: 75 0d jne 0x29 <_JIT_ENTRY+0x29> // 1c: 48 8b 45 e8 movq -0x18(%rbp), %rax // 20: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x27 <_JIT_ENTRY+0x27> // 0000000000000023: R_X86_64_REX_GOTPCRELX PyUnicode_Type-0x4 // 27: 74 07 je 0x30 <_JIT_ENTRY+0x30> // 29: 58 popq %rax // 2a: ff 25 00 00 00 00 jmpq *(%rip) # 0x30 <_JIT_ENTRY+0x30> // 000000000000002c: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 30: 4c 8b 7d f8 movq -0x8(%rbp), %r15 // 34: 4c 89 ff movq %r15, %rdi // 37: ff 15 00 00 00 00 callq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX PyObject_Str-0x4 // 3d: 49 89 c6 movq %rax, %r14 // 40: 49 8b 07 movq (%r15), %rax // 43: 48 85 c0 testq %rax, %rax // 46: 7f 18 jg 0x60 <_JIT_ENTRY+0x60> // 48: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_PC32 .L.str.1-0x4 // 4f: be 92 0d 00 00 movl $0xd92, %esi # imm = 0xD92 // 54: 4c 89 fa movq %r15, %rdx // 57: ff 15 00 00 00 00 callq *(%rip) # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 5d: 49 8b 07 movq (%r15), %rax // 60: 85 c0 testl %eax, %eax // 62: 78 14 js 0x78 <_JIT_ENTRY+0x78> // 64: ff 15 00 00 00 00 callq *(%rip) # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 6a: 49 ff 0f decq (%r15) // 6d: 75 09 jne 0x78 <_JIT_ENTRY+0x78> // 6f: 4c 89 ff movq %r15, %rdi // 72: ff 15 00 00 00 00 callq *(%rip) # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 78: 4d 85 f6 testq %r14, %r14 // 7b: 74 0e je 0x8b <_JIT_ENTRY+0x8b> // 7d: 4c 89 75 e8 movq %r14, -0x18(%rbp) // 81: 48 89 dd movq %rbx, %rbp // 84: 58 popq %rax // 85: ff 25 00 00 00 00 jmpq *(%rip) # 0x8b <_JIT_ENTRY+0x8b> // 0000000000000087: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 8b: 58 popq %rax // 8c: ff 25 00 00 00 00 jmpq *(%rip) # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 92: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_PC32 .L.str.87-0x4 // 99: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_PC32 .L.str.1-0x4 // a0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // a7: ba 87 0d 00 00 movl $0xd87, %edx # imm = 0xD87 // ac: ff 15 00 00 00 00 callq *(%rip) # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_GOTPCRELX __assert_fail-0x4 // b2: const unsigned char code_body[178] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x0f, 0x85, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x5d, 0xf0, 0x48, 0x83, 0x3b, 0x00, 0x75, 0x0d, 0x48, 0x8b, 0x45, 0xe8, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0xf8, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x92, 0x0d, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0x0e, 0x4c, 0x89, 0x75, 0xe8, 0x48, 0x89, 0xdd, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x87, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == 1\x00' // 99: 00 00 00 00 00 00 00 // a0: OPARG // a8: &PyUnicode_Type+0x0 // b0: JUMP_TARGET // b8: &PyObject_Str+0x0 // c0: &_Py_NegativeRefcount+0x0 // c8: &_Py_DECREF_DecRefTotal+0x0 // d0: &_Py_Dealloc+0x0 // d8: CONTINUE // e0: ERROR_TARGET // e8: &__assert_fail+0x0 const unsigned char data_body[240] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->oparg); patch_64(data + 0xa8, (uintptr_t)&PyUnicode_Type); patch_64(data + 0xb0, instruction_starts[instruction->jump_target]); patch_64(data + 0xb8, (uintptr_t)&PyObject_Str); patch_64(data + 0xc0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xc8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xd0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe0, instruction_starts[instruction->error_target]); patch_64(data + 0xe8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x23, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x2c, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0xb4); patch_32r(code + 0x4b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x66, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x74, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x87, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x8e, (uintptr_t)data + 0xdc); patch_32r(code + 0x95, (uintptr_t)data + 0x8a); patch_32r(code + 0x9c, (uintptr_t)data + -0x4); patch_32r(code + 0xa3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xae, (uintptr_t)data + 0xe4); } void emit__CALL_TUPLE_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_TUPLE_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 01 cmpw $0x1, %ax // c: 0f 85 80 00 00 00 jne 0x92 <_JIT_ENTRY+0x92> // 12: 48 8d 5d f0 leaq -0x10(%rbp), %rbx // 16: 48 83 3b 00 cmpq $0x0, (%rbx) // 1a: 75 0d jne 0x29 <_JIT_ENTRY+0x29> // 1c: 48 8b 45 e8 movq -0x18(%rbp), %rax // 20: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x27 <_JIT_ENTRY+0x27> // 0000000000000023: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 27: 74 07 je 0x30 <_JIT_ENTRY+0x30> // 29: 58 popq %rax // 2a: ff 25 00 00 00 00 jmpq *(%rip) # 0x30 <_JIT_ENTRY+0x30> // 000000000000002c: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 30: 4c 8b 7d f8 movq -0x8(%rbp), %r15 // 34: 4c 89 ff movq %r15, %rdi // 37: ff 15 00 00 00 00 callq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX PySequence_Tuple-0x4 // 3d: 49 89 c6 movq %rax, %r14 // 40: 49 8b 07 movq (%r15), %rax // 43: 48 85 c0 testq %rax, %rax // 46: 7f 18 jg 0x60 <_JIT_ENTRY+0x60> // 48: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_PC32 .L.str.1-0x4 // 4f: be ad 0d 00 00 movl $0xdad, %esi # imm = 0xDAD // 54: 4c 89 fa movq %r15, %rdx // 57: ff 15 00 00 00 00 callq *(%rip) # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 5d: 49 8b 07 movq (%r15), %rax // 60: 85 c0 testl %eax, %eax // 62: 78 14 js 0x78 <_JIT_ENTRY+0x78> // 64: ff 15 00 00 00 00 callq *(%rip) # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 6a: 49 ff 0f decq (%r15) // 6d: 75 09 jne 0x78 <_JIT_ENTRY+0x78> // 6f: 4c 89 ff movq %r15, %rdi // 72: ff 15 00 00 00 00 callq *(%rip) # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 78: 4d 85 f6 testq %r14, %r14 // 7b: 74 0e je 0x8b <_JIT_ENTRY+0x8b> // 7d: 4c 89 75 e8 movq %r14, -0x18(%rbp) // 81: 48 89 dd movq %rbx, %rbp // 84: 58 popq %rax // 85: ff 25 00 00 00 00 jmpq *(%rip) # 0x8b <_JIT_ENTRY+0x8b> // 0000000000000087: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 8b: 58 popq %rax // 8c: ff 25 00 00 00 00 jmpq *(%rip) # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 92: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_PC32 .L.str.87-0x4 // 99: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_PC32 .L.str.1-0x4 // a0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // a7: ba a2 0d 00 00 movl $0xda2, %edx # imm = 0xDA2 // ac: ff 15 00 00 00 00 callq *(%rip) # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_GOTPCRELX __assert_fail-0x4 // b2: const unsigned char code_body[178] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x0f, 0x85, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x5d, 0xf0, 0x48, 0x83, 0x3b, 0x00, 0x75, 0x0d, 0x48, 0x8b, 0x45, 0xe8, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0xf8, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xad, 0x0d, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0x0e, 0x4c, 0x89, 0x75, 0xe8, 0x48, 0x89, 0xdd, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xa2, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == 1\x00' // 99: 00 00 00 00 00 00 00 // a0: OPARG // a8: &PyTuple_Type+0x0 // b0: JUMP_TARGET // b8: &PySequence_Tuple+0x0 // c0: &_Py_NegativeRefcount+0x0 // c8: &_Py_DECREF_DecRefTotal+0x0 // d0: &_Py_Dealloc+0x0 // d8: CONTINUE // e0: ERROR_TARGET // e8: &__assert_fail+0x0 const unsigned char data_body[240] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->oparg); patch_64(data + 0xa8, (uintptr_t)&PyTuple_Type); patch_64(data + 0xb0, instruction_starts[instruction->jump_target]); patch_64(data + 0xb8, (uintptr_t)&PySequence_Tuple); patch_64(data + 0xc0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xc8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xd0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe0, instruction_starts[instruction->error_target]); patch_64(data + 0xe8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x23, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x2c, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0xb4); patch_32r(code + 0x4b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x66, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x74, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x87, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x8e, (uintptr_t)data + 0xdc); patch_32r(code + 0x95, (uintptr_t)data + 0x8a); patch_32r(code + 0x9c, (uintptr_t)data + -0x4); patch_32r(code + 0xa3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xae, (uintptr_t)data + 0xe4); } void emit__CALL_TYPE_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CALL_TYPE_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 01 cmpw $0x1, %ax // c: 0f 85 96 00 00 00 jne 0xa8 <_JIT_ENTRY+0xa8> // 12: 48 8d 5d f0 leaq -0x10(%rbp), %rbx // 16: 48 83 3b 00 cmpq $0x0, (%rbx) // 1a: 75 0d jne 0x29 <_JIT_ENTRY+0x29> // 1c: 48 8b 45 e8 movq -0x18(%rbp), %rax // 20: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x27 <_JIT_ENTRY+0x27> // 0000000000000023: R_X86_64_REX_GOTPCRELX PyType_Type-0x4 // 27: 74 07 je 0x30 <_JIT_ENTRY+0x30> // 29: 58 popq %rax // 2a: ff 25 00 00 00 00 jmpq *(%rip) # 0x30 <_JIT_ENTRY+0x30> // 000000000000002c: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 30: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 34: 4d 8b 7e 08 movq 0x8(%r14), %r15 // 38: 41 8b 07 movl (%r15), %eax // 3b: ff c0 incl %eax // 3d: 75 1a jne 0x59 <_JIT_ENTRY+0x59> // 3f: 49 8b 06 movq (%r14), %rax // 42: 48 85 c0 testq %rax, %rax // 45: 7e 23 jle 0x6a <_JIT_ENTRY+0x6a> // 47: 85 c0 testl %eax, %eax // 49: 79 3b jns 0x86 <_JIT_ENTRY+0x86> // 4b: 4c 89 7d e8 movq %r15, -0x18(%rbp) // 4f: 48 89 dd movq %rbx, %rbp // 52: 58 popq %rax // 53: ff 25 00 00 00 00 jmpq *(%rip) # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 59: 41 89 07 movl %eax, (%r15) // 5c: ff 15 00 00 00 00 callq *(%rip) # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 62: 49 8b 06 movq (%r14), %rax // 65: 48 85 c0 testq %rax, %rax // 68: 7f dd jg 0x47 <_JIT_ENTRY+0x47> // 6a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_PC32 .L.str.1-0x4 // 71: be 78 0d 00 00 movl $0xd78, %esi # imm = 0xD78 // 76: 4c 89 f2 movq %r14, %rdx // 79: ff 15 00 00 00 00 callq *(%rip) # 0x7f <_JIT_ENTRY+0x7f> // 000000000000007b: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 7f: 49 8b 06 movq (%r14), %rax // 82: 85 c0 testl %eax, %eax // 84: 78 c5 js 0x4b <_JIT_ENTRY+0x4b> // 86: ff 15 00 00 00 00 callq *(%rip) # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 8c: 49 ff 0e decq (%r14) // 8f: 75 ba jne 0x4b <_JIT_ENTRY+0x4b> // 91: 4c 89 f7 movq %r14, %rdi // 94: ff 15 00 00 00 00 callq *(%rip) # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 9a: 4c 89 7d e8 movq %r15, -0x18(%rbp) // 9e: 48 89 dd movq %rbx, %rbp // a1: 58 popq %rax // a2: ff 25 00 00 00 00 jmpq *(%rip) # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // a8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xaf <_JIT_ENTRY+0xaf> // 00000000000000ab: R_X86_64_PC32 .L.str.87-0x4 // af: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb6 <_JIT_ENTRY+0xb6> // 00000000000000b2: R_X86_64_PC32 .L.str.1-0x4 // b6: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xbd <_JIT_ENTRY+0xbd> // 00000000000000b9: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // bd: ba 6d 0d 00 00 movl $0xd6d, %edx # imm = 0xD6D // c2: ff 15 00 00 00 00 callq *(%rip) # 0xc8 <_JIT_ENTRY+0xc8> // 00000000000000c4: R_X86_64_GOTPCRELX __assert_fail-0x4 // c8: const unsigned char code_body[200] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x0f, 0x85, 0x96, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x5d, 0xf0, 0x48, 0x83, 0x3b, 0x00, 0x75, 0x0d, 0x48, 0x8b, 0x45, 0xe8, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x75, 0xf8, 0x4d, 0x8b, 0x7e, 0x08, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x75, 0x1a, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x23, 0x85, 0xc0, 0x79, 0x3b, 0x4c, 0x89, 0x7d, 0xe8, 0x48, 0x89, 0xdd, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xdd, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x78, 0x0d, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0xc5, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0xba, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xe8, 0x48, 0x89, 0xdd, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x6d, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == 1\x00' // 99: 00 00 00 00 00 00 00 // a0: OPARG // a8: &PyType_Type+0x0 // b0: JUMP_TARGET // b8: CONTINUE // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: &_Py_NegativeRefcount+0x0 // d0: &_Py_DECREF_DecRefTotal+0x0 // d8: &_Py_Dealloc+0x0 // e0: &__assert_fail+0x0 const unsigned char data_body[232] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->oparg); patch_64(data + 0xa8, (uintptr_t)&PyType_Type); patch_64(data + 0xb0, instruction_starts[instruction->jump_target]); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xd0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xd8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xe0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x23, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x2c, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x55, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x5e, (uintptr_t)data + 0xbc); patch_32r(code + 0x6d, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x7b, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x88, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x96, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0xa4, (uintptr_t)data + 0xb4); patch_32r(code + 0xab, (uintptr_t)data + 0x8a); patch_32r(code + 0xb2, (uintptr_t)data + -0x4); patch_32r(code + 0xb9, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xc4, (uintptr_t)data + 0xdc); } void emit__CHECK_ATTR_CLASS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_ATTR_CLASS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: f6 81 ab 00 00 00 80 testb $-0x80, 0xab(%rcx) // f: 74 1d je 0x2e <_JIT_ENTRY+0x2e> // 11: 83 3d 00 00 00 00 00 cmpl $0x0, (%rip) # 0x18 <_JIT_ENTRY+0x18> // 0000000000000013: R_X86_64_GOTPCREL _JIT_OPERAND-0x5 // 18: 74 1a je 0x34 <_JIT_ENTRY+0x34> // 1a: 8b 80 80 01 00 00 movl 0x180(%rax), %eax // 20: 3b 05 00 00 00 00 cmpl (%rip), %eax # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 26: 75 06 jne 0x2e <_JIT_ENTRY+0x2e> // 28: ff 25 00 00 00 00 jmpq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 34: 50 pushq %rax // 35: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_PC32 .L.str.47-0x4 // 3c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_PC32 .L.str.1-0x4 // 43: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 4a: ba 89 08 00 00 movl $0x889, %edx # imm = 0x889 // 4f: ff 15 00 00 00 00 callq *(%rip) # 0x55 <_JIT_ENTRY+0x55> // 0000000000000051: R_X86_64_GOTPCRELX __assert_fail-0x4 // 55: const unsigned char code_body[85] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x80, 0x74, 0x1d, 0x83, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x1a, 0x8b, 0x80, 0x80, 0x01, 0x00, 0x00, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x89, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00type_version != 0\x00' // a0: // a0: OPERAND // a8: CONTINUE // b0: JUMP_TARGET // b8: &__assert_fail+0x0 const unsigned char data_body[192] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->operand); patch_64(data + 0xa8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xb0, instruction_starts[instruction->jump_target]); patch_64(data + 0xb8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x13, (uintptr_t)data + 0x9b); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x2a, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xac); patch_32r(code + 0x38, (uintptr_t)data + 0x8a); patch_32r(code + 0x3f, (uintptr_t)data + -0x4); patch_32r(code + 0x46, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x51, (uintptr_t)data + 0xb4); } void emit__CHECK_ATTR_METHOD_LAZY_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_ATTR_METHOD_LAZY_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // b: 48 83 7c 08 e8 00 cmpq $0x0, -0x18(%rax,%rcx) // 11: 74 06 je 0x19 <_JIT_ENTRY+0x19> // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: ff 25 00 00 00 00 jmpq *(%rip) # 0x1f <_JIT_ENTRY+0x1f> // 000000000000001b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 19: const unsigned char code_body[25] = { 0x48, 0x8b, 0x45, 0xf8, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x7c, 0x08, 0xe8, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPERAND // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->operand); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x4); } void emit__CHECK_ATTR_MODULE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_ATTR_MODULE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyModule_Type-0x4 // f: 75 1e jne 0x2f <_JIT_ENTRY+0x2f> // 11: 48 8b 40 10 movq 0x10(%rax), %rax // 15: 48 85 c0 testq %rax, %rax // 18: 74 1b je 0x35 <_JIT_ENTRY+0x35> // 1a: 48 8b 40 20 movq 0x20(%rax), %rax // 1e: 8b 40 0c movl 0xc(%rax), %eax // 21: 3b 05 00 00 00 00 cmpl (%rip), %eax # 0x27 <_JIT_ENTRY+0x27> // 0000000000000023: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 27: 75 06 jne 0x2f <_JIT_ENTRY+0x2f> // 29: ff 25 00 00 00 00 jmpq *(%rip) # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2f: ff 25 00 00 00 00 jmpq *(%rip) # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 35: 50 pushq %rax // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.50-0x4 // 3d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_PC32 .L.str.1-0x4 // 44: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 4b: ba f9 07 00 00 movl $0x7f9, %edx # imm = 0x7F9 // 50: ff 15 00 00 00 00 callq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX __assert_fail-0x4 // 56: const unsigned char code_body[86] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1e, 0x48, 0x8b, 0x40, 0x10, 0x48, 0x85, 0xc0, 0x74, 0x1b, 0x48, 0x8b, 0x40, 0x20, 0x8b, 0x40, 0x0c, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf9, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00dict != NULL\x00' // 9b: 00 00 00 00 00 // a0: &PyModule_Type+0x0 // a8: OPERAND // b0: CONTINUE // b8: JUMP_TARGET // c0: &__assert_fail+0x0 const unsigned char data_body[200] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x64, 0x69, 0x63, 0x74, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, (uintptr_t)&PyModule_Type); patch_64(data + 0xa8, instruction->operand); patch_64(data + 0xb0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xb8, instruction_starts[instruction->jump_target]); patch_64(data + 0xc0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x23, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x31, (uintptr_t)data + 0xb4); patch_32r(code + 0x39, (uintptr_t)data + 0x8a); patch_32r(code + 0x40, (uintptr_t)data + -0x4); patch_32r(code + 0x47, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0xbc); } void emit__CHECK_ATTR_WITH_HINT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_ATTR_WITH_HINT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: f6 81 a8 00 00 00 10 testb $0x10, 0xa8(%rcx) // 10: 74 24 je 0x36 <_JIT_ENTRY+0x36> // 12: 48 8b 40 e8 movq -0x18(%rax), %rax // 16: 48 85 c0 testq %rax, %rax // 19: 74 14 je 0x2f <_JIT_ENTRY+0x2f> // 1b: 48 8b 40 08 movq 0x8(%rax), %rax // 1f: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 26: 75 2e jne 0x56 <_JIT_ENTRY+0x56> // 28: 58 popq %rax // 29: ff 25 00 00 00 00 jmpq *(%rip) # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.53-0x4 // 3d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_PC32 .L.str.1-0x4 // 44: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 4b: ba 1e 08 00 00 movl $0x81e, %edx # imm = 0x81E // 50: ff 15 00 00 00 00 callq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX __assert_fail-0x4 // 56: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_PC32 .L.str.54-0x4 // 5d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_PC32 .L.str.1-0x4 // 64: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 6b: ba 24 08 00 00 movl $0x824, %edx # imm = 0x824 // 70: ff 15 00 00 00 00 callq *(%rip) # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_GOTPCRELX __assert_fail-0x4 // 76: const unsigned char code_body[118] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xa8, 0x00, 0x00, 0x00, 0x10, 0x74, 0x24, 0x48, 0x8b, 0x40, 0xe8, 0x48, 0x85, 0xc0, 0x74, 0x14, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x2e, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1e, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x24, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(owner)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00PyDict_CheckExact((PyObject *)dict)\x00' // e5: 00 00 00 // e8: &PyDict_Type+0x0 // f0: CONTINUE // f8: JUMP_TARGET // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x63, 0x74, 0x28, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x64, 0x69, 0x63, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe8, (uintptr_t)&PyDict_Type); patch_64(data + 0xf0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf8, instruction_starts[instruction->jump_target]); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xf4); patch_32r(code + 0x39, (uintptr_t)data + 0x8a); patch_32r(code + 0x40, (uintptr_t)data + -0x4); patch_32r(code + 0x47, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0xfc); patch_32r(code + 0x59, (uintptr_t)data + 0xbd); patch_32r(code + 0x60, (uintptr_t)data + -0x4); patch_32r(code + 0x67, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x72, (uintptr_t)data + 0xfc); } void emit__CHECK_CALL_BOUND_METHOD_EXACT_ARGS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_CALL_BOUND_METHOD_EXACT_ARGS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 7: 89 c1 movl %eax, %ecx // 9: f7 d1 notl %ecx // b: 48 63 c9 movslq %ecx, %rcx // e: 48 83 7c cd 00 00 cmpq $0x0, (%rbp,%rcx,8) // 14: 75 1c jne 0x32 <_JIT_ENTRY+0x32> // 16: b9 fe ff ff ff movl $0xfffffffe, %ecx # imm = 0xFFFFFFFE // 1b: 29 c1 subl %eax, %ecx // 1d: 48 63 c1 movslq %ecx, %rax // 20: 48 8b 44 c5 00 movq (%rbp,%rax,8), %rax // 25: 48 8b 40 08 movq 0x8(%rax), %rax // 29: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x30 <_JIT_ENTRY+0x30> // 000000000000002c: R_X86_64_REX_GOTPCRELX PyMethod_Type-0x4 // 30: 74 06 je 0x38 <_JIT_ENTRY+0x38> // 32: ff 25 00 00 00 00 jmpq *(%rip) # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 38: ff 25 00 00 00 00 jmpq *(%rip) # 0x3e <_JIT_ENTRY+0x3e> // 000000000000003a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 38: const unsigned char code_body[56] = { 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc1, 0xf7, 0xd1, 0x48, 0x63, 0xc9, 0x48, 0x83, 0x7c, 0xcd, 0x00, 0x00, 0x75, 0x1c, 0xb9, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc1, 0x48, 0x63, 0xc1, 0x48, 0x8b, 0x44, 0xc5, 0x00, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPARG // 8: &PyMethod_Type+0x0 // 10: JUMP_TARGET const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); patch_64(data + 0x8, (uintptr_t)&PyMethod_Type); patch_64(data + 0x10, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x2c, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0xc); } void emit__CHECK_EG_MATCH( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_EG_MATCH.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 4c 8b 75 f0 movq -0x10(%rbp), %r14 // 8: 48 8b 5d f8 movq -0x8(%rbp), %rbx // c: 4c 89 e7 movq %r12, %rdi // f: 48 89 de movq %rbx, %rsi // 12: ff 15 00 00 00 00 callq *(%rip) # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_GOTPCRELX _PyEval_CheckExceptStarTypeValid-0x4 // 18: 85 c0 testl %eax, %eax // 1a: 78 39 js 0x55 <_JIT_ENTRY+0x55> // 1c: 48 c7 44 24 08 00 00 00 00 movq $0x0, 0x8(%rsp) // 25: 48 c7 44 24 10 00 00 00 00 movq $0x0, 0x10(%rsp) // 2e: 48 8d 54 24 08 leaq 0x8(%rsp), %rdx // 33: 48 8d 4c 24 10 leaq 0x10(%rsp), %rcx // 38: 4c 89 f7 movq %r14, %rdi // 3b: 48 89 de movq %rbx, %rsi // 3e: ff 15 00 00 00 00 callq *(%rip) # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_GOTPCRELX _PyEval_ExceptionGroupMatch-0x4 // 44: 41 89 c7 movl %eax, %r15d // 47: 49 8b 06 movq (%r14), %rax // 4a: 48 85 c0 testq %rax, %rax // 4d: 7e 14 jle 0x63 <_JIT_ENTRY+0x63> // 4f: 85 c0 testl %eax, %eax // 51: 79 2c jns 0x7f <_JIT_ENTRY+0x7f> // 53: eb 35 jmp 0x8a <_JIT_ENTRY+0x8a> // 55: 49 8b 06 movq (%r14), %rax // 58: 48 85 c0 testq %rax, %rax // 5b: 7e 3b jle 0x98 <_JIT_ENTRY+0x98> // 5d: 85 c0 testl %eax, %eax // 5f: 79 53 jns 0xb4 <_JIT_ENTRY+0xb4> // 61: eb 60 jmp 0xc3 <_JIT_ENTRY+0xc3> // 63: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_PC32 .L.str.1-0x4 // 6a: be b0 09 00 00 movl $0x9b0, %esi # imm = 0x9B0 // 6f: 4c 89 f2 movq %r14, %rdx // 72: ff 15 00 00 00 00 callq *(%rip) # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 78: 49 8b 06 movq (%r14), %rax // 7b: 85 c0 testl %eax, %eax // 7d: 78 0b js 0x8a <_JIT_ENTRY+0x8a> // 7f: ff 15 00 00 00 00 callq *(%rip) # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 85: 49 ff 0e decq (%r14) // 88: 74 52 je 0xdc <_JIT_ENTRY+0xdc> // 8a: 48 8b 03 movq (%rbx), %rax // 8d: 48 85 c0 testq %rax, %rax // 90: 7e 5b jle 0xed <_JIT_ENTRY+0xed> // 92: 85 c0 testl %eax, %eax // 94: 79 73 jns 0x109 <_JIT_ENTRY+0x109> // 96: eb 7c jmp 0x114 <_JIT_ENTRY+0x114> // 98: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9f <_JIT_ENTRY+0x9f> // 000000000000009b: R_X86_64_PC32 .L.str.1-0x4 // 9f: be a8 09 00 00 movl $0x9a8, %esi # imm = 0x9A8 // a4: 4c 89 f2 movq %r14, %rdx // a7: ff 15 00 00 00 00 callq *(%rip) # 0xad <_JIT_ENTRY+0xad> // 00000000000000a9: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // ad: 49 8b 06 movq (%r14), %rax // b0: 85 c0 testl %eax, %eax // b2: 78 0f js 0xc3 <_JIT_ENTRY+0xc3> // b4: ff 15 00 00 00 00 callq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ba: 49 ff 0e decq (%r14) // bd: 0f 84 bb 00 00 00 je 0x17e <_JIT_ENTRY+0x17e> // c3: 48 8b 03 movq (%rbx), %rax // c6: 48 85 c0 testq %rax, %rax // c9: 0f 8e c4 00 00 00 jle 0x193 <_JIT_ENTRY+0x193> // cf: 85 c0 testl %eax, %eax // d1: 0f 89 d8 00 00 00 jns 0x1af <_JIT_ENTRY+0x1af> // d7: e9 de 00 00 00 jmp 0x1ba <_JIT_ENTRY+0x1ba> // dc: 4c 89 f7 movq %r14, %rdi // df: ff 15 00 00 00 00 callq *(%rip) # 0xe5 <_JIT_ENTRY+0xe5> // 00000000000000e1: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // e5: 48 8b 03 movq (%rbx), %rax // e8: 48 85 c0 testq %rax, %rax // eb: 7f a5 jg 0x92 <_JIT_ENTRY+0x92> // ed: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf4 <_JIT_ENTRY+0xf4> // 00000000000000f0: R_X86_64_PC32 .L.str.1-0x4 // f4: be b1 09 00 00 movl $0x9b1, %esi # imm = 0x9B1 // f9: 48 89 da movq %rbx, %rdx // fc: ff 15 00 00 00 00 callq *(%rip) # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 102: 48 8b 03 movq (%rbx), %rax // 105: 85 c0 testl %eax, %eax // 107: 78 0b js 0x114 <_JIT_ENTRY+0x114> // 109: ff 15 00 00 00 00 callq *(%rip) # 0x10f <_JIT_ENTRY+0x10f> // 000000000000010b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 10f: 48 ff 0b decq (%rbx) // 112: 74 5a je 0x16e <_JIT_ENTRY+0x16e> // 114: 45 85 ff testl %r15d, %r15d // 117: 0f 88 9d 00 00 00 js 0x1ba <_JIT_ENTRY+0x1ba> // 11d: 48 8b 7c 24 08 movq 0x8(%rsp), %rdi // 122: 48 85 ff testq %rdi, %rdi // 125: 0f 94 c1 sete %cl // 128: 48 8b 44 24 10 movq 0x10(%rsp), %rax // 12d: 48 85 c0 testq %rax, %rax // 130: 0f 95 c2 setne %dl // 133: 30 ca xorb %cl, %dl // 135: 0f 84 9c 00 00 00 je 0x1d7 <_JIT_ENTRY+0x1d7> // 13b: 48 85 ff testq %rdi, %rdi // 13e: 74 7a je 0x1ba <_JIT_ENTRY+0x1ba> // 140: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x147 <_JIT_ENTRY+0x147> // 0000000000000143: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 147: 48 39 cf cmpq %rcx, %rdi // 14a: 74 10 je 0x15c <_JIT_ENTRY+0x15c> // 14c: ff 15 00 00 00 00 callq *(%rip) # 0x152 <_JIT_ENTRY+0x152> // 000000000000014e: R_X86_64_GOTPCRELX PyErr_SetHandledException-0x4 // 152: 48 8b 44 24 10 movq 0x10(%rsp), %rax // 157: 48 8b 4c 24 08 movq 0x8(%rsp), %rcx // 15c: 48 89 45 f0 movq %rax, -0x10(%rbp) // 160: 48 89 4d f8 movq %rcx, -0x8(%rbp) // 164: 48 83 c4 18 addq $0x18, %rsp // 168: ff 25 00 00 00 00 jmpq *(%rip) # 0x16e <_JIT_ENTRY+0x16e> // 000000000000016a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 16e: 48 89 df movq %rbx, %rdi // 171: ff 15 00 00 00 00 callq *(%rip) # 0x177 <_JIT_ENTRY+0x177> // 0000000000000173: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 177: 45 85 ff testl %r15d, %r15d // 17a: 79 a1 jns 0x11d <_JIT_ENTRY+0x11d> // 17c: eb 3c jmp 0x1ba <_JIT_ENTRY+0x1ba> // 17e: 4c 89 f7 movq %r14, %rdi // 181: ff 15 00 00 00 00 callq *(%rip) # 0x187 <_JIT_ENTRY+0x187> // 0000000000000183: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 187: 48 8b 03 movq (%rbx), %rax // 18a: 48 85 c0 testq %rax, %rax // 18d: 0f 8f 3c ff ff ff jg 0xcf <_JIT_ENTRY+0xcf> // 193: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x19a <_JIT_ENTRY+0x19a> // 0000000000000196: R_X86_64_PC32 .L.str.1-0x4 // 19a: be a9 09 00 00 movl $0x9a9, %esi # imm = 0x9A9 // 19f: 48 89 da movq %rbx, %rdx // 1a2: ff 15 00 00 00 00 callq *(%rip) # 0x1a8 <_JIT_ENTRY+0x1a8> // 00000000000001a4: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 1a8: 48 8b 03 movq (%rbx), %rax // 1ab: 85 c0 testl %eax, %eax // 1ad: 78 0b js 0x1ba <_JIT_ENTRY+0x1ba> // 1af: ff 15 00 00 00 00 callq *(%rip) # 0x1b5 <_JIT_ENTRY+0x1b5> // 00000000000001b1: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 1b5: 48 ff 0b decq (%rbx) // 1b8: 74 0a je 0x1c4 <_JIT_ENTRY+0x1c4> // 1ba: 48 83 c4 18 addq $0x18, %rsp // 1be: ff 25 00 00 00 00 jmpq *(%rip) # 0x1c4 <_JIT_ENTRY+0x1c4> // 00000000000001c0: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1c4: 48 89 df movq %rbx, %rdi // 1c7: ff 15 00 00 00 00 callq *(%rip) # 0x1cd <_JIT_ENTRY+0x1cd> // 00000000000001c9: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 1cd: 48 83 c4 18 addq $0x18, %rsp // 1d1: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d7 <_JIT_ENTRY+0x1d7> // 00000000000001d3: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1d7: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1de <_JIT_ENTRY+0x1de> // 00000000000001da: R_X86_64_PC32 .L.str.62-0x4 // 1de: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1e5 <_JIT_ENTRY+0x1e5> // 00000000000001e1: R_X86_64_PC32 .L.str.1-0x4 // 1e5: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ec <_JIT_ENTRY+0x1ec> // 00000000000001e8: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1ec: ba b3 09 00 00 movl $0x9b3, %edx # imm = 0x9B3 // 1f1: ff 15 00 00 00 00 callq *(%rip) # 0x1f7 <_JIT_ENTRY+0x1f7> // 00000000000001f3: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1f7: const unsigned char code_body[503] = { 0x48, 0x83, 0xec, 0x18, 0x4c, 0x8b, 0x75, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x39, 0x48, 0xc7, 0x44, 0x24, 0x08, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc7, 0x44, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x54, 0x24, 0x08, 0x48, 0x8d, 0x4c, 0x24, 0x10, 0x4c, 0x89, 0xf7, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc7, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x14, 0x85, 0xc0, 0x79, 0x2c, 0xeb, 0x35, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x3b, 0x85, 0xc0, 0x79, 0x53, 0xeb, 0x60, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb0, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x52, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x5b, 0x85, 0xc0, 0x79, 0x73, 0xeb, 0x7c, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xa8, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0f, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x0f, 0x84, 0xbb, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x0f, 0x8e, 0xc4, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x89, 0xd8, 0x00, 0x00, 0x00, 0xe9, 0xde, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xa5, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb1, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x5a, 0x45, 0x85, 0xff, 0x0f, 0x88, 0x9d, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x7c, 0x24, 0x08, 0x48, 0x85, 0xff, 0x0f, 0x94, 0xc1, 0x48, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x85, 0xc0, 0x0f, 0x95, 0xc2, 0x30, 0xca, 0x0f, 0x84, 0x9c, 0x00, 0x00, 0x00, 0x48, 0x85, 0xff, 0x74, 0x7a, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0xcf, 0x74, 0x10, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x8b, 0x4c, 0x24, 0x08, 0x48, 0x89, 0x45, 0xf0, 0x48, 0x89, 0x4d, 0xf8, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xff, 0x79, 0xa1, 0xeb, 0x3c, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x0f, 0x8f, 0x3c, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xa9, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0a, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb3, 0x09, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(match == NULL) == (rest == NULL)\x00' // b0: // b0: &_PyEval_CheckExceptStarTypeValid+0x0 // b8: &_PyEval_ExceptionGroupMatch+0x0 // c0: &_Py_NegativeRefcount+0x0 // c8: &_Py_DECREF_DecRefTotal+0x0 // d0: &_Py_Dealloc+0x0 // d8: &_Py_NoneStruct+0x0 // e0: &PyErr_SetHandledException+0x0 // e8: CONTINUE // f0: ERROR_TARGET // f8: &__assert_fail+0x0 const unsigned char data_body[256] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x6d, 0x61, 0x74, 0x63, 0x68, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x28, 0x72, 0x65, 0x73, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb0, (uintptr_t)&_PyEval_CheckExceptStarTypeValid); patch_64(data + 0xb8, (uintptr_t)&_PyEval_ExceptionGroupMatch); patch_64(data + 0xc0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xc8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xd0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd8, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0xe0, (uintptr_t)&PyErr_SetHandledException); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, instruction_starts[instruction->error_target]); patch_64(data + 0xf8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x40, (uintptr_t)data + 0xb4); patch_32r(code + 0x66, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x74, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x81, (uintptr_t)data + 0xc4); patch_32r(code + 0x9b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xa9, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0xe1, (uintptr_t)data + 0xcc); patch_32r(code + 0xf0, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xfe, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x10b, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x143, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x14e, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x16a, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x173, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x183, (uintptr_t)data + 0xcc); patch_32r(code + 0x196, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1a4, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x1b1, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x1c0, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x1c9, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x1d3, (uintptr_t)data + 0xec); patch_32r(code + 0x1da, (uintptr_t)data + 0x8a); patch_32r(code + 0x1e1, (uintptr_t)data + -0x4); patch_32r(code + 0x1e8, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1f3, (uintptr_t)data + 0xf4); } void emit__CHECK_EXC_MATCH( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_EXC_MATCH.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f0 movq -0x10(%rbp), %r14 // 5: 49 8b 46 08 movq 0x8(%r14), %rax // 9: f6 80 ab 00 00 00 40 testb $0x40, 0xab(%rax) // 10: 0f 84 d9 00 00 00 je 0xef <_JIT_ENTRY+0xef> // 16: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 1a: 4c 89 e7 movq %r12, %rdi // 1d: 48 89 de movq %rbx, %rsi // 20: ff 15 00 00 00 00 callq *(%rip) # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX _PyEval_CheckExceptTypeValid-0x4 // 26: 85 c0 testl %eax, %eax // 28: 78 1d js 0x47 <_JIT_ENTRY+0x47> // 2a: 4c 89 f7 movq %r14, %rdi // 2d: 48 89 de movq %rbx, %rsi // 30: ff 15 00 00 00 00 callq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX PyErr_GivenExceptionMatches-0x4 // 36: 41 89 c6 movl %eax, %r14d // 39: 48 8b 03 movq (%rbx), %rax // 3c: 48 85 c0 testq %rax, %rax // 3f: 7e 19 jle 0x5a <_JIT_ENTRY+0x5a> // 41: 85 c0 testl %eax, %eax // 43: 79 31 jns 0x76 <_JIT_ENTRY+0x76> // 45: eb 3a jmp 0x81 <_JIT_ENTRY+0x81> // 47: 48 8b 03 movq (%rbx), %rax // 4a: 48 85 c0 testq %rax, %rax // 4d: 7e 49 jle 0x98 <_JIT_ENTRY+0x98> // 4f: 85 c0 testl %eax, %eax // 51: 79 61 jns 0xb4 <_JIT_ENTRY+0xb4> // 53: 58 popq %rax // 54: ff 25 00 00 00 00 jmpq *(%rip) # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 5a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_PC32 .L.str.1-0x4 // 61: be c9 09 00 00 movl $0x9c9, %esi # imm = 0x9C9 // 66: 48 89 da movq %rbx, %rdx // 69: ff 15 00 00 00 00 callq *(%rip) # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 6f: 48 8b 03 movq (%rbx), %rax // 72: 85 c0 testl %eax, %eax // 74: 78 0b js 0x81 <_JIT_ENTRY+0x81> // 76: ff 15 00 00 00 00 callq *(%rip) # 0x7c <_JIT_ENTRY+0x7c> // 0000000000000078: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 7c: 48 ff 0b decq (%rbx) // 7f: 74 4e je 0xcf <_JIT_ENTRY+0xcf> // 81: 45 85 f6 testl %r14d, %r14d // 84: 75 57 jne 0xdd <_JIT_ENTRY+0xdd> // 86: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 8d: 48 89 45 f8 movq %rax, -0x8(%rbp) // 91: 58 popq %rax // 92: ff 25 00 00 00 00 jmpq *(%rip) # 0x98 <_JIT_ENTRY+0x98> // 0000000000000094: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 98: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9f <_JIT_ENTRY+0x9f> // 000000000000009b: R_X86_64_PC32 .L.str.1-0x4 // 9f: be c5 09 00 00 movl $0x9c5, %esi # imm = 0x9C5 // a4: 48 89 da movq %rbx, %rdx // a7: ff 15 00 00 00 00 callq *(%rip) # 0xad <_JIT_ENTRY+0xad> // 00000000000000a9: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // ad: 48 8b 03 movq (%rbx), %rax // b0: 85 c0 testl %eax, %eax // b2: 78 9f js 0x53 <_JIT_ENTRY+0x53> // b4: ff 15 00 00 00 00 callq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ba: 48 ff 0b decq (%rbx) // bd: 75 94 jne 0x53 <_JIT_ENTRY+0x53> // bf: 48 89 df movq %rbx, %rdi // c2: ff 15 00 00 00 00 callq *(%rip) # 0xc8 <_JIT_ENTRY+0xc8> // 00000000000000c4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // c8: 58 popq %rax // c9: ff 25 00 00 00 00 jmpq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // cf: 48 89 df movq %rbx, %rdi // d2: ff 15 00 00 00 00 callq *(%rip) # 0xd8 <_JIT_ENTRY+0xd8> // 00000000000000d4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // d8: 45 85 f6 testl %r14d, %r14d // db: 74 a9 je 0x86 <_JIT_ENTRY+0x86> // dd: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xe4 <_JIT_ENTRY+0xe4> // 00000000000000e0: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // e4: 48 89 45 f8 movq %rax, -0x8(%rbp) // e8: 58 popq %rax // e9: ff 25 00 00 00 00 jmpq *(%rip) # 0xef <_JIT_ENTRY+0xef> // 00000000000000eb: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ef: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf6 <_JIT_ENTRY+0xf6> // 00000000000000f2: R_X86_64_PC32 .L.str.63-0x4 // f6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xfd <_JIT_ENTRY+0xfd> // 00000000000000f9: R_X86_64_PC32 .L.str.1-0x4 // fd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x104 <_JIT_ENTRY+0x104> // 0000000000000100: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 104: ba c3 09 00 00 movl $0x9c3, %edx # imm = 0x9C3 // 109: ff 15 00 00 00 00 callq *(%rip) # 0x10f <_JIT_ENTRY+0x10f> // 000000000000010b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 10f: const unsigned char code_body[271] = { 0x50, 0x4c, 0x8b, 0x75, 0xf0, 0x49, 0x8b, 0x46, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x40, 0x0f, 0x84, 0xd9, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x1d, 0x4c, 0x89, 0xf7, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x19, 0x85, 0xc0, 0x79, 0x31, 0xeb, 0x3a, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x49, 0x85, 0xc0, 0x79, 0x61, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xc9, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x4e, 0x45, 0x85, 0xf6, 0x75, 0x57, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xc5, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x9f, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x94, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x74, 0xa9, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc3, 0x09, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyExceptionInstance_Check(left)\x00' // ae: 00 00 // b0: &_PyEval_CheckExceptTypeValid+0x0 // b8: &PyErr_GivenExceptionMatches+0x0 // c0: ERROR_TARGET // c8: &_Py_NegativeRefcount+0x0 // d0: &_Py_DECREF_DecRefTotal+0x0 // d8: &_Py_FalseStruct+0x0 // e0: CONTINUE // e8: &_Py_Dealloc+0x0 // f0: &_Py_TrueStruct+0x0 // f8: &__assert_fail+0x0 const unsigned char data_body[256] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6c, 0x65, 0x66, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb0, (uintptr_t)&_PyEval_CheckExceptTypeValid); patch_64(data + 0xb8, (uintptr_t)&PyErr_GivenExceptionMatches); patch_64(data + 0xc0, instruction_starts[instruction->error_target]); patch_64(data + 0xc8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xd0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xd8, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0xe0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xf0, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0xf8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0xbc); patch_32r(code + 0x5d, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x6b, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x78, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x94, (uintptr_t)data + 0xdc); patch_32r(code + 0x9b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xa9, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xc4, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0xcb, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0xd4, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0xe0, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0xeb, (uintptr_t)data + 0xdc); patch_32r(code + 0xf2, (uintptr_t)data + 0x8a); patch_32r(code + 0xf9, (uintptr_t)data + -0x4); patch_32r(code + 0x100, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x10b, (uintptr_t)data + 0xf4); } void emit__CHECK_FUNCTION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_FUNCTION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 49 8b 45 10 movq 0x10(%r13), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // f: 75 1a jne 0x2b <_JIT_ENTRY+0x2b> // 11: 8b 80 88 00 00 00 movl 0x88(%rax), %eax // 17: 3b 05 00 00 00 00 cmpl (%rip), %eax # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 1d: 75 06 jne 0x25 <_JIT_ENTRY+0x25> // 1f: ff 25 00 00 00 00 jmpq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 25: ff 25 00 00 00 00 jmpq *(%rip) # 0x2b <_JIT_ENTRY+0x2b> // 0000000000000027: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 2b: 50 pushq %rax // 2c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_PC32 .L.str.33-0x4 // 33: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_PC32 .L.str.1-0x4 // 3a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 41: ba f8 10 00 00 movl $0x10f8, %edx # imm = 0x10F8 // 46: ff 15 00 00 00 00 callq *(%rip) # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCRELX __assert_fail-0x4 // 4c: const unsigned char code_body[76] = { 0x49, 0x8b, 0x45, 0x10, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1a, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf8, 0x10, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyFunction_Check(frame->f_funcobj)\x00' // b1: 00 00 00 00 00 00 00 // b8: &PyFunction_Type+0x0 // c0: OPERAND // c8: CONTINUE // d0: JUMP_TARGET // d8: &__assert_fail+0x0 const unsigned char data_body[224] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x66, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x6f, 0x62, 0x6a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, (uintptr_t)&PyFunction_Type); patch_64(data + 0xc0, instruction->operand); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, instruction_starts[instruction->jump_target]); patch_64(data + 0xd8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x19, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x27, (uintptr_t)data + 0xcc); patch_32r(code + 0x2f, (uintptr_t)data + 0x8a); patch_32r(code + 0x36, (uintptr_t)data + -0x4); patch_32r(code + 0x3d, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0xd4); } void emit__CHECK_FUNCTION_EXACT_ARGS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_FUNCTION_EXACT_ARGS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 7: b9 fe ff ff ff movl $0xfffffffe, %ecx # imm = 0xFFFFFFFE // c: 29 c1 subl %eax, %ecx // e: 48 63 c9 movslq %ecx, %rcx // 11: 48 8b 4c cd 00 movq (%rbp,%rcx,8), %rcx // 16: 48 8b 51 08 movq 0x8(%rcx), %rdx // 1a: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 21: 75 2d jne 0x50 <_JIT_ENTRY+0x50> // 23: 8b 91 88 00 00 00 movl 0x88(%rcx), %edx // 29: 3b 15 00 00 00 00 cmpl (%rip), %edx # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 2f: 75 1f jne 0x50 <_JIT_ENTRY+0x50> // 31: 89 c2 movl %eax, %edx // 33: f7 d2 notl %edx // 35: 48 63 d2 movslq %edx, %rdx // 38: 48 8b 49 30 movq 0x30(%rcx), %rcx // 3c: 48 83 7c d5 00 01 cmpq $0x1, (%rbp,%rdx,8) // 42: 83 d8 ff sbbl $-0x1, %eax // 45: 39 41 34 cmpl %eax, 0x34(%rcx) // 48: 75 06 jne 0x50 <_JIT_ENTRY+0x50> // 4a: ff 25 00 00 00 00 jmpq *(%rip) # 0x50 <_JIT_ENTRY+0x50> // 000000000000004c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 50: ff 25 00 00 00 00 jmpq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 56: const unsigned char code_body[86] = { 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xb9, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc1, 0x48, 0x63, 0xc9, 0x48, 0x8b, 0x4c, 0xcd, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x2d, 0x8b, 0x91, 0x88, 0x00, 0x00, 0x00, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1f, 0x89, 0xc2, 0xf7, 0xd2, 0x48, 0x63, 0xd2, 0x48, 0x8b, 0x49, 0x30, 0x48, 0x83, 0x7c, 0xd5, 0x00, 0x01, 0x83, 0xd8, 0xff, 0x39, 0x41, 0x34, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPARG // 8: &PyFunction_Type+0x0 // 10: OPERAND // 18: CONTINUE // 20: JUMP_TARGET const unsigned char data_body[40] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); patch_64(data + 0x8, (uintptr_t)&PyFunction_Type); patch_64(data + 0x10, instruction->operand); patch_64(data + 0x18, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x20, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1d, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x4c, (uintptr_t)data + 0x14); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0x1c); } void emit__CHECK_FUNCTION_VERSION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_FUNCTION_VERSION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 7: 48 c7 c1 fe ff ff ff movq $-0x2, %rcx // e: 48 29 c1 subq %rax, %rcx // 11: 48 8b 44 cd 00 movq (%rbp,%rcx,8), %rax // 16: 48 8b 48 08 movq 0x8(%rax), %rcx // 1a: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 21: 75 14 jne 0x37 <_JIT_ENTRY+0x37> // 23: 8b 80 88 00 00 00 movl 0x88(%rax), %eax // 29: 3b 05 00 00 00 00 cmpl (%rip), %eax # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 2f: 75 06 jne 0x37 <_JIT_ENTRY+0x37> // 31: ff 25 00 00 00 00 jmpq *(%rip) # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 37: ff 25 00 00 00 00 jmpq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 3d: const unsigned char code_body[61] = { 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, 0x48, 0x29, 0xc1, 0x48, 0x8b, 0x44, 0xcd, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x14, 0x8b, 0x80, 0x88, 0x00, 0x00, 0x00, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPARG // 8: &PyFunction_Type+0x0 // 10: OPERAND // 18: CONTINUE // 20: JUMP_TARGET const unsigned char data_body[40] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); patch_64(data + 0x8, (uintptr_t)&PyFunction_Type); patch_64(data + 0x10, instruction->operand); patch_64(data + 0x18, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x20, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1d, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0x14); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0x1c); } void emit__CHECK_IS_NOT_PY_CALLABLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_IS_NOT_PY_CALLABLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 7: 48 c7 c1 fe ff ff ff movq $-0x2, %rcx // e: 48 29 c1 subq %rax, %rcx // 11: 48 8b 44 cd 00 movq (%rbp,%rcx,8), %rax // 16: 48 8b 40 08 movq 0x8(%rax), %rax // 1a: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 21: 74 0f je 0x32 <_JIT_ENTRY+0x32> // 23: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_REX_GOTPCRELX PyMethod_Type-0x4 // 2a: 74 06 je 0x32 <_JIT_ENTRY+0x32> // 2c: ff 25 00 00 00 00 jmpq *(%rip) # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 32: ff 25 00 00 00 00 jmpq *(%rip) # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 38: const unsigned char code_body[56] = { 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, 0x48, 0x29, 0xc1, 0x48, 0x8b, 0x44, 0xcd, 0x00, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x0f, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPARG // 8: &PyFunction_Type+0x0 // 10: &PyMethod_Type+0x0 // 18: CONTINUE // 20: JUMP_TARGET const unsigned char data_body[40] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); patch_64(data + 0x8, (uintptr_t)&PyFunction_Type); patch_64(data + 0x10, (uintptr_t)&PyMethod_Type); patch_64(data + 0x18, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x20, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1d, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x26, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x14); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x1c); } void emit__CHECK_MANAGED_OBJECT_HAS_VALUES( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_MANAGED_OBJECT_HAS_VALUES.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 83 b9 20 01 00 00 00 cmpq $0x0, 0x120(%rcx) // 11: 79 2c jns 0x3f <_JIT_ENTRY+0x3f> // 13: 48 8b 91 a8 00 00 00 movq 0xa8(%rcx), %rdx // 1a: f6 c2 04 testb $0x4, %dl // 1d: 74 40 je 0x5f <_JIT_ENTRY+0x5f> // 1f: f6 c2 10 testb $0x10, %dl // 22: 74 5b je 0x7f <_JIT_ENTRY+0x7f> // 24: 48 83 79 20 10 cmpq $0x10, 0x20(%rcx) // 29: 75 74 jne 0x9f <_JIT_ENTRY+0x9f> // 2b: 80 78 13 00 cmpb $0x0, 0x13(%rax) // 2f: 74 07 je 0x38 <_JIT_ENTRY+0x38> // 31: 58 popq %rax // 32: ff 25 00 00 00 00 jmpq *(%rip) # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 38: 58 popq %rax // 39: ff 25 00 00 00 00 jmpq *(%rip) # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 3f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x46 <_JIT_ENTRY+0x46> // 0000000000000042: R_X86_64_PC32 .L.str.48-0x4 // 46: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_PC32 .L.str.1-0x4 // 4d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 54: ba bb 07 00 00 movl $0x7bb, %edx # imm = 0x7BB // 59: ff 15 00 00 00 00 callq *(%rip) # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 5f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_PC32 .L.str.49-0x4 // 66: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_PC32 .L.str.1-0x4 // 6d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 74: ba bc 07 00 00 movl $0x7bc, %edx # imm = 0x7BC // 79: ff 15 00 00 00 00 callq *(%rip) # 0x7f <_JIT_ENTRY+0x7f> // 000000000000007b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 7f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x86 <_JIT_ENTRY+0x86> // 0000000000000082: R_X86_64_PC32 .L.str.148-0x4 // 86: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_PC32 .L.str.118-0x4 // 8d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x94 <_JIT_ENTRY+0x94> // 0000000000000090: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // 94: ba bb 02 00 00 movl $0x2bb, %edx # imm = 0x2BB // 99: ff 15 00 00 00 00 callq *(%rip) # 0x9f <_JIT_ENTRY+0x9f> // 000000000000009b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 9f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa6 <_JIT_ENTRY+0xa6> // 00000000000000a2: R_X86_64_PC32 .L.str.149-0x4 // a6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xad <_JIT_ENTRY+0xad> // 00000000000000a9: R_X86_64_PC32 .L.str.118-0x4 // ad: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xb4 <_JIT_ENTRY+0xb4> // 00000000000000b0: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // b4: ba bc 02 00 00 movl $0x2bc, %edx # imm = 0x2BC // b9: ff 15 00 00 00 00 callq *(%rip) # 0xbf <_JIT_ENTRY+0xbf> // 00000000000000bb: R_X86_64_GOTPCRELX __assert_fail-0x4 // bf: const unsigned char code_body[191] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x83, 0xb9, 0x20, 0x01, 0x00, 0x00, 0x00, 0x79, 0x2c, 0x48, 0x8b, 0x91, 0xa8, 0x00, 0x00, 0x00, 0xf6, 0xc2, 0x04, 0x74, 0x40, 0xf6, 0xc2, 0x10, 0x74, 0x5b, 0x48, 0x83, 0x79, 0x20, 0x10, 0x75, 0x74, 0x80, 0x78, 0x13, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbb, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbb, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(owner)->tp_dictoffset < 0\x00Py_TYPE(owner)->tp_flags & Py_TPFLAGS_INLINE_VALUES\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00PyDictValues *_PyObject_InlineValues(PyObject *)\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00Py_TYPE(obj)->tp_basicsize == sizeof(PyObject)\x00' // 1bc: 00 00 00 00 // 1c0: CONTINUE // 1c8: JUMP_TARGET // 1d0: &__assert_fail+0x0 const unsigned char data_body[472] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3c, 0x20, 0x30, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1c0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1c8, instruction_starts[instruction->jump_target]); patch_64(data + 0x1d0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x1bc); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x1c4); patch_32r(code + 0x42, (uintptr_t)data + 0x8a); patch_32r(code + 0x49, (uintptr_t)data + -0x4); patch_32r(code + 0x50, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x5b, (uintptr_t)data + 0x1cc); patch_32r(code + 0x62, (uintptr_t)data + 0xac); patch_32r(code + 0x69, (uintptr_t)data + -0x4); patch_32r(code + 0x70, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x7b, (uintptr_t)data + 0x1cc); patch_32r(code + 0x82, (uintptr_t)data + 0x158); patch_32r(code + 0x89, (uintptr_t)data + 0xe0); patch_32r(code + 0x90, (uintptr_t)data + 0x127); patch_x86_64_32rx(code + 0x9b, (uintptr_t)data + 0x1cc); patch_32r(code + 0xa2, (uintptr_t)data + 0x189); patch_32r(code + 0xa9, (uintptr_t)data + 0xe0); patch_32r(code + 0xb0, (uintptr_t)data + 0x127); patch_x86_64_32rx(code + 0xbb, (uintptr_t)data + 0x1cc); } void emit__CHECK_METHOD_VERSION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_METHOD_VERSION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 7: b9 fe ff ff ff movl $0xfffffffe, %ecx # imm = 0xFFFFFFFE // c: 29 c1 subl %eax, %ecx // e: 48 63 c9 movslq %ecx, %rcx // 11: 48 8b 4c cd 00 movq (%rbp,%rcx,8), %rcx // 16: 48 8b 51 08 movq 0x8(%rcx), %rdx // 1a: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_REX_GOTPCRELX PyMethod_Type-0x4 // 21: 75 2b jne 0x4e <_JIT_ENTRY+0x4e> // 23: 48 8b 49 10 movq 0x10(%rcx), %rcx // 27: 48 8b 51 08 movq 0x8(%rcx), %rdx // 2b: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 32: 75 1a jne 0x4e <_JIT_ENTRY+0x4e> // 34: 8b 89 88 00 00 00 movl 0x88(%rcx), %ecx // 3a: 3b 0d 00 00 00 00 cmpl (%rip), %ecx # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 40: 75 0c jne 0x4e <_JIT_ENTRY+0x4e> // 42: f7 d0 notl %eax // 44: 48 98 cltq // 46: 48 83 7c c5 00 00 cmpq $0x0, (%rbp,%rax,8) // 4c: 74 06 je 0x54 <_JIT_ENTRY+0x54> // 4e: ff 25 00 00 00 00 jmpq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 54: ff 25 00 00 00 00 jmpq *(%rip) # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 54: const unsigned char code_body[84] = { 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xb9, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc1, 0x48, 0x63, 0xc9, 0x48, 0x8b, 0x4c, 0xcd, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x2b, 0x48, 0x8b, 0x49, 0x10, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1a, 0x8b, 0x89, 0x88, 0x00, 0x00, 0x00, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x0c, 0xf7, 0xd0, 0x48, 0x98, 0x48, 0x83, 0x7c, 0xc5, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPARG // 8: &PyMethod_Type+0x0 // 10: &PyFunction_Type+0x0 // 18: OPERAND // 20: JUMP_TARGET const unsigned char data_body[40] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); patch_64(data + 0x8, (uintptr_t)&PyMethod_Type); patch_64(data + 0x10, (uintptr_t)&PyFunction_Type); patch_64(data + 0x18, instruction->operand); patch_64(data + 0x20, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1d, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0x14); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0x1c); } void emit__CHECK_PEP_523( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_PEP_523.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 49 8b 44 24 10 movq 0x10(%r12), %rax // 5: 48 83 b8 20 21 00 00 00 cmpq $0x0, 0x2120(%rax) // d: 74 06 je 0x15 <_JIT_ENTRY+0x15> // f: ff 25 00 00 00 00 jmpq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 15: ff 25 00 00 00 00 jmpq *(%rip) # 0x1b <_JIT_ENTRY+0x1b> // 0000000000000017: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 15: const unsigned char code_body[21] = { 0x49, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x83, 0xb8, 0x20, 0x21, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: JUMP_TARGET const unsigned char data_body[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + -0x4); } void emit__CHECK_PERIODIC( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_PERIODIC.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 44 24 18 movq 0x18(%r12), %rax // 6: 84 c0 testb %al, %al // 8: 74 2f je 0x39 <_JIT_ENTRY+0x39> // a: 4c 89 e7 movq %r12, %rdi // d: ff 15 00 00 00 00 callq *(%rip) # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_GOTPCRELX _Py_HandlePending-0x4 // 13: 85 c0 testl %eax, %eax // 15: 74 22 je 0x39 <_JIT_ENTRY+0x39> // 17: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x1e <_JIT_ENTRY+0x1e> // 000000000000001a: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 1e: 49 89 84 24 10 01 00 00 movq %rax, 0x110(%r12) // 26: 4c 29 ed subq %r13, %rbp // 29: 48 83 c5 b8 addq $-0x48, %rbp // 2d: 48 c1 ed 03 shrq $0x3, %rbp // 31: 41 89 6d 40 movl %ebp, 0x40(%r13) // 35: 31 c0 xorl %eax, %eax // 37: 59 popq %rcx // 38: c3 retq // 39: 58 popq %rax // 3a: ff 25 00 00 00 00 jmpq *(%rip) # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 3a: const unsigned char code_body[58] = { 0x50, 0x49, 0x8b, 0x44, 0x24, 0x18, 0x84, 0xc0, 0x74, 0x2f, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x22, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x31, 0xc0, 0x59, 0xc3, 0x58, }; // 0: // 0: &_Py_HandlePending+0x0 // 8: EXECUTOR const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&_Py_HandlePending); patch_64(data + 0x8, (uintptr_t)executor); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1a, (uintptr_t)data + 0x4); } void emit__CHECK_STACK_SPACE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_STACK_SPACE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 49 8b 8c 24 f0 00 00 00 movq 0xf0(%r12), %rcx // 8: 49 8b 84 24 f8 00 00 00 movq 0xf8(%r12), %rax // 10: 48 85 c9 testq %rcx, %rcx // 13: 74 3d je 0x52 <_JIT_ENTRY+0x52> // 15: 48 85 c0 testq %rax, %rax // 18: 74 43 je 0x5d <_JIT_ENTRY+0x5d> // 1a: 0f b7 15 00 00 00 00 movzwl (%rip), %edx # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 21: 48 c7 c6 fe ff ff ff movq $-0x2, %rsi // 28: 48 29 d6 subq %rdx, %rsi // 2b: 48 8b 54 f5 00 movq (%rbp,%rsi,8), %rdx // 30: 48 8b 52 30 movq 0x30(%rdx), %rdx // 34: 48 63 52 4c movslq 0x4c(%rdx), %rdx // 38: 48 29 c8 subq %rcx, %rax // 3b: 48 c1 f8 03 sarq $0x3, %rax // 3f: 48 39 d0 cmpq %rdx, %rax // 42: 7e 13 jle 0x57 <_JIT_ENTRY+0x57> // 44: 41 83 7c 24 2c 01 cmpl $0x1, 0x2c(%r12) // 4a: 7e 0b jle 0x57 <_JIT_ENTRY+0x57> // 4c: ff 25 00 00 00 00 jmpq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 52: 48 85 c0 testq %rax, %rax // 55: 75 06 jne 0x5d <_JIT_ENTRY+0x5d> // 57: ff 25 00 00 00 00 jmpq *(%rip) # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 5d: 50 pushq %rax // 5e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_PC32 .L.str.160-0x4 // 65: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_PC32 .L.str.109-0x4 // 6c: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyThreadState_HasStackSpace-0x4 // 73: ba 05 01 00 00 movl $0x105, %edx # imm = 0x105 // 78: ff 15 00 00 00 00 callq *(%rip) # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_GOTPCRELX __assert_fail-0x4 // 7e: const unsigned char code_body[126] = { 0x49, 0x8b, 0x8c, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x84, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x3d, 0x48, 0x85, 0xc0, 0x74, 0x43, 0x0f, 0xb7, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc7, 0xc6, 0xfe, 0xff, 0xff, 0xff, 0x48, 0x29, 0xd6, 0x48, 0x8b, 0x54, 0xf5, 0x00, 0x48, 0x8b, 0x52, 0x30, 0x48, 0x63, 0x52, 0x4c, 0x48, 0x29, 0xc8, 0x48, 0xc1, 0xf8, 0x03, 0x48, 0x39, 0xd0, 0x7e, 0x13, 0x41, 0x83, 0x7c, 0x24, 0x2c, 0x01, 0x7e, 0x0b, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x05, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00(tstate->datastack_top == NULL && tstate->datastack_limit == NULL) || (tstate->datastack_top != NULL && tstate->datastack_limit != NULL)\x00_Bool _PyThreadState_HasStackSpace(PyThreadState *, int)\x00' // 108: // 108: OPARG // 110: CONTINUE // 118: JUMP_TARGET // 120: &__assert_fail+0x0 const unsigned char data_body[296] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x20, 0x26, 0x26, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x20, 0x26, 0x26, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x5f, 0x42, 0x6f, 0x6f, 0x6c, 0x20, 0x5f, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x48, 0x61, 0x73, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x108, instruction->oparg); patch_64(data + 0x110, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x118, instruction_starts[instruction->jump_target]); patch_64(data + 0x120, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x1d, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0x114); patch_32r(code + 0x61, (uintptr_t)data + 0x42); patch_32r(code + 0x68, (uintptr_t)data + -0x4); patch_32r(code + 0x6f, (uintptr_t)data + 0xcb); patch_x86_64_32rx(code + 0x7a, (uintptr_t)data + 0x11c); } void emit__CHECK_STACK_SPACE_OPERAND( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_STACK_SPACE_OPERAND.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 83 3d 00 00 00 00 00 cmpl $0x0, (%rip) # 0x8 <_JIT_ENTRY+0x8> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPERAND-0x5 // 8: 78 48 js 0x52 <_JIT_ENTRY+0x52> // a: 49 8b 8c 24 f0 00 00 00 movq 0xf0(%r12), %rcx // 12: 49 8b 84 24 f8 00 00 00 movq 0xf8(%r12), %rax // 1a: 48 85 c9 testq %rcx, %rcx // 1d: 74 27 je 0x46 <_JIT_ENTRY+0x46> // 1f: 48 85 c0 testq %rax, %rax // 22: 74 4e je 0x72 <_JIT_ENTRY+0x72> // 24: 48 63 15 00 00 00 00 movslq (%rip), %rdx # 0x2b <_JIT_ENTRY+0x2b> // 0000000000000027: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 2b: 48 29 c8 subq %rcx, %rax // 2e: 48 c1 f8 03 sarq $0x3, %rax // 32: 48 39 d0 cmpq %rdx, %rax // 35: 7e 14 jle 0x4b <_JIT_ENTRY+0x4b> // 37: 41 83 7c 24 2c 01 cmpl $0x1, 0x2c(%r12) // 3d: 7e 0c jle 0x4b <_JIT_ENTRY+0x4b> // 3f: 58 popq %rax // 40: ff 25 00 00 00 00 jmpq *(%rip) # 0x46 <_JIT_ENTRY+0x46> // 0000000000000042: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 46: 48 85 c0 testq %rax, %rax // 49: 75 27 jne 0x72 <_JIT_ENTRY+0x72> // 4b: 58 popq %rax // 4c: ff 25 00 00 00 00 jmpq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 52: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_PC32 .L.str.105-0x4 // 59: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_PC32 .L.str.1-0x4 // 60: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 67: ba 9d 10 00 00 movl $0x109d, %edx # imm = 0x109D // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 72: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_PC32 .L.str.160-0x4 // 79: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_PC32 .L.str.109-0x4 // 80: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyThreadState_HasStackSpace-0x4 // 87: ba 05 01 00 00 movl $0x105, %edx # imm = 0x105 // 8c: ff 15 00 00 00 00 callq *(%rip) # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 92: const unsigned char code_body[146] = { 0x50, 0x83, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x48, 0x49, 0x8b, 0x8c, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x84, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc9, 0x74, 0x27, 0x48, 0x85, 0xc0, 0x74, 0x4e, 0x48, 0x63, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x29, 0xc8, 0x48, 0xc1, 0xf8, 0x03, 0x48, 0x39, 0xd0, 0x7e, 0x14, 0x41, 0x83, 0x7c, 0x24, 0x2c, 0x01, 0x7e, 0x0c, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x75, 0x27, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9d, 0x10, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x05, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00framesize <= INT_MAX\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00(tstate->datastack_top == NULL && tstate->datastack_limit == NULL) || (tstate->datastack_top != NULL && tstate->datastack_limit != NULL)\x00_Bool _PyThreadState_HasStackSpace(PyThreadState *, int)\x00' // 1ab: 00 00 00 00 00 // 1b0: OPERAND // 1b8: CONTINUE // 1c0: JUMP_TARGET // 1c8: &__assert_fail+0x0 const unsigned char data_body[464] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3c, 0x3d, 0x20, 0x49, 0x4e, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x20, 0x26, 0x26, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x20, 0x26, 0x26, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x29, 0x00, 0x5f, 0x42, 0x6f, 0x6f, 0x6c, 0x20, 0x5f, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x5f, 0x48, 0x61, 0x73, 0x53, 0x74, 0x61, 0x63, 0x6b, 0x53, 0x70, 0x61, 0x63, 0x65, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1b0, instruction->operand); patch_64(data + 0x1b8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1c0, instruction_starts[instruction->jump_target]); patch_64(data + 0x1c8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + 0x1ab); patch_32r(code + 0x27, (uintptr_t)data + 0x1ac); patch_x86_64_32rx(code + 0x42, (uintptr_t)data + 0x1b4); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0x1bc); patch_32r(code + 0x55, (uintptr_t)data + 0x8a); patch_32r(code + 0x5c, (uintptr_t)data + -0x4); patch_32r(code + 0x63, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x1c4); patch_32r(code + 0x75, (uintptr_t)data + 0xe5); patch_32r(code + 0x7c, (uintptr_t)data + 0x9f); patch_32r(code + 0x83, (uintptr_t)data + 0x16e); patch_x86_64_32rx(code + 0x8e, (uintptr_t)data + 0x1c4); } void emit__CHECK_VALIDITY( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_VALIDITY.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 7: 80 78 22 00 cmpb $0x0, 0x22(%rax) // b: 74 06 je 0x13 <_JIT_ENTRY+0x13> // d: ff 25 00 00 00 00 jmpq *(%rip) # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: const unsigned char code_body[25] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x78, 0x22, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: EXECUTOR // 8: CONTINUE // 10: JUMP_TARGET const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)executor); patch_64(data + 0x8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x10, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0xc); } void emit__CHECK_VALIDITY_AND_SET_IP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CHECK_VALIDITY_AND_SET_IP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 7: 80 78 22 00 cmpb $0x0, 0x22(%rax) // b: 74 11 je 0x1e <_JIT_ENTRY+0x1e> // d: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x14 <_JIT_ENTRY+0x14> // 0000000000000010: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 14: 49 89 45 38 movq %rax, 0x38(%r13) // 18: ff 25 00 00 00 00 jmpq *(%rip) # 0x1e <_JIT_ENTRY+0x1e> // 000000000000001a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1e: ff 25 00 00 00 00 jmpq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 24: const unsigned char code_body[36] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x78, 0x22, 0x00, 0x74, 0x11, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x45, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: EXECUTOR // 8: OPERAND // 10: CONTINUE // 18: JUMP_TARGET const unsigned char data_body[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)executor); patch_64(data + 0x8, instruction->operand); patch_64(data + 0x10, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x18, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x10, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x1a, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0x14); } void emit__COLD_EXIT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_COLD_EXIT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 49 8b 4d 00 movq (%r13), %rcx // 8: 48 8b 41 08 movq 0x8(%rcx), %rax // c: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 13: 0f 85 b6 01 00 00 jne 0x1cf <_JIT_ENTRY+0x1cf> // 19: 49 8b 9c 24 10 01 00 00 movq 0x110(%r12), %rbx // 21: 44 0f b7 35 00 00 00 00 movzwl (%rip), %r14d # 0x29 <_JIT_ENTRY+0x29> // 0000000000000025: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 29: 44 89 f2 movl %r14d, %edx // 2c: c1 e2 04 shll $0x4, %edx // 2f: 8b 84 13 80 00 00 00 movl 0x80(%rbx,%rdx), %eax // 36: 48 8d 04 41 leaq (%rcx,%rax,2), %rax // 3a: 48 05 c8 00 00 00 addq $0xc8, %rax // 40: 48 8d 34 13 leaq (%rbx,%rdx), %rsi // 44: 48 81 c6 84 00 00 00 addq $0x84, %rsi // 4b: 44 0f b7 bc 13 84 00 00 00 movzwl 0x84(%rbx,%rdx), %r15d // 54: 41 83 ff 10 cmpl $0x10, %r15d // 58: 73 5f jae 0xb9 <_JIT_ENTRY+0xb9> // 5a: 80 38 46 cmpb $0x46, (%rax) // 5d: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // 62: 75 7b jne 0xdf <_JIT_ENTRY+0xdf> // 64: 48 8b 89 98 00 00 00 movq 0x98(%rcx), %rcx // 6b: 0f b6 40 01 movzbl 0x1(%rax), %eax // 6f: 4c 8b 7c c1 08 movq 0x8(%rcx,%rax,8), %r15 // 74: 4c 89 7c 24 10 movq %r15, 0x10(%rsp) // 79: 41 8b 07 movl (%r15), %eax // 7c: ff c0 incl %eax // 7e: 74 09 je 0x89 <_JIT_ENTRY+0x89> // 80: 41 89 07 movl %eax, (%r15) // 83: ff 15 00 00 00 00 callq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 89: 41 8b 07 movl (%r15), %eax // 8c: ff c0 incl %eax // 8e: 74 0e je 0x9e <_JIT_ENTRY+0x9e> // 90: 41 89 07 movl %eax, (%r15) // 93: ff 15 00 00 00 00 callq *(%rip) # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 99: 4c 8b 7c 24 10 movq 0x10(%rsp), %r15 // 9e: 4c 8b 6c 24 08 movq 0x8(%rsp), %r13 // a3: 41 c1 e6 04 shll $0x4, %r14d // a7: 4e 89 bc 33 88 00 00 00 movq %r15, 0x88(%rbx,%r14) // af: 49 8b 47 78 movq 0x78(%r15), %rax // b3: 48 83 c4 28 addq $0x28, %rsp // b7: ff e0 jmpq *%rax // b9: 41 8d 4f f0 leal -0x10(%r15), %ecx // bd: 41 81 ff ff ff 00 00 cmpl $0xffff, %r15d # imm = 0xFFFF // c4: 41 0f 44 cf cmovel %r15d, %ecx // c8: 66 89 0e movw %cx, (%rsi) // cb: 4c 29 ed subq %r13, %rbp // ce: 48 83 c5 b8 addq $-0x48, %rbp // d2: 48 c1 ed 03 shrq $0x3, %rbp // d6: 41 89 6d 40 movl %ebp, 0x40(%r13) // da: 48 83 c4 28 addq $0x28, %rsp // de: c3 retq // df: 48 89 74 24 18 movq %rsi, 0x18(%rsp) // e4: 48 8d 4c 24 10 leaq 0x10(%rsp), %rcx // e9: 4c 89 ef movq %r13, %rdi // ec: 48 89 44 24 20 movq %rax, 0x20(%rsp) // f1: 48 89 c6 movq %rax, %rsi // f4: 48 89 ea movq %rbp, %rdx // f7: ff 15 00 00 00 00 callq *(%rip) # 0xfd <_JIT_ENTRY+0xfd> // 00000000000000f9: R_X86_64_GOTPCRELX _PyOptimizer_Optimize-0x4 // fd: 85 c0 testl %eax, %eax // ff: 7e 0e jle 0x10f <_JIT_ENTRY+0x10f> // 101: 4c 8b 7c 24 10 movq 0x10(%rsp), %r15 // 106: 41 8b 07 movl (%r15), %eax // 109: ff c0 incl %eax // 10b: 75 83 jne 0x90 <_JIT_ENTRY+0x90> // 10d: eb 8f jmp 0x9e <_JIT_ENTRY+0x9e> // 10f: 66 b9 fc ff movw $0xfffc, %cx # imm = 0xFFFC // 113: 66 41 83 ff 0b cmpw $0xb, %r15w // 118: 77 16 ja 0x130 <_JIT_ENTRY+0x130> // 11a: 41 8d 4f 01 leal 0x1(%r15), %ecx // 11e: ba ff ff ff ff movl $0xffffffff, %edx # imm = 0xFFFFFFFF // 123: d3 e2 shll %cl, %edx // 125: f7 d2 notl %edx // 127: c1 e2 04 shll $0x4, %edx // 12a: 42 8d 0c 3a leal (%rdx,%r15), %ecx // 12e: ff c1 incl %ecx // 130: 48 8b 54 24 18 movq 0x18(%rsp), %rdx // 135: 66 89 0a movw %cx, (%rdx) // 138: 85 c0 testl %eax, %eax // 13a: 48 8b 44 24 20 movq 0x20(%rsp), %rax // 13f: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 144: 78 13 js 0x159 <_JIT_ENTRY+0x159> // 146: 48 29 d5 subq %rdx, %rbp // 149: 48 83 c5 b8 addq $-0x48, %rbp // 14d: 48 c1 ed 03 shrq $0x3, %rbp // 151: 89 6a 40 movl %ebp, 0x40(%rdx) // 154: 48 83 c4 28 addq $0x28, %rsp // 158: c3 retq // 159: 4c 89 e1 movq %r12, %rcx // 15c: 48 8b 03 movq (%rbx), %rax // 15f: 48 85 c0 testq %rax, %rax // 162: 7f 20 jg 0x184 <_JIT_ENTRY+0x184> // 164: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x16b <_JIT_ENTRY+0x16b> // 0000000000000167: R_X86_64_PC32 .L.str.1-0x4 // 16b: be 1e 11 00 00 movl $0x111e, %esi # imm = 0x111E // 170: 48 89 da movq %rbx, %rdx // 173: ff 15 00 00 00 00 callq *(%rip) # 0x179 <_JIT_ENTRY+0x179> // 0000000000000175: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 179: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 17e: 4c 89 e1 movq %r12, %rcx // 181: 48 8b 03 movq (%rbx), %rax // 184: 85 c0 testl %eax, %eax // 186: 78 24 js 0x1ac <_JIT_ENTRY+0x1ac> // 188: ff 15 00 00 00 00 callq *(%rip) # 0x18e <_JIT_ENTRY+0x18e> // 000000000000018a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 18e: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 193: 4c 89 e1 movq %r12, %rcx // 196: 48 ff 0b decq (%rbx) // 199: 75 11 jne 0x1ac <_JIT_ENTRY+0x1ac> // 19b: 48 89 df movq %rbx, %rdi // 19e: ff 15 00 00 00 00 callq *(%rip) # 0x1a4 <_JIT_ENTRY+0x1a4> // 00000000000001a0: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 1a4: 48 8b 54 24 08 movq 0x8(%rsp), %rdx // 1a9: 4c 89 e1 movq %r12, %rcx // 1ac: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x1b3 <_JIT_ENTRY+0x1b3> // 00000000000001af: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 1b3: 48 89 81 10 01 00 00 movq %rax, 0x110(%rcx) // 1ba: 48 29 d5 subq %rdx, %rbp // 1bd: 48 83 c5 b8 addq $-0x48, %rbp // 1c1: 48 c1 ed 03 shrq $0x3, %rbp // 1c5: 89 6a 40 movl %ebp, 0x40(%rdx) // 1c8: 31 c0 xorl %eax, %eax // 1ca: 48 83 c4 28 addq $0x28, %rsp // 1ce: c3 retq // 1cf: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1d6 <_JIT_ENTRY+0x1d6> // 00000000000001d2: R_X86_64_PC32 .L.str.108-0x4 // 1d6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1dd <_JIT_ENTRY+0x1dd> // 00000000000001d9: R_X86_64_PC32 .L.str.109-0x4 // 1dd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1e4 <_JIT_ENTRY+0x1e4> // 00000000000001e0: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 1e4: ba 4d 00 00 00 movl $0x4d, %edx // 1e9: ff 15 00 00 00 00 callq *(%rip) # 0x1ef <_JIT_ENTRY+0x1ef> // 00000000000001eb: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1ef: const unsigned char code_body[495] = { 0x48, 0x83, 0xec, 0x28, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xb6, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x9c, 0x24, 0x10, 0x01, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0xf2, 0xc1, 0xe2, 0x04, 0x8b, 0x84, 0x13, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x04, 0x41, 0x48, 0x05, 0xc8, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x34, 0x13, 0x48, 0x81, 0xc6, 0x84, 0x00, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0xbc, 0x13, 0x84, 0x00, 0x00, 0x00, 0x41, 0x83, 0xff, 0x10, 0x73, 0x5f, 0x80, 0x38, 0x46, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x75, 0x7b, 0x48, 0x8b, 0x89, 0x98, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x40, 0x01, 0x4c, 0x8b, 0x7c, 0xc1, 0x08, 0x4c, 0x89, 0x7c, 0x24, 0x10, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x0e, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7c, 0x24, 0x10, 0x4c, 0x8b, 0x6c, 0x24, 0x08, 0x41, 0xc1, 0xe6, 0x04, 0x4e, 0x89, 0xbc, 0x33, 0x88, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x47, 0x78, 0x48, 0x83, 0xc4, 0x28, 0xff, 0xe0, 0x41, 0x8d, 0x4f, 0xf0, 0x41, 0x81, 0xff, 0xff, 0xff, 0x00, 0x00, 0x41, 0x0f, 0x44, 0xcf, 0x66, 0x89, 0x0e, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x89, 0x74, 0x24, 0x18, 0x48, 0x8d, 0x4c, 0x24, 0x10, 0x4c, 0x89, 0xef, 0x48, 0x89, 0x44, 0x24, 0x20, 0x48, 0x89, 0xc6, 0x48, 0x89, 0xea, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x7e, 0x0e, 0x4c, 0x8b, 0x7c, 0x24, 0x10, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x75, 0x83, 0xeb, 0x8f, 0x66, 0xb9, 0xfc, 0xff, 0x66, 0x41, 0x83, 0xff, 0x0b, 0x77, 0x16, 0x41, 0x8d, 0x4f, 0x01, 0xba, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xe2, 0xf7, 0xd2, 0xc1, 0xe2, 0x04, 0x42, 0x8d, 0x0c, 0x3a, 0xff, 0xc1, 0x48, 0x8b, 0x54, 0x24, 0x18, 0x66, 0x89, 0x0a, 0x85, 0xc0, 0x48, 0x8b, 0x44, 0x24, 0x20, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x78, 0x13, 0x48, 0x29, 0xd5, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x89, 0x6a, 0x40, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x4c, 0x89, 0xe1, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x20, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x1e, 0x11, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x4c, 0x89, 0xe1, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x4c, 0x89, 0xe1, 0x48, 0xff, 0x0b, 0x75, 0x11, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x54, 0x24, 0x08, 0x4c, 0x89, 0xe1, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x81, 0x10, 0x01, 0x00, 0x00, 0x48, 0x29, 0xd5, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x89, 0x6a, 0x40, 0x31, 0xc0, 0x48, 0x83, 0xc4, 0x28, 0xc3, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // da: 00 00 00 00 00 00 // e0: &PyCode_Type+0x0 // e8: OPARG // f0: &_Py_INCREF_IncRefTotal+0x0 // f8: &_PyOptimizer_Optimize+0x0 // 100: &_Py_NegativeRefcount+0x0 // 108: &_Py_DECREF_DecRefTotal+0x0 // 110: &_Py_Dealloc+0x0 // 118: EXECUTOR // 120: &__assert_fail+0x0 const unsigned char data_body[296] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, (uintptr_t)&PyCode_Type); patch_64(data + 0xe8, instruction->oparg); patch_64(data + 0xf0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xf8, (uintptr_t)&_PyOptimizer_Optimize); patch_64(data + 0x100, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x108, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x110, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x118, (uintptr_t)executor); patch_64(data + 0x120, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0xdc); patch_32r(code + 0x25, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x95, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0xf9, (uintptr_t)data + 0xf4); patch_32r(code + 0x167, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x175, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x18a, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x1a0, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x1af, (uintptr_t)data + 0x114); patch_32r(code + 0x1d2, (uintptr_t)data + 0x3c); patch_32r(code + 0x1d9, (uintptr_t)data + 0x5a); patch_32r(code + 0x1e0, (uintptr_t)data + 0xa0); patch_x86_64_32rx(code + 0x1eb, (uintptr_t)data + 0x11c); } void emit__COMPARE_OP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_COMPARE_OP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 89 24 24 movq %r12, (%rsp) // 5: 0f b7 1d 00 00 00 00 movzwl (%rip), %ebx # 0xc <_JIT_ENTRY+0xc> // 0000000000000008: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // c: 81 fb c0 00 00 00 cmpl $0xc0, %ebx // 12: 0f 83 36 01 00 00 jae 0x14e <_JIT_ENTRY+0x14e> // 18: 89 da movl %ebx, %edx // 1a: c1 ea 05 shrl $0x5, %edx // 1d: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 21: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 25: 4c 89 ff movq %r15, %rdi // 28: 4c 89 f6 movq %r14, %rsi // 2b: ff 15 00 00 00 00 callq *(%rip) # 0x31 <_JIT_ENTRY+0x31> // 000000000000002d: R_X86_64_GOTPCRELX PyObject_RichCompare-0x4 // 31: 49 89 c4 movq %rax, %r12 // 34: 49 8b 07 movq (%r15), %rax // 37: 48 85 c0 testq %rax, %rax // 3a: 7e 06 jle 0x42 <_JIT_ENTRY+0x42> // 3c: 85 c0 testl %eax, %eax // 3e: 79 1e jns 0x5e <_JIT_ENTRY+0x5e> // 40: eb 27 jmp 0x69 <_JIT_ENTRY+0x69> // 42: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L.str.1-0x4 // 49: be fa 08 00 00 movl $0x8fa, %esi # imm = 0x8FA // 4e: 4c 89 fa movq %r15, %rdx // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 57: 49 8b 07 movq (%r15), %rax // 5a: 85 c0 testl %eax, %eax // 5c: 78 0b js 0x69 <_JIT_ENTRY+0x69> // 5e: ff 15 00 00 00 00 callq *(%rip) # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 64: 49 ff 0f decq (%r15) // 67: 74 0e je 0x77 <_JIT_ENTRY+0x77> // 69: 49 8b 06 movq (%r14), %rax // 6c: 48 85 c0 testq %rax, %rax // 6f: 7e 17 jle 0x88 <_JIT_ENTRY+0x88> // 71: 85 c0 testl %eax, %eax // 73: 79 2f jns 0xa4 <_JIT_ENTRY+0xa4> // 75: eb 38 jmp 0xaf <_JIT_ENTRY+0xaf> // 77: 4c 89 ff movq %r15, %rdi // 7a: ff 15 00 00 00 00 callq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 80: 49 8b 06 movq (%r14), %rax // 83: 48 85 c0 testq %rax, %rax // 86: 7f e9 jg 0x71 <_JIT_ENTRY+0x71> // 88: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x8f <_JIT_ENTRY+0x8f> // 000000000000008b: R_X86_64_PC32 .L.str.1-0x4 // 8f: be fb 08 00 00 movl $0x8fb, %esi # imm = 0x8FB // 94: 4c 89 f2 movq %r14, %rdx // 97: ff 15 00 00 00 00 callq *(%rip) # 0x9d <_JIT_ENTRY+0x9d> // 0000000000000099: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 9d: 49 8b 06 movq (%r14), %rax // a0: 85 c0 testl %eax, %eax // a2: 78 0b js 0xaf <_JIT_ENTRY+0xaf> // a4: ff 15 00 00 00 00 callq *(%rip) # 0xaa <_JIT_ENTRY+0xaa> // 00000000000000a6: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // aa: 49 ff 0e decq (%r14) // ad: 74 5c je 0x10b <_JIT_ENTRY+0x10b> // af: 4d 85 e4 testq %r12, %r12 // b2: 0f 84 8b 00 00 00 je 0x143 <_JIT_ENTRY+0x143> // b8: f6 c3 10 testb $0x10, %bl // bb: 74 65 je 0x122 <_JIT_ENTRY+0x122> // bd: 4c 89 e7 movq %r12, %rdi // c0: ff 15 00 00 00 00 callq *(%rip) # 0xc6 <_JIT_ENTRY+0xc6> // 00000000000000c2: R_X86_64_GOTPCRELX PyObject_IsTrue-0x4 // c6: 41 89 c6 movl %eax, %r14d // c9: 49 8b 04 24 movq (%r12), %rax // cd: 48 85 c0 testq %rax, %rax // d0: 7f 19 jg 0xeb <_JIT_ENTRY+0xeb> // d2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd9 <_JIT_ENTRY+0xd9> // 00000000000000d5: R_X86_64_PC32 .L.str.1-0x4 // d9: be ff 08 00 00 movl $0x8ff, %esi # imm = 0x8FF // de: 4c 89 e2 movq %r12, %rdx // e1: ff 15 00 00 00 00 callq *(%rip) # 0xe7 <_JIT_ENTRY+0xe7> // 00000000000000e3: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // e7: 49 8b 04 24 movq (%r12), %rax // eb: 85 c0 testl %eax, %eax // ed: 78 0c js 0xfb <_JIT_ENTRY+0xfb> // ef: ff 15 00 00 00 00 callq *(%rip) # 0xf5 <_JIT_ENTRY+0xf5> // 00000000000000f1: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // f5: 49 ff 0c 24 decq (%r12) // f9: 74 3a je 0x135 <_JIT_ENTRY+0x135> // fb: 45 85 f6 testl %r14d, %r14d // fe: 78 43 js 0x143 <_JIT_ENTRY+0x143> // 100: 75 19 jne 0x11b <_JIT_ENTRY+0x11b> // 102: 4c 8b 25 00 00 00 00 movq (%rip), %r12 # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 109: eb 17 jmp 0x122 <_JIT_ENTRY+0x122> // 10b: 4c 89 f7 movq %r14, %rdi // 10e: ff 15 00 00 00 00 callq *(%rip) # 0x114 <_JIT_ENTRY+0x114> // 0000000000000110: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 114: 4d 85 e4 testq %r12, %r12 // 117: 75 9f jne 0xb8 <_JIT_ENTRY+0xb8> // 119: eb 28 jmp 0x143 <_JIT_ENTRY+0x143> // 11b: 4c 8b 25 00 00 00 00 movq (%rip), %r12 # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 122: 4c 89 65 f0 movq %r12, -0x10(%rbp) // 126: 48 83 c5 f8 addq $-0x8, %rbp // 12a: 4c 8b 24 24 movq (%rsp), %r12 // 12e: 58 popq %rax // 12f: ff 25 00 00 00 00 jmpq *(%rip) # 0x135 <_JIT_ENTRY+0x135> // 0000000000000131: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 135: 4c 89 e7 movq %r12, %rdi // 138: ff 15 00 00 00 00 callq *(%rip) # 0x13e <_JIT_ENTRY+0x13e> // 000000000000013a: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 13e: 45 85 f6 testl %r14d, %r14d // 141: 79 bd jns 0x100 <_JIT_ENTRY+0x100> // 143: 4c 8b 24 24 movq (%rsp), %r12 // 147: 58 popq %rax // 148: ff 25 00 00 00 00 jmpq *(%rip) # 0x14e <_JIT_ENTRY+0x14e> // 000000000000014a: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 14e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x155 <_JIT_ENTRY+0x155> // 0000000000000151: R_X86_64_PC32 .L.str.57-0x4 // 155: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x15c <_JIT_ENTRY+0x15c> // 0000000000000158: R_X86_64_PC32 .L.str.1-0x4 // 15c: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x163 <_JIT_ENTRY+0x163> // 000000000000015f: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 163: ba f8 08 00 00 movl $0x8f8, %edx # imm = 0x8F8 // 168: ff 15 00 00 00 00 callq *(%rip) # 0x16e <_JIT_ENTRY+0x16e> // 000000000000016a: R_X86_64_GOTPCRELX __assert_fail-0x4 // 16e: const unsigned char code_body[366] = { 0x50, 0x4c, 0x89, 0x24, 0x24, 0x0f, 0xb7, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x81, 0xfb, 0xc0, 0x00, 0x00, 0x00, 0x0f, 0x83, 0x36, 0x01, 0x00, 0x00, 0x89, 0xda, 0xc1, 0xea, 0x05, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xff, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc4, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xfa, 0x08, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xfb, 0x08, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x5c, 0x4d, 0x85, 0xe4, 0x0f, 0x84, 0x8b, 0x00, 0x00, 0x00, 0xf6, 0xc3, 0x10, 0x74, 0x65, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x49, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x7f, 0x19, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xff, 0x08, 0x00, 0x00, 0x4c, 0x89, 0xe2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x04, 0x24, 0x85, 0xc0, 0x78, 0x0c, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0c, 0x24, 0x74, 0x3a, 0x45, 0x85, 0xf6, 0x78, 0x43, 0x75, 0x19, 0x4c, 0x8b, 0x25, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x17, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xe4, 0x75, 0x9f, 0xeb, 0x28, 0x4c, 0x8b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x65, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x4c, 0x8b, 0x24, 0x24, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x79, 0xbd, 0x4c, 0x8b, 0x24, 0x24, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf8, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(oparg >> 5) <= Py_GE\x00' // a4: 00 00 00 00 // a8: OPARG // b0: &PyObject_RichCompare+0x0 // b8: &_Py_NegativeRefcount+0x0 // c0: &_Py_DECREF_DecRefTotal+0x0 // c8: &_Py_Dealloc+0x0 // d0: &PyObject_IsTrue+0x0 // d8: &_Py_FalseStruct+0x0 // e0: &_Py_TrueStruct+0x0 // e8: CONTINUE // f0: ERROR_TARGET // f8: &__assert_fail+0x0 const unsigned char data_body[256] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x3c, 0x3d, 0x20, 0x50, 0x79, 0x5f, 0x47, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, instruction->oparg); patch_64(data + 0xb0, (uintptr_t)&PyObject_RichCompare); patch_64(data + 0xb8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xc0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xc8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd0, (uintptr_t)&PyObject_IsTrue); patch_64(data + 0xd8, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0xe0, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, instruction_starts[instruction->error_target]); patch_64(data + 0xf8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x8, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x2d, (uintptr_t)data + 0xac); patch_32r(code + 0x45, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x60, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x7c, (uintptr_t)data + 0xc4); patch_32r(code + 0x8b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x99, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xa6, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0xc2, (uintptr_t)data + 0xcc); patch_32r(code + 0xd5, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xe3, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xf1, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x105, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x110, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x131, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x13a, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x14a, (uintptr_t)data + 0xec); patch_32r(code + 0x151, (uintptr_t)data + 0x8a); patch_32r(code + 0x158, (uintptr_t)data + -0x4); patch_32r(code + 0x15f, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x16a, (uintptr_t)data + 0xf4); } void emit__COMPARE_OP_FLOAT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_COMPARE_OP_FLOAT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 4c 8b 75 f0 movq -0x10(%rbp), %r14 // 8: 48 8b 5d f8 movq -0x8(%rbp), %rbx // c: 49 8b 7e 08 movq 0x8(%r14), %rdi // 10: 48 3b 3d 00 00 00 00 cmpq (%rip), %rdi # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // 17: 74 15 je 0x2e <_JIT_ENTRY+0x2e> // 19: 48 8b 35 00 00 00 00 movq (%rip), %rsi # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // 20: ff 15 00 00 00 00 callq *(%rip) # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX PyType_IsSubtype-0x4 // 26: 85 c0 testl %eax, %eax // 28: 0f 84 23 01 00 00 je 0x151 <_JIT_ENTRY+0x151> // 2e: f2 41 0f 10 46 10 movsd 0x10(%r14), %xmm0 // 34: f2 0f 11 44 24 10 movsd %xmm0, 0x10(%rsp) // 3a: 48 8b 7b 08 movq 0x8(%rbx), %rdi // 3e: 48 3b 3d 00 00 00 00 cmpq (%rip), %rdi # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // 45: 74 15 je 0x5c <_JIT_ENTRY+0x5c> // 47: 48 8b 35 00 00 00 00 movq (%rip), %rsi # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX PyType_IsSubtype-0x4 // 54: 85 c0 testl %eax, %eax // 56: 0f 84 f5 00 00 00 je 0x151 <_JIT_ENTRY+0x151> // 5c: f2 0f 10 43 10 movsd 0x10(%rbx), %xmm0 // 61: f2 0f 11 44 24 08 movsd %xmm0, 0x8(%rsp) // 67: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 6c: 75 21 jne 0x8f <_JIT_ENTRY+0x8f> // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 74: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 7b: 49 8b 06 movq (%r14), %rax // 7e: 48 89 c1 movq %rax, %rcx // 81: 48 ff c9 decq %rcx // 84: 49 89 0e movq %rcx, (%r14) // 87: 74 4d je 0xd6 <_JIT_ENTRY+0xd6> // 89: 48 83 f8 01 cmpq $0x1, %rax // 8d: 7e 27 jle 0xb6 <_JIT_ENTRY+0xb6> // 8f: f6 43 03 80 testb $-0x80, 0x3(%rbx) // 93: 75 5b jne 0xf0 <_JIT_ENTRY+0xf0> // 95: ff 15 00 00 00 00 callq *(%rip) # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 9b: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // a2: 48 8b 03 movq (%rbx), %rax // a5: 48 89 c1 movq %rax, %rcx // a8: 48 ff c9 decq %rcx // ab: 48 89 0b movq %rcx, (%rbx) // ae: 74 37 je 0xe7 <_JIT_ENTRY+0xe7> // b0: 48 83 f8 01 cmpq $0x1, %rax // b4: 7f 3a jg 0xf0 <_JIT_ENTRY+0xf0> // b6: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xbd <_JIT_ENTRY+0xbd> // 00000000000000b9: R_X86_64_PC32 .L.str.117-0x4 // bd: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xc4 <_JIT_ENTRY+0xc4> // 00000000000000c0: R_X86_64_PC32 .L.str.118-0x4 // c4: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xcb <_JIT_ENTRY+0xcb> // 00000000000000c7: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // cb: ba bd 00 00 00 movl $0xbd, %edx // d0: ff 15 00 00 00 00 callq *(%rip) # 0xd6 <_JIT_ENTRY+0xd6> // 00000000000000d2: R_X86_64_GOTPCRELX __assert_fail-0x4 // d6: 4c 89 f7 movq %r14, %rdi // d9: ff 15 00 00 00 00 callq *(%rip) # 0xdf <_JIT_ENTRY+0xdf> // 00000000000000db: R_X86_64_GOTPCRELX _PyFloat_ExactDealloc-0x4 // df: f6 43 03 80 testb $-0x80, 0x3(%rbx) // e3: 74 b0 je 0x95 <_JIT_ENTRY+0x95> // e5: eb 09 jmp 0xf0 <_JIT_ENTRY+0xf0> // e7: 48 89 df movq %rbx, %rdi // ea: ff 15 00 00 00 00 callq *(%rip) # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_GOTPCRELX _PyFloat_ExactDealloc-0x4 // f0: 48 8d 45 f8 leaq -0x8(%rbp), %rax // f4: 31 c9 xorl %ecx, %ecx // f6: f2 0f 10 44 24 10 movsd 0x10(%rsp), %xmm0 // fc: f2 0f 10 4c 24 08 movsd 0x8(%rsp), %xmm1 // 102: 66 0f 2e c1 ucomisd %xmm1, %xmm0 // 106: 0f 93 c1 setae %cl // 109: 01 c9 addl %ecx, %ecx // 10b: 31 d2 xorl %edx, %edx // 10d: 66 0f 2e c8 ucomisd %xmm0, %xmm1 // 111: 0f 93 c2 setae %dl // 114: 09 ca orl %ecx, %edx // 116: 8b 0d 00 00 00 00 movl (%rip), %ecx # 0x11c <_JIT_ENTRY+0x11c> // 0000000000000118: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 11c: 0f a3 d1 btl %edx, %ecx // 11f: 72 18 jb 0x139 <_JIT_ENTRY+0x139> // 121: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x128 <_JIT_ENTRY+0x128> // 0000000000000124: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 128: 48 89 4d f0 movq %rcx, -0x10(%rbp) // 12c: 48 89 c5 movq %rax, %rbp // 12f: 48 83 c4 18 addq $0x18, %rsp // 133: ff 25 00 00 00 00 jmpq *(%rip) # 0x139 <_JIT_ENTRY+0x139> // 0000000000000135: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 139: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 140: 48 89 4d f0 movq %rcx, -0x10(%rbp) // 144: 48 89 c5 movq %rax, %rbp // 147: 48 83 c4 18 addq $0x18, %rsp // 14b: ff 25 00 00 00 00 jmpq *(%rip) # 0x151 <_JIT_ENTRY+0x151> // 000000000000014d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 151: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x158 <_JIT_ENTRY+0x158> // 0000000000000154: R_X86_64_PC32 .L.str.154-0x4 // 158: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x15f <_JIT_ENTRY+0x15f> // 000000000000015b: R_X86_64_PC32 .L.str.155-0x4 // 15f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x166 <_JIT_ENTRY+0x166> // 0000000000000162: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyFloat_AS_DOUBLE-0x4 // 166: ba 10 00 00 00 movl $0x10, %edx // 16b: ff 15 00 00 00 00 callq *(%rip) # 0x171 <_JIT_ENTRY+0x171> // 000000000000016d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 171: const unsigned char code_body[369] = { 0x48, 0x83, 0xec, 0x18, 0x4c, 0x8b, 0x75, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0x49, 0x8b, 0x7e, 0x08, 0x48, 0x3b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x74, 0x15, 0x48, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0x23, 0x01, 0x00, 0x00, 0xf2, 0x41, 0x0f, 0x10, 0x46, 0x10, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x10, 0x48, 0x8b, 0x7b, 0x08, 0x48, 0x3b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x74, 0x15, 0x48, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x84, 0xf5, 0x00, 0x00, 0x00, 0xf2, 0x0f, 0x10, 0x43, 0x10, 0xf2, 0x0f, 0x11, 0x44, 0x24, 0x08, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x21, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x4d, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x27, 0xf6, 0x43, 0x03, 0x80, 0x75, 0x5b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x48, 0x89, 0x0b, 0x74, 0x37, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x3a, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x43, 0x03, 0x80, 0x74, 0xb0, 0xeb, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x45, 0xf8, 0x31, 0xc9, 0xf2, 0x0f, 0x10, 0x44, 0x24, 0x10, 0xf2, 0x0f, 0x10, 0x4c, 0x24, 0x08, 0x66, 0x0f, 0x2e, 0xc1, 0x0f, 0x93, 0xc1, 0x01, 0xc9, 0x31, 0xd2, 0x66, 0x0f, 0x2e, 0xc8, 0x0f, 0x93, 0xc2, 0x09, 0xca, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa3, 0xd1, 0x72, 0x18, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x10, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00PyFloat_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/floatobject.h\x00double PyFloat_AS_DOUBLE(PyObject *)\x00' // 10e: 00 00 // 110: &PyFloat_Type+0x0 // 118: &PyType_IsSubtype+0x0 // 120: &PyInterpreterState_Get+0x0 // 128: &__assert_fail+0x0 // 130: &_PyFloat_ExactDealloc+0x0 // 138: OPARG // 140: &_Py_FalseStruct+0x0 // 148: CONTINUE // 150: &_Py_TrueStruct+0x0 const unsigned char data_body[344] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x50, 0x79, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x66, 0x6c, 0x6f, 0x61, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x64, 0x6f, 0x75, 0x62, 0x6c, 0x65, 0x20, 0x50, 0x79, 0x46, 0x6c, 0x6f, 0x61, 0x74, 0x5f, 0x41, 0x53, 0x5f, 0x44, 0x4f, 0x55, 0x42, 0x4c, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x110, (uintptr_t)&PyFloat_Type); patch_64(data + 0x118, (uintptr_t)&PyType_IsSubtype); patch_64(data + 0x120, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0x128, (uintptr_t)&__assert_fail); patch_64(data + 0x130, (uintptr_t)&_PyFloat_ExactDealloc); patch_64(data + 0x138, instruction->oparg); patch_64(data + 0x140, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x148, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x150, (uintptr_t)&_Py_TrueStruct); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x41, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x4a, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0x11c); patch_x86_64_32rx(code + 0x97, (uintptr_t)data + 0x11c); patch_32r(code + 0xb9, (uintptr_t)data + -0x4); patch_32r(code + 0xc0, (uintptr_t)data + 0xe); patch_32r(code + 0xc7, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0xd2, (uintptr_t)data + 0x124); patch_x86_64_32rx(code + 0xdb, (uintptr_t)data + 0x12c); patch_x86_64_32rx(code + 0xec, (uintptr_t)data + 0x12c); patch_x86_64_32rx(code + 0x118, (uintptr_t)data + 0x134); patch_x86_64_32rx(code + 0x124, (uintptr_t)data + 0x13c); patch_x86_64_32rx(code + 0x135, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x13c, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x14d, (uintptr_t)data + 0x144); patch_32r(code + 0x154, (uintptr_t)data + 0x8f); patch_32r(code + 0x15b, (uintptr_t)data + 0xa1); patch_32r(code + 0x162, (uintptr_t)data + 0xe5); patch_x86_64_32rx(code + 0x16d, (uintptr_t)data + 0x124); } void emit__COMPARE_OP_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_COMPARE_OP_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 4c 8b 75 f0 movq -0x10(%rbp), %r14 // 8: 49 8b 46 08 movq 0x8(%r14), %rax // c: f6 80 ab 00 00 00 01 testb $0x1, 0xab(%rax) // 13: 0f 84 4a 01 00 00 je 0x163 <_JIT_ENTRY+0x163> // 19: 4d 8b 7e 10 movq 0x10(%r14), %r15 // 1d: 49 83 ff 10 cmpq $0x10, %r15 // 21: 73 1f jae 0x42 <_JIT_ENTRY+0x42> // 23: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 27: 48 8b 43 08 movq 0x8(%rbx), %rax // 2b: f6 80 ab 00 00 00 01 testb $0x1, 0xab(%rax) // 32: 0f 84 2b 01 00 00 je 0x163 <_JIT_ENTRY+0x163> // 38: 48 8b 43 10 movq 0x10(%rbx), %rax // 3c: 48 83 f8 10 cmpq $0x10, %rax // 40: 72 0a jb 0x4c <_JIT_ENTRY+0x4c> // 42: 48 83 c4 18 addq $0x18, %rsp // 46: ff 25 00 00 00 00 jmpq *(%rip) # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 4c: 48 89 44 24 10 movq %rax, 0x10(%rsp) // 51: 41 8b 46 18 movl 0x18(%r14), %eax // 55: 48 89 04 24 movq %rax, (%rsp) // 59: 8b 43 18 movl 0x18(%rbx), %eax // 5c: 48 89 44 24 08 movq %rax, 0x8(%rsp) // 61: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 66: 75 21 jne 0x89 <_JIT_ENTRY+0x89> // 68: ff 15 00 00 00 00 callq *(%rip) # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 6e: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 75: 49 8b 06 movq (%r14), %rax // 78: 48 89 c1 movq %rax, %rcx // 7b: 48 ff c9 decq %rcx // 7e: 49 89 0e movq %rcx, (%r14) // 81: 74 4d je 0xd0 <_JIT_ENTRY+0xd0> // 83: 48 83 f8 01 cmpq $0x1, %rax // 87: 7e 27 jle 0xb0 <_JIT_ENTRY+0xb0> // 89: f6 43 03 80 testb $-0x80, 0x3(%rbx) // 8d: 75 5b jne 0xea <_JIT_ENTRY+0xea> // 8f: ff 15 00 00 00 00 callq *(%rip) # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 95: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 9c: 48 8b 03 movq (%rbx), %rax // 9f: 48 89 c1 movq %rax, %rcx // a2: 48 ff c9 decq %rcx // a5: 48 89 0b movq %rcx, (%rbx) // a8: 74 37 je 0xe1 <_JIT_ENTRY+0xe1> // aa: 48 83 f8 01 cmpq $0x1, %rax // ae: 7f 3a jg 0xea <_JIT_ENTRY+0xea> // b0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_PC32 .L.str.117-0x4 // b7: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xbe <_JIT_ENTRY+0xbe> // 00000000000000ba: R_X86_64_PC32 .L.str.118-0x4 // be: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc5 <_JIT_ENTRY+0xc5> // 00000000000000c1: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // c5: ba bd 00 00 00 movl $0xbd, %edx // ca: ff 15 00 00 00 00 callq *(%rip) # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_GOTPCRELX __assert_fail-0x4 // d0: 4c 89 f7 movq %r14, %rdi // d3: ff 15 00 00 00 00 callq *(%rip) # 0xd9 <_JIT_ENTRY+0xd9> // 00000000000000d5: R_X86_64_GOTPCRELX PyObject_Free-0x4 // d9: f6 43 03 80 testb $-0x80, 0x3(%rbx) // dd: 74 b0 je 0x8f <_JIT_ENTRY+0x8f> // df: eb 09 jmp 0xea <_JIT_ENTRY+0xea> // e1: 48 89 df movq %rbx, %rdi // e4: ff 15 00 00 00 00 callq *(%rip) # 0xea <_JIT_ENTRY+0xea> // 00000000000000e6: R_X86_64_GOTPCRELX PyObject_Free-0x4 // ea: 48 8d 45 f8 leaq -0x8(%rbp), %rax // ee: 41 83 e7 03 andl $0x3, %r15d // f2: b9 01 00 00 00 movl $0x1, %ecx // f7: ba 01 00 00 00 movl $0x1, %edx // fc: 4c 29 fa subq %r15, %rdx // ff: 48 0f af 14 24 imulq (%rsp), %rdx // 104: 48 8b 74 24 10 movq 0x10(%rsp), %rsi // 109: 83 e6 03 andl $0x3, %esi // 10c: 48 29 f1 subq %rsi, %rcx // 10f: 48 0f af 4c 24 08 imulq 0x8(%rsp), %rcx // 115: 31 f6 xorl %esi, %esi // 117: 31 ff xorl %edi, %edi // 119: 48 39 ca cmpq %rcx, %rdx // 11c: 40 0f 9d c6 setge %sil // 120: 40 0f 9e c7 setle %dil // 124: 01 f6 addl %esi, %esi // 126: 09 f7 orl %esi, %edi // 128: 8b 0d 00 00 00 00 movl (%rip), %ecx # 0x12e <_JIT_ENTRY+0x12e> // 000000000000012a: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 12e: 0f a3 f9 btl %edi, %ecx // 131: 72 18 jb 0x14b <_JIT_ENTRY+0x14b> // 133: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x13a <_JIT_ENTRY+0x13a> // 0000000000000136: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 13a: 48 89 4d f0 movq %rcx, -0x10(%rbp) // 13e: 48 89 c5 movq %rax, %rbp // 141: 48 83 c4 18 addq $0x18, %rsp // 145: ff 25 00 00 00 00 jmpq *(%rip) # 0x14b <_JIT_ENTRY+0x14b> // 0000000000000147: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 14b: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x152 <_JIT_ENTRY+0x152> // 000000000000014e: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 152: 48 89 4d f0 movq %rcx, -0x10(%rbp) // 156: 48 89 c5 movq %rax, %rbp // 159: 48 83 c4 18 addq $0x18, %rsp // 15d: ff 25 00 00 00 00 jmpq *(%rip) # 0x163 <_JIT_ENTRY+0x163> // 000000000000015f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 163: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x16a <_JIT_ENTRY+0x16a> // 0000000000000166: R_X86_64_PC32 .L.str.156-0x4 // 16a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x171 <_JIT_ENTRY+0x171> // 000000000000016d: R_X86_64_PC32 .L.str.157-0x4 // 171: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x178 <_JIT_ENTRY+0x178> // 0000000000000174: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyLong_IsCompact-0x4 // 178: ba 7b 00 00 00 movl $0x7b, %edx // 17d: ff 15 00 00 00 00 callq *(%rip) # 0x183 <_JIT_ENTRY+0x183> // 000000000000017f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 183: const unsigned char code_body[387] = { 0x48, 0x83, 0xec, 0x18, 0x4c, 0x8b, 0x75, 0xf0, 0x49, 0x8b, 0x46, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x84, 0x4a, 0x01, 0x00, 0x00, 0x4d, 0x8b, 0x7e, 0x10, 0x49, 0x83, 0xff, 0x10, 0x73, 0x1f, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x84, 0x2b, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x10, 0x48, 0x83, 0xf8, 0x10, 0x72, 0x0a, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x10, 0x41, 0x8b, 0x46, 0x18, 0x48, 0x89, 0x04, 0x24, 0x8b, 0x43, 0x18, 0x48, 0x89, 0x44, 0x24, 0x08, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x21, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x4d, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x27, 0xf6, 0x43, 0x03, 0x80, 0x75, 0x5b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x48, 0x89, 0x0b, 0x74, 0x37, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x3a, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x43, 0x03, 0x80, 0x74, 0xb0, 0xeb, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x45, 0xf8, 0x41, 0x83, 0xe7, 0x03, 0xb9, 0x01, 0x00, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00, 0x00, 0x4c, 0x29, 0xfa, 0x48, 0x0f, 0xaf, 0x14, 0x24, 0x48, 0x8b, 0x74, 0x24, 0x10, 0x83, 0xe6, 0x03, 0x48, 0x29, 0xf1, 0x48, 0x0f, 0xaf, 0x4c, 0x24, 0x08, 0x31, 0xf6, 0x31, 0xff, 0x48, 0x39, 0xca, 0x40, 0x0f, 0x9d, 0xc6, 0x40, 0x0f, 0x9e, 0xc7, 0x01, 0xf6, 0x09, 0xf7, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xa3, 0xf9, 0x72, 0x18, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x7b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00PyType_HasFeature((op)->ob_base.ob_type, Py_TPFLAGS_LONG_SUBCLASS)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/longintrepr.h\x00int _PyLong_IsCompact(const PyLongObject *)\x00' // 146: 00 00 // 148: JUMP_TARGET // 150: &PyInterpreterState_Get+0x0 // 158: &__assert_fail+0x0 // 160: &PyObject_Free+0x0 // 168: OPARG // 170: &_Py_FalseStruct+0x0 // 178: CONTINUE // 180: &_Py_TrueStruct+0x0 const unsigned char data_body[392] = { 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x50, 0x79, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x48, 0x61, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x28, 0x28, 0x6f, 0x70, 0x29, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4c, 0x4f, 0x4e, 0x47, 0x5f, 0x53, 0x55, 0x42, 0x43, 0x4c, 0x41, 0x53, 0x53, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x6c, 0x6f, 0x6e, 0x67, 0x69, 0x6e, 0x74, 0x72, 0x65, 0x70, 0x72, 0x2e, 0x68, 0x00, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x49, 0x73, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x148, instruction_starts[instruction->jump_target]); patch_64(data + 0x150, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0x158, (uintptr_t)&__assert_fail); patch_64(data + 0x160, (uintptr_t)&PyObject_Free); patch_64(data + 0x168, instruction->oparg); patch_64(data + 0x170, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x178, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x180, (uintptr_t)&_Py_TrueStruct); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x6a, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x14c); patch_32r(code + 0xb3, (uintptr_t)data + -0x4); patch_32r(code + 0xba, (uintptr_t)data + 0xe); patch_32r(code + 0xc1, (uintptr_t)data + 0x55); patch_x86_64_32rx(code + 0xcc, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0xd5, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0xe6, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x12a, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x136, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x147, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x14e, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x15f, (uintptr_t)data + 0x174); patch_32r(code + 0x166, (uintptr_t)data + 0x8f); patch_32r(code + 0x16d, (uintptr_t)data + 0xd2); patch_32r(code + 0x174, (uintptr_t)data + 0x116); patch_x86_64_32rx(code + 0x17f, (uintptr_t)data + 0x154); } void emit__COMPARE_OP_STR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_COMPARE_OP_STR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 89 24 24 movq %r12, (%rsp) // 5: 44 8b 25 00 00 00 00 movl (%rip), %r12d # 0xc <_JIT_ENTRY+0xc> // 0000000000000008: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // c: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 10: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 14: 4c 89 ff movq %r15, %rdi // 17: 4c 89 f6 movq %r14, %rsi // 1a: ff 15 00 00 00 00 callq *(%rip) # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_GOTPCRELX _PyUnicode_Equal-0x4 // 20: 41 81 e4 c0 ff 00 00 andl $0xffc0, %r12d # imm = 0xFFC0 // 27: 41 83 fc 40 cmpl $0x40, %r12d // 2b: 0f 85 d5 00 00 00 jne 0x106 <_JIT_ENTRY+0x106> // 31: 89 c3 movl %eax, %ebx // 33: 41 f6 47 03 80 testb $-0x80, 0x3(%r15) // 38: 75 21 jne 0x5b <_JIT_ENTRY+0x5b> // 3a: ff 15 00 00 00 00 callq *(%rip) # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 40: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 47: 49 8b 07 movq (%r15), %rax // 4a: 48 89 c1 movq %rax, %rcx // 4d: 48 ff c9 decq %rcx // 50: 49 89 0f movq %rcx, (%r15) // 53: 74 4e je 0xa3 <_JIT_ENTRY+0xa3> // 55: 48 83 f8 01 cmpq $0x1, %rax // 59: 7e 28 jle 0x83 <_JIT_ENTRY+0x83> // 5b: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // 60: 75 5c jne 0xbe <_JIT_ENTRY+0xbe> // 62: ff 15 00 00 00 00 callq *(%rip) # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // 68: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // 6f: 49 8b 06 movq (%r14), %rax // 72: 48 89 c1 movq %rax, %rcx // 75: 48 ff c9 decq %rcx // 78: 49 89 0e movq %rcx, (%r14) // 7b: 74 38 je 0xb5 <_JIT_ENTRY+0xb5> // 7d: 48 83 f8 01 cmpq $0x1, %rax // 81: 7f 3b jg 0xbe <_JIT_ENTRY+0xbe> // 83: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x8a <_JIT_ENTRY+0x8a> // 0000000000000086: R_X86_64_PC32 .L.str.117-0x4 // 8a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x91 <_JIT_ENTRY+0x91> // 000000000000008d: R_X86_64_PC32 .L.str.118-0x4 // 91: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x98 <_JIT_ENTRY+0x98> // 0000000000000094: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 98: ba bd 00 00 00 movl $0xbd, %edx // 9d: ff 15 00 00 00 00 callq *(%rip) # 0xa3 <_JIT_ENTRY+0xa3> // 000000000000009f: R_X86_64_GOTPCRELX __assert_fail-0x4 // a3: 4c 89 ff movq %r15, %rdi // a6: ff 15 00 00 00 00 callq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX _PyUnicode_ExactDealloc-0x4 // ac: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // b1: 74 af je 0x62 <_JIT_ENTRY+0x62> // b3: eb 09 jmp 0xbe <_JIT_ENTRY+0xbe> // b5: 4c 89 f7 movq %r14, %rdi // b8: ff 15 00 00 00 00 callq *(%rip) # 0xbe <_JIT_ENTRY+0xbe> // 00000000000000ba: R_X86_64_GOTPCRELX _PyUnicode_ExactDealloc-0x4 // be: 83 fb 02 cmpl $0x2, %ebx // c1: 73 63 jae 0x126 <_JIT_ENTRY+0x126> // c3: 8b 05 00 00 00 00 movl (%rip), %eax # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // c9: 0f b7 c8 movzwl %ax, %ecx // cc: 89 c8 movl %ecx, %eax // ce: 83 e0 0f andl $0xf, %eax // d1: 83 c0 f9 addl $-0x7, %eax // d4: 83 f8 02 cmpl $0x2, %eax // d7: 73 6d jae 0x146 <_JIT_ENTRY+0x146> // d9: 48 8d 45 f8 leaq -0x8(%rbp), %rax // dd: 83 c3 07 addl $0x7, %ebx // e0: 85 cb testl %ecx, %ebx // e2: 75 09 jne 0xed <_JIT_ENTRY+0xed> // e4: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xeb <_JIT_ENTRY+0xeb> // 00000000000000e7: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // eb: eb 07 jmp 0xf4 <_JIT_ENTRY+0xf4> // ed: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xf4 <_JIT_ENTRY+0xf4> // 00000000000000f0: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // f4: 4c 8b 24 24 movq (%rsp), %r12 // f8: 48 89 4d f0 movq %rcx, -0x10(%rbp) // fc: 48 89 c5 movq %rax, %rbp // ff: 58 popq %rax // 100: ff 25 00 00 00 00 jmpq *(%rip) # 0x106 <_JIT_ENTRY+0x106> // 0000000000000102: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 106: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x10d <_JIT_ENTRY+0x10d> // 0000000000000109: R_X86_64_PC32 .L.str.59-0x4 // 10d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x114 <_JIT_ENTRY+0x114> // 0000000000000110: R_X86_64_PC32 .L.str.1-0x4 // 114: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x11b <_JIT_ENTRY+0x11b> // 0000000000000117: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 11b: ba 45 09 00 00 movl $0x945, %edx # imm = 0x945 // 120: ff 15 00 00 00 00 callq *(%rip) # 0x126 <_JIT_ENTRY+0x126> // 0000000000000122: R_X86_64_GOTPCRELX __assert_fail-0x4 // 126: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_PC32 .L.str.60-0x4 // 12d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x134 <_JIT_ENTRY+0x134> // 0000000000000130: R_X86_64_PC32 .L.str.1-0x4 // 134: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x13b <_JIT_ENTRY+0x13b> // 0000000000000137: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 13b: ba 48 09 00 00 movl $0x948, %edx # imm = 0x948 // 140: ff 15 00 00 00 00 callq *(%rip) # 0x146 <_JIT_ENTRY+0x146> // 0000000000000142: R_X86_64_GOTPCRELX __assert_fail-0x4 // 146: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x14d <_JIT_ENTRY+0x14d> // 0000000000000149: R_X86_64_PC32 .L.str.61-0x4 // 14d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x154 <_JIT_ENTRY+0x154> // 0000000000000150: R_X86_64_PC32 .L.str.1-0x4 // 154: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x15b <_JIT_ENTRY+0x15b> // 0000000000000157: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 15b: ba 49 09 00 00 movl $0x949, %edx # imm = 0x949 // 160: ff 15 00 00 00 00 callq *(%rip) # 0x166 <_JIT_ENTRY+0x166> // 0000000000000162: R_X86_64_GOTPCRELX __assert_fail-0x4 // 166: const unsigned char code_body[358] = { 0x50, 0x4c, 0x89, 0x24, 0x24, 0x44, 0x8b, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xff, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x81, 0xe4, 0xc0, 0xff, 0x00, 0x00, 0x41, 0x83, 0xfc, 0x40, 0x0f, 0x85, 0xd5, 0x00, 0x00, 0x00, 0x89, 0xc3, 0x41, 0xf6, 0x47, 0x03, 0x80, 0x75, 0x21, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0f, 0x74, 0x4e, 0x48, 0x83, 0xf8, 0x01, 0x7e, 0x28, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x5c, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x38, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x3b, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x74, 0xaf, 0xeb, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x83, 0xfb, 0x02, 0x73, 0x63, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc8, 0x89, 0xc8, 0x83, 0xe0, 0x0f, 0x83, 0xc0, 0xf9, 0x83, 0xf8, 0x02, 0x73, 0x6d, 0x48, 0x8d, 0x45, 0xf8, 0x83, 0xc3, 0x07, 0x85, 0xcb, 0x75, 0x09, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x07, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x24, 0x24, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x45, 0x09, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x48, 0x09, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x49, 0x09, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(oparg >> 5) == Py_EQ || (oparg >> 5) == Py_NE\x00eq == 0 || eq == 1\x00(oparg & 0xf) == COMPARISON_NOT_EQUALS || (oparg & 0xf) == COMPARISON_EQUALS\x00op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00' // 1b0: // 1b0: OPARG // 1b8: &_PyUnicode_Equal+0x0 // 1c0: &PyInterpreterState_Get+0x0 // 1c8: &__assert_fail+0x0 // 1d0: &_PyUnicode_ExactDealloc+0x0 // 1d8: &_Py_FalseStruct+0x0 // 1e0: &_Py_TrueStruct+0x0 // 1e8: CONTINUE const unsigned char data_body[496] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x50, 0x79, 0x5f, 0x45, 0x51, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3e, 0x3e, 0x20, 0x35, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x50, 0x79, 0x5f, 0x4e, 0x45, 0x00, 0x65, 0x71, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x65, 0x71, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x00, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x4e, 0x4f, 0x54, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x20, 0x7c, 0x7c, 0x20, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x30, 0x78, 0x66, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x4f, 0x4d, 0x50, 0x41, 0x52, 0x49, 0x53, 0x4f, 0x4e, 0x5f, 0x45, 0x51, 0x55, 0x41, 0x4c, 0x53, 0x00, 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1b0, instruction->oparg); patch_64(data + 0x1b8, (uintptr_t)&_PyUnicode_Equal); patch_64(data + 0x1c0, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0x1c8, (uintptr_t)&__assert_fail); patch_64(data + 0x1d0, (uintptr_t)&_PyUnicode_ExactDealloc); patch_64(data + 0x1d8, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x1e0, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x1e8, (uintptr_t)code + sizeof(code_body)); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x8, (uintptr_t)data + 0x1ac); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0x1b4); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0x1bc); patch_x86_64_32rx(code + 0x64, (uintptr_t)data + 0x1bc); patch_32r(code + 0x86, (uintptr_t)data + 0x119); patch_32r(code + 0x8d, (uintptr_t)data + 0x12b); patch_32r(code + 0x94, (uintptr_t)data + 0x172); patch_x86_64_32rx(code + 0x9f, (uintptr_t)data + 0x1c4); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x1cc); patch_x86_64_32rx(code + 0xba, (uintptr_t)data + 0x1cc); patch_x86_64_32rx(code + 0xc5, (uintptr_t)data + 0x1ac); patch_x86_64_32rx(code + 0xe7, (uintptr_t)data + 0x1d4); patch_x86_64_32rx(code + 0xf0, (uintptr_t)data + 0x1dc); patch_x86_64_32rx(code + 0x102, (uintptr_t)data + 0x1e4); patch_32r(code + 0x109, (uintptr_t)data + 0x8a); patch_32r(code + 0x110, (uintptr_t)data + -0x4); patch_32r(code + 0x117, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x122, (uintptr_t)data + 0x1c4); patch_32r(code + 0x129, (uintptr_t)data + 0xb9); patch_32r(code + 0x130, (uintptr_t)data + -0x4); patch_32r(code + 0x137, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x142, (uintptr_t)data + 0x1c4); patch_32r(code + 0x149, (uintptr_t)data + 0xcc); patch_32r(code + 0x150, (uintptr_t)data + -0x4); patch_32r(code + 0x157, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x162, (uintptr_t)data + 0x1c4); } void emit__CONTAINS_OP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CONTAINS_OP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 9: 4c 89 f7 movq %r14, %rdi // c: 4c 89 fe movq %r15, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX PySequence_Contains-0x4 // 15: 89 c3 movl %eax, %ebx // 17: 49 8b 07 movq (%r15), %rax // 1a: 48 85 c0 testq %rax, %rax // 1d: 7e 06 jle 0x25 <_JIT_ENTRY+0x25> // 1f: 85 c0 testl %eax, %eax // 21: 79 1e jns 0x41 <_JIT_ENTRY+0x41> // 23: eb 27 jmp 0x4c <_JIT_ENTRY+0x4c> // 25: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_PC32 .L.str.1-0x4 // 2c: be 6a 09 00 00 movl $0x96a, %esi # imm = 0x96A // 31: 4c 89 fa movq %r15, %rdx // 34: ff 15 00 00 00 00 callq *(%rip) # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 3a: 49 8b 07 movq (%r15), %rax // 3d: 85 c0 testl %eax, %eax // 3f: 78 0b js 0x4c <_JIT_ENTRY+0x4c> // 41: ff 15 00 00 00 00 callq *(%rip) # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 47: 49 ff 0f decq (%r15) // 4a: 74 0e je 0x5a <_JIT_ENTRY+0x5a> // 4c: 49 8b 06 movq (%r14), %rax // 4f: 48 85 c0 testq %rax, %rax // 52: 7e 17 jle 0x6b <_JIT_ENTRY+0x6b> // 54: 85 c0 testl %eax, %eax // 56: 79 2f jns 0x87 <_JIT_ENTRY+0x87> // 58: eb 38 jmp 0x92 <_JIT_ENTRY+0x92> // 5a: 4c 89 ff movq %r15, %rdi // 5d: ff 15 00 00 00 00 callq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 63: 49 8b 06 movq (%r14), %rax // 66: 48 85 c0 testq %rax, %rax // 69: 7f e9 jg 0x54 <_JIT_ENTRY+0x54> // 6b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_PC32 .L.str.1-0x4 // 72: be 6b 09 00 00 movl $0x96b, %esi # imm = 0x96B // 77: 4c 89 f2 movq %r14, %rdx // 7a: ff 15 00 00 00 00 callq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 80: 49 8b 06 movq (%r14), %rax // 83: 85 c0 testl %eax, %eax // 85: 78 0b js 0x92 <_JIT_ENTRY+0x92> // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 8d: 49 ff 0e decq (%r14) // 90: 74 3d je 0xcf <_JIT_ENTRY+0xcf> // 92: 85 db testl %ebx, %ebx // 94: 78 46 js 0xdc <_JIT_ENTRY+0xdc> // 96: 48 8d 45 f8 leaq -0x8(%rbp), %rax // 9a: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // a1: 39 cb cmpl %ecx, %ebx // a3: 75 15 jne 0xba <_JIT_ENTRY+0xba> // a5: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // ac: 48 89 4d f0 movq %rcx, -0x10(%rbp) // b0: 48 89 c5 movq %rax, %rbp // b3: 58 popq %rax // b4: ff 25 00 00 00 00 jmpq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ba: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // c1: 48 89 4d f0 movq %rcx, -0x10(%rbp) // c5: 48 89 c5 movq %rax, %rbp // c8: 58 popq %rax // c9: ff 25 00 00 00 00 jmpq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // cf: 4c 89 f7 movq %r14, %rdi // d2: ff 15 00 00 00 00 callq *(%rip) # 0xd8 <_JIT_ENTRY+0xd8> // 00000000000000d4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // d8: 85 db testl %ebx, %ebx // da: 79 ba jns 0x96 <_JIT_ENTRY+0x96> // dc: 58 popq %rax // dd: ff 25 00 00 00 00 jmpq *(%rip) # 0xe3 <_JIT_ENTRY+0xe3> // 00000000000000df: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // e3: const unsigned char code_body[227] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xf7, 0x4c, 0x89, 0xfe, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc3, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x6a, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x6b, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x3d, 0x85, 0xdb, 0x78, 0x46, 0x48, 0x8d, 0x45, 0xf8, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x39, 0xcb, 0x75, 0x15, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xdb, 0x79, 0xba, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PySequence_Contains+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 // 60: OPARG // 68: &_Py_FalseStruct+0x0 // 70: CONTINUE // 78: &_Py_TrueStruct+0x0 // 80: ERROR_TARGET const unsigned char data_body[136] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PySequence_Contains); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x60, instruction->oparg); patch_64(data + 0x68, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x70, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x78, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x80, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x3c); patch_32r(code + 0x28, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x36, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x43, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0x54); patch_32r(code + 0x6e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x7c, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x4c); patch_32r(code + 0x9d, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0xcb, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0xd4, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xdf, (uintptr_t)data + 0x7c); } void emit__CONTAINS_OP_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CONTAINS_OP_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 10: 74 07 je 0x19 <_JIT_ENTRY+0x19> // 12: 58 popq %rax // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 1d: 48 89 df movq %rbx, %rdi // 20: 4c 89 fe movq %r15, %rsi // 23: ff 15 00 00 00 00 callq *(%rip) # 0x29 <_JIT_ENTRY+0x29> // 0000000000000025: R_X86_64_GOTPCRELX PyDict_Contains-0x4 // 29: 41 89 c6 movl %eax, %r14d // 2c: 49 8b 07 movq (%r15), %rax // 2f: 48 85 c0 testq %rax, %rax // 32: 7e 06 jle 0x3a <_JIT_ENTRY+0x3a> // 34: 85 c0 testl %eax, %eax // 36: 79 1e jns 0x56 <_JIT_ENTRY+0x56> // 38: eb 27 jmp 0x61 <_JIT_ENTRY+0x61> // 3a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_PC32 .L.str.1-0x4 // 41: be 97 09 00 00 movl $0x997, %esi # imm = 0x997 // 46: 4c 89 fa movq %r15, %rdx // 49: ff 15 00 00 00 00 callq *(%rip) # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4f: 49 8b 07 movq (%r15), %rax // 52: 85 c0 testl %eax, %eax // 54: 78 0b js 0x61 <_JIT_ENTRY+0x61> // 56: ff 15 00 00 00 00 callq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5c: 49 ff 0f decq (%r15) // 5f: 74 0e je 0x6f <_JIT_ENTRY+0x6f> // 61: 48 8b 03 movq (%rbx), %rax // 64: 48 85 c0 testq %rax, %rax // 67: 7e 17 jle 0x80 <_JIT_ENTRY+0x80> // 69: 85 c0 testl %eax, %eax // 6b: 79 2f jns 0x9c <_JIT_ENTRY+0x9c> // 6d: eb 38 jmp 0xa7 <_JIT_ENTRY+0xa7> // 6f: 4c 89 ff movq %r15, %rdi // 72: ff 15 00 00 00 00 callq *(%rip) # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 78: 48 8b 03 movq (%rbx), %rax // 7b: 48 85 c0 testq %rax, %rax // 7e: 7f e9 jg 0x69 <_JIT_ENTRY+0x69> // 80: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_PC32 .L.str.1-0x4 // 87: be 98 09 00 00 movl $0x998, %esi # imm = 0x998 // 8c: 48 89 da movq %rbx, %rdx // 8f: ff 15 00 00 00 00 callq *(%rip) # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 95: 48 8b 03 movq (%rbx), %rax // 98: 85 c0 testl %eax, %eax // 9a: 78 0b js 0xa7 <_JIT_ENTRY+0xa7> // 9c: ff 15 00 00 00 00 callq *(%rip) # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // a2: 48 ff 0b decq (%rbx) // a5: 74 3f je 0xe6 <_JIT_ENTRY+0xe6> // a7: 45 85 f6 testl %r14d, %r14d // aa: 78 48 js 0xf4 <_JIT_ENTRY+0xf4> // ac: 48 8d 45 f8 leaq -0x8(%rbp), %rax // b0: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b7: 41 39 ce cmpl %ecx, %r14d // ba: 75 15 jne 0xd1 <_JIT_ENTRY+0xd1> // bc: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xc3 <_JIT_ENTRY+0xc3> // 00000000000000bf: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // c3: 48 89 4d f0 movq %rcx, -0x10(%rbp) // c7: 48 89 c5 movq %rax, %rbp // ca: 58 popq %rax // cb: ff 25 00 00 00 00 jmpq *(%rip) # 0xd1 <_JIT_ENTRY+0xd1> // 00000000000000cd: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // d1: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xd8 <_JIT_ENTRY+0xd8> // 00000000000000d4: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // d8: 48 89 4d f0 movq %rcx, -0x10(%rbp) // dc: 48 89 c5 movq %rax, %rbp // df: 58 popq %rax // e0: ff 25 00 00 00 00 jmpq *(%rip) # 0xe6 <_JIT_ENTRY+0xe6> // 00000000000000e2: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // e6: 48 89 df movq %rbx, %rdi // e9: ff 15 00 00 00 00 callq *(%rip) # 0xef <_JIT_ENTRY+0xef> // 00000000000000eb: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // ef: 45 85 f6 testl %r14d, %r14d // f2: 79 b8 jns 0xac <_JIT_ENTRY+0xac> // f4: 58 popq %rax // f5: ff 25 00 00 00 00 jmpq *(%rip) # 0xfb <_JIT_ENTRY+0xfb> // 00000000000000f7: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // fb: const unsigned char code_body[251] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x89, 0xdf, 0x4c, 0x89, 0xfe, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x97, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x98, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x3f, 0x45, 0x85, 0xf6, 0x78, 0x48, 0x48, 0x8d, 0x45, 0xf8, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x41, 0x39, 0xce, 0x75, 0x15, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x79, 0xb8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyDict_Type+0x0 // 48: JUMP_TARGET // 50: &PyDict_Contains+0x0 // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 // 70: OPARG // 78: &_Py_FalseStruct+0x0 // 80: CONTINUE // 88: &_Py_TrueStruct+0x0 // 90: ERROR_TARGET const unsigned char data_body[152] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyDict_Type); patch_64(data + 0x48, instruction_starts[instruction->jump_target]); patch_64(data + 0x50, (uintptr_t)&PyDict_Contains); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, instruction->oparg); patch_64(data + 0x78, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x80, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x88, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x90, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x25, (uintptr_t)data + 0x4c); patch_32r(code + 0x3d, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4b, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x74, (uintptr_t)data + 0x64); patch_32r(code + 0x83, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0x5c); patch_32r(code + 0xb3, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0xbf, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0xcd, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0xd4, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0xe2, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0xeb, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0xf7, (uintptr_t)data + 0x8c); } void emit__CONTAINS_OP_SET( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CONTAINS_OP_SET.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 9: 48 8b 43 08 movq 0x8(%rbx), %rax // d: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x14 <_JIT_ENTRY+0x14> // 0000000000000010: R_X86_64_REX_GOTPCRELX PySet_Type-0x4 // 14: 74 10 je 0x26 <_JIT_ENTRY+0x26> // 16: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_REX_GOTPCRELX PyFrozenSet_Type-0x4 // 1d: 74 07 je 0x26 <_JIT_ENTRY+0x26> // 1f: 58 popq %rax // 20: ff 25 00 00 00 00 jmpq *(%rip) # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 26: 48 89 df movq %rbx, %rdi // 29: 4c 89 fe movq %r15, %rsi // 2c: ff 15 00 00 00 00 callq *(%rip) # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_GOTPCRELX _PySet_Contains-0x4 // 32: 41 89 c6 movl %eax, %r14d // 35: 49 8b 07 movq (%r15), %rax // 38: 48 85 c0 testq %rax, %rax // 3b: 7e 06 jle 0x43 <_JIT_ENTRY+0x43> // 3d: 85 c0 testl %eax, %eax // 3f: 79 1e jns 0x5f <_JIT_ENTRY+0x5f> // 41: eb 27 jmp 0x6a <_JIT_ENTRY+0x6a> // 43: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_PC32 .L.str.1-0x4 // 4a: be 81 09 00 00 movl $0x981, %esi # imm = 0x981 // 4f: 4c 89 fa movq %r15, %rdx // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 58: 49 8b 07 movq (%r15), %rax // 5b: 85 c0 testl %eax, %eax // 5d: 78 0b js 0x6a <_JIT_ENTRY+0x6a> // 5f: ff 15 00 00 00 00 callq *(%rip) # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 65: 49 ff 0f decq (%r15) // 68: 74 0e je 0x78 <_JIT_ENTRY+0x78> // 6a: 48 8b 03 movq (%rbx), %rax // 6d: 48 85 c0 testq %rax, %rax // 70: 7e 17 jle 0x89 <_JIT_ENTRY+0x89> // 72: 85 c0 testl %eax, %eax // 74: 79 2f jns 0xa5 <_JIT_ENTRY+0xa5> // 76: eb 38 jmp 0xb0 <_JIT_ENTRY+0xb0> // 78: 4c 89 ff movq %r15, %rdi // 7b: ff 15 00 00 00 00 callq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 81: 48 8b 03 movq (%rbx), %rax // 84: 48 85 c0 testq %rax, %rax // 87: 7f e9 jg 0x72 <_JIT_ENTRY+0x72> // 89: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_PC32 .L.str.1-0x4 // 90: be 82 09 00 00 movl $0x982, %esi # imm = 0x982 // 95: 48 89 da movq %rbx, %rdx // 98: ff 15 00 00 00 00 callq *(%rip) # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 9e: 48 8b 03 movq (%rbx), %rax // a1: 85 c0 testl %eax, %eax // a3: 78 0b js 0xb0 <_JIT_ENTRY+0xb0> // a5: ff 15 00 00 00 00 callq *(%rip) # 0xab <_JIT_ENTRY+0xab> // 00000000000000a7: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ab: 48 ff 0b decq (%rbx) // ae: 74 3f je 0xef <_JIT_ENTRY+0xef> // b0: 45 85 f6 testl %r14d, %r14d // b3: 78 48 js 0xfd <_JIT_ENTRY+0xfd> // b5: 48 8d 45 f8 leaq -0x8(%rbp), %rax // b9: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // c0: 41 39 ce cmpl %ecx, %r14d // c3: 75 15 jne 0xda <_JIT_ENTRY+0xda> // c5: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // cc: 48 89 4d f0 movq %rcx, -0x10(%rbp) // d0: 48 89 c5 movq %rax, %rbp // d3: 58 popq %rax // d4: ff 25 00 00 00 00 jmpq *(%rip) # 0xda <_JIT_ENTRY+0xda> // 00000000000000d6: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // da: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // e1: 48 89 4d f0 movq %rcx, -0x10(%rbp) // e5: 48 89 c5 movq %rax, %rbp // e8: 58 popq %rax // e9: ff 25 00 00 00 00 jmpq *(%rip) # 0xef <_JIT_ENTRY+0xef> // 00000000000000eb: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ef: 48 89 df movq %rbx, %rdi // f2: ff 15 00 00 00 00 callq *(%rip) # 0xf8 <_JIT_ENTRY+0xf8> // 00000000000000f4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // f8: 45 85 f6 testl %r14d, %r14d // fb: 79 b8 jns 0xb5 <_JIT_ENTRY+0xb5> // fd: 58 popq %rax // fe: ff 25 00 00 00 00 jmpq *(%rip) # 0x104 <_JIT_ENTRY+0x104> // 0000000000000100: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 104: const unsigned char code_body[260] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x10, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0x4c, 0x89, 0xfe, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x81, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x82, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x3f, 0x45, 0x85, 0xf6, 0x78, 0x48, 0x48, 0x8d, 0x45, 0xf8, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x41, 0x39, 0xce, 0x75, 0x15, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x79, 0xb8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PySet_Type+0x0 // 48: &PyFrozenSet_Type+0x0 // 50: JUMP_TARGET // 58: &_PySet_Contains+0x0 // 60: &_Py_NegativeRefcount+0x0 // 68: &_Py_DECREF_DecRefTotal+0x0 // 70: &_Py_Dealloc+0x0 // 78: OPARG // 80: &_Py_FalseStruct+0x0 // 88: CONTINUE // 90: &_Py_TrueStruct+0x0 // 98: ERROR_TARGET const unsigned char data_body[160] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PySet_Type); patch_64(data + 0x48, (uintptr_t)&PyFrozenSet_Type); patch_64(data + 0x50, instruction_starts[instruction->jump_target]); patch_64(data + 0x58, (uintptr_t)&_PySet_Contains); patch_64(data + 0x60, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x68, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x70, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x78, instruction->oparg); patch_64(data + 0x80, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x88, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x90, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x98, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x10, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x19, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x54); patch_32r(code + 0x46, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x61, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x6c); patch_32r(code + 0x8c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x9a, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xa7, (uintptr_t)data + 0x64); patch_32r(code + 0xbc, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0xc8, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0xd6, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0xdd, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0xeb, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0xf4, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x100, (uintptr_t)data + 0x94); } void emit__CONVERT_VALUE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_CONVERT_VALUE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 85 c0 testw %ax, %ax // b: 0f 84 82 00 00 00 je 0x93 <_JIT_ENTRY+0x93> // 11: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 18: 66 83 f8 04 cmpw $0x4, %ax // 1c: 73 75 jae 0x93 <_JIT_ENTRY+0x93> // 1e: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 22: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x29 <_JIT_ENTRY+0x29> // 0000000000000025: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 29: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x30 <_JIT_ENTRY+0x30> // 000000000000002c: R_X86_64_REX_GOTPCRELX _PyEval_ConversionFuncs-0x4 // 30: 4c 89 f7 movq %r14, %rdi // 33: ff 14 c1 callq *(%rcx,%rax,8) // 36: 48 89 c3 movq %rax, %rbx // 39: 49 8b 06 movq (%r14), %rax // 3c: 48 85 c0 testq %rax, %rax // 3f: 7e 06 jle 0x47 <_JIT_ENTRY+0x47> // 41: 85 c0 testl %eax, %eax // 43: 79 1e jns 0x63 <_JIT_ENTRY+0x63> // 45: eb 27 jmp 0x6e <_JIT_ENTRY+0x6e> // 47: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_PC32 .L.str.1-0x4 // 4e: be fe 0f 00 00 movl $0xffe, %esi # imm = 0xFFE // 53: 4c 89 f2 movq %r14, %rdx // 56: ff 15 00 00 00 00 callq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 5c: 49 8b 06 movq (%r14), %rax // 5f: 85 c0 testl %eax, %eax // 61: 78 0b js 0x6e <_JIT_ENTRY+0x6e> // 63: ff 15 00 00 00 00 callq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 69: 49 ff 0e decq (%r14) // 6c: 74 10 je 0x7e <_JIT_ENTRY+0x7e> // 6e: 48 85 db testq %rbx, %rbx // 71: 74 19 je 0x8c <_JIT_ENTRY+0x8c> // 73: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 77: 58 popq %rax // 78: ff 25 00 00 00 00 jmpq *(%rip) # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 7e: 4c 89 f7 movq %r14, %rdi // 81: ff 15 00 00 00 00 callq *(%rip) # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 87: 48 85 db testq %rbx, %rbx // 8a: 75 e7 jne 0x73 <_JIT_ENTRY+0x73> // 8c: 58 popq %rax // 8d: ff 25 00 00 00 00 jmpq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 93: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_PC32 .L.str.99-0x4 // 9a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_PC32 .L.str.1-0x4 // a1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // a8: ba fb 0f 00 00 movl $0xffb, %edx # imm = 0xFFB // ad: ff 15 00 00 00 00 callq *(%rip) # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_GOTPCRELX __assert_fail-0x4 // b3: const unsigned char code_body[179] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x0f, 0x84, 0x82, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x04, 0x73, 0x75, 0x4c, 0x8b, 0x75, 0xf8, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x14, 0xc1, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xfe, 0x0f, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x10, 0x48, 0x85, 0xdb, 0x74, 0x19, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe7, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xfb, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg >= FVC_STR && oparg <= FVC_ASCII\x00' // b5: 00 00 00 // b8: OPARG // c0: &_PyEval_ConversionFuncs+0x0 // c8: &_Py_NegativeRefcount+0x0 // d0: &_Py_DECREF_DecRefTotal+0x0 // d8: CONTINUE // e0: &_Py_Dealloc+0x0 // e8: ERROR_TARGET // f0: &__assert_fail+0x0 const unsigned char data_body[248] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3e, 0x3d, 0x20, 0x46, 0x56, 0x43, 0x5f, 0x53, 0x54, 0x52, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3c, 0x3d, 0x20, 0x46, 0x56, 0x43, 0x5f, 0x41, 0x53, 0x43, 0x49, 0x49, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_PyEval_ConversionFuncs); patch_64(data + 0xc8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xd0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xd8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xe8, instruction_starts[instruction->error_target]); patch_64(data + 0xf0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + 0xb4); patch_32r(code + 0x25, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x2c, (uintptr_t)data + 0xbc); patch_32r(code + 0x4a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x65, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x7a, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x83, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0xe4); patch_32r(code + 0x96, (uintptr_t)data + 0x8a); patch_32r(code + 0x9d, (uintptr_t)data + -0x4); patch_32r(code + 0xa4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0xec); } void emit__COPY( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_COPY.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 85 c0 testw %ax, %ax // b: 74 30 je 0x3d <_JIT_ENTRY+0x3d> // d: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x14 <_JIT_ENTRY+0x14> // 0000000000000010: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 14: c1 e0 03 shll $0x3, %eax // 17: 48 89 e9 movq %rbp, %rcx // 1a: 48 29 c1 subq %rax, %rcx // 1d: 48 8b 19 movq (%rcx), %rbx // 20: 8b 03 movl (%rbx), %eax // 22: ff c0 incl %eax // 24: 74 08 je 0x2e <_JIT_ENTRY+0x2e> // 26: 89 03 movl %eax, (%rbx) // 28: ff 15 00 00 00 00 callq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 2e: 48 89 5d 00 movq %rbx, (%rbp) // 32: 48 83 c5 08 addq $0x8, %rbp // 36: 58 popq %rax // 37: ff 25 00 00 00 00 jmpq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 3d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_PC32 .L.str.100-0x4 // 44: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_PC32 .L.str.1-0x4 // 4b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 52: ba 2a 10 00 00 movl $0x102a, %edx # imm = 0x102A // 57: ff 15 00 00 00 00 callq *(%rip) # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_GOTPCRELX __assert_fail-0x4 // 5d: const unsigned char code_body[93] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x74, 0x30, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x03, 0x48, 0x89, 0xe9, 0x48, 0x29, 0xc1, 0x48, 0x8b, 0x19, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x2a, 0x10, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg > 0\x00' // 98: // 98: OPARG // a0: &_Py_INCREF_IncRefTotal+0x0 // a8: CONTINUE // b0: &__assert_fail+0x0 const unsigned char data_body[184] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x98, instruction->oparg); patch_64(data + 0xa0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xa8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xb0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0x94); patch_32r(code + 0x10, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x2a, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0xa4); patch_32r(code + 0x40, (uintptr_t)data + 0x8a); patch_32r(code + 0x47, (uintptr_t)data + -0x4); patch_32r(code + 0x4e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0xac); } void emit__COPY_FREE_VARS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_COPY_FREE_VARS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 49 8b 45 00 movq (%r13), %rax // 8: 48 8b 48 08 movq 0x8(%rax), %rcx // c: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 13: 0f 85 dc 00 00 00 jne 0xf5 <_JIT_ENTRY+0xf5> // 19: 49 8b 4d 10 movq 0x10(%r13), %rcx // 1d: 48 8b 51 08 movq 0x8(%rcx), %rdx // 21: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 28: 0f 85 e7 00 00 00 jne 0x115 <_JIT_ENTRY+0x115> // 2e: 4c 89 2c 24 movq %r13, (%rsp) // 32: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 37: 4c 89 64 24 10 movq %r12, 0x10(%rsp) // 3c: 44 0f b7 25 00 00 00 00 movzwl (%rip), %r12d # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 44: 44 39 60 58 cmpl %r12d, 0x58(%rax) // 48: 0f 85 e7 00 00 00 jne 0x135 <_JIT_ENTRY+0x135> // 4e: 48 8b 15 00 00 00 00 movq (%rip), %rdx # 0x55 <_JIT_ENTRY+0x55> // 0000000000000051: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 55: 66 85 d2 testw %dx, %dx // 58: 74 63 je 0xbd <_JIT_ENTRY+0xbd> // 5a: 4c 8b 71 48 movq 0x48(%rcx), %r14 // 5e: 8b 40 48 movl 0x48(%rax), %eax // 61: 44 29 e0 subl %r12d, %eax // 64: 41 83 fc 01 cmpl $0x1, %r12d // 68: 41 83 d4 00 adcl $0x0, %r12d // 6c: 48 98 cltq // 6e: 48 8b 0c 24 movq (%rsp), %rcx // 72: 4c 8d 3c c1 leaq (%rcx,%rax,8), %r15 // 76: 49 83 c7 48 addq $0x48, %r15 // 7a: 31 db xorl %ebx, %ebx // 7c: 4c 8b 2d 00 00 00 00 movq (%rip), %r13 # 0x83 <_JIT_ENTRY+0x83> // 000000000000007f: R_X86_64_REX_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 83: eb 17 jmp 0x9c <_JIT_ENTRY+0x9c> // 85: 66 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // 90: 49 89 2c df movq %rbp, (%r15,%rbx,8) // 94: 48 ff c3 incq %rbx // 97: 49 39 dc cmpq %rbx, %r12 // 9a: 74 21 je 0xbd <_JIT_ENTRY+0xbd> // 9c: 49 8b 46 08 movq 0x8(%r14), %rax // a0: f6 80 ab 00 00 00 04 testb $0x4, 0xab(%rax) // a7: 74 2c je 0xd5 <_JIT_ENTRY+0xd5> // a9: 49 8b 6c de 18 movq 0x18(%r14,%rbx,8), %rbp // ae: 8b 45 00 movl (%rbp), %eax // b1: ff c0 incl %eax // b3: 74 db je 0x90 <_JIT_ENTRY+0x90> // b5: 89 45 00 movl %eax, (%rbp) // b8: 41 ff d5 callq *%r13 // bb: eb d3 jmp 0x90 <_JIT_ENTRY+0x90> // bd: 4c 8b 2c 24 movq (%rsp), %r13 // c1: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // c6: 4c 8b 64 24 10 movq 0x10(%rsp), %r12 // cb: 48 83 c4 18 addq $0x18, %rsp // cf: ff 25 00 00 00 00 jmpq *(%rip) # 0xd5 <_JIT_ENTRY+0xd5> // 00000000000000d1: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // d5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xdc <_JIT_ENTRY+0xdc> // 00000000000000d8: R_X86_64_PC32 .L.str.35-0x4 // dc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xe3 <_JIT_ENTRY+0xe3> // 00000000000000df: R_X86_64_PC32 .L.str.1-0x4 // e3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xea <_JIT_ENTRY+0xea> // 00000000000000e6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // ea: ba 6b 06 00 00 movl $0x66b, %edx # imm = 0x66B // ef: ff 15 00 00 00 00 callq *(%rip) # 0xf5 <_JIT_ENTRY+0xf5> // 00000000000000f1: R_X86_64_GOTPCRELX __assert_fail-0x4 // f5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xfc <_JIT_ENTRY+0xfc> // 00000000000000f8: R_X86_64_PC32 .L.str.108-0x4 // fc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x103 <_JIT_ENTRY+0x103> // 00000000000000ff: R_X86_64_PC32 .L.str.109-0x4 // 103: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x10a <_JIT_ENTRY+0x10a> // 0000000000000106: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 10a: ba 4d 00 00 00 movl $0x4d, %edx // 10f: ff 15 00 00 00 00 callq *(%rip) # 0x115 <_JIT_ENTRY+0x115> // 0000000000000111: R_X86_64_GOTPCRELX __assert_fail-0x4 // 115: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x11c <_JIT_ENTRY+0x11c> // 0000000000000118: R_X86_64_PC32 .L.str.33-0x4 // 11c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x123 <_JIT_ENTRY+0x123> // 000000000000011f: R_X86_64_PC32 .L.str.1-0x4 // 123: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x12a <_JIT_ENTRY+0x12a> // 0000000000000126: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 12a: ba 66 06 00 00 movl $0x666, %edx # imm = 0x666 // 12f: ff 15 00 00 00 00 callq *(%rip) # 0x135 <_JIT_ENTRY+0x135> // 0000000000000131: R_X86_64_GOTPCRELX __assert_fail-0x4 // 135: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x13c <_JIT_ENTRY+0x13c> // 0000000000000138: R_X86_64_PC32 .L.str.34-0x4 // 13c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x143 <_JIT_ENTRY+0x143> // 000000000000013f: R_X86_64_PC32 .L.str.1-0x4 // 143: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x14a <_JIT_ENTRY+0x14a> // 0000000000000146: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 14a: ba 68 06 00 00 movl $0x668, %edx # imm = 0x668 // 14f: ff 15 00 00 00 00 callq *(%rip) # 0x155 <_JIT_ENTRY+0x155> // 0000000000000151: R_X86_64_GOTPCRELX __assert_fail-0x4 // 155: const unsigned char code_body[341] = { 0x48, 0x83, 0xec, 0x18, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xdc, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4d, 0x10, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xe7, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x2c, 0x24, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x4c, 0x89, 0x64, 0x24, 0x10, 0x44, 0x0f, 0xb7, 0x25, 0x00, 0x00, 0x00, 0x00, 0x44, 0x39, 0x60, 0x58, 0x0f, 0x85, 0xe7, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xd2, 0x74, 0x63, 0x4c, 0x8b, 0x71, 0x48, 0x8b, 0x40, 0x48, 0x44, 0x29, 0xe0, 0x41, 0x83, 0xfc, 0x01, 0x41, 0x83, 0xd4, 0x00, 0x48, 0x98, 0x48, 0x8b, 0x0c, 0x24, 0x4c, 0x8d, 0x3c, 0xc1, 0x49, 0x83, 0xc7, 0x48, 0x31, 0xdb, 0x4c, 0x8b, 0x2d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x17, 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x2c, 0xdf, 0x48, 0xff, 0xc3, 0x49, 0x39, 0xdc, 0x74, 0x21, 0x49, 0x8b, 0x46, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x04, 0x74, 0x2c, 0x49, 0x8b, 0x6c, 0xde, 0x18, 0x8b, 0x45, 0x00, 0xff, 0xc0, 0x74, 0xdb, 0x89, 0x45, 0x00, 0x41, 0xff, 0xd5, 0xeb, 0xd3, 0x4c, 0x8b, 0x2c, 0x24, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x64, 0x24, 0x10, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x6b, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x66, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x68, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyFunction_Check(frame->f_funcobj)\x00oparg == co->co_nfreevars\x00PyTuple_Check(closure)\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 17c: 00 00 00 00 // 180: &PyCode_Type+0x0 // 188: &PyFunction_Type+0x0 // 190: OPARG // 198: &_Py_INCREF_IncRefTotal+0x0 // 1a0: CONTINUE // 1a8: &__assert_fail+0x0 const unsigned char data_body[432] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x66, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x6f, 0x62, 0x6a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x63, 0x6f, 0x2d, 0x3e, 0x63, 0x6f, 0x5f, 0x6e, 0x66, 0x72, 0x65, 0x65, 0x76, 0x61, 0x72, 0x73, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x29, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x180, (uintptr_t)&PyCode_Type); patch_64(data + 0x188, (uintptr_t)&PyFunction_Type); patch_64(data + 0x190, instruction->oparg); patch_64(data + 0x198, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x1a0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1a8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0x184); patch_32r(code + 0x40, (uintptr_t)data + 0x18c); patch_x86_64_32rx(code + 0x51, (uintptr_t)data + 0x18c); patch_x86_64_32rx(code + 0x7f, (uintptr_t)data + 0x194); patch_x86_64_32rx(code + 0xd1, (uintptr_t)data + 0x19c); patch_32r(code + 0xd8, (uintptr_t)data + 0xc7); patch_32r(code + 0xdf, (uintptr_t)data + -0x4); patch_32r(code + 0xe6, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xf1, (uintptr_t)data + 0x1a4); patch_32r(code + 0xf8, (uintptr_t)data + 0xde); patch_32r(code + 0xff, (uintptr_t)data + 0xfc); patch_32r(code + 0x106, (uintptr_t)data + 0x142); patch_x86_64_32rx(code + 0x111, (uintptr_t)data + 0x1a4); patch_32r(code + 0x118, (uintptr_t)data + 0x8a); patch_32r(code + 0x11f, (uintptr_t)data + -0x4); patch_32r(code + 0x126, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x131, (uintptr_t)data + 0x1a4); patch_32r(code + 0x138, (uintptr_t)data + 0xad); patch_32r(code + 0x13f, (uintptr_t)data + -0x4); patch_32r(code + 0x146, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x151, (uintptr_t)data + 0x1a4); } void emit__DELETE_ATTR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DELETE_ATTR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 af 00 00 00 jne 0xc5 <_JIT_ENTRY+0xc5> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 ba 00 00 00 je 0xe5 <_JIT_ENTRY+0xe5> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 cd 00 00 00 je 0x105 <_JIT_ENTRY+0x105> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 e0 00 00 00 je 0x125 <_JIT_ENTRY+0x125> // 45: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4c: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 50: 0f 8e ef 00 00 00 jle 0x145 <_JIT_ENTRY+0x145> // 56: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5a: 48 8b 74 c8 18 movq 0x18(%rax,%rcx,8), %rsi // 5f: 48 89 df movq %rbx, %rdi // 62: ff 15 00 00 00 00 callq *(%rip) # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_GOTPCRELX PyObject_DelAttr-0x4 // 68: 41 89 c6 movl %eax, %r14d // 6b: 48 8b 03 movq (%rbx), %rax // 6e: 48 85 c0 testq %rax, %rax // 71: 7e 06 jle 0x79 <_JIT_ENTRY+0x79> // 73: 85 c0 testl %eax, %eax // 75: 79 1e jns 0x95 <_JIT_ENTRY+0x95> // 77: eb 27 jmp 0xa0 <_JIT_ENTRY+0xa0> // 79: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_PC32 .L.str.1-0x4 // 80: be 45 05 00 00 movl $0x545, %esi # imm = 0x545 // 85: 48 89 da movq %rbx, %rdx // 88: ff 15 00 00 00 00 callq *(%rip) # 0x8e <_JIT_ENTRY+0x8e> // 000000000000008a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 8e: 48 8b 03 movq (%rbx), %rax // 91: 85 c0 testl %eax, %eax // 93: 78 0b js 0xa0 <_JIT_ENTRY+0xa0> // 95: ff 15 00 00 00 00 callq *(%rip) # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 9b: 48 ff 0b decq (%rbx) // 9e: 74 0c je 0xac <_JIT_ENTRY+0xac> // a0: 45 85 f6 testl %r14d, %r14d // a3: 74 15 je 0xba <_JIT_ENTRY+0xba> // a5: 58 popq %rax // a6: ff 25 00 00 00 00 jmpq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // ac: 48 89 df movq %rbx, %rdi // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // b5: 45 85 f6 testl %r14d, %r14d // b8: 75 eb jne 0xa5 <_JIT_ENTRY+0xa5> // ba: 48 83 c5 f8 addq $-0x8, %rbp // be: 58 popq %rax // bf: ff 25 00 00 00 00 jmpq *(%rip) # 0xc5 <_JIT_ENTRY+0xc5> // 00000000000000c1: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_PC32 .L.str.108-0x4 // cc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd3 <_JIT_ENTRY+0xd3> // 00000000000000cf: R_X86_64_PC32 .L.str.109-0x4 // d3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xda <_JIT_ENTRY+0xda> // 00000000000000d6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // da: ba 4d 00 00 00 movl $0x4d, %edx // df: ff 15 00 00 00 00 callq *(%rip) # 0xe5 <_JIT_ENTRY+0xe5> // 00000000000000e1: R_X86_64_GOTPCRELX __assert_fail-0x4 // e5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xec <_JIT_ENTRY+0xec> // 00000000000000e8: R_X86_64_PC32 .L.str.110-0x4 // ec: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf3 <_JIT_ENTRY+0xf3> // 00000000000000ef: R_X86_64_PC32 .L.str.111-0x4 // f3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xfa <_JIT_ENTRY+0xfa> // 00000000000000f6: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // fa: ba 99 00 00 00 movl $0x99, %edx // ff: ff 15 00 00 00 00 callq *(%rip) # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_GOTPCRELX __assert_fail-0x4 // 105: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x10c <_JIT_ENTRY+0x10c> // 0000000000000108: R_X86_64_PC32 .L.str.115-0x4 // 10c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x113 <_JIT_ENTRY+0x113> // 000000000000010f: R_X86_64_PC32 .L.str.114-0x4 // 113: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x11a <_JIT_ENTRY+0x11a> // 0000000000000116: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 11a: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 11f: ff 15 00 00 00 00 callq *(%rip) # 0x125 <_JIT_ENTRY+0x125> // 0000000000000121: R_X86_64_GOTPCRELX __assert_fail-0x4 // 125: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12c <_JIT_ENTRY+0x12c> // 0000000000000128: R_X86_64_PC32 .L.str.116-0x4 // 12c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x133 <_JIT_ENTRY+0x133> // 000000000000012f: R_X86_64_PC32 .L.str.114-0x4 // 133: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x13a <_JIT_ENTRY+0x13a> // 0000000000000136: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 13a: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 13f: ff 15 00 00 00 00 callq *(%rip) # 0x145 <_JIT_ENTRY+0x145> // 0000000000000141: R_X86_64_GOTPCRELX __assert_fail-0x4 // 145: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x14c <_JIT_ENTRY+0x14c> // 0000000000000148: R_X86_64_PC32 .L.str.113-0x4 // 14c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x153 <_JIT_ENTRY+0x153> // 000000000000014f: R_X86_64_PC32 .L.str.111-0x4 // 153: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x15a <_JIT_ENTRY+0x15a> // 0000000000000156: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 15a: ba 9b 00 00 00 movl $0x9b, %edx // 15f: ff 15 00 00 00 00 callq *(%rip) # 0x165 <_JIT_ENTRY+0x165> // 0000000000000161: R_X86_64_GOTPCRELX __assert_fail-0x4 // 165: const unsigned char code_body[357] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xaf, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xba, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xcd, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xe0, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0xef, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x74, 0xc8, 0x18, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x45, 0x05, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0c, 0x45, 0x85, 0xf6, 0x74, 0x15, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x75, 0xeb, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 1f7: 00 // 1f8: &PyCode_Type+0x0 // 200: &PyLong_Type+0x0 // 208: &PyBool_Type+0x0 // 210: OPARG // 218: &PyObject_DelAttr+0x0 // 220: &_Py_NegativeRefcount+0x0 // 228: &_Py_DECREF_DecRefTotal+0x0 // 230: ERROR_TARGET // 238: &_Py_Dealloc+0x0 // 240: CONTINUE // 248: &__assert_fail+0x0 const unsigned char data_body[592] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1f8, (uintptr_t)&PyCode_Type); patch_64(data + 0x200, (uintptr_t)&PyLong_Type); patch_64(data + 0x208, (uintptr_t)&PyBool_Type); patch_64(data + 0x210, instruction->oparg); patch_64(data + 0x218, (uintptr_t)&PyObject_DelAttr); patch_64(data + 0x220, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x228, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x230, instruction_starts[instruction->error_target]); patch_64(data + 0x238, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x240, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x248, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x204); patch_32r(code + 0x48, (uintptr_t)data + 0x20c); patch_x86_64_32rx(code + 0x64, (uintptr_t)data + 0x214); patch_32r(code + 0x7c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x8a, (uintptr_t)data + 0x21c); patch_x86_64_32rx(code + 0x97, (uintptr_t)data + 0x224); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x22c); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0xc1, (uintptr_t)data + 0x23c); patch_32r(code + 0xc8, (uintptr_t)data + 0x3c); patch_32r(code + 0xcf, (uintptr_t)data + 0x5a); patch_32r(code + 0xd6, (uintptr_t)data + 0xa0); patch_x86_64_32rx(code + 0xe1, (uintptr_t)data + 0x244); patch_32r(code + 0xe8, (uintptr_t)data + 0xd6); patch_32r(code + 0xef, (uintptr_t)data + 0xe7); patch_32r(code + 0xf6, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x101, (uintptr_t)data + 0x244); patch_32r(code + 0x108, (uintptr_t)data + 0x19c); patch_32r(code + 0x10f, (uintptr_t)data + 0x165); patch_32r(code + 0x116, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x121, (uintptr_t)data + 0x244); patch_32r(code + 0x128, (uintptr_t)data + 0x1d7); patch_32r(code + 0x12f, (uintptr_t)data + 0x165); patch_32r(code + 0x136, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x141, (uintptr_t)data + 0x244); patch_32r(code + 0x148, (uintptr_t)data + 0x14d); patch_32r(code + 0x14f, (uintptr_t)data + 0xe7); patch_32r(code + 0x156, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x161, (uintptr_t)data + 0x244); } void emit__DELETE_DEREF( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DELETE_DEREF.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: 49 8b 44 c5 48 movq 0x48(%r13,%rax,8), %rax // d: 48 8b 58 10 movq 0x10(%rax), %rbx // 11: 48 c7 40 10 00 00 00 00 movq $0x0, 0x10(%rax) // 19: 48 85 db testq %rbx, %rbx // 1c: 74 13 je 0x31 <_JIT_ENTRY+0x31> // 1e: 48 8b 03 movq (%rbx), %rax // 21: 48 85 c0 testq %rax, %rax // 24: 7e 33 jle 0x59 <_JIT_ENTRY+0x59> // 26: 85 c0 testl %eax, %eax // 28: 79 4b jns 0x75 <_JIT_ENTRY+0x75> // 2a: 58 popq %rax // 2b: ff 25 00 00 00 00 jmpq *(%rip) # 0x31 <_JIT_ENTRY+0x31> // 000000000000002d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 31: 49 8b 75 00 movq (%r13), %rsi // 35: 48 8b 46 08 movq 0x8(%rsi), %rax // 39: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 40: 75 4e jne 0x90 <_JIT_ENTRY+0x90> // 42: 0f b7 15 00 00 00 00 movzwl (%rip), %edx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 49: 4c 89 e7 movq %r12, %rdi // 4c: ff 15 00 00 00 00 callq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _PyEval_FormatExcUnbound-0x4 // 52: 58 popq %rax // 53: ff 25 00 00 00 00 jmpq *(%rip) # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 59: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_PC32 .L.str.1-0x4 // 60: be 2d 06 00 00 movl $0x62d, %esi # imm = 0x62D // 65: 48 89 da movq %rbx, %rdx // 68: ff 15 00 00 00 00 callq *(%rip) # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 6e: 48 8b 03 movq (%rbx), %rax // 71: 85 c0 testl %eax, %eax // 73: 78 b5 js 0x2a <_JIT_ENTRY+0x2a> // 75: ff 15 00 00 00 00 callq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 7b: 48 ff 0b decq (%rbx) // 7e: 75 aa jne 0x2a <_JIT_ENTRY+0x2a> // 80: 48 89 df movq %rbx, %rdi // 83: ff 15 00 00 00 00 callq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 89: 58 popq %rax // 8a: ff 25 00 00 00 00 jmpq *(%rip) # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 90: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_PC32 .L.str.108-0x4 // 97: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_PC32 .L.str.109-0x4 // 9e: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa5 <_JIT_ENTRY+0xa5> // 00000000000000a1: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // a5: ba 4d 00 00 00 movl $0x4d, %edx // aa: ff 15 00 00 00 00 callq *(%rip) # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_GOTPCRELX __assert_fail-0x4 // b0: const unsigned char code_body[176] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x44, 0xc5, 0x48, 0x48, 0x8b, 0x58, 0x10, 0x48, 0xc7, 0x40, 0x10, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x13, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x33, 0x85, 0xc0, 0x79, 0x4b, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x75, 0x00, 0x48, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x4e, 0x0f, 0xb7, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x2d, 0x06, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xb5, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xaa, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // da: 00 00 00 00 00 00 // e0: OPARG // e8: CONTINUE // f0: &PyCode_Type+0x0 // f8: &_PyEval_FormatExcUnbound+0x0 // 100: ERROR_TARGET // 108: &_Py_NegativeRefcount+0x0 // 110: &_Py_DECREF_DecRefTotal+0x0 // 118: &_Py_Dealloc+0x0 // 120: &__assert_fail+0x0 const unsigned char data_body[296] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&PyCode_Type); patch_64(data + 0xf8, (uintptr_t)&_PyEval_FormatExcUnbound); patch_64(data + 0x100, instruction_starts[instruction->error_target]); patch_64(data + 0x108, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x110, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x118, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x120, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x2d, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0xec); patch_32r(code + 0x45, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x55, (uintptr_t)data + 0xfc); patch_32r(code + 0x5c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x6a, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x8c, (uintptr_t)data + 0xe4); patch_32r(code + 0x93, (uintptr_t)data + 0x3c); patch_32r(code + 0x9a, (uintptr_t)data + 0x5a); patch_32r(code + 0xa1, (uintptr_t)data + 0xa0); patch_x86_64_32rx(code + 0xac, (uintptr_t)data + 0x11c); } void emit__DELETE_FAST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DELETE_FAST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 0f b7 f0 movzwl %ax, %esi // b: 0f b7 c0 movzwl %ax, %eax // e: 49 8b 5c c5 48 movq 0x48(%r13,%rax,8), %rbx // 13: 48 85 db testq %rbx, %rbx // 16: 74 1c je 0x34 <_JIT_ENTRY+0x34> // 18: 49 c7 44 f5 48 00 00 00 00 movq $0x0, 0x48(%r13,%rsi,8) // 21: 48 8b 03 movq (%rbx), %rax // 24: 48 85 c0 testq %rax, %rax // 27: 7e 4d jle 0x76 <_JIT_ENTRY+0x76> // 29: 85 c0 testl %eax, %eax // 2b: 79 65 jns 0x92 <_JIT_ENTRY+0x92> // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 34: 49 8b 45 00 movq (%r13), %rax // 38: 48 8b 48 08 movq 0x8(%rax), %rcx // 3c: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 43: 75 68 jne 0xad <_JIT_ENTRY+0xad> // 45: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_REX_GOTPCRELX PyExc_UnboundLocalError-0x4 // 4c: 48 8b 19 movq (%rcx), %rbx // 4f: 48 8b 78 60 movq 0x60(%rax), %rdi // 53: ff 15 00 00 00 00 callq *(%rip) # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_GOTPCRELX PyTuple_GetItem-0x4 // 59: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_PC32 .L.str.2-0x4 // 60: 4c 89 e7 movq %r12, %rdi // 63: 48 89 de movq %rbx, %rsi // 66: 48 89 c1 movq %rax, %rcx // 69: ff 15 00 00 00 00 callq *(%rip) # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_GOTPCRELX _PyEval_FormatExcCheckArg-0x4 // 6f: 58 popq %rax // 70: ff 25 00 00 00 00 jmpq *(%rip) # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 76: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7d <_JIT_ENTRY+0x7d> // 0000000000000079: R_X86_64_PC32 .L.str.114-0x4 // 7d: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 82: 48 89 da movq %rbx, %rdx // 85: ff 15 00 00 00 00 callq *(%rip) # 0x8b <_JIT_ENTRY+0x8b> // 0000000000000087: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 8b: 48 8b 03 movq (%rbx), %rax // 8e: 85 c0 testl %eax, %eax // 90: 78 9b js 0x2d <_JIT_ENTRY+0x2d> // 92: ff 15 00 00 00 00 callq *(%rip) # 0x98 <_JIT_ENTRY+0x98> // 0000000000000094: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 98: 48 ff 0b decq (%rbx) // 9b: 75 90 jne 0x2d <_JIT_ENTRY+0x2d> // 9d: 48 89 df movq %rbx, %rdi // a0: ff 15 00 00 00 00 callq *(%rip) # 0xa6 <_JIT_ENTRY+0xa6> // 00000000000000a2: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // a6: 58 popq %rax // a7: ff 25 00 00 00 00 jmpq *(%rip) # 0xad <_JIT_ENTRY+0xad> // 00000000000000a9: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ad: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb4 <_JIT_ENTRY+0xb4> // 00000000000000b0: R_X86_64_PC32 .L.str.108-0x4 // b4: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xbb <_JIT_ENTRY+0xbb> // 00000000000000b7: R_X86_64_PC32 .L.str.109-0x4 // bb: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc2 <_JIT_ENTRY+0xc2> // 00000000000000be: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // c2: ba 4d 00 00 00 movl $0x4d, %edx // c7: ff 15 00 00 00 00 callq *(%rip) # 0xcd <_JIT_ENTRY+0xcd> // 00000000000000c9: R_X86_64_GOTPCRELX __assert_fail-0x4 // cd: const unsigned char code_body[205] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xf0, 0x0f, 0xb7, 0xc0, 0x49, 0x8b, 0x5c, 0xc5, 0x48, 0x48, 0x85, 0xdb, 0x74, 0x1c, 0x49, 0xc7, 0x44, 0xf5, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x4d, 0x85, 0xc0, 0x79, 0x65, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x68, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x19, 0x48, 0x8b, 0x78, 0x60, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xde, 0x48, 0x89, 0xc1, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x9b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x90, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "cannot access local variable '%s' where it is not associated with a value\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00" // 11b: 00 00 00 00 00 // 120: OPARG // 128: CONTINUE // 130: &PyCode_Type+0x0 // 138: &PyExc_UnboundLocalError+0x0 // 140: &PyTuple_GetItem+0x0 // 148: &_PyEval_FormatExcCheckArg+0x0 // 150: ERROR_TARGET // 158: &_Py_NegativeRefcount+0x0 // 160: &_Py_DECREF_DecRefTotal+0x0 // 168: &_Py_Dealloc+0x0 // 170: &__assert_fail+0x0 const unsigned char data_body[376] = { 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x27, 0x25, 0x73, 0x27, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x120, instruction->oparg); patch_64(data + 0x128, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x130, (uintptr_t)&PyCode_Type); patch_64(data + 0x138, (uintptr_t)&PyExc_UnboundLocalError); patch_64(data + 0x140, (uintptr_t)&PyTuple_GetItem); patch_64(data + 0x148, (uintptr_t)&_PyEval_FormatExcCheckArg); patch_64(data + 0x150, instruction_starts[instruction->error_target]); patch_64(data + 0x158, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x160, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x168, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x170, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0x11c); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x124); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0x12c); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0x134); patch_x86_64_32rx(code + 0x55, (uintptr_t)data + 0x13c); patch_32r(code + 0x5c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x6b, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x72, (uintptr_t)data + 0x14c); patch_32r(code + 0x79, (uintptr_t)data + 0xe0); patch_x86_64_32rx(code + 0x87, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x94, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0xa2, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0xa9, (uintptr_t)data + 0x124); patch_32r(code + 0xb0, (uintptr_t)data + 0x46); patch_32r(code + 0xb7, (uintptr_t)data + 0x64); patch_32r(code + 0xbe, (uintptr_t)data + 0xaa); patch_x86_64_32rx(code + 0xc9, (uintptr_t)data + 0x16c); } void emit__DELETE_GLOBAL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DELETE_GLOBAL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 8c 00 00 00 jne 0xa2 <_JIT_ENTRY+0xa2> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 97 00 00 00 je 0xc2 <_JIT_ENTRY+0xc2> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 aa 00 00 00 je 0xe2 <_JIT_ENTRY+0xe2> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 bd 00 00 00 je 0x102 <_JIT_ENTRY+0x102> // 45: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4c: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 50: 0f 8e cc 00 00 00 jle 0x122 <_JIT_ENTRY+0x122> // 56: 48 8b 5c c8 18 movq 0x18(%rax,%rcx,8), %rbx // 5b: 49 8b 7d 18 movq 0x18(%r13), %rdi // 5f: 48 89 de movq %rbx, %rsi // 62: 31 d2 xorl %edx, %edx // 64: ff 15 00 00 00 00 callq *(%rip) # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_GOTPCRELX PyDict_Pop-0x4 // 6a: 85 c0 testl %eax, %eax // 6c: 78 09 js 0x77 <_JIT_ENTRY+0x77> // 6e: 74 0e je 0x7e <_JIT_ENTRY+0x7e> // 70: 58 popq %rax // 71: ff 25 00 00 00 00 jmpq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 77: 58 popq %rax // 78: ff 25 00 00 00 00 jmpq *(%rip) # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 7e: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_REX_GOTPCRELX PyExc_NameError-0x4 // 85: 48 8b 30 movq (%rax), %rsi // 88: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x8f <_JIT_ENTRY+0x8f> // 000000000000008b: R_X86_64_PC32 .L.str.24-0x4 // 8f: 4c 89 e7 movq %r12, %rdi // 92: 48 89 d9 movq %rbx, %rcx // 95: ff 15 00 00 00 00 callq *(%rip) # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_GOTPCRELX _PyEval_FormatExcCheckArg-0x4 // 9b: 58 popq %rax // 9c: ff 25 00 00 00 00 jmpq *(%rip) # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // a2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa9 <_JIT_ENTRY+0xa9> // 00000000000000a5: R_X86_64_PC32 .L.str.108-0x4 // a9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_PC32 .L.str.109-0x4 // b0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // b7: ba 4d 00 00 00 movl $0x4d, %edx // bc: ff 15 00 00 00 00 callq *(%rip) # 0xc2 <_JIT_ENTRY+0xc2> // 00000000000000be: R_X86_64_GOTPCRELX __assert_fail-0x4 // c2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_PC32 .L.str.110-0x4 // c9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L.str.111-0x4 // d0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // d7: ba 99 00 00 00 movl $0x99, %edx // dc: ff 15 00 00 00 00 callq *(%rip) # 0xe2 <_JIT_ENTRY+0xe2> // 00000000000000de: R_X86_64_GOTPCRELX __assert_fail-0x4 // e2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_PC32 .L.str.115-0x4 // e9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.114-0x4 // f0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // f7: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // fc: ff 15 00 00 00 00 callq *(%rip) # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_GOTPCRELX __assert_fail-0x4 // 102: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_PC32 .L.str.116-0x4 // 109: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_PC32 .L.str.114-0x4 // 110: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 117: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 122: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_PC32 .L.str.113-0x4 // 129: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x130 <_JIT_ENTRY+0x130> // 000000000000012c: R_X86_64_PC32 .L.str.111-0x4 // 130: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 137: ba 9b 00 00 00 movl $0x9b, %edx // 13c: ff 15 00 00 00 00 callq *(%rip) # 0x142 <_JIT_ENTRY+0x142> // 000000000000013e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 142: const unsigned char code_body[322] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x97, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xaa, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xbd, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0xcc, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0xc8, 0x18, 0x49, 0x8b, 0x7d, 0x18, 0x48, 0x89, 0xde, 0x31, 0xd2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x09, 0x74, 0x0e, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xd9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "name '%.200s' is not defined\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00" // 1d4: 00 00 00 00 // 1d8: &PyCode_Type+0x0 // 1e0: &PyLong_Type+0x0 // 1e8: &PyBool_Type+0x0 // 1f0: OPARG // 1f8: &PyDict_Pop+0x0 // 200: CONTINUE // 208: ERROR_TARGET // 210: &PyExc_NameError+0x0 // 218: &_PyEval_FormatExcCheckArg+0x0 // 220: &__assert_fail+0x0 const unsigned char data_body[552] = { 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x27, 0x25, 0x2e, 0x32, 0x30, 0x30, 0x73, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1d8, (uintptr_t)&PyCode_Type); patch_64(data + 0x1e0, (uintptr_t)&PyLong_Type); patch_64(data + 0x1e8, (uintptr_t)&PyBool_Type); patch_64(data + 0x1f0, instruction->oparg); patch_64(data + 0x1f8, (uintptr_t)&PyDict_Pop); patch_64(data + 0x200, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x208, instruction_starts[instruction->error_target]); patch_64(data + 0x210, (uintptr_t)&PyExc_NameError); patch_64(data + 0x218, (uintptr_t)&_PyEval_FormatExcCheckArg); patch_64(data + 0x220, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1d4); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x1dc); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x1e4); patch_32r(code + 0x48, (uintptr_t)data + 0x1ec); patch_x86_64_32rx(code + 0x66, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x7a, (uintptr_t)data + 0x204); patch_x86_64_32rx(code + 0x81, (uintptr_t)data + 0x20c); patch_32r(code + 0x8b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x97, (uintptr_t)data + 0x214); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0x204); patch_32r(code + 0xa5, (uintptr_t)data + 0x19); patch_32r(code + 0xac, (uintptr_t)data + 0x37); patch_32r(code + 0xb3, (uintptr_t)data + 0x7d); patch_x86_64_32rx(code + 0xbe, (uintptr_t)data + 0x21c); patch_32r(code + 0xc5, (uintptr_t)data + 0xb3); patch_32r(code + 0xcc, (uintptr_t)data + 0xc4); patch_32r(code + 0xd3, (uintptr_t)data + 0x100); patch_x86_64_32rx(code + 0xde, (uintptr_t)data + 0x21c); patch_32r(code + 0xe5, (uintptr_t)data + 0x179); patch_32r(code + 0xec, (uintptr_t)data + 0x142); patch_32r(code + 0xf3, (uintptr_t)data + 0x195); patch_x86_64_32rx(code + 0xfe, (uintptr_t)data + 0x21c); patch_32r(code + 0x105, (uintptr_t)data + 0x1b4); patch_32r(code + 0x10c, (uintptr_t)data + 0x142); patch_32r(code + 0x113, (uintptr_t)data + 0x195); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0x21c); patch_32r(code + 0x125, (uintptr_t)data + 0x12a); patch_32r(code + 0x12c, (uintptr_t)data + 0xc4); patch_32r(code + 0x133, (uintptr_t)data + 0x100); patch_x86_64_32rx(code + 0x13e, (uintptr_t)data + 0x21c); } void emit__DELETE_NAME( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DELETE_NAME.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 ac 00 00 00 jne 0xc2 <_JIT_ENTRY+0xc2> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 b7 00 00 00 je 0xe2 <_JIT_ENTRY+0xe2> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 ca 00 00 00 je 0x102 <_JIT_ENTRY+0x102> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 dd 00 00 00 je 0x122 <_JIT_ENTRY+0x122> // 45: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4c: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 50: 0f 8e ec 00 00 00 jle 0x142 <_JIT_ENTRY+0x142> // 56: 48 8b 5c c8 18 movq 0x18(%rax,%rcx,8), %rbx // 5b: 49 8b 7d 28 movq 0x28(%r13), %rdi // 5f: 48 85 ff testq %rdi, %rdi // 62: 74 31 je 0x95 <_JIT_ENTRY+0x95> // 64: 48 89 de movq %rbx, %rsi // 67: ff 15 00 00 00 00 callq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX PyObject_DelItem-0x4 // 6d: 85 c0 testl %eax, %eax // 6f: 74 4a je 0xbb <_JIT_ENTRY+0xbb> // 71: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_REX_GOTPCRELX PyExc_NameError-0x4 // 78: 48 8b 30 movq (%rax), %rsi // 7b: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L.str.24-0x4 // 82: 4c 89 e7 movq %r12, %rdi // 85: 48 89 d9 movq %rbx, %rcx // 88: ff 15 00 00 00 00 callq *(%rip) # 0x8e <_JIT_ENTRY+0x8e> // 000000000000008a: R_X86_64_GOTPCRELX _PyEval_FormatExcCheckArg-0x4 // 8e: 58 popq %rax // 8f: ff 25 00 00 00 00 jmpq *(%rip) # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 95: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x9c <_JIT_ENTRY+0x9c> // 0000000000000098: R_X86_64_REX_GOTPCRELX PyExc_SystemError-0x4 // 9c: 48 8b 30 movq (%rax), %rsi // 9f: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0xa6 <_JIT_ENTRY+0xa6> // 00000000000000a2: R_X86_64_PC32 .L.str.23-0x4 // a6: 4c 89 e7 movq %r12, %rdi // a9: 48 89 d9 movq %rbx, %rcx // ac: 31 c0 xorl %eax, %eax // ae: ff 15 00 00 00 00 callq *(%rip) # 0xb4 <_JIT_ENTRY+0xb4> // 00000000000000b0: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // b4: 58 popq %rax // b5: ff 25 00 00 00 00 jmpq *(%rip) # 0xbb <_JIT_ENTRY+0xbb> // 00000000000000b7: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // bb: 58 popq %rax // bc: ff 25 00 00 00 00 jmpq *(%rip) # 0xc2 <_JIT_ENTRY+0xc2> // 00000000000000be: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_PC32 .L.str.108-0x4 // c9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L.str.109-0x4 // d0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // d7: ba 4d 00 00 00 movl $0x4d, %edx // dc: ff 15 00 00 00 00 callq *(%rip) # 0xe2 <_JIT_ENTRY+0xe2> // 00000000000000de: R_X86_64_GOTPCRELX __assert_fail-0x4 // e2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_PC32 .L.str.110-0x4 // e9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.111-0x4 // f0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // f7: ba 99 00 00 00 movl $0x99, %edx // fc: ff 15 00 00 00 00 callq *(%rip) # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_GOTPCRELX __assert_fail-0x4 // 102: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_PC32 .L.str.115-0x4 // 109: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_PC32 .L.str.114-0x4 // 110: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 117: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 122: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_PC32 .L.str.116-0x4 // 129: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x130 <_JIT_ENTRY+0x130> // 000000000000012c: R_X86_64_PC32 .L.str.114-0x4 // 130: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 137: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 13c: ff 15 00 00 00 00 callq *(%rip) # 0x142 <_JIT_ENTRY+0x142> // 000000000000013e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 142: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x149 <_JIT_ENTRY+0x149> // 0000000000000145: R_X86_64_PC32 .L.str.113-0x4 // 149: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x150 <_JIT_ENTRY+0x150> // 000000000000014c: R_X86_64_PC32 .L.str.111-0x4 // 150: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x157 <_JIT_ENTRY+0x157> // 0000000000000153: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 157: ba 9b 00 00 00 movl $0x9b, %edx // 15c: ff 15 00 00 00 00 callq *(%rip) # 0x162 <_JIT_ENTRY+0x162> // 000000000000015e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 162: const unsigned char code_body[354] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xac, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xb7, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xca, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xdd, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0xec, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0xc8, 0x18, 0x49, 0x8b, 0x7d, 0x28, 0x48, 0x85, 0xff, 0x74, 0x31, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x4a, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xd9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xd9, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "no locals when deleting %R\x00name '%.200s' is not defined\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00" // 1ef: 00 // 1f0: &PyCode_Type+0x0 // 1f8: &PyLong_Type+0x0 // 200: &PyBool_Type+0x0 // 208: OPARG // 210: &PyObject_DelItem+0x0 // 218: &PyExc_NameError+0x0 // 220: &_PyEval_FormatExcCheckArg+0x0 // 228: ERROR_TARGET // 230: &PyExc_SystemError+0x0 // 238: &_PyErr_Format+0x0 // 240: CONTINUE // 248: &__assert_fail+0x0 const unsigned char data_body[592] = { 0x6e, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x73, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x64, 0x65, 0x6c, 0x65, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x25, 0x52, 0x00, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x27, 0x25, 0x2e, 0x32, 0x30, 0x30, 0x73, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1f0, (uintptr_t)&PyCode_Type); patch_64(data + 0x1f8, (uintptr_t)&PyLong_Type); patch_64(data + 0x200, (uintptr_t)&PyBool_Type); patch_64(data + 0x208, instruction->oparg); patch_64(data + 0x210, (uintptr_t)&PyObject_DelItem); patch_64(data + 0x218, (uintptr_t)&PyExc_NameError); patch_64(data + 0x220, (uintptr_t)&_PyEval_FormatExcCheckArg); patch_64(data + 0x228, instruction_starts[instruction->error_target]); patch_64(data + 0x230, (uintptr_t)&PyExc_SystemError); patch_64(data + 0x238, (uintptr_t)&_PyErr_Format); patch_64(data + 0x240, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x248, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1ec); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x1fc); patch_32r(code + 0x48, (uintptr_t)data + 0x204); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0x20c); patch_x86_64_32rx(code + 0x74, (uintptr_t)data + 0x214); patch_32r(code + 0x7e, (uintptr_t)data + 0x17); patch_x86_64_32rx(code + 0x8a, (uintptr_t)data + 0x21c); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x224); patch_x86_64_32rx(code + 0x98, (uintptr_t)data + 0x22c); patch_32r(code + 0xa2, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xb0, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0xb7, (uintptr_t)data + 0x224); patch_x86_64_32rx(code + 0xbe, (uintptr_t)data + 0x23c); patch_32r(code + 0xc5, (uintptr_t)data + 0x34); patch_32r(code + 0xcc, (uintptr_t)data + 0x52); patch_32r(code + 0xd3, (uintptr_t)data + 0x98); patch_x86_64_32rx(code + 0xde, (uintptr_t)data + 0x244); patch_32r(code + 0xe5, (uintptr_t)data + 0xce); patch_32r(code + 0xec, (uintptr_t)data + 0xdf); patch_32r(code + 0xf3, (uintptr_t)data + 0x11b); patch_x86_64_32rx(code + 0xfe, (uintptr_t)data + 0x244); patch_32r(code + 0x105, (uintptr_t)data + 0x194); patch_32r(code + 0x10c, (uintptr_t)data + 0x15d); patch_32r(code + 0x113, (uintptr_t)data + 0x1b0); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0x244); patch_32r(code + 0x125, (uintptr_t)data + 0x1cf); patch_32r(code + 0x12c, (uintptr_t)data + 0x15d); patch_32r(code + 0x133, (uintptr_t)data + 0x1b0); patch_x86_64_32rx(code + 0x13e, (uintptr_t)data + 0x244); patch_32r(code + 0x145, (uintptr_t)data + 0x145); patch_32r(code + 0x14c, (uintptr_t)data + 0xdf); patch_32r(code + 0x153, (uintptr_t)data + 0x11b); patch_x86_64_32rx(code + 0x15e, (uintptr_t)data + 0x244); } void emit__DELETE_SUBSCR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DELETE_SUBSCR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 9: 4c 89 ff movq %r15, %rdi // c: 48 89 de movq %rbx, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX PyObject_DelItem-0x4 // 15: 41 89 c6 movl %eax, %r14d // 18: 49 8b 07 movq (%r15), %rax // 1b: 48 85 c0 testq %rax, %rax // 1e: 7e 06 jle 0x26 <_JIT_ENTRY+0x26> // 20: 85 c0 testl %eax, %eax // 22: 79 1e jns 0x42 <_JIT_ENTRY+0x42> // 24: eb 27 jmp 0x4d <_JIT_ENTRY+0x4d> // 26: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_PC32 .L.str.1-0x4 // 2d: be a9 03 00 00 movl $0x3a9, %esi # imm = 0x3A9 // 32: 4c 89 fa movq %r15, %rdx // 35: ff 15 00 00 00 00 callq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 3b: 49 8b 07 movq (%r15), %rax // 3e: 85 c0 testl %eax, %eax // 40: 78 0b js 0x4d <_JIT_ENTRY+0x4d> // 42: ff 15 00 00 00 00 callq *(%rip) # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 48: 49 ff 0f decq (%r15) // 4b: 74 0e je 0x5b <_JIT_ENTRY+0x5b> // 4d: 48 8b 03 movq (%rbx), %rax // 50: 48 85 c0 testq %rax, %rax // 53: 7e 17 jle 0x6c <_JIT_ENTRY+0x6c> // 55: 85 c0 testl %eax, %eax // 57: 79 2f jns 0x88 <_JIT_ENTRY+0x88> // 59: eb 38 jmp 0x93 <_JIT_ENTRY+0x93> // 5b: 4c 89 ff movq %r15, %rdi // 5e: ff 15 00 00 00 00 callq *(%rip) # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 64: 48 8b 03 movq (%rbx), %rax // 67: 48 85 c0 testq %rax, %rax // 6a: 7f e9 jg 0x55 <_JIT_ENTRY+0x55> // 6c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_PC32 .L.str.1-0x4 // 73: be aa 03 00 00 movl $0x3aa, %esi # imm = 0x3AA // 78: 48 89 da movq %rbx, %rdx // 7b: ff 15 00 00 00 00 callq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 81: 48 8b 03 movq (%rbx), %rax // 84: 85 c0 testl %eax, %eax // 86: 78 0b js 0x93 <_JIT_ENTRY+0x93> // 88: ff 15 00 00 00 00 callq *(%rip) # 0x8e <_JIT_ENTRY+0x8e> // 000000000000008a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 8e: 48 ff 0b decq (%rbx) // 91: 74 0c je 0x9f <_JIT_ENTRY+0x9f> // 93: 45 85 f6 testl %r14d, %r14d // 96: 74 15 je 0xad <_JIT_ENTRY+0xad> // 98: 58 popq %rax // 99: ff 25 00 00 00 00 jmpq *(%rip) # 0x9f <_JIT_ENTRY+0x9f> // 000000000000009b: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 9f: 48 89 df movq %rbx, %rdi // a2: ff 15 00 00 00 00 callq *(%rip) # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // a8: 45 85 f6 testl %r14d, %r14d // ab: 75 eb jne 0x98 <_JIT_ENTRY+0x98> // ad: 48 83 c5 f0 addq $-0x10, %rbp // b1: 58 popq %rax // b2: ff 25 00 00 00 00 jmpq *(%rip) # 0xb8 <_JIT_ENTRY+0xb8> // 00000000000000b4: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // b2: const unsigned char code_body[178] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x89, 0xff, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xa9, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xaa, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0c, 0x45, 0x85, 0xf6, 0x74, 0x15, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x75, 0xeb, 0x48, 0x83, 0xc5, 0xf0, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyObject_DelItem+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 // 60: ERROR_TARGET const unsigned char data_body[104] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyObject_DelItem); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x60, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x3c); patch_32r(code + 0x29, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x37, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x44, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x60, (uintptr_t)data + 0x54); patch_32r(code + 0x6f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x8a, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x9b, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xa4, (uintptr_t)data + 0x54); } void emit__DEOPT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DEOPT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 7: 49 89 84 24 10 01 00 00 movq %rax, 0x110(%r12) // f: 4c 29 ed subq %r13, %rbp // 12: 48 83 c5 b8 addq $-0x48, %rbp // 16: 48 c1 ed 03 shrq $0x3, %rbp // 1a: 41 89 6d 40 movl %ebp, 0x40(%r13) // 1e: 49 8b 45 00 movq (%r13), %rax // 22: 48 8b 48 08 movq 0x8(%rax), %rcx // 26: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 2d: 75 11 jne 0x40 <_JIT_ENTRY+0x40> // 2f: 8b 0d 00 00 00 00 movl (%rip), %ecx # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_GOTPCRELX _JIT_TARGET-0x4 // 35: 48 8d 04 48 leaq (%rax,%rcx,2), %rax // 39: 48 05 c8 00 00 00 addq $0xc8, %rax // 3f: c3 retq // 40: 50 pushq %rax // 41: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_PC32 .L.str.108-0x4 // 48: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_PC32 .L.str.109-0x4 // 4f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 56: ba 4d 00 00 00 movl $0x4d, %edx // 5b: ff 15 00 00 00 00 callq *(%rip) # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 61: const unsigned char code_body[97] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x04, 0x48, 0x48, 0x05, 0xc8, 0x00, 0x00, 0x00, 0xc3, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 9a: 00 00 00 00 00 00 // a0: EXECUTOR // a8: &PyCode_Type+0x0 // b0: TARGET // b8: &__assert_fail+0x0 const unsigned char data_body[192] = { 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, (uintptr_t)executor); patch_64(data + 0xa8, (uintptr_t)&PyCode_Type); patch_64(data + 0xb0, instruction->target); patch_64(data + 0xb8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x29, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x31, (uintptr_t)data + 0xac); patch_32r(code + 0x44, (uintptr_t)data + -0x4); patch_32r(code + 0x4b, (uintptr_t)data + 0x1a); patch_32r(code + 0x52, (uintptr_t)data + 0x60); patch_x86_64_32rx(code + 0x5d, (uintptr_t)data + 0xb4); } void emit__DICT_MERGE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DICT_MERGE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: 48 8b 5d f8 movq -0x8(%rbp), %rbx // c: b9 fc ff ff ff movl $0xfffffffc, %ecx # imm = 0xFFFFFFFC // 11: 29 c1 subl %eax, %ecx // 13: f7 d0 notl %eax // 15: 48 98 cltq // 17: 48 8b 7c c5 00 movq (%rbp,%rax,8), %rdi // 1c: 48 63 c1 movslq %ecx, %rax // 1f: 4c 8b 74 c5 00 movq (%rbp,%rax,8), %r14 // 24: 48 89 de movq %rbx, %rsi // 27: ba 02 00 00 00 movl $0x2, %edx // 2c: ff 15 00 00 00 00 callq *(%rip) # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_GOTPCRELX _PyDict_MergeEx-0x4 // 32: 85 c0 testl %eax, %eax // 34: 78 17 js 0x4d <_JIT_ENTRY+0x4d> // 36: 48 8b 03 movq (%rbx), %rax // 39: 48 85 c0 testq %rax, %rax // 3c: 7e 31 jle 0x6f <_JIT_ENTRY+0x6f> // 3e: 48 83 c5 f8 addq $-0x8, %rbp // 42: 85 c0 testl %eax, %eax // 44: 79 49 jns 0x8f <_JIT_ENTRY+0x8f> // 46: 58 popq %rax // 47: ff 25 00 00 00 00 jmpq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 4d: 4c 89 e7 movq %r12, %rdi // 50: 4c 89 f6 movq %r14, %rsi // 53: 48 89 da movq %rbx, %rdx // 56: ff 15 00 00 00 00 callq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _PyEval_FormatKwargsError-0x4 // 5c: 48 8b 03 movq (%rbx), %rax // 5f: 48 85 c0 testq %rax, %rax // 62: 7e 46 jle 0xaa <_JIT_ENTRY+0xaa> // 64: 85 c0 testl %eax, %eax // 66: 79 5e jns 0xc6 <_JIT_ENTRY+0xc6> // 68: 58 popq %rax // 69: ff 25 00 00 00 00 jmpq *(%rip) # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 6f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_PC32 .L.str.1-0x4 // 76: be 21 07 00 00 movl $0x721, %esi # imm = 0x721 // 7b: 48 89 da movq %rbx, %rdx // 7e: ff 15 00 00 00 00 callq *(%rip) # 0x84 <_JIT_ENTRY+0x84> // 0000000000000080: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 84: 48 8b 03 movq (%rbx), %rax // 87: 48 83 c5 f8 addq $-0x8, %rbp // 8b: 85 c0 testl %eax, %eax // 8d: 78 b7 js 0x46 <_JIT_ENTRY+0x46> // 8f: ff 15 00 00 00 00 callq *(%rip) # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 95: 48 ff 0b decq (%rbx) // 98: 75 ac jne 0x46 <_JIT_ENTRY+0x46> // 9a: 48 89 df movq %rbx, %rdi // 9d: ff 15 00 00 00 00 callq *(%rip) # 0xa3 <_JIT_ENTRY+0xa3> // 000000000000009f: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // a3: 58 popq %rax // a4: ff 25 00 00 00 00 jmpq *(%rip) # 0xaa <_JIT_ENTRY+0xaa> // 00000000000000a6: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // aa: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb1 <_JIT_ENTRY+0xb1> // 00000000000000ad: R_X86_64_PC32 .L.str.1-0x4 // b1: be 1e 07 00 00 movl $0x71e, %esi # imm = 0x71E // b6: 48 89 da movq %rbx, %rdx // b9: ff 15 00 00 00 00 callq *(%rip) # 0xbf <_JIT_ENTRY+0xbf> // 00000000000000bb: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // bf: 48 8b 03 movq (%rbx), %rax // c2: 85 c0 testl %eax, %eax // c4: 78 a2 js 0x68 <_JIT_ENTRY+0x68> // c6: ff 15 00 00 00 00 callq *(%rip) # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // cc: 48 ff 0b decq (%rbx) // cf: 75 97 jne 0x68 <_JIT_ENTRY+0x68> // d1: 48 89 df movq %rbx, %rdi // d4: ff 15 00 00 00 00 callq *(%rip) # 0xda <_JIT_ENTRY+0xda> // 00000000000000d6: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // da: 58 popq %rax // db: ff 25 00 00 00 00 jmpq *(%rip) # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // e1: const unsigned char code_body[225] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0xb9, 0xfc, 0xff, 0xff, 0xff, 0x29, 0xc1, 0xf7, 0xd0, 0x48, 0x98, 0x48, 0x8b, 0x7c, 0xc5, 0x00, 0x48, 0x63, 0xc1, 0x4c, 0x8b, 0x74, 0xc5, 0x00, 0x48, 0x89, 0xde, 0xba, 0x02, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x17, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x31, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x79, 0x49, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x4c, 0x89, 0xf6, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x46, 0x85, 0xc0, 0x79, 0x5e, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x21, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x78, 0xb7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xac, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x1e, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xa2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x97, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_PyDict_MergeEx+0x0 // 50: CONTINUE // 58: &_PyEval_FormatKwargsError+0x0 // 60: ERROR_TARGET // 68: &_Py_NegativeRefcount+0x0 // 70: &_Py_DECREF_DecRefTotal+0x0 // 78: &_Py_Dealloc+0x0 const unsigned char data_body[128] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_PyDict_MergeEx); patch_64(data + 0x50, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x58, (uintptr_t)&_PyEval_FormatKwargsError); patch_64(data + 0x60, instruction_starts[instruction->error_target]); patch_64(data + 0x68, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x70, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x78, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x6b, (uintptr_t)data + 0x5c); patch_32r(code + 0x72, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x80, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x9f, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0xa6, (uintptr_t)data + 0x4c); patch_32r(code + 0xad, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xbb, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0xc8, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0xd6, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0xdd, (uintptr_t)data + 0x5c); } void emit__DICT_UPDATE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DICT_UPDATE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 8b 05 00 00 00 00 movl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 7: f7 d0 notl %eax // 9: 48 8b 5d f8 movq -0x8(%rbp), %rbx // d: c1 e0 03 shll $0x3, %eax // 10: 48 0d 00 00 f8 ff orq $-0x80000, %rax # imm = 0xFFF80000 // 16: 48 8b 7c 05 00 movq (%rbp,%rax), %rdi // 1b: 48 89 de movq %rbx, %rsi // 1e: ff 15 00 00 00 00 callq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX PyDict_Update-0x4 // 24: 85 c0 testl %eax, %eax // 26: 78 17 js 0x3f <_JIT_ENTRY+0x3f> // 28: 48 8b 03 movq (%rbx), %rax // 2b: 48 85 c0 testq %rax, %rax // 2e: 7e 5d jle 0x8d <_JIT_ENTRY+0x8d> // 30: 48 83 c5 f8 addq $-0x8, %rbp // 34: 85 c0 testl %eax, %eax // 36: 79 75 jns 0xad <_JIT_ENTRY+0xad> // 38: 58 popq %rax // 39: ff 25 00 00 00 00 jmpq *(%rip) # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 3f: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x46 <_JIT_ENTRY+0x46> // 0000000000000042: R_X86_64_REX_GOTPCRELX PyExc_AttributeError-0x4 // 46: 48 8b 30 movq (%rax), %rsi // 49: 4c 89 e7 movq %r12, %rdi // 4c: ff 15 00 00 00 00 callq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _PyErr_ExceptionMatches-0x4 // 52: 85 c0 testl %eax, %eax // 54: 74 24 je 0x7a <_JIT_ENTRY+0x7a> // 56: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // 5d: 48 8b 30 movq (%rax), %rsi // 60: 48 8b 43 08 movq 0x8(%rbx), %rax // 64: 48 8b 48 18 movq 0x18(%rax), %rcx // 68: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_PC32 .L.str.42-0x4 // 6f: 4c 89 e7 movq %r12, %rdi // 72: 31 c0 xorl %eax, %eax // 74: ff 15 00 00 00 00 callq *(%rip) # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // 7a: 48 8b 03 movq (%rbx), %rax // 7d: 48 85 c0 testq %rax, %rax // 80: 7e 46 jle 0xc8 <_JIT_ENTRY+0xc8> // 82: 85 c0 testl %eax, %eax // 84: 79 5e jns 0xe4 <_JIT_ENTRY+0xe4> // 86: 58 popq %rax // 87: ff 25 00 00 00 00 jmpq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 8d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x94 <_JIT_ENTRY+0x94> // 0000000000000090: R_X86_64_PC32 .L.str.1-0x4 // 94: be 0f 07 00 00 movl $0x70f, %esi # imm = 0x70F // 99: 48 89 da movq %rbx, %rdx // 9c: ff 15 00 00 00 00 callq *(%rip) # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // a2: 48 8b 03 movq (%rbx), %rax // a5: 48 83 c5 f8 addq $-0x8, %rbp // a9: 85 c0 testl %eax, %eax // ab: 78 8b js 0x38 <_JIT_ENTRY+0x38> // ad: ff 15 00 00 00 00 callq *(%rip) # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // b3: 48 ff 0b decq (%rbx) // b6: 75 80 jne 0x38 <_JIT_ENTRY+0x38> // b8: 48 89 df movq %rbx, %rdi // bb: ff 15 00 00 00 00 callq *(%rip) # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // c1: 58 popq %rax // c2: ff 25 00 00 00 00 jmpq *(%rip) # 0xc8 <_JIT_ENTRY+0xc8> // 00000000000000c4: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_PC32 .L.str.1-0x4 // cf: be 0c 07 00 00 movl $0x70c, %esi # imm = 0x70C // d4: 48 89 da movq %rbx, %rdx // d7: ff 15 00 00 00 00 callq *(%rip) # 0xdd <_JIT_ENTRY+0xdd> // 00000000000000d9: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // dd: 48 8b 03 movq (%rbx), %rax // e0: 85 c0 testl %eax, %eax // e2: 78 a2 js 0x86 <_JIT_ENTRY+0x86> // e4: ff 15 00 00 00 00 callq *(%rip) # 0xea <_JIT_ENTRY+0xea> // 00000000000000e6: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ea: 48 ff 0b decq (%rbx) // ed: 75 97 jne 0x86 <_JIT_ENTRY+0x86> // ef: 48 89 df movq %rbx, %rdi // f2: ff 15 00 00 00 00 callq *(%rip) # 0xf8 <_JIT_ENTRY+0xf8> // 00000000000000f4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // f8: 58 popq %rax // f9: ff 25 00 00 00 00 jmpq *(%rip) # 0xff <_JIT_ENTRY+0xff> // 00000000000000fb: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // ff: const unsigned char code_body[255] = { 0x50, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd0, 0x48, 0x8b, 0x5d, 0xf8, 0xc1, 0xe0, 0x03, 0x48, 0x0d, 0x00, 0x00, 0xf8, 0xff, 0x48, 0x8b, 0x7c, 0x05, 0x00, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x17, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x5d, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x79, 0x75, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x24, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x46, 0x85, 0xc0, 0x79, 0x5e, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x0f, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x78, 0x8b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x80, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x0c, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xa2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x97, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: "/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00'%.200s' object is not a mapping\x00" // 61: 00 00 00 00 00 00 00 // 68: OPARG // 70: &PyDict_Update+0x0 // 78: CONTINUE // 80: &PyExc_AttributeError+0x0 // 88: &_PyErr_ExceptionMatches+0x0 // 90: &PyExc_TypeError+0x0 // 98: &_PyErr_Format+0x0 // a0: ERROR_TARGET // a8: &_Py_NegativeRefcount+0x0 // b0: &_Py_DECREF_DecRefTotal+0x0 // b8: &_Py_Dealloc+0x0 const unsigned char data_body[192] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x27, 0x25, 0x2e, 0x32, 0x30, 0x30, 0x73, 0x27, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x20, 0x6d, 0x61, 0x70, 0x70, 0x69, 0x6e, 0x67, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x68, instruction->oparg); patch_64(data + 0x70, (uintptr_t)&PyDict_Update); patch_64(data + 0x78, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x80, (uintptr_t)&PyExc_AttributeError); patch_64(data + 0x88, (uintptr_t)&_PyErr_ExceptionMatches); patch_64(data + 0x90, (uintptr_t)&PyExc_TypeError); patch_64(data + 0x98, (uintptr_t)&_PyErr_Format); patch_64(data + 0xa0, instruction_starts[instruction->error_target]); patch_64(data + 0xa8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xb0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xb8, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x74); patch_x86_64_32rx(code + 0x42, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0x8c); patch_32r(code + 0x6b, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x9c); patch_32r(code + 0x90, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xc4, (uintptr_t)data + 0x74); patch_32r(code + 0xcb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xd9, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0xe6, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xf4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0xfb, (uintptr_t)data + 0x9c); } void emit__DYNAMIC_EXIT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_DYNAMIC_EXIT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 8: 4d 89 b4 24 10 01 00 00 movq %r14, 0x110(%r12) // 10: 49 8b 5d 38 movq 0x38(%r13), %rbx // 14: 80 3b 46 cmpb $0x46, (%rbx) // 17: 75 29 jne 0x42 <_JIT_ENTRY+0x42> // 19: 49 8b 45 00 movq (%r13), %rax // 1d: 48 8b 80 98 00 00 00 movq 0x98(%rax), %rax // 24: 0f b6 4b 01 movzbl 0x1(%rbx), %ecx // 28: 48 8b 5c c8 08 movq 0x8(%rax,%rcx,8), %rbx // 2d: 8b 03 movl (%rbx), %eax // 2f: ff c0 incl %eax // 31: 74 08 je 0x3b <_JIT_ENTRY+0x3b> // 33: 89 03 movl %eax, (%rbx) // 35: ff 15 00 00 00 00 callq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 3b: 48 8b 43 78 movq 0x78(%rbx), %rax // 3f: 59 popq %rcx // 40: ff e0 jmpq *%rax // 42: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 49: c1 e0 04 shll $0x4, %eax // 4c: 4d 8d 3c 06 leaq (%r14,%rax), %r15 // 50: 49 81 c7 84 00 00 00 addq $0x84, %r15 // 57: 41 0f b7 84 06 84 00 00 00 movzwl 0x84(%r14,%rax), %eax // 60: 66 83 f8 10 cmpw $0x10, %ax // 64: 73 27 jae 0x8d <_JIT_ENTRY+0x8d> // 66: 48 89 e1 movq %rsp, %rcx // 69: 4c 89 ef movq %r13, %rdi // 6c: 48 89 de movq %rbx, %rsi // 6f: 48 89 ea movq %rbp, %rdx // 72: ff 15 00 00 00 00 callq *(%rip) # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_GOTPCRELX _PyOptimizer_Optimize-0x4 // 78: 85 c0 testl %eax, %eax // 7a: 7e 38 jle 0xb4 <_JIT_ENTRY+0xb4> // 7c: 66 41 c7 07 06 04 movw $0x406, (%r15) # imm = 0x406 // 82: 48 8b 1c 24 movq (%rsp), %rbx // 86: 48 8b 43 78 movq 0x78(%rbx), %rax // 8a: 59 popq %rcx // 8b: ff e0 jmpq *%rax // 8d: 8d 48 f0 leal -0x10(%rax), %ecx // 90: 66 83 f8 ff cmpw $-0x1, %ax // 94: b8 ff ff 00 00 movl $0xffff, %eax # imm = 0xFFFF // 99: 0f 45 c1 cmovnel %ecx, %eax // 9c: 66 41 89 07 movw %ax, (%r15) // a0: 4c 29 ed subq %r13, %rbp // a3: 48 83 c5 b8 addq $-0x48, %rbp // a7: 48 c1 ed 03 shrq $0x3, %rbp // ab: 41 89 6d 40 movl %ebp, 0x40(%r13) // af: 48 89 d8 movq %rbx, %rax // b2: 59 popq %rcx // b3: c3 retq // b4: 41 0f b7 17 movzwl (%r15), %edx // b8: 81 fa ff ff 00 00 cmpl $0xffff, %edx # imm = 0xFFFF // be: 0f 84 83 00 00 00 je 0x147 <_JIT_ENTRY+0x147> // c4: 83 e2 0f andl $0xf, %edx // c7: 66 b9 fc ff movw $0xfffc, %cx # imm = 0xFFFC // cb: 66 83 fa 0b cmpw $0xb, %dx // cf: 77 14 ja 0xe5 <_JIT_ENTRY+0xe5> // d1: 8d 4a 01 leal 0x1(%rdx), %ecx // d4: be ff ff ff ff movl $0xffffffff, %esi # imm = 0xFFFFFFFF // d9: d3 e6 shll %cl, %esi // db: f7 d6 notl %esi // dd: c1 e6 04 shll $0x4, %esi // e0: 8d 0c 16 leal (%rsi,%rdx), %ecx // e3: ff c1 incl %ecx // e5: 66 41 89 0f movw %cx, (%r15) // e9: 85 c0 testl %eax, %eax // eb: 79 b3 jns 0xa0 <_JIT_ENTRY+0xa0> // ed: 49 8b 06 movq (%r14), %rax // f0: 48 85 c0 testq %rax, %rax // f3: 7f 18 jg 0x10d <_JIT_ENTRY+0x10d> // f5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xfc <_JIT_ENTRY+0xfc> // 00000000000000f8: R_X86_64_PC32 .L.str.1-0x4 // fc: be 41 11 00 00 movl $0x1141, %esi # imm = 0x1141 // 101: 4c 89 f2 movq %r14, %rdx // 104: ff 15 00 00 00 00 callq *(%rip) # 0x10a <_JIT_ENTRY+0x10a> // 0000000000000106: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 10a: 49 8b 06 movq (%r14), %rax // 10d: 85 c0 testl %eax, %eax // 10f: 78 18 js 0x129 <_JIT_ENTRY+0x129> // 111: ff 15 00 00 00 00 callq *(%rip) # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 117: 49 ff 0e decq (%r14) // 11a: 75 0d jne 0x129 <_JIT_ENTRY+0x129> // 11c: 48 8b 3d 00 00 00 00 movq (%rip), %rdi # 0x123 <_JIT_ENTRY+0x123> // 000000000000011f: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 123: ff 15 00 00 00 00 callq *(%rip) # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 129: 4d 89 b4 24 10 01 00 00 movq %r14, 0x110(%r12) // 131: 4c 29 ed subq %r13, %rbp // 134: 48 83 c5 b8 addq $-0x48, %rbp // 138: 48 c1 ed 03 shrq $0x3, %rbp // 13c: 41 89 6d 40 movl %ebp, 0x40(%r13) // 140: 31 db xorl %ebx, %ebx // 142: 48 89 d8 movq %rbx, %rax // 145: 59 popq %rcx // 146: c3 retq // 147: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x14e <_JIT_ENTRY+0x14e> // 000000000000014a: R_X86_64_PC32 .L.str.171-0x4 // 14e: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x155 <_JIT_ENTRY+0x155> // 0000000000000151: R_X86_64_PC32 .L.str.169-0x4 // 155: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x15c <_JIT_ENTRY+0x15c> // 0000000000000158: R_X86_64_PC32 .L__PRETTY_FUNCTION__.restart_backoff_counter-0x4 // 15c: ba 40 00 00 00 movl $0x40, %edx // 161: ff 15 00 00 00 00 callq *(%rip) # 0x167 <_JIT_ENTRY+0x167> // 0000000000000163: R_X86_64_GOTPCRELX __assert_fail-0x4 // 167: const unsigned char code_body[359] = { 0x50, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x89, 0xb4, 0x24, 0x10, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x5d, 0x38, 0x80, 0x3b, 0x46, 0x75, 0x29, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x80, 0x98, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x4b, 0x01, 0x48, 0x8b, 0x5c, 0xc8, 0x08, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x78, 0x59, 0xff, 0xe0, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x04, 0x4d, 0x8d, 0x3c, 0x06, 0x49, 0x81, 0xc7, 0x84, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb7, 0x84, 0x06, 0x84, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x10, 0x73, 0x27, 0x48, 0x89, 0xe1, 0x4c, 0x89, 0xef, 0x48, 0x89, 0xde, 0x48, 0x89, 0xea, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x7e, 0x38, 0x66, 0x41, 0xc7, 0x07, 0x06, 0x04, 0x48, 0x8b, 0x1c, 0x24, 0x48, 0x8b, 0x43, 0x78, 0x59, 0xff, 0xe0, 0x8d, 0x48, 0xf0, 0x66, 0x83, 0xf8, 0xff, 0xb8, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x45, 0xc1, 0x66, 0x41, 0x89, 0x07, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x48, 0x89, 0xd8, 0x59, 0xc3, 0x41, 0x0f, 0xb7, 0x17, 0x81, 0xfa, 0xff, 0xff, 0x00, 0x00, 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, 0x83, 0xe2, 0x0f, 0x66, 0xb9, 0xfc, 0xff, 0x66, 0x83, 0xfa, 0x0b, 0x77, 0x14, 0x8d, 0x4a, 0x01, 0xbe, 0xff, 0xff, 0xff, 0xff, 0xd3, 0xe6, 0xf7, 0xd6, 0xc1, 0xe6, 0x04, 0x8d, 0x0c, 0x16, 0xff, 0xc1, 0x66, 0x41, 0x89, 0x0f, 0x85, 0xc0, 0x79, 0xb3, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x41, 0x11, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x18, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x0d, 0x48, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x89, 0xb4, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x31, 0xdb, 0x48, 0x89, 0xd8, 0x59, 0xc3, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x40, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_backoff.h\x00!is_unreachable_backoff_counter(counter)\x00_Py_BackoffCounter restart_backoff_counter(_Py_BackoffCounter)\x00' // f0: // f0: EXECUTOR // f8: &_Py_INCREF_IncRefTotal+0x0 // 100: OPARG // 108: &_PyOptimizer_Optimize+0x0 // 110: &_Py_NegativeRefcount+0x0 // 118: &_Py_DECREF_DecRefTotal+0x0 // 120: &_Py_Dealloc+0x0 // 128: &__assert_fail+0x0 const unsigned char data_body[304] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x2e, 0x68, 0x00, 0x21, 0x69, 0x73, 0x5f, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x28, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x72, 0x65, 0x73, 0x74, 0x61, 0x72, 0x74, 0x5f, 0x62, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x5f, 0x63, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x28, 0x5f, 0x50, 0x79, 0x5f, 0x42, 0x61, 0x63, 0x6b, 0x6f, 0x66, 0x66, 0x43, 0x6f, 0x75, 0x6e, 0x74, 0x65, 0x72, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xf0, (uintptr_t)executor); patch_64(data + 0xf8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x100, instruction->oparg); patch_64(data + 0x108, (uintptr_t)&_PyOptimizer_Optimize); patch_64(data + 0x110, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x118, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x120, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x128, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x37, (uintptr_t)data + 0xf4); patch_32r(code + 0x45, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x74, (uintptr_t)data + 0x104); patch_32r(code + 0xf8, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x106, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x113, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x11f, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x125, (uintptr_t)data + 0x11c); patch_32r(code + 0x14a, (uintptr_t)data + 0x84); patch_32r(code + 0x151, (uintptr_t)data + 0x3c); patch_32r(code + 0x158, (uintptr_t)data + 0xad); patch_x86_64_32rx(code + 0x163, (uintptr_t)data + 0x124); } void emit__END_SEND( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_END_SEND.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 5: 4c 8b 7d f8 movq -0x8(%rbp), %r15 // 9: 48 8b 03 movq (%rbx), %rax // c: 48 85 c0 testq %rax, %rax // f: 7e 16 jle 0x27 <_JIT_ENTRY+0x27> // 11: 4c 8d 75 f8 leaq -0x8(%rbp), %r14 // 15: 85 c0 testl %eax, %eax // 17: 79 2e jns 0x47 <_JIT_ENTRY+0x47> // 19: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 1d: 4c 89 f5 movq %r14, %rbp // 20: 58 popq %rax // 21: ff 25 00 00 00 00 jmpq *(%rip) # 0x27 <_JIT_ENTRY+0x27> // 0000000000000023: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 27: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_PC32 .L.str.1-0x4 // 2e: be 22 01 00 00 movl $0x122, %esi # imm = 0x122 // 33: 48 89 da movq %rbx, %rdx // 36: ff 15 00 00 00 00 callq *(%rip) # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 3c: 48 8b 03 movq (%rbx), %rax // 3f: 4c 8d 75 f8 leaq -0x8(%rbp), %r14 // 43: 85 c0 testl %eax, %eax // 45: 78 d2 js 0x19 <_JIT_ENTRY+0x19> // 47: ff 15 00 00 00 00 callq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 4d: 48 ff 0b decq (%rbx) // 50: 75 c7 jne 0x19 <_JIT_ENTRY+0x19> // 52: 48 89 df movq %rbx, %rdi // 55: ff 15 00 00 00 00 callq *(%rip) # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 5b: 4c 89 7d f0 movq %r15, -0x10(%rbp) // 5f: 4c 89 f5 movq %r14, %rbp // 62: 58 popq %rax // 63: ff 25 00 00 00 00 jmpq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 63: const unsigned char code_body[99] = { 0x50, 0x48, 0x8b, 0x5d, 0xf0, 0x4c, 0x8b, 0x7d, 0xf8, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x16, 0x4c, 0x8d, 0x75, 0xf8, 0x85, 0xc0, 0x79, 0x2e, 0x4c, 0x89, 0x7d, 0xf0, 0x4c, 0x89, 0xf5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x22, 0x01, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8d, 0x75, 0xf8, 0x85, 0xc0, 0x78, 0xd2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xc7, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf0, 0x4c, 0x89, 0xf5, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: CONTINUE // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 const unsigned char data_body[96] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x23, (uintptr_t)data + 0x3c); patch_32r(code + 0x2a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x38, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x57, (uintptr_t)data + 0x54); } void emit__ERROR_POP_N( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_ERROR_POP_N.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 49 8b 45 00 movq (%r13), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // f: 75 49 jne 0x5a <_JIT_ENTRY+0x5a> // 11: 8b 0d 00 00 00 00 movl (%rip), %ecx # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 17: 48 8d 04 48 leaq (%rax,%rcx,2), %rax // 1b: 48 05 c8 00 00 00 addq $0xc8, %rax // 21: 49 89 45 38 movq %rax, 0x38(%r13) // 25: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 2c: f7 d8 negl %eax // 2e: 48 8d 04 c5 00 00 00 00 leaq (,%rax,8), %rax // 36: 48 01 e8 addq %rbp, %rax // 39: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 40: 49 89 8c 24 10 01 00 00 movq %rcx, 0x110(%r12) // 48: 4c 29 e8 subq %r13, %rax // 4b: 48 83 c0 b8 addq $-0x48, %rax // 4f: 48 c1 e8 03 shrq $0x3, %rax // 53: 41 89 45 40 movl %eax, 0x40(%r13) // 57: 31 c0 xorl %eax, %eax // 59: c3 retq // 5a: 50 pushq %rax // 5b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.108-0x4 // 62: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L.str.109-0x4 // 69: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x70 <_JIT_ENTRY+0x70> // 000000000000006c: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 70: ba 4d 00 00 00 movl $0x4d, %edx // 75: ff 15 00 00 00 00 callq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX __assert_fail-0x4 // 7b: const unsigned char code_body[123] = { 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x49, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x04, 0x48, 0x48, 0x05, 0xc8, 0x00, 0x00, 0x00, 0x49, 0x89, 0x45, 0x38, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd8, 0x48, 0x8d, 0x04, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x48, 0x01, 0xe8, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x8c, 0x24, 0x10, 0x01, 0x00, 0x00, 0x4c, 0x29, 0xe8, 0x48, 0x83, 0xc0, 0xb8, 0x48, 0xc1, 0xe8, 0x03, 0x41, 0x89, 0x45, 0x40, 0x31, 0xc0, 0xc3, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 9a: 00 00 00 00 00 00 // a0: &PyCode_Type+0x0 // a8: OPERAND // b0: OPARG // b8: EXECUTOR // c0: &__assert_fail+0x0 const unsigned char data_body[200] = { 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, (uintptr_t)&PyCode_Type); patch_64(data + 0xa8, instruction->operand); patch_64(data + 0xb0, instruction->oparg); patch_64(data + 0xb8, (uintptr_t)executor); patch_64(data + 0xc0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0xa4); patch_32r(code + 0x28, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0xb4); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x1a); patch_32r(code + 0x6c, (uintptr_t)data + 0x60); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0xbc); } void emit__EXIT_INIT_CHECK( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_EXIT_INIT_CHECK.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 75 6b jne 0x7d <_JIT_ENTRY+0x7d> // 12: 8b 40 48 movl 0x48(%rax), %eax // 15: 48 8d 04 c5 00 00 00 00 leaq (,%rax,8), %rax // 1d: 4c 01 e8 addq %r13, %rax // 20: 48 89 e9 movq %rbp, %rcx // 23: 48 29 c1 subq %rax, %rcx // 26: 48 83 c1 b8 addq $-0x48, %rcx // 2a: 48 b8 f8 ff ff ff 07 00 00 00 movabsq $0x7fffffff8, %rax # imm = 0x7FFFFFFF8 // 34: 48 21 c8 andq %rcx, %rax // 37: 48 83 f8 10 cmpq $0x10, %rax // 3b: 75 60 jne 0x9d <_JIT_ENTRY+0x9d> // 3d: 48 8b 45 f8 movq -0x8(%rbp), %rax // 41: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 48: 74 28 je 0x72 <_JIT_ENTRY+0x72> // 4a: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // 51: 48 8b 39 movq (%rcx), %rdi // 54: 48 8b 40 08 movq 0x8(%rax), %rax // 58: 48 8b 50 18 movq 0x18(%rax), %rdx // 5c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_PC32 .L.str.89-0x4 // 63: 31 c0 xorl %eax, %eax // 65: ff 15 00 00 00 00 callq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX PyErr_Format-0x4 // 6b: 58 popq %rax // 6c: ff 25 00 00 00 00 jmpq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 72: 48 83 c5 f8 addq $-0x8, %rbp // 76: 58 popq %rax // 77: ff 25 00 00 00 00 jmpq *(%rip) # 0x7d <_JIT_ENTRY+0x7d> // 0000000000000079: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 7d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x84 <_JIT_ENTRY+0x84> // 0000000000000080: R_X86_64_PC32 .L.str.108-0x4 // 84: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x8b <_JIT_ENTRY+0x8b> // 0000000000000087: R_X86_64_PC32 .L.str.109-0x4 // 8b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 92: ba 4d 00 00 00 movl $0x4d, %edx // 97: ff 15 00 00 00 00 callq *(%rip) # 0x9d <_JIT_ENTRY+0x9d> // 0000000000000099: R_X86_64_GOTPCRELX __assert_fail-0x4 // 9d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa4 <_JIT_ENTRY+0xa4> // 00000000000000a0: R_X86_64_PC32 .L.str.88-0x4 // a4: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xab <_JIT_ENTRY+0xab> // 00000000000000a7: R_X86_64_PC32 .L.str.1-0x4 // ab: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // b2: ba b9 0d 00 00 movl $0xdb9, %edx # imm = 0xDB9 // b7: ff 15 00 00 00 00 callq *(%rip) # 0xbd <_JIT_ENTRY+0xbd> // 00000000000000b9: R_X86_64_GOTPCRELX __assert_fail-0x4 // bd: const unsigned char code_body[189] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x6b, 0x8b, 0x40, 0x48, 0x48, 0x8d, 0x04, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x01, 0xe8, 0x48, 0x89, 0xe9, 0x48, 0x29, 0xc1, 0x48, 0x83, 0xc1, 0xb8, 0x48, 0xb8, 0xf8, 0xff, 0xff, 0xff, 0x07, 0x00, 0x00, 0x00, 0x48, 0x21, 0xc8, 0x48, 0x83, 0xf8, 0x10, 0x75, 0x60, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x28, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x39, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x8b, 0x50, 0x18, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb9, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00STACK_LEVEL() == 2\x00__init__() should return None, not '%.200s'\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00" // 167: 00 // 168: &PyCode_Type+0x0 // 170: &_Py_NoneStruct+0x0 // 178: &PyExc_TypeError+0x0 // 180: &PyErr_Format+0x0 // 188: ERROR_TARGET // 190: CONTINUE // 198: &__assert_fail+0x0 const unsigned char data_body[416] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x53, 0x54, 0x41, 0x43, 0x4b, 0x5f, 0x4c, 0x45, 0x56, 0x45, 0x4c, 0x28, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x00, 0x5f, 0x5f, 0x69, 0x6e, 0x69, 0x74, 0x5f, 0x5f, 0x28, 0x29, 0x20, 0x73, 0x68, 0x6f, 0x75, 0x6c, 0x64, 0x20, 0x72, 0x65, 0x74, 0x75, 0x72, 0x6e, 0x20, 0x4e, 0x6f, 0x6e, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x27, 0x25, 0x2e, 0x32, 0x30, 0x30, 0x73, 0x27, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x168, (uintptr_t)&PyCode_Type); patch_64(data + 0x170, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x178, (uintptr_t)&PyExc_TypeError); patch_64(data + 0x180, (uintptr_t)&PyErr_Format); patch_64(data + 0x188, instruction_starts[instruction->error_target]); patch_64(data + 0x190, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x198, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x44, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x174); patch_32r(code + 0x5f, (uintptr_t)data + 0x9d); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x184); patch_x86_64_32rx(code + 0x79, (uintptr_t)data + 0x18c); patch_32r(code + 0x80, (uintptr_t)data + 0xc9); patch_32r(code + 0x87, (uintptr_t)data + 0xe7); patch_32r(code + 0x8e, (uintptr_t)data + 0x12d); patch_x86_64_32rx(code + 0x99, (uintptr_t)data + 0x194); patch_32r(code + 0xa0, (uintptr_t)data + 0x8a); patch_32r(code + 0xa7, (uintptr_t)data + -0x4); patch_32r(code + 0xae, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xb9, (uintptr_t)data + 0x194); } void emit__EXIT_TRACE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_EXIT_TRACE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_EXIT_INDEX-0x4 // 8: c1 e1 04 shll $0x4, %ecx // b: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x12 <_JIT_ENTRY+0x12> // 000000000000000e: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 12: 48 8b 84 0b 88 00 00 00 movq 0x88(%rbx,%rcx), %rax // 1a: 8b 10 movl (%rax), %edx // 1c: ff c2 incl %edx // 1e: 74 16 je 0x36 <_JIT_ENTRY+0x36> // 20: 4c 8d 34 0b leaq (%rbx,%rcx), %r14 // 24: 49 81 c6 88 00 00 00 addq $0x88, %r14 // 2b: 89 10 movl %edx, (%rax) // 2d: ff 15 00 00 00 00 callq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 33: 49 8b 06 movq (%r14), %rax // 36: 49 89 9c 24 10 01 00 00 movq %rbx, 0x110(%r12) // 3e: 48 8b 40 78 movq 0x78(%rax), %rax // 42: 59 popq %rcx // 43: ff e0 jmpq *%rax // 45: const unsigned char code_body[69] = { 0x50, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe1, 0x04, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x84, 0x0b, 0x88, 0x00, 0x00, 0x00, 0x8b, 0x10, 0xff, 0xc2, 0x74, 0x16, 0x4c, 0x8d, 0x34, 0x0b, 0x49, 0x81, 0xc6, 0x88, 0x00, 0x00, 0x00, 0x89, 0x10, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x49, 0x89, 0x9c, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x78, 0x59, 0xff, 0xe0, }; // 0: // 0: EXIT_INDEX // 8: EXECUTOR // 10: &_Py_INCREF_IncRefTotal+0x0 const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->exit_index); patch_64(data + 0x8, (uintptr_t)executor); patch_64(data + 0x10, (uintptr_t)&_Py_INCREF_IncRefTotal); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xe, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0xc); } void emit__EXPAND_METHOD( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_EXPAND_METHOD.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c1 movl %eax, %ecx // d: f7 d1 notl %ecx // f: 4c 63 f1 movslq %ecx, %r14 // 12: 4a 83 7c f5 00 00 cmpq $0x0, (%rbp,%r14,8) // 18: 0f 85 cf 00 00 00 jne 0xed <_JIT_ENTRY+0xed> // 1e: 4c 89 6c 24 10 movq %r13, 0x10(%rsp) // 23: b9 fe ff ff ff movl $0xfffffffe, %ecx # imm = 0xFFFFFFFE // 28: 29 c1 subl %eax, %ecx // 2a: 4c 63 e9 movslq %ecx, %r13 // 2d: 4a 8b 5c ed 00 movq (%rbp,%r13,8), %rbx // 32: 48 8b 43 08 movq 0x8(%rbx), %rax // 36: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_REX_GOTPCRELX PyMethod_Type-0x4 // 3d: 0f 85 ca 00 00 00 jne 0x10d <_JIT_ENTRY+0x10d> // 43: 4c 89 64 24 08 movq %r12, 0x8(%rsp) // 48: 4c 8b 7b 18 movq 0x18(%rbx), %r15 // 4c: 41 8b 07 movl (%r15), %eax // 4f: ff c0 incl %eax // 51: 74 09 je 0x5c <_JIT_ENTRY+0x5c> // 53: 41 89 07 movl %eax, (%r15) // 56: ff 15 00 00 00 00 callq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 5c: 4e 89 7c f5 00 movq %r15, (%rbp,%r14,8) // 61: 4c 8b 63 10 movq 0x10(%rbx), %r12 // 65: 49 8b 44 24 08 movq 0x8(%r12), %rax // 6a: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 71: 0f 85 b6 00 00 00 jne 0x12d <_JIT_ENTRY+0x12d> // 77: 41 8b 04 24 movl (%r12), %eax // 7b: ff c0 incl %eax // 7d: 75 0e jne 0x8d <_JIT_ENTRY+0x8d> // 7f: 48 8b 03 movq (%rbx), %rax // 82: 48 85 c0 testq %rax, %rax // 85: 7e 18 jle 0x9f <_JIT_ENTRY+0x9f> // 87: 85 c0 testl %eax, %eax // 89: 79 30 jns 0xbb <_JIT_ENTRY+0xbb> // 8b: eb 42 jmp 0xcf <_JIT_ENTRY+0xcf> // 8d: 41 89 04 24 movl %eax, (%r12) // 91: ff 15 00 00 00 00 callq *(%rip) # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 97: 48 8b 03 movq (%rbx), %rax // 9a: 48 85 c0 testq %rax, %rax // 9d: 7f e8 jg 0x87 <_JIT_ENTRY+0x87> // 9f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa6 <_JIT_ENTRY+0xa6> // 00000000000000a2: R_X86_64_PC32 .L.str.1-0x4 // a6: be 3a 0c 00 00 movl $0xc3a, %esi # imm = 0xC3A // ab: 48 89 da movq %rbx, %rdx // ae: ff 15 00 00 00 00 callq *(%rip) # 0xb4 <_JIT_ENTRY+0xb4> // 00000000000000b0: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // b4: 48 8b 03 movq (%rbx), %rax // b7: 85 c0 testl %eax, %eax // b9: 78 14 js 0xcf <_JIT_ENTRY+0xcf> // bb: ff 15 00 00 00 00 callq *(%rip) # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // c1: 48 ff 0b decq (%rbx) // c4: 75 09 jne 0xcf <_JIT_ENTRY+0xcf> // c6: 48 89 df movq %rbx, %rdi // c9: ff 15 00 00 00 00 callq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // cf: 4e 89 64 ed 00 movq %r12, (%rbp,%r13,8) // d4: 4e 89 7c f5 00 movq %r15, (%rbp,%r14,8) // d9: 4c 8b 6c 24 10 movq 0x10(%rsp), %r13 // de: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // e3: 48 83 c4 18 addq $0x18, %rsp // e7: ff 25 00 00 00 00 jmpq *(%rip) # 0xed <_JIT_ENTRY+0xed> // 00000000000000e9: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ed: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf4 <_JIT_ENTRY+0xf4> // 00000000000000f0: R_X86_64_PC32 .L.str.82-0x4 // f4: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xfb <_JIT_ENTRY+0xfb> // 00000000000000f7: R_X86_64_PC32 .L.str.1-0x4 // fb: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 102: ba 32 0c 00 00 movl $0xc32, %edx # imm = 0xC32 // 107: ff 15 00 00 00 00 callq *(%rip) # 0x10d <_JIT_ENTRY+0x10d> // 0000000000000109: R_X86_64_GOTPCRELX __assert_fail-0x4 // 10d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x114 <_JIT_ENTRY+0x114> // 0000000000000110: R_X86_64_PC32 .L.str.83-0x4 // 114: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x11b <_JIT_ENTRY+0x11b> // 0000000000000117: R_X86_64_PC32 .L.str.1-0x4 // 11b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 122: ba 33 0c 00 00 movl $0xc33, %edx # imm = 0xC33 // 127: ff 15 00 00 00 00 callq *(%rip) # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_GOTPCRELX __assert_fail-0x4 // 12d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x134 <_JIT_ENTRY+0x134> // 0000000000000130: R_X86_64_PC32 .L.str.84-0x4 // 134: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x13b <_JIT_ENTRY+0x13b> // 0000000000000137: R_X86_64_PC32 .L.str.1-0x4 // 13b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x142 <_JIT_ENTRY+0x142> // 000000000000013e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 142: ba 38 0c 00 00 movl $0xc38, %edx # imm = 0xC38 // 147: ff 15 00 00 00 00 callq *(%rip) # 0x14d <_JIT_ENTRY+0x14d> // 0000000000000149: R_X86_64_GOTPCRELX __assert_fail-0x4 // 14d: const unsigned char code_body[333] = { 0x48, 0x83, 0xec, 0x18, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc1, 0xf7, 0xd1, 0x4c, 0x63, 0xf1, 0x4a, 0x83, 0x7c, 0xf5, 0x00, 0x00, 0x0f, 0x85, 0xcf, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x6c, 0x24, 0x10, 0xb9, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc1, 0x4c, 0x63, 0xe9, 0x4a, 0x8b, 0x5c, 0xed, 0x00, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xca, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x64, 0x24, 0x08, 0x4c, 0x8b, 0x7b, 0x18, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x89, 0x7c, 0xf5, 0x00, 0x4c, 0x8b, 0x63, 0x10, 0x49, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xb6, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x04, 0x24, 0xff, 0xc0, 0x75, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x18, 0x85, 0xc0, 0x79, 0x30, 0xeb, 0x42, 0x41, 0x89, 0x04, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe8, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x3a, 0x0c, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x89, 0x64, 0xed, 0x00, 0x4e, 0x89, 0x7c, 0xf5, 0x00, 0x4c, 0x8b, 0x6c, 0x24, 0x10, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x32, 0x0c, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x33, 0x0c, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x38, 0x0c, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00null == NULL\x00Py_TYPE(callable) == &PyMethod_Type\x00PyFunction_Check(method)\x00' // d8: // d8: OPARG // e0: &PyMethod_Type+0x0 // e8: &_Py_INCREF_IncRefTotal+0x0 // f0: &PyFunction_Type+0x0 // f8: &_Py_NegativeRefcount+0x0 // 100: &_Py_DECREF_DecRefTotal+0x0 // 108: &_Py_Dealloc+0x0 // 110: CONTINUE // 118: &__assert_fail+0x0 const unsigned char data_body[288] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6e, 0x75, 0x6c, 0x6c, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xd8, instruction->oparg); patch_64(data + 0xe0, (uintptr_t)&PyMethod_Type); patch_64(data + 0xe8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xf0, (uintptr_t)&PyFunction_Type); patch_64(data + 0xf8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x100, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x108, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x110, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x118, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x6d, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x93, (uintptr_t)data + 0xe4); patch_32r(code + 0xa2, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xb0, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0xcb, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0xe9, (uintptr_t)data + 0x10c); patch_32r(code + 0xf0, (uintptr_t)data + 0x8a); patch_32r(code + 0xf7, (uintptr_t)data + -0x4); patch_32r(code + 0xfe, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x109, (uintptr_t)data + 0x114); patch_32r(code + 0x110, (uintptr_t)data + 0x97); patch_32r(code + 0x117, (uintptr_t)data + -0x4); patch_32r(code + 0x11e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x129, (uintptr_t)data + 0x114); patch_32r(code + 0x130, (uintptr_t)data + 0xbb); patch_32r(code + 0x137, (uintptr_t)data + -0x4); patch_32r(code + 0x13e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x149, (uintptr_t)data + 0x114); } void emit__FATAL_ERROR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_FATAL_ERROR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_PC32 .L.str.106-0x4 // 8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_PC32 .L.str.1-0x4 // f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x16 <_JIT_ENTRY+0x16> // 0000000000000012: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 16: ba 5e 11 00 00 movl $0x115e, %edx # imm = 0x115E // 1b: ff 15 00 00 00 00 callq *(%rip) # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 21: const unsigned char code_body[33] = { 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5e, 0x11, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x000\x00' // 90: // 90: &__assert_fail+0x0 const unsigned char data_body[152] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x90, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0x8a); patch_32r(code + 0xb, (uintptr_t)data + -0x4); patch_32r(code + 0x12, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1d, (uintptr_t)data + 0x8c); } void emit__FORMAT_SIMPLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_FORMAT_SIMPLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyUnicode_Type-0x4 // 10: 74 4b je 0x5d <_JIT_ENTRY+0x5d> // 12: 48 89 df movq %rbx, %rdi // 15: 31 f6 xorl %esi, %esi // 17: ff 15 00 00 00 00 callq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX PyObject_Format-0x4 // 1d: 49 89 c6 movq %rax, %r14 // 20: 48 8b 03 movq (%rbx), %rax // 23: 48 85 c0 testq %rax, %rax // 26: 7e 06 jle 0x2e <_JIT_ENTRY+0x2e> // 28: 85 c0 testl %eax, %eax // 2a: 79 1e jns 0x4a <_JIT_ENTRY+0x4a> // 2c: eb 27 jmp 0x55 <_JIT_ENTRY+0x55> // 2e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_PC32 .L.str.1-0x4 // 35: be 0c 10 00 00 movl $0x100c, %esi # imm = 0x100C // 3a: 48 89 da movq %rbx, %rdx // 3d: ff 15 00 00 00 00 callq *(%rip) # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 43: 48 8b 03 movq (%rbx), %rax // 46: 85 c0 testl %eax, %eax // 48: 78 0b js 0x55 <_JIT_ENTRY+0x55> // 4a: ff 15 00 00 00 00 callq *(%rip) # 0x50 <_JIT_ENTRY+0x50> // 000000000000004c: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 50: 48 ff 0b decq (%rbx) // 53: 74 13 je 0x68 <_JIT_ENTRY+0x68> // 55: 4c 89 f3 movq %r14, %rbx // 58: 4d 85 f6 testq %r14, %r14 // 5b: 74 1c je 0x79 <_JIT_ENTRY+0x79> // 5d: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 61: 58 popq %rax // 62: ff 25 00 00 00 00 jmpq *(%rip) # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 68: 48 89 df movq %rbx, %rdi // 6b: ff 15 00 00 00 00 callq *(%rip) # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 71: 4c 89 f3 movq %r14, %rbx // 74: 4d 85 f6 testq %r14, %r14 // 77: 75 e4 jne 0x5d <_JIT_ENTRY+0x5d> // 79: 58 popq %rax // 7a: ff 25 00 00 00 00 jmpq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 80: const unsigned char code_body[128] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x4b, 0x48, 0x89, 0xdf, 0x31, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x0c, 0x10, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x13, 0x4c, 0x89, 0xf3, 0x4d, 0x85, 0xf6, 0x74, 0x1c, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf3, 0x4d, 0x85, 0xf6, 0x75, 0xe4, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyUnicode_Type+0x0 // 48: &PyObject_Format+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: CONTINUE // 68: &_Py_Dealloc+0x0 // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyUnicode_Type); patch_64(data + 0x48, (uintptr_t)&PyObject_Format); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x19, (uintptr_t)data + 0x44); patch_32r(code + 0x31, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x4c, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x64, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x6d, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x7c, (uintptr_t)data + 0x6c); } void emit__FORMAT_WITH_SPEC( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_FORMAT_WITH_SPEC.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 9: 4c 89 ff movq %r15, %rdi // c: 4c 89 f6 movq %r14, %rsi // f: ff 15 00 00 00 00 callq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX PyObject_Format-0x4 // 15: 48 89 c3 movq %rax, %rbx // 18: 49 8b 07 movq (%r15), %rax // 1b: 48 85 c0 testq %rax, %rax // 1e: 7e 06 jle 0x26 <_JIT_ENTRY+0x26> // 20: 85 c0 testl %eax, %eax // 22: 79 1e jns 0x42 <_JIT_ENTRY+0x42> // 24: eb 27 jmp 0x4d <_JIT_ENTRY+0x4d> // 26: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_PC32 .L.str.1-0x4 // 2d: be 1d 10 00 00 movl $0x101d, %esi # imm = 0x101D // 32: 4c 89 fa movq %r15, %rdx // 35: ff 15 00 00 00 00 callq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 3b: 49 8b 07 movq (%r15), %rax // 3e: 85 c0 testl %eax, %eax // 40: 78 0b js 0x4d <_JIT_ENTRY+0x4d> // 42: ff 15 00 00 00 00 callq *(%rip) # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 48: 49 ff 0f decq (%r15) // 4b: 74 0e je 0x5b <_JIT_ENTRY+0x5b> // 4d: 49 8b 06 movq (%r14), %rax // 50: 48 85 c0 testq %rax, %rax // 53: 7e 17 jle 0x6c <_JIT_ENTRY+0x6c> // 55: 85 c0 testl %eax, %eax // 57: 79 2f jns 0x88 <_JIT_ENTRY+0x88> // 59: eb 38 jmp 0x93 <_JIT_ENTRY+0x93> // 5b: 4c 89 ff movq %r15, %rdi // 5e: ff 15 00 00 00 00 callq *(%rip) # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 64: 49 8b 06 movq (%r14), %rax // 67: 48 85 c0 testq %rax, %rax // 6a: 7f e9 jg 0x55 <_JIT_ENTRY+0x55> // 6c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_PC32 .L.str.1-0x4 // 73: be 1e 10 00 00 movl $0x101e, %esi # imm = 0x101E // 78: 4c 89 f2 movq %r14, %rdx // 7b: ff 15 00 00 00 00 callq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 81: 49 8b 06 movq (%r14), %rax // 84: 85 c0 testl %eax, %eax // 86: 78 0b js 0x93 <_JIT_ENTRY+0x93> // 88: ff 15 00 00 00 00 callq *(%rip) # 0x8e <_JIT_ENTRY+0x8e> // 000000000000008a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 8e: 49 ff 0e decq (%r14) // 91: 74 14 je 0xa7 <_JIT_ENTRY+0xa7> // 93: 48 85 db testq %rbx, %rbx // 96: 74 1d je 0xb5 <_JIT_ENTRY+0xb5> // 98: 48 89 5d f0 movq %rbx, -0x10(%rbp) // 9c: 48 83 c5 f8 addq $-0x8, %rbp // a0: 58 popq %rax // a1: ff 25 00 00 00 00 jmpq *(%rip) # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // a7: 4c 89 f7 movq %r14, %rdi // aa: ff 15 00 00 00 00 callq *(%rip) # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // b0: 48 85 db testq %rbx, %rbx // b3: 75 e3 jne 0x98 <_JIT_ENTRY+0x98> // b5: 58 popq %rax // b6: ff 25 00 00 00 00 jmpq *(%rip) # 0xbc <_JIT_ENTRY+0xbc> // 00000000000000b8: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // bc: const unsigned char code_body[188] = { 0x50, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xff, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x1d, 0x10, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x1e, 0x10, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x14, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x48, 0x89, 0x5d, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe3, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyObject_Format+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 // 60: CONTINUE // 68: ERROR_TARGET const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyObject_Format); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x3c); patch_32r(code + 0x29, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x37, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x44, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x60, (uintptr_t)data + 0x54); patch_32r(code + 0x6f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x8a, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xa3, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xac, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xb8, (uintptr_t)data + 0x64); } void emit__FOR_ITER_GEN_FRAME( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_FOR_ITER_GEN_FRAME.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyGen_Type-0x4 // f: 75 06 jne 0x17 <_JIT_ENTRY+0x17> // 11: 80 78 43 00 cmpb $0x0, 0x43(%rax) // 15: 78 06 js 0x1d <_JIT_ENTRY+0x1d> // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 1d: 48 8d 48 48 leaq 0x48(%rax), %rcx // 21: 48 63 90 88 00 00 00 movslq 0x88(%rax), %rdx // 28: 48 8b 35 00 00 00 00 movq (%rip), %rsi # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 2f: 48 89 b4 d0 90 00 00 00 movq %rsi, 0x90(%rax,%rdx,8) // 37: ff c2 incl %edx // 39: 89 90 88 00 00 00 movl %edx, 0x88(%rax) // 3f: c6 40 43 00 movb $0x0, 0x43(%rax) // 43: 49 8b 54 24 78 movq 0x78(%r12), %rdx // 48: 48 89 50 30 movq %rdx, 0x30(%rax) // 4c: 48 83 c0 28 addq $0x28, %rax // 50: 49 89 44 24 78 movq %rax, 0x78(%r12) // 55: 8b 05 00 00 00 00 movl (%rip), %eax # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 5b: 83 c0 02 addl $0x2, %eax // 5e: 66 41 89 45 44 movw %ax, 0x44(%r13) // 63: 48 89 4d 00 movq %rcx, (%rbp) // 67: 48 83 c5 08 addq $0x8, %rbp // 6b: ff 25 00 00 00 00 jmpq *(%rip) # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6b: const unsigned char code_body[107] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x06, 0x80, 0x78, 0x43, 0x00, 0x78, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x48, 0x48, 0x48, 0x63, 0x90, 0x88, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xb4, 0xd0, 0x90, 0x00, 0x00, 0x00, 0xff, 0xc2, 0x89, 0x90, 0x88, 0x00, 0x00, 0x00, 0xc6, 0x40, 0x43, 0x00, 0x49, 0x8b, 0x54, 0x24, 0x78, 0x48, 0x89, 0x50, 0x30, 0x48, 0x83, 0xc0, 0x28, 0x49, 0x89, 0x44, 0x24, 0x78, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x83, 0xc0, 0x02, 0x66, 0x41, 0x89, 0x45, 0x44, 0x48, 0x89, 0x4d, 0x00, 0x48, 0x83, 0xc5, 0x08, }; // 0: // 0: &PyGen_Type+0x0 // 8: JUMP_TARGET // 10: &_Py_NoneStruct+0x0 // 18: OPARG const unsigned char data_body[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyGen_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); patch_64(data + 0x10, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x18, instruction->oparg); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x19, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x57, (uintptr_t)data + 0x14); } void emit__FOR_ITER_TIER_TWO( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_FOR_ITER_TIER_TWO.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 7d f8 movq -0x8(%rbp), %rdi // 5: 48 8b 47 08 movq 0x8(%rdi), %rax // 9: ff 90 e0 00 00 00 callq *0xe0(%rax) // f: 48 85 c0 testq %rax, %rax // 12: 74 0f je 0x23 <_JIT_ENTRY+0x23> // 14: 48 89 45 00 movq %rax, (%rbp) // 18: 48 83 c5 08 addq $0x8, %rbp // 1c: 58 popq %rax // 1d: ff 25 00 00 00 00 jmpq *(%rip) # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 23: 4d 85 e4 testq %r12, %r12 // 26: 74 3f je 0x67 <_JIT_ENTRY+0x67> // 28: 49 8b 44 24 70 movq 0x70(%r12), %rax // 2d: 48 85 c0 testq %rax, %rax // 30: 74 27 je 0x59 <_JIT_ENTRY+0x59> // 32: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // 37: 74 20 je 0x59 <_JIT_ENTRY+0x59> // 39: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_REX_GOTPCRELX PyExc_StopIteration-0x4 // 40: 48 8b 30 movq (%rax), %rsi // 43: 4c 89 e7 movq %r12, %rdi // 46: ff 15 00 00 00 00 callq *(%rip) # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCRELX _PyErr_ExceptionMatches-0x4 // 4c: 85 c0 testl %eax, %eax // 4e: 74 10 je 0x60 <_JIT_ENTRY+0x60> // 50: 4c 89 e7 movq %r12, %rdi // 53: ff 15 00 00 00 00 callq *(%rip) # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_GOTPCRELX _PyErr_Clear-0x4 // 59: 58 popq %rax // 5a: ff 25 00 00 00 00 jmpq *(%rip) # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 60: 58 popq %rax // 61: ff 25 00 00 00 00 jmpq *(%rip) # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 67: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_PC32 .L.str.143-0x4 // 6e: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_PC32 .L.str.144-0x4 // 75: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x7c <_JIT_ENTRY+0x7c> // 0000000000000078: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 7c: ba 4b 00 00 00 movl $0x4b, %edx // 81: ff 15 00 00 00 00 callq *(%rip) # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_GOTPCRELX __assert_fail-0x4 // 87: const unsigned char code_body[135] = { 0x50, 0x48, 0x8b, 0x7d, 0xf8, 0x48, 0x8b, 0x47, 0x08, 0xff, 0x90, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xe4, 0x74, 0x3f, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x85, 0xc0, 0x74, 0x27, 0x48, 0x83, 0x78, 0x08, 0x00, 0x74, 0x20, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x10, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00' // 83: 00 00 00 00 00 // 88: CONTINUE // 90: &PyExc_StopIteration+0x0 // 98: &_PyErr_ExceptionMatches+0x0 // a0: &_PyErr_Clear+0x0 // a8: JUMP_TARGET // b0: ERROR_TARGET // b8: &__assert_fail+0x0 const unsigned char data_body[192] = { 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x88, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x90, (uintptr_t)&PyExc_StopIteration); patch_64(data + 0x98, (uintptr_t)&_PyErr_ExceptionMatches); patch_64(data + 0xa0, (uintptr_t)&_PyErr_Clear); patch_64(data + 0xa8, instruction_starts[instruction->jump_target]); patch_64(data + 0xb0, instruction_starts[instruction->error_target]); patch_64(data + 0xb8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x1f, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x55, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x5c, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x63, (uintptr_t)data + 0xac); patch_32r(code + 0x6a, (uintptr_t)data + -0x4); patch_32r(code + 0x71, (uintptr_t)data + 0xb); patch_32r(code + 0x78, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x83, (uintptr_t)data + 0xb4); } void emit__GET_AITER( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GET_AITER.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 49 8b 46 08 movq 0x8(%r14), %rax // 9: 48 8b 48 50 movq 0x50(%rax), %rcx // d: 48 85 c9 testq %rcx, %rcx // 10: 74 26 je 0x38 <_JIT_ENTRY+0x38> // 12: 48 8b 49 08 movq 0x8(%rcx), %rcx // 16: 48 85 c9 testq %rcx, %rcx // 19: 74 1d je 0x38 <_JIT_ENTRY+0x38> // 1b: 4c 89 f7 movq %r14, %rdi // 1e: ff d1 callq *%rcx // 20: 48 89 c3 movq %rax, %rbx // 23: 49 8b 06 movq (%r14), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 77 jle 0xa2 <_JIT_ENTRY+0xa2> // 2b: 85 c0 testl %eax, %eax // 2d: 0f 89 8b 00 00 00 jns 0xbe <_JIT_ENTRY+0xbe> // 33: e9 95 00 00 00 jmp 0xcd <_JIT_ENTRY+0xcd> // 38: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // 3f: 48 8b 31 movq (%rcx), %rsi // 42: 48 8b 48 18 movq 0x18(%rax), %rcx // 46: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_PC32 .L.str.15-0x4 // 4d: 4c 89 e7 movq %r12, %rdi // 50: 31 c0 xorl %eax, %eax // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // 58: 49 8b 06 movq (%r14), %rax // 5b: 48 85 c0 testq %rax, %rax // 5e: 7e 0b jle 0x6b <_JIT_ENTRY+0x6b> // 60: 85 c0 testl %eax, %eax // 62: 79 23 jns 0x87 <_JIT_ENTRY+0x87> // 64: 58 popq %rax // 65: ff 25 00 00 00 00 jmpq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 6b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_PC32 .L.str.1-0x4 // 72: be f5 03 00 00 movl $0x3f5, %esi # imm = 0x3F5 // 77: 4c 89 f2 movq %r14, %rdx // 7a: ff 15 00 00 00 00 callq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 80: 49 8b 06 movq (%r14), %rax // 83: 85 c0 testl %eax, %eax // 85: 78 dd js 0x64 <_JIT_ENTRY+0x64> // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 8d: 49 ff 0e decq (%r14) // 90: 75 d2 jne 0x64 <_JIT_ENTRY+0x64> // 92: 4c 89 f7 movq %r14, %rdi // 95: ff 15 00 00 00 00 callq *(%rip) # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 9b: 58 popq %rax // 9c: ff 25 00 00 00 00 jmpq *(%rip) # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // a2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa9 <_JIT_ENTRY+0xa9> // 00000000000000a5: R_X86_64_PC32 .L.str.1-0x4 // a9: be f9 03 00 00 movl $0x3f9, %esi # imm = 0x3F9 // ae: 4c 89 f2 movq %r14, %rdx // b1: ff 15 00 00 00 00 callq *(%rip) # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // b7: 49 8b 06 movq (%r14), %rax // ba: 85 c0 testl %eax, %eax // bc: 78 0f js 0xcd <_JIT_ENTRY+0xcd> // be: ff 15 00 00 00 00 callq *(%rip) # 0xc4 <_JIT_ENTRY+0xc4> // 00000000000000c0: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // c4: 49 ff 0e decq (%r14) // c7: 0f 84 87 00 00 00 je 0x154 <_JIT_ENTRY+0x154> // cd: 48 85 db testq %rbx, %rbx // d0: 0f 84 90 00 00 00 je 0x166 <_JIT_ENTRY+0x166> // d6: 48 8b 43 08 movq 0x8(%rbx), %rax // da: 48 8b 48 50 movq 0x50(%rax), %rcx // de: 48 85 c9 testq %rcx, %rcx // e1: 74 12 je 0xf5 <_JIT_ENTRY+0xf5> // e3: 48 83 79 10 00 cmpq $0x0, 0x10(%rcx) // e8: 74 0b je 0xf5 <_JIT_ENTRY+0xf5> // ea: 48 89 5d f8 movq %rbx, -0x8(%rbp) // ee: 58 popq %rax // ef: ff 25 00 00 00 00 jmpq *(%rip) # 0xf5 <_JIT_ENTRY+0xf5> // 00000000000000f1: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // f5: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xfc <_JIT_ENTRY+0xfc> // 00000000000000f8: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // fc: 48 8b 31 movq (%rcx), %rsi // ff: 48 8b 48 18 movq 0x18(%rax), %rcx // 103: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x10a <_JIT_ENTRY+0x10a> // 0000000000000106: R_X86_64_PC32 .L.str.16-0x4 // 10a: 4c 89 e7 movq %r12, %rdi // 10d: 31 c0 xorl %eax, %eax // 10f: ff 15 00 00 00 00 callq *(%rip) # 0x115 <_JIT_ENTRY+0x115> // 0000000000000111: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // 115: 48 8b 03 movq (%rbx), %rax // 118: 48 85 c0 testq %rax, %rax // 11b: 7f 18 jg 0x135 <_JIT_ENTRY+0x135> // 11d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x124 <_JIT_ENTRY+0x124> // 0000000000000120: R_X86_64_PC32 .L.str.1-0x4 // 124: be 01 04 00 00 movl $0x401, %esi # imm = 0x401 // 129: 48 89 da movq %rbx, %rdx // 12c: ff 15 00 00 00 00 callq *(%rip) # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 132: 48 8b 03 movq (%rbx), %rax // 135: 85 c0 testl %eax, %eax // 137: 78 14 js 0x14d <_JIT_ENTRY+0x14d> // 139: ff 15 00 00 00 00 callq *(%rip) # 0x13f <_JIT_ENTRY+0x13f> // 000000000000013b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 13f: 48 ff 0b decq (%rbx) // 142: 75 09 jne 0x14d <_JIT_ENTRY+0x14d> // 144: 48 89 df movq %rbx, %rdi // 147: ff 15 00 00 00 00 callq *(%rip) # 0x14d <_JIT_ENTRY+0x14d> // 0000000000000149: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 14d: 58 popq %rax // 14e: ff 25 00 00 00 00 jmpq *(%rip) # 0x154 <_JIT_ENTRY+0x154> // 0000000000000150: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 154: 4c 89 f7 movq %r14, %rdi // 157: ff 15 00 00 00 00 callq *(%rip) # 0x15d <_JIT_ENTRY+0x15d> // 0000000000000159: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 15d: 48 85 db testq %rbx, %rbx // 160: 0f 85 70 ff ff ff jne 0xd6 <_JIT_ENTRY+0xd6> // 166: 58 popq %rax // 167: ff 25 00 00 00 00 jmpq *(%rip) # 0x16d <_JIT_ENTRY+0x16d> // 0000000000000169: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 16d: const unsigned char code_body[365] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x49, 0x8b, 0x46, 0x08, 0x48, 0x8b, 0x48, 0x50, 0x48, 0x85, 0xc9, 0x74, 0x26, 0x48, 0x8b, 0x49, 0x08, 0x48, 0x85, 0xc9, 0x74, 0x1d, 0x4c, 0x89, 0xf7, 0xff, 0xd1, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x77, 0x85, 0xc0, 0x0f, 0x89, 0x8b, 0x00, 0x00, 0x00, 0xe9, 0x95, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x31, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf5, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0xd2, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xf9, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0f, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x0f, 0x84, 0x87, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x0f, 0x84, 0x90, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x48, 0x50, 0x48, 0x85, 0xc9, 0x74, 0x12, 0x48, 0x83, 0x79, 0x10, 0x00, 0x74, 0x0b, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x31, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x01, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x0f, 0x85, 0x70, 0xff, 0xff, 0xff, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: "/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00'async for' requires an object with __aiter__ method, got %.100s\x00'async for' received an object from __aiter__ that does not implement __anext__: %.100s\x00" // d9: 00 00 00 00 00 00 00 // e0: &PyExc_TypeError+0x0 // e8: &_PyErr_Format+0x0 // f0: ERROR_TARGET // f8: &_Py_NegativeRefcount+0x0 // 100: &_Py_DECREF_DecRefTotal+0x0 // 108: &_Py_Dealloc+0x0 // 110: CONTINUE const unsigned char data_body[280] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x27, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x6f, 0x72, 0x27, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x5f, 0x5f, 0x61, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x5f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2c, 0x20, 0x67, 0x6f, 0x74, 0x20, 0x25, 0x2e, 0x31, 0x30, 0x30, 0x73, 0x00, 0x27, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x6f, 0x72, 0x27, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x5f, 0x5f, 0x61, 0x69, 0x74, 0x65, 0x72, 0x5f, 0x5f, 0x20, 0x74, 0x68, 0x61, 0x74, 0x20, 0x64, 0x6f, 0x65, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x69, 0x6d, 0x70, 0x6c, 0x65, 0x6d, 0x65, 0x6e, 0x74, 0x20, 0x5f, 0x5f, 0x61, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x5f, 0x3a, 0x20, 0x25, 0x2e, 0x31, 0x30, 0x30, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, (uintptr_t)&PyExc_TypeError); patch_64(data + 0xe8, (uintptr_t)&_PyErr_Format); patch_64(data + 0xf0, instruction_starts[instruction->error_target]); patch_64(data + 0xf8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x100, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x108, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x110, (uintptr_t)code + sizeof(code_body)); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0xdc); patch_32r(code + 0x49, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0xec); patch_32r(code + 0x6e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x7c, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x97, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0xec); patch_32r(code + 0xa5, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xb3, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0xc0, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0xf1, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0xf8, (uintptr_t)data + 0xdc); patch_32r(code + 0x106, (uintptr_t)data + 0x7d); patch_x86_64_32rx(code + 0x111, (uintptr_t)data + 0xe4); patch_32r(code + 0x120, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x12e, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x13b, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x149, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x150, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x159, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x169, (uintptr_t)data + 0xec); } void emit__GET_ANEXT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GET_ANEXT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 7d f8 movq -0x8(%rbp), %rdi // 5: 48 8b 47 08 movq 0x8(%rdi), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyAsyncGen_Type-0x4 // 10: 74 6a je 0x7c <_JIT_ENTRY+0x7c> // 12: 48 8b 48 50 movq 0x50(%rax), %rcx // 16: 48 85 c9 testq %rcx, %rcx // 19: 74 3a je 0x55 <_JIT_ENTRY+0x55> // 1b: 48 8b 49 10 movq 0x10(%rcx), %rcx // 1f: 48 85 c9 testq %rcx, %rcx // 22: 74 31 je 0x55 <_JIT_ENTRY+0x55> // 24: ff d1 callq *%rcx // 26: 48 85 c0 testq %rax, %rax // 29: 0f 84 c8 00 00 00 je 0xf7 <_JIT_ENTRY+0xf7> // 2f: 48 89 c3 movq %rax, %rbx // 32: 48 89 c7 movq %rax, %rdi // 35: ff 15 00 00 00 00 callq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _PyCoro_GetAwaitableIter-0x4 // 3b: 48 85 c0 testq %rax, %rax // 3e: 74 5e je 0x9e <_JIT_ENTRY+0x9e> // 40: 48 8b 0b movq (%rbx), %rcx // 43: 48 85 c9 testq %rcx, %rcx // 46: 0f 8e b2 00 00 00 jle 0xfe <_JIT_ENTRY+0xfe> // 4c: 85 c9 testl %ecx, %ecx // 4e: 78 3f js 0x8f <_JIT_ENTRY+0x8f> // 50: e9 cf 00 00 00 jmp 0x124 <_JIT_ENTRY+0x124> // 55: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // 5c: 48 8b 31 movq (%rcx), %rsi // 5f: 48 8b 48 18 movq 0x18(%rax), %rcx // 63: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_PC32 .L.str.17-0x4 // 6a: 4c 89 e7 movq %r12, %rdi // 6d: 31 c0 xorl %eax, %eax // 6f: ff 15 00 00 00 00 callq *(%rip) # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // 75: 58 popq %rax // 76: ff 25 00 00 00 00 jmpq *(%rip) # 0x7c <_JIT_ENTRY+0x7c> // 0000000000000078: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 7c: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x83 <_JIT_ENTRY+0x83> // 000000000000007f: R_X86_64_REX_GOTPCRELX PyAsyncGen_Type-0x4 // 83: 48 8b 40 50 movq 0x50(%rax), %rax // 87: ff 50 10 callq *0x10(%rax) // 8a: 48 85 c0 testq %rax, %rax // 8d: 74 68 je 0xf7 <_JIT_ENTRY+0xf7> // 8f: 48 89 45 00 movq %rax, (%rbp) // 93: 48 83 c5 08 addq $0x8, %rbp // 97: 58 popq %rax // 98: ff 25 00 00 00 00 jmpq *(%rip) # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 9e: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xa5 <_JIT_ENTRY+0xa5> // 00000000000000a1: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // a5: 48 8b 38 movq (%rax), %rdi // a8: 48 8b 43 08 movq 0x8(%rbx), %rax // ac: 48 8b 50 18 movq 0x18(%rax), %rdx // b0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_PC32 .L.str.18-0x4 // b7: 31 c0 xorl %eax, %eax // b9: ff 15 00 00 00 00 callq *(%rip) # 0xbf <_JIT_ENTRY+0xbf> // 00000000000000bb: R_X86_64_GOTPCRELX _PyErr_FormatFromCause-0x4 // bf: 48 8b 03 movq (%rbx), %rax // c2: 48 85 c0 testq %rax, %rax // c5: 7f 18 jg 0xdf <_JIT_ENTRY+0xdf> // c7: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xce <_JIT_ENTRY+0xce> // 00000000000000ca: R_X86_64_PC32 .L.str.1-0x4 // ce: be 2c 04 00 00 movl $0x42c, %esi # imm = 0x42C // d3: 48 89 da movq %rbx, %rdx // d6: ff 15 00 00 00 00 callq *(%rip) # 0xdc <_JIT_ENTRY+0xdc> // 00000000000000d8: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // dc: 48 8b 03 movq (%rbx), %rax // df: 85 c0 testl %eax, %eax // e1: 78 14 js 0xf7 <_JIT_ENTRY+0xf7> // e3: ff 15 00 00 00 00 callq *(%rip) # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // e9: 48 ff 0b decq (%rbx) // ec: 75 09 jne 0xf7 <_JIT_ENTRY+0xf7> // ee: 48 89 df movq %rbx, %rdi // f1: ff 15 00 00 00 00 callq *(%rip) # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // f7: 58 popq %rax // f8: ff 25 00 00 00 00 jmpq *(%rip) # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // fe: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_PC32 .L.str.1-0x4 // 105: be 2f 04 00 00 movl $0x42f, %esi # imm = 0x42F // 10a: 48 89 da movq %rbx, %rdx // 10d: 49 89 c6 movq %rax, %r14 // 110: ff 15 00 00 00 00 callq *(%rip) # 0x116 <_JIT_ENTRY+0x116> // 0000000000000112: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 116: 4c 89 f0 movq %r14, %rax // 119: 48 8b 0b movq (%rbx), %rcx // 11c: 85 c9 testl %ecx, %ecx // 11e: 0f 88 6b ff ff ff js 0x8f <_JIT_ENTRY+0x8f> // 124: 49 89 c6 movq %rax, %r14 // 127: ff 15 00 00 00 00 callq *(%rip) # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 12d: 48 ff 0b decq (%rbx) // 130: 75 09 jne 0x13b <_JIT_ENTRY+0x13b> // 132: 48 89 df movq %rbx, %rdi // 135: ff 15 00 00 00 00 callq *(%rip) # 0x13b <_JIT_ENTRY+0x13b> // 0000000000000137: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 13b: 4c 89 f0 movq %r14, %rax // 13e: 48 89 45 00 movq %rax, (%rbp) // 142: 48 83 c5 08 addq $0x8, %rbp // 146: 58 popq %rax // 147: ff 25 00 00 00 00 jmpq *(%rip) # 0x14d <_JIT_ENTRY+0x14d> // 0000000000000149: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 147: const unsigned char code_body[327] = { 0x50, 0x48, 0x8b, 0x7d, 0xf8, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x6a, 0x48, 0x8b, 0x48, 0x50, 0x48, 0x85, 0xc9, 0x74, 0x3a, 0x48, 0x8b, 0x49, 0x10, 0x48, 0x85, 0xc9, 0x74, 0x31, 0xff, 0xd1, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x48, 0x89, 0xc7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x5e, 0x48, 0x8b, 0x0b, 0x48, 0x85, 0xc9, 0x0f, 0x8e, 0xb2, 0x00, 0x00, 0x00, 0x85, 0xc9, 0x78, 0x3f, 0xe9, 0xcf, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x31, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x50, 0xff, 0x50, 0x10, 0x48, 0x85, 0xc0, 0x74, 0x68, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x38, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x50, 0x18, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x2c, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x2f, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0x49, 0x89, 0xc6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf0, 0x48, 0x8b, 0x0b, 0x85, 0xc9, 0x0f, 0x88, 0x6b, 0xff, 0xff, 0xff, 0x49, 0x89, 0xc6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf0, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, }; // 0: "/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00'async for' requires an iterator with __anext__ method, got %.100s\x00'async for' received an invalid object from __anext__: %.100s\x00" // c1: 00 00 00 00 00 00 00 // c8: &PyAsyncGen_Type+0x0 // d0: &_PyCoro_GetAwaitableIter+0x0 // d8: &PyExc_TypeError+0x0 // e0: &_PyErr_Format+0x0 // e8: ERROR_TARGET // f0: CONTINUE // f8: &_PyErr_FormatFromCause+0x0 // 100: &_Py_NegativeRefcount+0x0 // 108: &_Py_DECREF_DecRefTotal+0x0 // 110: &_Py_Dealloc+0x0 const unsigned char data_body[280] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x27, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x6f, 0x72, 0x27, 0x20, 0x72, 0x65, 0x71, 0x75, 0x69, 0x72, 0x65, 0x73, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x5f, 0x5f, 0x61, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x5f, 0x20, 0x6d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x2c, 0x20, 0x67, 0x6f, 0x74, 0x20, 0x25, 0x2e, 0x31, 0x30, 0x30, 0x73, 0x00, 0x27, 0x61, 0x73, 0x79, 0x6e, 0x63, 0x20, 0x66, 0x6f, 0x72, 0x27, 0x20, 0x72, 0x65, 0x63, 0x65, 0x69, 0x76, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x20, 0x5f, 0x5f, 0x61, 0x6e, 0x65, 0x78, 0x74, 0x5f, 0x5f, 0x3a, 0x20, 0x25, 0x2e, 0x31, 0x30, 0x30, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc8, (uintptr_t)&PyAsyncGen_Type); patch_64(data + 0xd0, (uintptr_t)&_PyCoro_GetAwaitableIter); patch_64(data + 0xd8, (uintptr_t)&PyExc_TypeError); patch_64(data + 0xe0, (uintptr_t)&_PyErr_Format); patch_64(data + 0xe8, instruction_starts[instruction->error_target]); patch_64(data + 0xf0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf8, (uintptr_t)&_PyErr_FormatFromCause); patch_64(data + 0x100, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x108, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x110, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x37, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0xd4); patch_32r(code + 0x66, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x78, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x7f, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x9a, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0xa1, (uintptr_t)data + 0xd4); patch_32r(code + 0xb3, (uintptr_t)data + 0x7f); patch_x86_64_32rx(code + 0xbb, (uintptr_t)data + 0xf4); patch_32r(code + 0xca, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xd8, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0xe5, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0xf3, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0xfa, (uintptr_t)data + 0xe4); patch_32r(code + 0x101, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x112, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x129, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x137, (uintptr_t)data + 0x10c); } void emit__GET_AWAITABLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GET_AWAITABLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 4c 89 f7 movq %r14, %rdi // 8: ff 15 00 00 00 00 callq *(%rip) # 0xe <_JIT_ENTRY+0xe> // 000000000000000a: R_X86_64_GOTPCRELX _PyCoro_GetAwaitableIter-0x4 // e: 48 89 c3 movq %rax, %rbx // 11: 48 85 c0 testq %rax, %rax // 14: 74 0e je 0x24 <_JIT_ENTRY+0x24> // 16: 49 8b 06 movq (%r14), %rax // 19: 48 85 c0 testq %rax, %rax // 1c: 7e 22 jle 0x40 <_JIT_ENTRY+0x40> // 1e: 85 c0 testl %eax, %eax // 20: 79 3a jns 0x5c <_JIT_ENTRY+0x5c> // 22: eb 47 jmp 0x6b <_JIT_ENTRY+0x6b> // 24: 0f b7 15 00 00 00 00 movzwl (%rip), %edx # 0x2b <_JIT_ENTRY+0x2b> // 0000000000000027: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 2b: 49 8b 76 08 movq 0x8(%r14), %rsi // 2f: 4c 89 e7 movq %r12, %rdi // 32: ff 15 00 00 00 00 callq *(%rip) # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCRELX _PyEval_FormatAwaitableError-0x4 // 38: 49 8b 06 movq (%r14), %rax // 3b: 48 85 c0 testq %rax, %rax // 3e: 7f de jg 0x1e <_JIT_ENTRY+0x1e> // 40: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_PC32 .L.str.1-0x4 // 47: be 40 04 00 00 movl $0x440, %esi # imm = 0x440 // 4c: 4c 89 f2 movq %r14, %rdx // 4f: ff 15 00 00 00 00 callq *(%rip) # 0x55 <_JIT_ENTRY+0x55> // 0000000000000051: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 55: 49 8b 06 movq (%r14), %rax // 58: 85 c0 testl %eax, %eax // 5a: 78 0f js 0x6b <_JIT_ENTRY+0x6b> // 5c: ff 15 00 00 00 00 callq *(%rip) # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 62: 49 ff 0e decq (%r14) // 65: 0f 84 c3 00 00 00 je 0x12e <_JIT_ENTRY+0x12e> // 6b: 48 85 db testq %rbx, %rbx // 6e: 0f 84 cc 00 00 00 je 0x140 <_JIT_ENTRY+0x140> // 74: 48 8b 43 08 movq 0x8(%rbx), %rax // 78: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x7f <_JIT_ENTRY+0x7f> // 000000000000007b: R_X86_64_REX_GOTPCRELX PyCoro_Type-0x4 // 7f: 74 0b je 0x8c <_JIT_ENTRY+0x8c> // 81: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 85: 58 popq %rax // 86: ff 25 00 00 00 00 jmpq *(%rip) # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 8c: 48 89 df movq %rbx, %rdi // 8f: ff 15 00 00 00 00 callq *(%rip) # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_GOTPCRELX _PyGen_yf-0x4 // 95: 48 85 c0 testq %rax, %rax // 98: 74 e7 je 0x81 <_JIT_ENTRY+0x81> // 9a: 49 89 c6 movq %rax, %r14 // 9d: 48 8b 00 movq (%rax), %rax // a0: 48 85 c0 testq %rax, %rax // a3: 7f 18 jg 0xbd <_JIT_ENTRY+0xbd> // a5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_PC32 .L.str.1-0x4 // ac: be 47 04 00 00 movl $0x447, %esi # imm = 0x447 // b1: 4c 89 f2 movq %r14, %rdx // b4: ff 15 00 00 00 00 callq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // ba: 49 8b 06 movq (%r14), %rax // bd: 85 c0 testl %eax, %eax // bf: 78 14 js 0xd5 <_JIT_ENTRY+0xd5> // c1: ff 15 00 00 00 00 callq *(%rip) # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // c7: 49 ff 0e decq (%r14) // ca: 75 09 jne 0xd5 <_JIT_ENTRY+0xd5> // cc: 4c 89 f7 movq %r14, %rdi // cf: ff 15 00 00 00 00 callq *(%rip) # 0xd5 <_JIT_ENTRY+0xd5> // 00000000000000d1: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // d5: 48 8b 03 movq (%rbx), %rax // d8: 48 85 c0 testq %rax, %rax // db: 7f 18 jg 0xf5 <_JIT_ENTRY+0xf5> // dd: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe4 <_JIT_ENTRY+0xe4> // 00000000000000e0: R_X86_64_PC32 .L.str.1-0x4 // e4: be 48 04 00 00 movl $0x448, %esi # imm = 0x448 // e9: 48 89 da movq %rbx, %rdx // ec: ff 15 00 00 00 00 callq *(%rip) # 0xf2 <_JIT_ENTRY+0xf2> // 00000000000000ee: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // f2: 48 8b 03 movq (%rbx), %rax // f5: 85 c0 testl %eax, %eax // f7: 78 14 js 0x10d <_JIT_ENTRY+0x10d> // f9: ff 15 00 00 00 00 callq *(%rip) # 0xff <_JIT_ENTRY+0xff> // 00000000000000fb: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ff: 48 ff 0b decq (%rbx) // 102: 75 09 jne 0x10d <_JIT_ENTRY+0x10d> // 104: 48 89 df movq %rbx, %rdi // 107: ff 15 00 00 00 00 callq *(%rip) # 0x10d <_JIT_ENTRY+0x10d> // 0000000000000109: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 10d: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x114 <_JIT_ENTRY+0x114> // 0000000000000110: R_X86_64_REX_GOTPCRELX PyExc_RuntimeError-0x4 // 114: 48 8b 30 movq (%rax), %rsi // 117: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x11e <_JIT_ENTRY+0x11e> // 000000000000011a: R_X86_64_PC32 .L.str.19-0x4 // 11e: 4c 89 e7 movq %r12, %rdi // 121: ff 15 00 00 00 00 callq *(%rip) # 0x127 <_JIT_ENTRY+0x127> // 0000000000000123: R_X86_64_GOTPCRELX _PyErr_SetString-0x4 // 127: 58 popq %rax // 128: ff 25 00 00 00 00 jmpq *(%rip) # 0x12e <_JIT_ENTRY+0x12e> // 000000000000012a: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 12e: 4c 89 f7 movq %r14, %rdi // 131: ff 15 00 00 00 00 callq *(%rip) # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 137: 48 85 db testq %rbx, %rbx // 13a: 0f 85 34 ff ff ff jne 0x74 <_JIT_ENTRY+0x74> // 140: 58 popq %rax // 141: ff 25 00 00 00 00 jmpq *(%rip) # 0x147 <_JIT_ENTRY+0x147> // 0000000000000143: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 147: const unsigned char code_body[327] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x48, 0x85, 0xc0, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x22, 0x85, 0xc0, 0x79, 0x3a, 0xeb, 0x47, 0x0f, 0xb7, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x76, 0x08, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xde, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x40, 0x04, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0f, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x0f, 0x84, 0xc3, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x0f, 0x84, 0xcc, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x0b, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0xe7, 0x49, 0x89, 0xc6, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x47, 0x04, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x48, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x0f, 0x85, 0x34, 0xff, 0xff, 0xff, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00coroutine is being awaited already\x00' // 63: 00 00 00 00 00 // 68: &_PyCoro_GetAwaitableIter+0x0 // 70: OPARG // 78: &_PyEval_FormatAwaitableError+0x0 // 80: &_Py_NegativeRefcount+0x0 // 88: &_Py_DECREF_DecRefTotal+0x0 // 90: &PyCoro_Type+0x0 // 98: CONTINUE // a0: &_PyGen_yf+0x0 // a8: &_Py_Dealloc+0x0 // b0: &PyExc_RuntimeError+0x0 // b8: &_PyErr_SetString+0x0 // c0: ERROR_TARGET const unsigned char data_body[200] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x20, 0x69, 0x73, 0x20, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x20, 0x61, 0x77, 0x61, 0x69, 0x74, 0x65, 0x64, 0x20, 0x61, 0x6c, 0x72, 0x65, 0x61, 0x64, 0x79, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x68, (uintptr_t)&_PyCoro_GetAwaitableIter); patch_64(data + 0x70, instruction->oparg); patch_64(data + 0x78, (uintptr_t)&_PyEval_FormatAwaitableError); patch_64(data + 0x80, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x88, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x90, (uintptr_t)&PyCoro_Type); patch_64(data + 0x98, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xa0, (uintptr_t)&_PyGen_yf); patch_64(data + 0xa8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xb0, (uintptr_t)&PyExc_RuntimeError); patch_64(data + 0xb8, (uintptr_t)&_PyErr_SetString); patch_64(data + 0xc0, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xa, (uintptr_t)data + 0x64); patch_32r(code + 0x27, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x74); patch_32r(code + 0x43, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x51, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0x5e, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x7b, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0x88, (uintptr_t)data + 0x94); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x9c); patch_32r(code + 0xa8, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0xc3, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0xd1, (uintptr_t)data + 0xa4); patch_32r(code + 0xe0, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xee, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0xfb, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x109, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x110, (uintptr_t)data + 0xac); patch_32r(code + 0x11a, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x123, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x12a, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x133, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x143, (uintptr_t)data + 0xbc); } void emit__GET_ITER( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GET_ITER.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 4c 89 f7 movq %r14, %rdi // 8: ff 15 00 00 00 00 callq *(%rip) # 0xe <_JIT_ENTRY+0xe> // 000000000000000a: R_X86_64_GOTPCRELX PyObject_GetIter-0x4 // e: 48 89 c3 movq %rax, %rbx // 11: 49 8b 06 movq (%r14), %rax // 14: 48 85 c0 testq %rax, %rax // 17: 7e 06 jle 0x1f <_JIT_ENTRY+0x1f> // 19: 85 c0 testl %eax, %eax // 1b: 79 1e jns 0x3b <_JIT_ENTRY+0x3b> // 1d: eb 27 jmp 0x46 <_JIT_ENTRY+0x46> // 1f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_PC32 .L.str.1-0x4 // 26: be 37 0a 00 00 movl $0xa37, %esi # imm = 0xA37 // 2b: 4c 89 f2 movq %r14, %rdx // 2e: ff 15 00 00 00 00 callq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 34: 49 8b 06 movq (%r14), %rax // 37: 85 c0 testl %eax, %eax // 39: 78 0b js 0x46 <_JIT_ENTRY+0x46> // 3b: ff 15 00 00 00 00 callq *(%rip) # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 41: 49 ff 0e decq (%r14) // 44: 74 10 je 0x56 <_JIT_ENTRY+0x56> // 46: 48 85 db testq %rbx, %rbx // 49: 74 19 je 0x64 <_JIT_ENTRY+0x64> // 4b: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 4f: 58 popq %rax // 50: ff 25 00 00 00 00 jmpq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 56: 4c 89 f7 movq %r14, %rdi // 59: ff 15 00 00 00 00 callq *(%rip) # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 5f: 48 85 db testq %rbx, %rbx // 62: 75 e7 jne 0x4b <_JIT_ENTRY+0x4b> // 64: 58 popq %rax // 65: ff 25 00 00 00 00 jmpq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 6b: const unsigned char code_body[107] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x37, 0x0a, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x10, 0x48, 0x85, 0xdb, 0x74, 0x19, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe7, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyObject_GetIter+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: CONTINUE // 60: &_Py_Dealloc+0x0 // 68: ERROR_TARGET const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyObject_GetIter); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x68, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xa, (uintptr_t)data + 0x3c); patch_32r(code + 0x22, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x5b, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0x64); } void emit__GET_LEN( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GET_LEN.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 7d f8 movq -0x8(%rbp), %rdi // 5: ff 15 00 00 00 00 callq *(%rip) # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCRELX PyObject_Size-0x4 // b: 48 85 c0 testq %rax, %rax // e: 78 1d js 0x2d <_JIT_ENTRY+0x2d> // 10: 48 89 c7 movq %rax, %rdi // 13: ff 15 00 00 00 00 callq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX PyLong_FromSsize_t-0x4 // 19: 48 85 c0 testq %rax, %rax // 1c: 74 0f je 0x2d <_JIT_ENTRY+0x2d> // 1e: 48 89 45 00 movq %rax, (%rbp) // 22: 48 83 c5 08 addq $0x8, %rbp // 26: 58 popq %rax // 27: ff 25 00 00 00 00 jmpq *(%rip) # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 34: const unsigned char code_body[52] = { 0x50, 0x48, 0x8b, 0x7d, 0xf8, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x78, 0x1d, 0x48, 0x89, 0xc7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyObject_Size+0x0 // 8: &PyLong_FromSsize_t+0x0 // 10: CONTINUE // 18: ERROR_TARGET const unsigned char data_body[32] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyObject_Size); patch_64(data + 0x8, (uintptr_t)&PyLong_FromSsize_t); patch_64(data + 0x10, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x18, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x29, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x14); } void emit__GET_YIELD_FROM_ITER( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GET_YIELD_FROM_ITER.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCoro_Type-0x4 // 10: 74 60 je 0x72 <_JIT_ENTRY+0x72> // 12: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_REX_GOTPCRELX PyGen_Type-0x4 // 19: 74 73 je 0x8e <_JIT_ENTRY+0x8e> // 1b: 48 89 df movq %rbx, %rdi // 1e: ff 15 00 00 00 00 callq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX PyObject_GetIter-0x4 // 24: 48 85 c0 testq %rax, %rax // 27: 74 70 je 0x99 <_JIT_ENTRY+0x99> // 29: 49 89 c6 movq %rax, %r14 // 2c: 48 8b 03 movq (%rbx), %rax // 2f: 48 85 c0 testq %rax, %rax // 32: 7f 18 jg 0x4c <_JIT_ENTRY+0x4c> // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.1-0x4 // 3b: be 57 0a 00 00 movl $0xa57, %esi # imm = 0xA57 // 40: 48 89 da movq %rbx, %rdx // 43: ff 15 00 00 00 00 callq *(%rip) # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 49: 48 8b 03 movq (%rbx), %rax // 4c: 85 c0 testl %eax, %eax // 4e: 78 14 js 0x64 <_JIT_ENTRY+0x64> // 50: ff 15 00 00 00 00 callq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 56: 48 ff 0b decq (%rbx) // 59: 75 09 jne 0x64 <_JIT_ENTRY+0x64> // 5b: 48 89 df movq %rbx, %rdi // 5e: ff 15 00 00 00 00 callq *(%rip) # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 64: 4c 89 f3 movq %r14, %rbx // 67: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 6b: 58 popq %rax // 6c: ff 25 00 00 00 00 jmpq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 72: 49 8b 45 00 movq (%r13), %rax // 76: 48 8b 48 08 movq 0x8(%rax), %rcx // 7a: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 81: 75 3e jne 0xc1 <_JIT_ENTRY+0xc1> // 83: 0f b7 40 30 movzwl 0x30(%rax), %eax // 87: a9 80 01 00 00 testl $0x180, %eax # imm = 0x180 // 8c: 74 12 je 0xa0 <_JIT_ENTRY+0xa0> // 8e: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 92: 58 popq %rax // 93: ff 25 00 00 00 00 jmpq *(%rip) # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 99: 58 popq %rax // 9a: ff 25 00 00 00 00 jmpq *(%rip) # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // a0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // a7: 48 8b 30 movq (%rax), %rsi // aa: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0xb1 <_JIT_ENTRY+0xb1> // 00000000000000ad: R_X86_64_PC32 .L.str.66-0x4 // b1: 4c 89 e7 movq %r12, %rdi // b4: ff 15 00 00 00 00 callq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX _PyErr_SetString-0x4 // ba: 58 popq %rax // bb: ff 25 00 00 00 00 jmpq *(%rip) # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // c1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc8 <_JIT_ENTRY+0xc8> // 00000000000000c4: R_X86_64_PC32 .L.str.108-0x4 // c8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_PC32 .L.str.109-0x4 // cf: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xd6 <_JIT_ENTRY+0xd6> // 00000000000000d2: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // d6: ba 4d 00 00 00 movl $0x4d, %edx // db: ff 15 00 00 00 00 callq *(%rip) # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_GOTPCRELX __assert_fail-0x4 // e1: const unsigned char code_body[225] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x60, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x73, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x70, 0x49, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x57, 0x0a, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf3, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x3e, 0x0f, 0xb7, 0x40, 0x30, 0xa9, 0x80, 0x01, 0x00, 0x00, 0x74, 0x12, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00cannot 'yield from' a coroutine object in a non-coroutine generator\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00" // 11e: 00 00 // 120: &PyCoro_Type+0x0 // 128: &PyGen_Type+0x0 // 130: &PyObject_GetIter+0x0 // 138: &_Py_NegativeRefcount+0x0 // 140: &_Py_DECREF_DecRefTotal+0x0 // 148: &_Py_Dealloc+0x0 // 150: CONTINUE // 158: &PyCode_Type+0x0 // 160: ERROR_TARGET // 168: &PyExc_TypeError+0x0 // 170: &_PyErr_SetString+0x0 // 178: &__assert_fail+0x0 const unsigned char data_body[384] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x27, 0x79, 0x69, 0x65, 0x6c, 0x64, 0x20, 0x66, 0x72, 0x6f, 0x6d, 0x27, 0x20, 0x61, 0x20, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x20, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x69, 0x6e, 0x20, 0x61, 0x20, 0x6e, 0x6f, 0x6e, 0x2d, 0x63, 0x6f, 0x72, 0x6f, 0x75, 0x74, 0x69, 0x6e, 0x65, 0x20, 0x67, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x120, (uintptr_t)&PyCoro_Type); patch_64(data + 0x128, (uintptr_t)&PyGen_Type); patch_64(data + 0x130, (uintptr_t)&PyObject_GetIter); patch_64(data + 0x138, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x140, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x148, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x150, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x158, (uintptr_t)&PyCode_Type); patch_64(data + 0x160, instruction_starts[instruction->error_target]); patch_64(data + 0x168, (uintptr_t)&PyExc_TypeError); patch_64(data + 0x170, (uintptr_t)&_PyErr_SetString); patch_64(data + 0x178, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x11c); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x124); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0x12c); patch_32r(code + 0x37, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x45, (uintptr_t)data + 0x134); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0x13c); patch_x86_64_32rx(code + 0x60, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x95, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x9c, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0xa3, (uintptr_t)data + 0x164); patch_32r(code + 0xad, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0x15c); patch_32r(code + 0xc4, (uintptr_t)data + 0x80); patch_32r(code + 0xcb, (uintptr_t)data + 0x9e); patch_32r(code + 0xd2, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0xdd, (uintptr_t)data + 0x174); } void emit__GUARD_BOTH_FLOAT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_BOTH_FLOAT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f0 movq -0x10(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // f: 75 11 jne 0x22 <_JIT_ENTRY+0x22> // 11: 48 8b 45 f8 movq -0x8(%rbp), %rax // 15: 48 8b 40 08 movq 0x8(%rax), %rax // 19: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // 20: 74 06 je 0x28 <_JIT_ENTRY+0x28> // 22: ff 25 00 00 00 00 jmpq *(%rip) # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 28: ff 25 00 00 00 00 jmpq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 28: const unsigned char code_body[40] = { 0x48, 0x8b, 0x45, 0xf0, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyFloat_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyFloat_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0x4); } void emit__GUARD_BOTH_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_BOTH_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f0 movq -0x10(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // f: 75 11 jne 0x22 <_JIT_ENTRY+0x22> // 11: 48 8b 45 f8 movq -0x8(%rbp), %rax // 15: 48 8b 40 08 movq 0x8(%rax), %rax // 19: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 20: 74 06 je 0x28 <_JIT_ENTRY+0x28> // 22: ff 25 00 00 00 00 jmpq *(%rip) # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 28: ff 25 00 00 00 00 jmpq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 28: const unsigned char code_body[40] = { 0x48, 0x8b, 0x45, 0xf0, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyLong_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyLong_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0x4); } void emit__GUARD_BOTH_UNICODE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_BOTH_UNICODE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f0 movq -0x10(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyUnicode_Type-0x4 // f: 75 11 jne 0x22 <_JIT_ENTRY+0x22> // 11: 48 8b 45 f8 movq -0x8(%rbp), %rax // 15: 48 8b 40 08 movq 0x8(%rax), %rax // 19: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_REX_GOTPCRELX PyUnicode_Type-0x4 // 20: 74 06 je 0x28 <_JIT_ENTRY+0x28> // 22: ff 25 00 00 00 00 jmpq *(%rip) # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 28: ff 25 00 00 00 00 jmpq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 28: const unsigned char code_body[40] = { 0x48, 0x8b, 0x45, 0xf0, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyUnicode_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyUnicode_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0x4); } void emit__GUARD_BUILTINS_VERSION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_BUILTINS_VERSION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 49 8b 45 20 movq 0x20(%r13), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // f: 75 1c jne 0x2d <_JIT_ENTRY+0x2d> // 11: 48 8b 40 20 movq 0x20(%rax), %rax // 15: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x1c <_JIT_ENTRY+0x1c> // 0000000000000018: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 1c: 39 48 0c cmpl %ecx, 0xc(%rax) // 1f: 75 0c jne 0x2d <_JIT_ENTRY+0x2d> // 21: 80 78 0a 00 cmpb $0x0, 0xa(%rax) // 25: 74 0c je 0x33 <_JIT_ENTRY+0x33> // 27: ff 25 00 00 00 00 jmpq *(%rip) # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2d: ff 25 00 00 00 00 jmpq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 33: 50 pushq %rax // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.29-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba da 05 00 00 movl $0x5da, %edx # imm = 0x5DA // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: const unsigned char code_body[84] = { 0x49, 0x8b, 0x45, 0x20, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1c, 0x48, 0x8b, 0x40, 0x20, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x39, 0x48, 0x0c, 0x75, 0x0c, 0x80, 0x78, 0x0a, 0x00, 0x74, 0x0c, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xda, 0x05, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00DK_IS_UNICODE(dict->ma_keys)\x00' // ab: 00 00 00 00 00 // b0: &PyDict_Type+0x0 // b8: OPERAND // c0: CONTINUE // c8: JUMP_TARGET // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x44, 0x4b, 0x5f, 0x49, 0x53, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, 0x28, 0x64, 0x69, 0x63, 0x74, 0x2d, 0x3e, 0x6d, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb0, (uintptr_t)&PyDict_Type); patch_64(data + 0xb8, instruction->operand); patch_64(data + 0xc0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc8, instruction_starts[instruction->jump_target]); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0xac); patch_32r(code + 0x18, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x29, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); } void emit__GUARD_DORV_NO_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_DORV_NO_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 83 b9 20 01 00 00 00 cmpq $0x0, 0x120(%rcx) // 11: 79 33 jns 0x46 <_JIT_ENTRY+0x46> // 13: 48 8b 91 a8 00 00 00 movq 0xa8(%rcx), %rdx // 1a: f6 c2 04 testb $0x4, %dl // 1d: 74 47 je 0x66 <_JIT_ENTRY+0x66> // 1f: f6 c2 10 testb $0x10, %dl // 22: 74 62 je 0x86 <_JIT_ENTRY+0x86> // 24: 48 83 78 e8 00 cmpq $0x0, -0x18(%rax) // 29: 74 07 je 0x32 <_JIT_ENTRY+0x32> // 2b: 58 popq %rax // 2c: ff 25 00 00 00 00 jmpq *(%rip) # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 32: 48 83 79 20 10 cmpq $0x10, 0x20(%rcx) // 37: 75 6d jne 0xa6 <_JIT_ENTRY+0xa6> // 39: 80 78 13 00 cmpb $0x0, 0x13(%rax) // 3d: 74 ec je 0x2b <_JIT_ENTRY+0x2b> // 3f: 58 popq %rax // 40: ff 25 00 00 00 00 jmpq *(%rip) # 0x46 <_JIT_ENTRY+0x46> // 0000000000000042: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 46: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_PC32 .L.str.48-0x4 // 4d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_PC32 .L.str.1-0x4 // 54: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 5b: ba bc 08 00 00 movl $0x8bc, %edx # imm = 0x8BC // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX __assert_fail-0x4 // 66: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_PC32 .L.str.49-0x4 // 6d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L.str.1-0x4 // 74: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 7b: ba bd 08 00 00 movl $0x8bd, %edx # imm = 0x8BD // 80: ff 15 00 00 00 00 callq *(%rip) # 0x86 <_JIT_ENTRY+0x86> // 0000000000000082: R_X86_64_GOTPCRELX __assert_fail-0x4 // 86: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_PC32 .L.str.148-0x4 // 8d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x94 <_JIT_ENTRY+0x94> // 0000000000000090: R_X86_64_PC32 .L.str.118-0x4 // 94: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_ManagedDictPointer-0x4 // 9b: ba ac 02 00 00 movl $0x2ac, %edx # imm = 0x2AC // a0: ff 15 00 00 00 00 callq *(%rip) # 0xa6 <_JIT_ENTRY+0xa6> // 00000000000000a2: R_X86_64_GOTPCRELX __assert_fail-0x4 // a6: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xad <_JIT_ENTRY+0xad> // 00000000000000a9: R_X86_64_PC32 .L.str.149-0x4 // ad: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb4 <_JIT_ENTRY+0xb4> // 00000000000000b0: R_X86_64_PC32 .L.str.118-0x4 // b4: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xbb <_JIT_ENTRY+0xbb> // 00000000000000b7: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // bb: ba bc 02 00 00 movl $0x2bc, %edx # imm = 0x2BC // c0: ff 15 00 00 00 00 callq *(%rip) # 0xc6 <_JIT_ENTRY+0xc6> // 00000000000000c2: R_X86_64_GOTPCRELX __assert_fail-0x4 // c6: const unsigned char code_body[198] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x83, 0xb9, 0x20, 0x01, 0x00, 0x00, 0x00, 0x79, 0x33, 0x48, 0x8b, 0x91, 0xa8, 0x00, 0x00, 0x00, 0xf6, 0xc2, 0x04, 0x74, 0x47, 0xf6, 0xc2, 0x10, 0x74, 0x62, 0x48, 0x83, 0x78, 0xe8, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0x79, 0x20, 0x10, 0x75, 0x6d, 0x80, 0x78, 0x13, 0x00, 0x74, 0xec, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xac, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(owner)->tp_dictoffset < 0\x00Py_TYPE(owner)->tp_flags & Py_TPFLAGS_INLINE_VALUES\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00PyDictValues *_PyObject_InlineValues(PyObject *)\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00Py_TYPE(obj)->tp_basicsize == sizeof(PyObject)\x00PyManagedDictPointer *_PyObject_ManagedDictPointer(PyObject *)\x00' // 1fb: 00 00 00 00 00 // 200: JUMP_TARGET // 208: CONTINUE // 210: &__assert_fail+0x0 const unsigned char data_body[536] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3c, 0x20, 0x30, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x00, 0x50, 0x79, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x69, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x69, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x200, instruction_starts[instruction->jump_target]); patch_64(data + 0x208, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x210, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x42, (uintptr_t)data + 0x204); patch_32r(code + 0x49, (uintptr_t)data + 0x8a); patch_32r(code + 0x50, (uintptr_t)data + -0x4); patch_32r(code + 0x57, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0x20c); patch_32r(code + 0x69, (uintptr_t)data + 0xac); patch_32r(code + 0x70, (uintptr_t)data + -0x4); patch_32r(code + 0x77, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x82, (uintptr_t)data + 0x20c); patch_32r(code + 0x89, (uintptr_t)data + 0x158); patch_32r(code + 0x90, (uintptr_t)data + 0xe0); patch_32r(code + 0x97, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0xa2, (uintptr_t)data + 0x20c); patch_32r(code + 0xa9, (uintptr_t)data + 0x189); patch_32r(code + 0xb0, (uintptr_t)data + 0xe0); patch_32r(code + 0xb7, (uintptr_t)data + 0x127); patch_x86_64_32rx(code + 0xc2, (uintptr_t)data + 0x20c); } void emit__GUARD_DORV_VALUES_INST_ATTR_FROM_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 8b 91 a8 00 00 00 movq 0xa8(%rcx), %rdx // 10: f6 c2 04 testb $0x4, %dl // 13: 74 20 je 0x35 <_JIT_ENTRY+0x35> // 15: f6 c2 10 testb $0x10, %dl // 18: 74 3b je 0x55 <_JIT_ENTRY+0x55> // 1a: 48 83 79 20 10 cmpq $0x10, 0x20(%rcx) // 1f: 75 54 jne 0x75 <_JIT_ENTRY+0x75> // 21: 80 78 13 00 cmpb $0x0, 0x13(%rax) // 25: 74 07 je 0x2e <_JIT_ENTRY+0x2e> // 27: 58 popq %rax // 28: ff 25 00 00 00 00 jmpq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2e: 58 popq %rax // 2f: ff 25 00 00 00 00 jmpq *(%rip) # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 35: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_PC32 .L.str.49-0x4 // 3c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_PC32 .L.str.1-0x4 // 43: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 4a: ba 57 0b 00 00 movl $0xb57, %edx # imm = 0xB57 // 4f: ff 15 00 00 00 00 callq *(%rip) # 0x55 <_JIT_ENTRY+0x55> // 0000000000000051: R_X86_64_GOTPCRELX __assert_fail-0x4 // 55: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_PC32 .L.str.148-0x4 // 5c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_PC32 .L.str.118-0x4 // 63: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // 6a: ba bb 02 00 00 movl $0x2bb, %edx # imm = 0x2BB // 6f: ff 15 00 00 00 00 callq *(%rip) # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_GOTPCRELX __assert_fail-0x4 // 75: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7c <_JIT_ENTRY+0x7c> // 0000000000000078: R_X86_64_PC32 .L.str.149-0x4 // 7c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x83 <_JIT_ENTRY+0x83> // 000000000000007f: R_X86_64_PC32 .L.str.118-0x4 // 83: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x8a <_JIT_ENTRY+0x8a> // 0000000000000086: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // 8a: ba bc 02 00 00 movl $0x2bc, %edx # imm = 0x2BC // 8f: ff 15 00 00 00 00 callq *(%rip) # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_GOTPCRELX __assert_fail-0x4 // 95: const unsigned char code_body[149] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x8b, 0x91, 0xa8, 0x00, 0x00, 0x00, 0xf6, 0xc2, 0x04, 0x74, 0x20, 0xf6, 0xc2, 0x10, 0x74, 0x3b, 0x48, 0x83, 0x79, 0x20, 0x10, 0x75, 0x54, 0x80, 0x78, 0x13, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x57, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbb, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(owner)->tp_flags & Py_TPFLAGS_INLINE_VALUES\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00PyDictValues *_PyObject_InlineValues(PyObject *)\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00Py_TYPE(obj)->tp_basicsize == sizeof(PyObject)\x00' // 19a: 00 00 00 00 00 00 // 1a0: CONTINUE // 1a8: JUMP_TARGET // 1b0: &__assert_fail+0x0 const unsigned char data_body[440] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1a0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1a8, instruction_starts[instruction->jump_target]); patch_64(data + 0x1b0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x2a, (uintptr_t)data + 0x19c); patch_x86_64_32rx(code + 0x31, (uintptr_t)data + 0x1a4); patch_32r(code + 0x38, (uintptr_t)data + 0x8a); patch_32r(code + 0x3f, (uintptr_t)data + -0x4); patch_32r(code + 0x46, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x51, (uintptr_t)data + 0x1ac); patch_32r(code + 0x58, (uintptr_t)data + 0x136); patch_32r(code + 0x5f, (uintptr_t)data + 0xbe); patch_32r(code + 0x66, (uintptr_t)data + 0x105); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0x1ac); patch_32r(code + 0x78, (uintptr_t)data + 0x167); patch_32r(code + 0x7f, (uintptr_t)data + 0xbe); patch_32r(code + 0x86, (uintptr_t)data + 0x105); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x1ac); } void emit__GUARD_GLOBALS_VERSION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_GLOBALS_VERSION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 49 8b 45 18 movq 0x18(%r13), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // f: 75 1c jne 0x2d <_JIT_ENTRY+0x2d> // 11: 48 8b 40 20 movq 0x20(%rax), %rax // 15: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x1c <_JIT_ENTRY+0x1c> // 0000000000000018: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 1c: 39 48 0c cmpl %ecx, 0xc(%rax) // 1f: 75 0c jne 0x2d <_JIT_ENTRY+0x2d> // 21: 80 78 0a 00 cmpb $0x0, 0xa(%rax) // 25: 74 0c je 0x33 <_JIT_ENTRY+0x33> // 27: ff 25 00 00 00 00 jmpq *(%rip) # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2d: ff 25 00 00 00 00 jmpq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 33: 50 pushq %rax // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.29-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba cb 05 00 00 movl $0x5cb, %edx # imm = 0x5CB // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: const unsigned char code_body[84] = { 0x49, 0x8b, 0x45, 0x18, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1c, 0x48, 0x8b, 0x40, 0x20, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x39, 0x48, 0x0c, 0x75, 0x0c, 0x80, 0x78, 0x0a, 0x00, 0x74, 0x0c, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcb, 0x05, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00DK_IS_UNICODE(dict->ma_keys)\x00' // ab: 00 00 00 00 00 // b0: &PyDict_Type+0x0 // b8: OPERAND // c0: CONTINUE // c8: JUMP_TARGET // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x44, 0x4b, 0x5f, 0x49, 0x53, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, 0x28, 0x64, 0x69, 0x63, 0x74, 0x2d, 0x3e, 0x6d, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb0, (uintptr_t)&PyDict_Type); patch_64(data + 0xb8, instruction->operand); patch_64(data + 0xc0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc8, instruction_starts[instruction->jump_target]); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0xac); patch_32r(code + 0x18, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x29, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); } void emit__GUARD_IS_FALSE_POP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_IS_FALSE_POP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 83 c5 f8 addq $-0x8, %rbp // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &_Py_FalseStruct+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__GUARD_IS_NONE_POP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_IS_NONE_POP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 83 c5 f8 addq $-0x8, %rbp // 9: 48 3b 1d 00 00 00 00 cmpq (%rip), %rbx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 10: 74 13 je 0x25 <_JIT_ENTRY+0x25> // 12: 48 8b 03 movq (%rbx), %rax // 15: 48 85 c0 testq %rax, %rax // 18: 7e 12 jle 0x2c <_JIT_ENTRY+0x2c> // 1a: 85 c0 testl %eax, %eax // 1c: 79 2a jns 0x48 <_JIT_ENTRY+0x48> // 1e: 58 popq %rax // 1f: ff 25 00 00 00 00 jmpq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 25: 58 popq %rax // 26: ff 25 00 00 00 00 jmpq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_PC32 .L.str.1-0x4 // 33: be 79 10 00 00 movl $0x1079, %esi # imm = 0x1079 // 38: 48 89 da movq %rbx, %rdx // 3b: ff 15 00 00 00 00 callq *(%rip) # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 41: 48 8b 03 movq (%rbx), %rax // 44: 85 c0 testl %eax, %eax // 46: 78 d6 js 0x1e <_JIT_ENTRY+0x1e> // 48: ff 15 00 00 00 00 callq *(%rip) # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 4e: 48 ff 0b decq (%rbx) // 51: 75 cb jne 0x1e <_JIT_ENTRY+0x1e> // 53: 48 89 df movq %rbx, %rdi // 56: ff 15 00 00 00 00 callq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 5c: 58 popq %rax // 5d: ff 25 00 00 00 00 jmpq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 63: const unsigned char code_body[99] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x48, 0x3b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x74, 0x13, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x12, 0x85, 0xc0, 0x79, 0x2a, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x79, 0x10, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xd6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xcb, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_Py_NoneStruct+0x0 // 48: JUMP_TARGET // 50: CONTINUE // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x48, instruction_starts[instruction->jump_target]); patch_64(data + 0x50, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0x4c); patch_32r(code + 0x2f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x4a, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0x44); } void emit__GUARD_IS_NOT_NONE_POP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_IS_NOT_NONE_POP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 83 c5 f8 addq $-0x8, %rbp // 9: 48 3b 1d 00 00 00 00 cmpq (%rip), %rbx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 10: 74 13 je 0x25 <_JIT_ENTRY+0x25> // 12: 48 8b 03 movq (%rbx), %rax // 15: 48 85 c0 testq %rax, %rax // 18: 7e 12 jle 0x2c <_JIT_ENTRY+0x2c> // 1a: 85 c0 testl %eax, %eax // 1c: 79 2a jns 0x48 <_JIT_ENTRY+0x48> // 1e: 58 popq %rax // 1f: ff 25 00 00 00 00 jmpq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 25: 58 popq %rax // 26: ff 25 00 00 00 00 jmpq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 2c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_PC32 .L.str.1-0x4 // 33: be 8a 10 00 00 movl $0x108a, %esi # imm = 0x108A // 38: 48 89 da movq %rbx, %rdx // 3b: ff 15 00 00 00 00 callq *(%rip) # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 41: 48 8b 03 movq (%rbx), %rax // 44: 85 c0 testl %eax, %eax // 46: 78 d6 js 0x1e <_JIT_ENTRY+0x1e> // 48: ff 15 00 00 00 00 callq *(%rip) # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 4e: 48 ff 0b decq (%rbx) // 51: 75 cb jne 0x1e <_JIT_ENTRY+0x1e> // 53: 48 89 df movq %rbx, %rdi // 56: ff 15 00 00 00 00 callq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 5c: 58 popq %rax // 5d: ff 25 00 00 00 00 jmpq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5d: const unsigned char code_body[93] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x48, 0x3b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x74, 0x13, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x12, 0x85, 0xc0, 0x79, 0x2a, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x8a, 0x10, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xd6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xcb, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_Py_NoneStruct+0x0 // 48: CONTINUE // 50: JUMP_TARGET // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x48, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x50, instruction_starts[instruction->jump_target]); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0x4c); patch_32r(code + 0x2f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x4a, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0x64); } void emit__GUARD_IS_TRUE_POP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_IS_TRUE_POP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 83 c5 f8 addq $-0x8, %rbp // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &_Py_TrueStruct+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__GUARD_KEYS_VERSION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_KEYS_VERSION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 8b 80 70 03 00 00 movq 0x370(%rax), %rax // f: 8b 40 0c movl 0xc(%rax), %eax // 12: 3b 05 00 00 00 00 cmpl (%rip), %eax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 18: 75 06 jne 0x20 <_JIT_ENTRY+0x20> // 1a: ff 25 00 00 00 00 jmpq *(%rip) # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 20: ff 25 00 00 00 00 jmpq *(%rip) # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 26: const unsigned char code_body[38] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x8b, 0x80, 0x70, 0x03, 0x00, 0x00, 0x8b, 0x40, 0x0c, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: OPERAND // 8: CONTINUE // 10: JUMP_TARGET const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->operand); patch_64(data + 0x8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x10, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0xc); } void emit__GUARD_NOS_FLOAT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_NOS_FLOAT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f0 movq -0x10(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf0, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyFloat_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyFloat_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__GUARD_NOS_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_NOS_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f0 movq -0x10(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf0, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyLong_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyLong_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__GUARD_NOT_EXHAUSTED_LIST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_NOT_EXHAUSTED_LIST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyListIter_Type-0x4 // 10: 75 40 jne 0x52 <_JIT_ENTRY+0x52> // 12: 48 8b 48 18 movq 0x18(%rax), %rcx // 16: 48 85 c9 testq %rcx, %rcx // 19: 74 30 je 0x4b <_JIT_ENTRY+0x4b> // 1b: 48 8b 51 08 movq 0x8(%rcx), %rdx // 1f: f6 82 ab 00 00 00 02 testb $0x2, 0xab(%rdx) // 26: 74 4a je 0x72 <_JIT_ENTRY+0x72> // 28: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 2f: 74 61 je 0x92 <_JIT_ENTRY+0x92> // 31: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 38: 74 78 je 0xb2 <_JIT_ENTRY+0xb2> // 3a: 48 8b 40 10 movq 0x10(%rax), %rax // 3e: 48 3b 41 10 cmpq 0x10(%rcx), %rax // 42: 73 07 jae 0x4b <_JIT_ENTRY+0x4b> // 44: 58 popq %rax // 45: ff 25 00 00 00 00 jmpq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 4b: 58 popq %rax // 4c: ff 25 00 00 00 00 jmpq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 52: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_PC32 .L.str.67-0x4 // 59: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_PC32 .L.str.1-0x4 // 60: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 67: ba 8b 0a 00 00 movl $0xa8b, %edx # imm = 0xA8B // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 72: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_PC32 .L.str.122-0x4 // 79: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_PC32 .L.str.123-0x4 // 80: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyList_GET_SIZE-0x4 // 87: ba 1f 00 00 00 movl $0x1f, %edx // 8c: ff 15 00 00 00 00 callq *(%rip) # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 92: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_PC32 .L.str.115-0x4 // 99: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_PC32 .L.str.114-0x4 // a0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // a7: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // ac: ff 15 00 00 00 00 callq *(%rip) # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_GOTPCRELX __assert_fail-0x4 // b2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_PC32 .L.str.116-0x4 // b9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_PC32 .L.str.114-0x4 // c0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // c7: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // cc: ff 15 00 00 00 00 callq *(%rip) # 0xd2 <_JIT_ENTRY+0xd2> // 00000000000000ce: R_X86_64_GOTPCRELX __assert_fail-0x4 // d2: const unsigned char code_body[210] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x40, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x85, 0xc9, 0x74, 0x30, 0x48, 0x8b, 0x51, 0x08, 0xf6, 0x82, 0xab, 0x00, 0x00, 0x00, 0x02, 0x74, 0x4a, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x74, 0x61, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x74, 0x78, 0x48, 0x8b, 0x40, 0x10, 0x48, 0x3b, 0x41, 0x10, 0x73, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x8b, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1f, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(iter) == &PyListIter_Type\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00PyList_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/listobject.h\x00Py_ssize_t PyList_GET_SIZE(PyObject *)\x00' // 1b9: 00 00 00 00 00 00 00 // 1c0: &PyListIter_Type+0x0 // 1c8: &PyLong_Type+0x0 // 1d0: &PyBool_Type+0x0 // 1d8: CONTINUE // 1e0: JUMP_TARGET // 1e8: &__assert_fail+0x0 const unsigned char data_body[496] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x69, 0x74, 0x65, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1c0, (uintptr_t)&PyListIter_Type); patch_64(data + 0x1c8, (uintptr_t)&PyLong_Type); patch_64(data + 0x1d0, (uintptr_t)&PyBool_Type); patch_64(data + 0x1d8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1e0, instruction_starts[instruction->jump_target]); patch_64(data + 0x1e8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1bc); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0x1c4); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x1cc); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0x1d4); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0x1dc); patch_32r(code + 0x55, (uintptr_t)data + 0x8a); patch_32r(code + 0x5c, (uintptr_t)data + -0x4); patch_32r(code + 0x63, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x1e4); patch_32r(code + 0x75, (uintptr_t)data + 0x13a); patch_32r(code + 0x7c, (uintptr_t)data + 0x14b); patch_32r(code + 0x83, (uintptr_t)data + 0x18e); patch_x86_64_32rx(code + 0x8e, (uintptr_t)data + 0x1e4); patch_32r(code + 0x95, (uintptr_t)data + 0xe3); patch_32r(code + 0x9c, (uintptr_t)data + 0xac); patch_32r(code + 0xa3, (uintptr_t)data + 0xff); patch_x86_64_32rx(code + 0xae, (uintptr_t)data + 0x1e4); patch_32r(code + 0xb5, (uintptr_t)data + 0x11e); patch_32r(code + 0xbc, (uintptr_t)data + 0xac); patch_32r(code + 0xc3, (uintptr_t)data + 0xff); patch_x86_64_32rx(code + 0xce, (uintptr_t)data + 0x1e4); } void emit__GUARD_NOT_EXHAUSTED_RANGE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_NOT_EXHAUSTED_RANGE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 48 08 movq 0x8(%rax), %rcx // 8: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyRangeIter_Type-0x4 // f: 75 13 jne 0x24 <_JIT_ENTRY+0x24> // 11: 48 83 78 20 00 cmpq $0x0, 0x20(%rax) // 16: 7e 06 jle 0x1e <_JIT_ENTRY+0x1e> // 18: ff 25 00 00 00 00 jmpq *(%rip) # 0x1e <_JIT_ENTRY+0x1e> // 000000000000001a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1e: ff 25 00 00 00 00 jmpq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 24: 50 pushq %rax // 25: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_PC32 .L.str.72-0x4 // 2c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_PC32 .L.str.1-0x4 // 33: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 3a: ba e4 0a 00 00 movl $0xae4, %edx # imm = 0xAE4 // 3f: ff 15 00 00 00 00 callq *(%rip) # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_GOTPCRELX __assert_fail-0x4 // 45: const unsigned char code_body[69] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x13, 0x48, 0x83, 0x78, 0x20, 0x00, 0x7e, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xe4, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(r) == &PyRangeIter_Type\x00' // ae: 00 00 // b0: &PyRangeIter_Type+0x0 // b8: CONTINUE // c0: JUMP_TARGET // c8: &__assert_fail+0x0 const unsigned char data_body[208] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb0, (uintptr_t)&PyRangeIter_Type); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, instruction_starts[instruction->jump_target]); patch_64(data + 0xc8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x1a, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0xbc); patch_32r(code + 0x28, (uintptr_t)data + 0x8a); patch_32r(code + 0x2f, (uintptr_t)data + -0x4); patch_32r(code + 0x36, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x41, (uintptr_t)data + 0xc4); } void emit__GUARD_NOT_EXHAUSTED_TUPLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_NOT_EXHAUSTED_TUPLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyTupleIter_Type-0x4 // 10: 75 40 jne 0x52 <_JIT_ENTRY+0x52> // 12: 48 8b 48 18 movq 0x18(%rax), %rcx // 16: 48 85 c9 testq %rcx, %rcx // 19: 74 30 je 0x4b <_JIT_ENTRY+0x4b> // 1b: 48 8b 51 08 movq 0x8(%rcx), %rdx // 1f: f6 82 ab 00 00 00 04 testb $0x4, 0xab(%rdx) // 26: 74 4a je 0x72 <_JIT_ENTRY+0x72> // 28: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 2f: 74 61 je 0x92 <_JIT_ENTRY+0x92> // 31: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 38: 74 78 je 0xb2 <_JIT_ENTRY+0xb2> // 3a: 48 8b 40 10 movq 0x10(%rax), %rax // 3e: 48 3b 41 10 cmpq 0x10(%rcx), %rax // 42: 7d 07 jge 0x4b <_JIT_ENTRY+0x4b> // 44: 58 popq %rax // 45: ff 25 00 00 00 00 jmpq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 4b: 58 popq %rax // 4c: ff 25 00 00 00 00 jmpq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 52: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_PC32 .L.str.70-0x4 // 59: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_PC32 .L.str.1-0x4 // 60: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 67: ba b7 0a 00 00 movl $0xab7, %edx # imm = 0xAB7 // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 72: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_PC32 .L.str.132-0x4 // 79: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_PC32 .L.str.133-0x4 // 80: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyTuple_GET_SIZE-0x4 // 87: ba 16 00 00 00 movl $0x16, %edx // 8c: ff 15 00 00 00 00 callq *(%rip) # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 92: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_PC32 .L.str.115-0x4 // 99: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_PC32 .L.str.114-0x4 // a0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // a7: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // ac: ff 15 00 00 00 00 callq *(%rip) # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_GOTPCRELX __assert_fail-0x4 // b2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_PC32 .L.str.116-0x4 // b9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_PC32 .L.str.114-0x4 // c0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // c7: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // cc: ff 15 00 00 00 00 callq *(%rip) # 0xd2 <_JIT_ENTRY+0xd2> // 00000000000000ce: R_X86_64_GOTPCRELX __assert_fail-0x4 // d2: const unsigned char code_body[210] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x40, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x85, 0xc9, 0x74, 0x30, 0x48, 0x8b, 0x51, 0x08, 0xf6, 0x82, 0xab, 0x00, 0x00, 0x00, 0x04, 0x74, 0x4a, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x74, 0x61, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x74, 0x78, 0x48, 0x8b, 0x40, 0x10, 0x48, 0x3b, 0x41, 0x10, 0x7d, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb7, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x16, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(iter) == &PyTupleIter_Type\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00PyTuple_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/tupleobject.h\x00Py_ssize_t PyTuple_GET_SIZE(PyObject *)\x00' // 1bd: 00 00 00 // 1c0: &PyTupleIter_Type+0x0 // 1c8: &PyLong_Type+0x0 // 1d0: &PyBool_Type+0x0 // 1d8: CONTINUE // 1e0: JUMP_TARGET // 1e8: &__assert_fail+0x0 const unsigned char data_body[496] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x69, 0x74, 0x65, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x49, 0x74, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1c0, (uintptr_t)&PyTupleIter_Type); patch_64(data + 0x1c8, (uintptr_t)&PyLong_Type); patch_64(data + 0x1d0, (uintptr_t)&PyBool_Type); patch_64(data + 0x1d8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1e0, instruction_starts[instruction->jump_target]); patch_64(data + 0x1e8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1bc); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0x1c4); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x1cc); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0x1d4); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0x1dc); patch_32r(code + 0x55, (uintptr_t)data + 0x8a); patch_32r(code + 0x5c, (uintptr_t)data + -0x4); patch_32r(code + 0x63, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x1e4); patch_32r(code + 0x75, (uintptr_t)data + 0x13b); patch_32r(code + 0x7c, (uintptr_t)data + 0x14d); patch_32r(code + 0x83, (uintptr_t)data + 0x191); patch_x86_64_32rx(code + 0x8e, (uintptr_t)data + 0x1e4); patch_32r(code + 0x95, (uintptr_t)data + 0xe4); patch_32r(code + 0x9c, (uintptr_t)data + 0xad); patch_32r(code + 0xa3, (uintptr_t)data + 0x100); patch_x86_64_32rx(code + 0xae, (uintptr_t)data + 0x1e4); patch_32r(code + 0xb5, (uintptr_t)data + 0x11f); patch_32r(code + 0xbc, (uintptr_t)data + 0xad); patch_32r(code + 0xc3, (uintptr_t)data + 0x100); patch_x86_64_32rx(code + 0xce, (uintptr_t)data + 0x1e4); } void emit__GUARD_TOS_FLOAT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_TOS_FLOAT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyFloat_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyFloat_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyFloat_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__GUARD_TOS_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_TOS_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyLong_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyLong_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__GUARD_TYPE_VERSION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_GUARD_TYPE_VERSION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 83 3d 00 00 00 00 00 cmpl $0x0, (%rip) # 0x7 <_JIT_ENTRY+0x7> // 0000000000000002: R_X86_64_GOTPCREL _JIT_OPERAND-0x5 // 7: 74 22 je 0x2b <_JIT_ENTRY+0x2b> // 9: 48 8b 45 f8 movq -0x8(%rbp), %rax // d: 48 8b 40 08 movq 0x8(%rax), %rax // 11: 8b 80 80 01 00 00 movl 0x180(%rax), %eax // 17: 3b 05 00 00 00 00 cmpl (%rip), %eax # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_OPERAND-0x4 // 1d: 75 06 jne 0x25 <_JIT_ENTRY+0x25> // 1f: ff 25 00 00 00 00 jmpq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 25: ff 25 00 00 00 00 jmpq *(%rip) # 0x2b <_JIT_ENTRY+0x2b> // 0000000000000027: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 2b: 50 pushq %rax // 2c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_PC32 .L.str.47-0x4 // 33: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_PC32 .L.str.1-0x4 // 3a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 41: ba b0 07 00 00 movl $0x7b0, %edx # imm = 0x7B0 // 46: ff 15 00 00 00 00 callq *(%rip) # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCRELX __assert_fail-0x4 // 4c: const unsigned char code_body[76] = { 0x83, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x74, 0x22, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x8b, 0x80, 0x80, 0x01, 0x00, 0x00, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb0, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00type_version != 0\x00' // a0: // a0: OPERAND // a8: CONTINUE // b0: JUMP_TARGET // b8: &__assert_fail+0x0 const unsigned char data_body[192] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x74, 0x79, 0x70, 0x65, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x21, 0x3d, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->operand); patch_64(data + 0xa8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xb0, instruction_starts[instruction->jump_target]); patch_64(data + 0xb8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x2, (uintptr_t)data + 0x9b); patch_x86_64_32rx(code + 0x19, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x27, (uintptr_t)data + 0xac); patch_32r(code + 0x2f, (uintptr_t)data + 0x8a); patch_32r(code + 0x36, (uintptr_t)data + -0x4); patch_32r(code + 0x3d, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0xb4); } void emit__INIT_CALL_BOUND_METHOD_EXACT_ARGS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INIT_CALL_BOUND_METHOD_EXACT_ARGS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 4c 89 64 24 10 movq %r12, 0x10(%rsp) // 9: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // e: 44 0f b7 25 00 00 00 00 movzwl (%rip), %r12d # 0x16 <_JIT_ENTRY+0x16> // 0000000000000012: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 16: b8 fe ff ff ff movl $0xfffffffe, %eax # imm = 0xFFFFFFFE // 1b: 44 29 e0 subl %r12d, %eax // 1e: 4c 63 f0 movslq %eax, %r14 // 21: 4a 8b 5c f5 00 movq (%rbp,%r14,8), %rbx // 26: 4c 8b 7b 18 movq 0x18(%rbx), %r15 // 2a: 41 8b 07 movl (%r15), %eax // 2d: ff c0 incl %eax // 2f: 74 09 je 0x3a <_JIT_ENTRY+0x3a> // 31: 41 89 07 movl %eax, (%r15) // 34: ff 15 00 00 00 00 callq *(%rip) # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 3a: 41 f7 d4 notl %r12d // 3d: 4d 63 ec movslq %r12d, %r13 // 40: 4e 89 7c ed 00 movq %r15, (%rbp,%r13,8) // 45: 4c 8b 63 10 movq 0x10(%rbx), %r12 // 49: 41 8b 04 24 movl (%r12), %eax // 4d: ff c0 incl %eax // 4f: 75 13 jne 0x64 <_JIT_ENTRY+0x64> // 51: 4e 89 64 f5 00 movq %r12, (%rbp,%r14,8) // 56: 48 8b 03 movq (%rbx), %rax // 59: 48 85 c0 testq %rax, %rax // 5c: 7e 1d jle 0x7b <_JIT_ENTRY+0x7b> // 5e: 85 c0 testl %eax, %eax // 60: 79 35 jns 0x97 <_JIT_ENTRY+0x97> // 62: eb 47 jmp 0xab <_JIT_ENTRY+0xab> // 64: 41 89 04 24 movl %eax, (%r12) // 68: ff 15 00 00 00 00 callq *(%rip) # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 6e: 4e 89 64 f5 00 movq %r12, (%rbp,%r14,8) // 73: 48 8b 03 movq (%rbx), %rax // 76: 48 85 c0 testq %rax, %rax // 79: 7f e3 jg 0x5e <_JIT_ENTRY+0x5e> // 7b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L.str.1-0x4 // 82: be 8c 0c 00 00 movl $0xc8c, %esi # imm = 0xC8C // 87: 48 89 da movq %rbx, %rdx // 8a: ff 15 00 00 00 00 callq *(%rip) # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 90: 48 8b 03 movq (%rbx), %rax // 93: 85 c0 testl %eax, %eax // 95: 78 14 js 0xab <_JIT_ENTRY+0xab> // 97: ff 15 00 00 00 00 callq *(%rip) # 0x9d <_JIT_ENTRY+0x9d> // 0000000000000099: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 9d: 48 ff 0b decq (%rbx) // a0: 75 09 jne 0xab <_JIT_ENTRY+0xab> // a2: 48 89 df movq %rbx, %rdi // a5: ff 15 00 00 00 00 callq *(%rip) # 0xab <_JIT_ENTRY+0xab> // 00000000000000a7: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // ab: 4e 89 64 f5 00 movq %r12, (%rbp,%r14,8) // b0: 4e 89 7c ed 00 movq %r15, (%rbp,%r13,8) // b5: 4c 8b 6c 24 08 movq 0x8(%rsp), %r13 // ba: 4c 8b 64 24 10 movq 0x10(%rsp), %r12 // bf: 48 83 c4 18 addq $0x18, %rsp // c3: ff 25 00 00 00 00 jmpq *(%rip) # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c3: const unsigned char code_body[195] = { 0x48, 0x83, 0xec, 0x18, 0x4c, 0x89, 0x64, 0x24, 0x10, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x44, 0x0f, 0xb7, 0x25, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0x44, 0x29, 0xe0, 0x4c, 0x63, 0xf0, 0x4a, 0x8b, 0x5c, 0xf5, 0x00, 0x4c, 0x8b, 0x7b, 0x18, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf7, 0xd4, 0x4d, 0x63, 0xec, 0x4e, 0x89, 0x7c, 0xed, 0x00, 0x4c, 0x8b, 0x63, 0x10, 0x41, 0x8b, 0x04, 0x24, 0xff, 0xc0, 0x75, 0x13, 0x4e, 0x89, 0x64, 0xf5, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x1d, 0x85, 0xc0, 0x79, 0x35, 0xeb, 0x47, 0x41, 0x89, 0x04, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x89, 0x64, 0xf5, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe3, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x8c, 0x0c, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4e, 0x89, 0x64, 0xf5, 0x00, 0x4e, 0x89, 0x7c, 0xed, 0x00, 0x4c, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x64, 0x24, 0x10, 0x48, 0x83, 0xc4, 0x18, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_Py_INCREF_IncRefTotal+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: &_Py_Dealloc+0x0 const unsigned char data_body[104] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x12, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x36, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x6a, (uintptr_t)data + 0x44); patch_32r(code + 0x7e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x8c, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x99, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xa7, (uintptr_t)data + 0x5c); } void emit__INIT_CALL_PY_EXACT_ARGS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INIT_CALL_PY_EXACT_ARGS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 28 subq $0x28, %rsp // 4: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 c8 movl %ecx, %eax // d: f7 d0 notl %eax // f: 4c 63 d8 movslq %eax, %r11 // 12: 4e 8b 4c dd 00 movq (%rbp,%r11,8), %r9 // 17: b8 fe ff ff ff movl $0xfffffffe, %eax # imm = 0xFFFFFFFE // 1c: 29 c8 subl %ecx, %eax // 1e: 4c 63 d0 movslq %eax, %r10 // 21: 49 83 f9 01 cmpq $0x1, %r9 // 25: 48 89 4c 24 18 movq %rcx, 0x18(%rsp) // 2a: 89 cb movl %ecx, %ebx // 2c: 83 db ff sbbl $-0x1, %ebx // 2f: 48 89 6c 24 20 movq %rbp, 0x20(%rsp) // 34: 4a 8b 6c d5 00 movq (%rbp,%r10,8), %rbp // 39: 4c 8b 7d 30 movq 0x30(%rbp), %r15 // 3d: 4d 8b b4 24 f0 00 00 00 movq 0xf0(%r12), %r14 // 45: 49 63 47 4c movslq 0x4c(%r15), %rax // 49: 49 8d 04 c6 leaq (%r14,%rax,8), %rax // 4d: 49 89 84 24 f0 00 00 00 movq %rax, 0xf0(%r12) // 55: 49 3b 84 24 f8 00 00 00 cmpq 0xf8(%r12), %rax // 5d: 0f 83 36 02 00 00 jae 0x299 <_JIT_ENTRY+0x299> // 63: 49 89 6e 10 movq %rbp, 0x10(%r14) // 67: 41 8b 07 movl (%r15), %eax // 6a: ff c0 incl %eax // 6c: 74 2b je 0x99 <_JIT_ENTRY+0x99> // 6e: 41 89 07 movl %eax, (%r15) // 71: 4c 89 64 24 08 movq %r12, 0x8(%rsp) // 76: 4c 89 54 24 10 movq %r10, 0x10(%rsp) // 7b: 4d 89 cc movq %r9, %r12 // 7e: 4c 89 1c 24 movq %r11, (%rsp) // 82: ff 15 00 00 00 00 callq *(%rip) # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 88: 4c 8b 1c 24 movq (%rsp), %r11 // 8c: 4d 89 e1 movq %r12, %r9 // 8f: 4c 8b 54 24 10 movq 0x10(%rsp), %r10 // 94: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // 99: 4d 89 3e movq %r15, (%r14) // 9c: 0f 10 45 10 movups 0x10(%rbp), %xmm0 // a0: 41 0f 11 46 18 movups %xmm0, 0x18(%r14) // a5: 49 c7 46 28 00 00 00 00 movq $0x0, 0x28(%r14) // ad: 41 8b 47 48 movl 0x48(%r15), %eax // b1: 41 89 46 40 movl %eax, 0x40(%r14) // b5: 49 c7 46 30 00 00 00 00 movq $0x0, 0x30(%r14) // bd: 49 81 c7 c8 00 00 00 addq $0xc8, %r15 // c4: 4d 89 7e 38 movq %r15, 0x38(%r14) // c8: 66 41 c7 46 44 00 00 movw $0x0, 0x44(%r14) // cf: 41 c6 46 46 00 movb $0x0, 0x46(%r14) // d4: 39 d8 cmpl %ebx, %eax // d6: 4c 8b 7c 24 20 movq 0x20(%rsp), %r15 // db: 48 8b 6c 24 18 movq 0x18(%rsp), %rbp // e0: 7e 5f jle 0x141 <_JIT_ENTRY+0x141> // e2: 89 d9 movl %ebx, %ecx // e4: 48 89 c2 movq %rax, %rdx // e7: 48 29 ca subq %rcx, %rdx // ea: 48 83 fa 04 cmpq $0x4, %rdx // ee: 72 40 jb 0x130 <_JIT_ENTRY+0x130> // f0: 48 89 d6 movq %rdx, %rsi // f3: 48 83 e6 fc andq $-0x4, %rsi // f7: 49 8d 3c ce leaq (%r14,%rcx,8), %rdi // fb: 48 83 c7 58 addq $0x58, %rdi // ff: 45 31 c0 xorl %r8d, %r8d // 102: 0f 57 c0 xorps %xmm0, %xmm0 // 105: 66 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // 110: 42 0f 11 44 c7 f0 movups %xmm0, -0x10(%rdi,%r8,8) // 116: 42 0f 11 04 c7 movups %xmm0, (%rdi,%r8,8) // 11b: 49 83 c0 04 addq $0x4, %r8 // 11f: 4c 39 c6 cmpq %r8, %rsi // 122: 75 ec jne 0x110 <_JIT_ENTRY+0x110> // 124: 48 39 f2 cmpq %rsi, %rdx // 127: 74 18 je 0x141 <_JIT_ENTRY+0x141> // 129: 48 01 f1 addq %rsi, %rcx // 12c: 0f 1f 40 00 nopl (%rax) // 130: 49 c7 44 ce 48 00 00 00 00 movq $0x0, 0x48(%r14,%rcx,8) // 139: 48 ff c1 incq %rcx // 13c: 48 39 c8 cmpq %rcx, %rax // 13f: 75 ef jne 0x130 <_JIT_ENTRY+0x130> // 141: 4b 8d 04 df leaq (%r15,%r11,8), %rax // 145: 31 d2 xorl %edx, %edx // 147: 4d 85 c9 testq %r9, %r9 // 14a: 0f 95 c1 setne %cl // 14d: 4d 89 4e 48 movq %r9, 0x48(%r14) // 151: 48 8b 35 00 00 00 00 movq (%rip), %rsi # 0x158 <_JIT_ENTRY+0x158> // 0000000000000154: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 158: 66 85 f6 testw %si, %si // 15b: 0f 84 27 01 00 00 je 0x288 <_JIT_ENTRY+0x288> // 161: 88 ca movb %cl, %dl // 163: 83 fd 01 cmpl $0x1, %ebp // 166: 89 e9 movl %ebp, %ecx // 168: 83 d1 00 adcl $0x0, %ecx // 16b: 48 8b 35 00 00 00 00 movq (%rip), %rsi # 0x172 <_JIT_ENTRY+0x172> // 000000000000016e: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 172: 66 83 fe 14 cmpw $0x14, %si // 176: 72 30 jb 0x1a8 <_JIT_ENTRY+0x1a8> // 178: 31 f6 xorl %esi, %esi // 17a: 4d 85 c9 testq %r9, %r9 // 17d: 40 0f 95 c6 setne %sil // 181: 44 0f b7 0d 00 00 00 00 movzwl (%rip), %r9d # 0x189 <_JIT_ENTRY+0x189> // 0000000000000185: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 189: 49 c1 e1 03 shlq $0x3, %r9 // 18d: 4c 89 cf movq %r9, %rdi // 190: 4c 29 ff subq %r15, %rdi // 193: 48 8d 34 f7 leaq (%rdi,%rsi,8), %rsi // 197: 4c 01 f6 addq %r14, %rsi // 19a: 48 83 c6 48 addq $0x48, %rsi // 19e: 48 83 fe 20 cmpq $0x20, %rsi // 1a2: 0f 83 99 00 00 00 jae 0x241 <_JIT_ENTRY+0x241> // 1a8: 31 f6 xorl %esi, %esi // 1aa: 4c 89 d3 movq %r10, %rbx // 1ad: c1 e5 03 shll $0x3, %ebp // 1b0: 49 89 c8 movq %rcx, %r8 // 1b3: 48 89 f7 movq %rsi, %rdi // 1b6: 49 83 e0 03 andq $0x3, %r8 // 1ba: 74 24 je 0x1e0 <_JIT_ENTRY+0x1e0> // 1bc: 4d 89 f9 movq %r15, %r9 // 1bf: 49 29 e9 subq %rbp, %r9 // 1c2: 4d 8d 14 d6 leaq (%r14,%rdx,8), %r10 // 1c6: 49 83 c2 48 addq $0x48, %r10 // 1ca: 48 89 f7 movq %rsi, %rdi // 1cd: 0f 1f 00 nopl (%rax) // 1d0: 4d 8b 1c f9 movq (%r9,%rdi,8), %r11 // 1d4: 4d 89 1c fa movq %r11, (%r10,%rdi,8) // 1d8: 48 ff c7 incq %rdi // 1db: 49 ff c8 decq %r8 // 1de: 75 f0 jne 0x1d0 <_JIT_ENTRY+0x1d0> // 1e0: 48 29 ce subq %rcx, %rsi // 1e3: 48 83 fe fc cmpq $-0x4, %rsi // 1e7: 49 89 da movq %rbx, %r10 // 1ea: 0f 87 98 00 00 00 ja 0x288 <_JIT_ENTRY+0x288> // 1f0: 49 8d 14 d6 leaq (%r14,%rdx,8), %rdx // 1f4: 48 83 c2 60 addq $0x60, %rdx // 1f8: 4c 89 fe movq %r15, %rsi // 1fb: 48 29 ee subq %rbp, %rsi // 1fe: 48 83 c6 18 addq $0x18, %rsi // 202: 66 66 66 66 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // 210: 4c 8b 44 fe e8 movq -0x18(%rsi,%rdi,8), %r8 // 215: 4c 89 44 fa e8 movq %r8, -0x18(%rdx,%rdi,8) // 21a: 4c 8b 44 fe f0 movq -0x10(%rsi,%rdi,8), %r8 // 21f: 4c 89 44 fa f0 movq %r8, -0x10(%rdx,%rdi,8) // 224: 4c 8b 44 fe f8 movq -0x8(%rsi,%rdi,8), %r8 // 229: 4c 89 44 fa f8 movq %r8, -0x8(%rdx,%rdi,8) // 22e: 4c 8b 04 fe movq (%rsi,%rdi,8), %r8 // 232: 4c 89 04 fa movq %r8, (%rdx,%rdi,8) // 236: 48 83 c7 04 addq $0x4, %rdi // 23a: 48 39 f9 cmpq %rdi, %rcx // 23d: 75 d1 jne 0x210 <_JIT_ENTRY+0x210> // 23f: eb 47 jmp 0x288 <_JIT_ENTRY+0x288> // 241: 89 ce movl %ecx, %esi // 243: 81 e6 fc ff 00 00 andl $0xfffc, %esi # imm = 0xFFFC // 249: 49 8d 3c d6 leaq (%r14,%rdx,8), %rdi // 24d: 48 83 c7 58 addq $0x58, %rdi // 251: 4d 89 f8 movq %r15, %r8 // 254: 4d 29 c8 subq %r9, %r8 // 257: 49 83 c0 10 addq $0x10, %r8 // 25b: 45 31 c9 xorl %r9d, %r9d // 25e: 66 90 nop // 260: 43 0f 10 44 c8 f0 movups -0x10(%r8,%r9,8), %xmm0 // 266: 43 0f 10 0c c8 movups (%r8,%r9,8), %xmm1 // 26b: 42 0f 11 44 cf f0 movups %xmm0, -0x10(%rdi,%r9,8) // 271: 42 0f 11 0c cf movups %xmm1, (%rdi,%r9,8) // 276: 49 83 c1 04 addq $0x4, %r9 // 27a: 4c 39 ce cmpq %r9, %rsi // 27d: 75 e1 jne 0x260 <_JIT_ENTRY+0x260> // 27f: 48 39 ce cmpq %rcx, %rsi // 282: 0f 85 22 ff ff ff jne 0x1aa <_JIT_ENTRY+0x1aa> // 288: 4f 89 34 d7 movq %r14, (%r15,%r10,8) // 28c: 48 89 c5 movq %rax, %rbp // 28f: 48 83 c4 28 addq $0x28, %rsp // 293: ff 25 00 00 00 00 jmpq *(%rip) # 0x299 <_JIT_ENTRY+0x299> // 0000000000000295: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 299: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2a0 <_JIT_ENTRY+0x2a0> // 000000000000029c: R_X86_64_PC32 .L.str.161-0x4 // 2a0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x2a7 <_JIT_ENTRY+0x2a7> // 00000000000002a3: R_X86_64_PC32 .L.str.109-0x4 // 2a7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x2ae <_JIT_ENTRY+0x2ae> // 00000000000002aa: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_PushUnchecked-0x4 // 2ae: ba 19 01 00 00 movl $0x119, %edx # imm = 0x119 // 2b3: ff 15 00 00 00 00 callq *(%rip) # 0x2b9 <_JIT_ENTRY+0x2b9> // 00000000000002b5: R_X86_64_GOTPCRELX __assert_fail-0x4 // 2b9: const unsigned char code_body[697] = { 0x48, 0x83, 0xec, 0x28, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc8, 0xf7, 0xd0, 0x4c, 0x63, 0xd8, 0x4e, 0x8b, 0x4c, 0xdd, 0x00, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xc8, 0x4c, 0x63, 0xd0, 0x49, 0x83, 0xf9, 0x01, 0x48, 0x89, 0x4c, 0x24, 0x18, 0x89, 0xcb, 0x83, 0xdb, 0xff, 0x48, 0x89, 0x6c, 0x24, 0x20, 0x4a, 0x8b, 0x6c, 0xd5, 0x00, 0x4c, 0x8b, 0x7d, 0x30, 0x4d, 0x8b, 0xb4, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x63, 0x47, 0x4c, 0x49, 0x8d, 0x04, 0xc6, 0x49, 0x89, 0x84, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x3b, 0x84, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x83, 0x36, 0x02, 0x00, 0x00, 0x49, 0x89, 0x6e, 0x10, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x2b, 0x41, 0x89, 0x07, 0x4c, 0x89, 0x64, 0x24, 0x08, 0x4c, 0x89, 0x54, 0x24, 0x10, 0x4d, 0x89, 0xcc, 0x4c, 0x89, 0x1c, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x1c, 0x24, 0x4d, 0x89, 0xe1, 0x4c, 0x8b, 0x54, 0x24, 0x10, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x4d, 0x89, 0x3e, 0x0f, 0x10, 0x45, 0x10, 0x41, 0x0f, 0x11, 0x46, 0x18, 0x49, 0xc7, 0x46, 0x28, 0x00, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x47, 0x48, 0x41, 0x89, 0x46, 0x40, 0x49, 0xc7, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x49, 0x81, 0xc7, 0xc8, 0x00, 0x00, 0x00, 0x4d, 0x89, 0x7e, 0x38, 0x66, 0x41, 0xc7, 0x46, 0x44, 0x00, 0x00, 0x41, 0xc6, 0x46, 0x46, 0x00, 0x39, 0xd8, 0x4c, 0x8b, 0x7c, 0x24, 0x20, 0x48, 0x8b, 0x6c, 0x24, 0x18, 0x7e, 0x5f, 0x89, 0xd9, 0x48, 0x89, 0xc2, 0x48, 0x29, 0xca, 0x48, 0x83, 0xfa, 0x04, 0x72, 0x40, 0x48, 0x89, 0xd6, 0x48, 0x83, 0xe6, 0xfc, 0x49, 0x8d, 0x3c, 0xce, 0x48, 0x83, 0xc7, 0x58, 0x45, 0x31, 0xc0, 0x0f, 0x57, 0xc0, 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x42, 0x0f, 0x11, 0x44, 0xc7, 0xf0, 0x42, 0x0f, 0x11, 0x04, 0xc7, 0x49, 0x83, 0xc0, 0x04, 0x4c, 0x39, 0xc6, 0x75, 0xec, 0x48, 0x39, 0xf2, 0x74, 0x18, 0x48, 0x01, 0xf1, 0x0f, 0x1f, 0x40, 0x00, 0x49, 0xc7, 0x44, 0xce, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc1, 0x48, 0x39, 0xc8, 0x75, 0xef, 0x4b, 0x8d, 0x04, 0xdf, 0x31, 0xd2, 0x4d, 0x85, 0xc9, 0x0f, 0x95, 0xc1, 0x4d, 0x89, 0x4e, 0x48, 0x48, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xf6, 0x0f, 0x84, 0x27, 0x01, 0x00, 0x00, 0x88, 0xca, 0x83, 0xfd, 0x01, 0x89, 0xe9, 0x83, 0xd1, 0x00, 0x48, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xfe, 0x14, 0x72, 0x30, 0x31, 0xf6, 0x4d, 0x85, 0xc9, 0x40, 0x0f, 0x95, 0xc6, 0x44, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x49, 0xc1, 0xe1, 0x03, 0x4c, 0x89, 0xcf, 0x4c, 0x29, 0xff, 0x48, 0x8d, 0x34, 0xf7, 0x4c, 0x01, 0xf6, 0x48, 0x83, 0xc6, 0x48, 0x48, 0x83, 0xfe, 0x20, 0x0f, 0x83, 0x99, 0x00, 0x00, 0x00, 0x31, 0xf6, 0x4c, 0x89, 0xd3, 0xc1, 0xe5, 0x03, 0x49, 0x89, 0xc8, 0x48, 0x89, 0xf7, 0x49, 0x83, 0xe0, 0x03, 0x74, 0x24, 0x4d, 0x89, 0xf9, 0x49, 0x29, 0xe9, 0x4d, 0x8d, 0x14, 0xd6, 0x49, 0x83, 0xc2, 0x48, 0x48, 0x89, 0xf7, 0x0f, 0x1f, 0x00, 0x4d, 0x8b, 0x1c, 0xf9, 0x4d, 0x89, 0x1c, 0xfa, 0x48, 0xff, 0xc7, 0x49, 0xff, 0xc8, 0x75, 0xf0, 0x48, 0x29, 0xce, 0x48, 0x83, 0xfe, 0xfc, 0x49, 0x89, 0xda, 0x0f, 0x87, 0x98, 0x00, 0x00, 0x00, 0x49, 0x8d, 0x14, 0xd6, 0x48, 0x83, 0xc2, 0x60, 0x4c, 0x89, 0xfe, 0x48, 0x29, 0xee, 0x48, 0x83, 0xc6, 0x18, 0x66, 0x66, 0x66, 0x66, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x44, 0xfe, 0xe8, 0x4c, 0x89, 0x44, 0xfa, 0xe8, 0x4c, 0x8b, 0x44, 0xfe, 0xf0, 0x4c, 0x89, 0x44, 0xfa, 0xf0, 0x4c, 0x8b, 0x44, 0xfe, 0xf8, 0x4c, 0x89, 0x44, 0xfa, 0xf8, 0x4c, 0x8b, 0x04, 0xfe, 0x4c, 0x89, 0x04, 0xfa, 0x48, 0x83, 0xc7, 0x04, 0x48, 0x39, 0xf9, 0x75, 0xd1, 0xeb, 0x47, 0x89, 0xce, 0x81, 0xe6, 0xfc, 0xff, 0x00, 0x00, 0x49, 0x8d, 0x3c, 0xd6, 0x48, 0x83, 0xc7, 0x58, 0x4d, 0x89, 0xf8, 0x4d, 0x29, 0xc8, 0x49, 0x83, 0xc0, 0x10, 0x45, 0x31, 0xc9, 0x66, 0x90, 0x43, 0x0f, 0x10, 0x44, 0xc8, 0xf0, 0x43, 0x0f, 0x10, 0x0c, 0xc8, 0x42, 0x0f, 0x11, 0x44, 0xcf, 0xf0, 0x42, 0x0f, 0x11, 0x0c, 0xcf, 0x49, 0x83, 0xc1, 0x04, 0x4c, 0x39, 0xce, 0x75, 0xe1, 0x48, 0x39, 0xce, 0x0f, 0x85, 0x22, 0xff, 0xff, 0xff, 0x4f, 0x89, 0x34, 0xd7, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x28, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00tstate->datastack_top < tstate->datastack_limit\x00_PyInterpreterFrame *_PyFrame_PushUnchecked(PyThreadState *, PyFunctionObject *, int)\x00' // cc: 00 00 00 00 // d0: OPARG // d8: &_Py_INCREF_IncRefTotal+0x0 // e0: CONTINUE // e8: &__assert_fail+0x0 const unsigned char data_body[240] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3c, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x00, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x50, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xd0, instruction->oparg); patch_64(data + 0xd8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xe0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x84, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x154, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x16e, (uintptr_t)data + 0xcc); patch_32r(code + 0x185, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x295, (uintptr_t)data + 0xdc); patch_32r(code + 0x29c, (uintptr_t)data + 0x42); patch_32r(code + 0x2a3, (uintptr_t)data + -0x4); patch_32r(code + 0x2aa, (uintptr_t)data + 0x72); patch_x86_64_32rx(code + 0x2b5, (uintptr_t)data + 0xe4); } void emit__INIT_CALL_PY_EXACT_ARGS_0( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INIT_CALL_PY_EXACT_ARGS_0.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // b: 66 85 c0 testw %ax, %ax // e: 0f 85 25 01 00 00 jne 0x139 <_JIT_ENTRY+0x139> // 14: 4d 89 ea movq %r13, %r10 // 17: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 1b: 4c 8b 5d f8 movq -0x8(%rbp), %r11 // 1f: 45 31 ed xorl %r13d, %r13d // 22: 4d 85 db testq %r11, %r11 // 25: 0f 95 c0 setne %al // 28: 49 8b 5f 30 movq 0x30(%r15), %rbx // 2c: 4d 8b b4 24 f0 00 00 00 movq 0xf0(%r12), %r14 // 34: 48 63 4b 4c movslq 0x4c(%rbx), %rcx // 38: 49 8d 0c ce leaq (%r14,%rcx,8), %rcx // 3c: 49 89 8c 24 f0 00 00 00 movq %rcx, 0xf0(%r12) // 44: 49 3b 8c 24 f8 00 00 00 cmpq 0xf8(%r12), %rcx // 4c: 0f 83 07 01 00 00 jae 0x159 <_JIT_ENTRY+0x159> // 52: 41 88 c5 movb %al, %r13b // 55: 4d 89 7e 10 movq %r15, 0x10(%r14) // 59: 8b 03 movl (%rbx), %eax // 5b: ff c0 incl %eax // 5d: 74 22 je 0x81 <_JIT_ENTRY+0x81> // 5f: 89 03 movl %eax, (%rbx) // 61: 4c 89 54 24 10 movq %r10, 0x10(%rsp) // 66: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 6b: 4c 89 dd movq %r11, %rbp // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 74: 49 89 eb movq %rbp, %r11 // 77: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // 7c: 4c 8b 54 24 10 movq 0x10(%rsp), %r10 // 81: 48 8d 45 f8 leaq -0x8(%rbp), %rax // 85: 49 89 1e movq %rbx, (%r14) // 88: 41 0f 10 47 10 movups 0x10(%r15), %xmm0 // 8d: 41 0f 11 46 18 movups %xmm0, 0x18(%r14) // 92: 49 c7 46 28 00 00 00 00 movq $0x0, 0x28(%r14) // 9a: 8b 4b 48 movl 0x48(%rbx), %ecx // 9d: 41 89 4e 40 movl %ecx, 0x40(%r14) // a1: 49 c7 46 30 00 00 00 00 movq $0x0, 0x30(%r14) // a9: 48 81 c3 c8 00 00 00 addq $0xc8, %rbx // b0: 49 89 5e 38 movq %rbx, 0x38(%r14) // b4: 66 41 c7 46 44 00 00 movw $0x0, 0x44(%r14) // bb: 41 c6 46 46 00 movb $0x0, 0x46(%r14) // c0: 44 39 e9 cmpl %r13d, %ecx // c3: 7e 5c jle 0x121 <_JIT_ENTRY+0x121> // c5: 31 d2 xorl %edx, %edx // c7: 4d 85 db testq %r11, %r11 // ca: 0f 95 c2 setne %dl // cd: 48 89 ce movq %rcx, %rsi // d0: 48 29 d6 subq %rdx, %rsi // d3: 48 83 fe 04 cmpq $0x4, %rsi // d7: 72 37 jb 0x110 <_JIT_ENTRY+0x110> // d9: 48 89 f7 movq %rsi, %rdi // dc: 48 83 e7 fc andq $-0x4, %rdi // e0: 4d 8d 04 d6 leaq (%r14,%rdx,8), %r8 // e4: 49 83 c0 58 addq $0x58, %r8 // e8: 45 31 c9 xorl %r9d, %r9d // eb: 0f 57 c0 xorps %xmm0, %xmm0 // ee: 66 90 nop // f0: 43 0f 11 44 c8 f0 movups %xmm0, -0x10(%r8,%r9,8) // f6: 43 0f 11 04 c8 movups %xmm0, (%r8,%r9,8) // fb: 49 83 c1 04 addq $0x4, %r9 // ff: 4c 39 cf cmpq %r9, %rdi // 102: 75 ec jne 0xf0 <_JIT_ENTRY+0xf0> // 104: 48 39 fe cmpq %rdi, %rsi // 107: 74 18 je 0x121 <_JIT_ENTRY+0x121> // 109: 48 09 fa orq %rdi, %rdx // 10c: 0f 1f 40 00 nopl (%rax) // 110: 49 c7 44 d6 48 00 00 00 00 movq $0x0, 0x48(%r14,%rdx,8) // 119: 48 ff c2 incq %rdx // 11c: 48 39 d1 cmpq %rdx, %rcx // 11f: 75 ef jne 0x110 <_JIT_ENTRY+0x110> // 121: 4d 89 5e 48 movq %r11, 0x48(%r14) // 125: 4c 89 75 f0 movq %r14, -0x10(%rbp) // 129: 4d 89 d5 movq %r10, %r13 // 12c: 48 89 c5 movq %rax, %rbp // 12f: 48 83 c4 18 addq $0x18, %rsp // 133: ff 25 00 00 00 00 jmpq *(%rip) # 0x139 <_JIT_ENTRY+0x139> // 0000000000000135: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 139: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_PC32 .L.str.3-0x4 // 140: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x147 <_JIT_ENTRY+0x147> // 0000000000000143: R_X86_64_PC32 .L.str.1-0x4 // 147: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x14e <_JIT_ENTRY+0x14e> // 000000000000014a: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 14e: ba c9 0c 00 00 movl $0xcc9, %edx # imm = 0xCC9 // 153: ff 15 00 00 00 00 callq *(%rip) # 0x159 <_JIT_ENTRY+0x159> // 0000000000000155: R_X86_64_GOTPCRELX __assert_fail-0x4 // 159: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x160 <_JIT_ENTRY+0x160> // 000000000000015c: R_X86_64_PC32 .L.str.161-0x4 // 160: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x167 <_JIT_ENTRY+0x167> // 0000000000000163: R_X86_64_PC32 .L.str.109-0x4 // 167: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x16e <_JIT_ENTRY+0x16e> // 000000000000016a: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_PushUnchecked-0x4 // 16e: ba 19 01 00 00 movl $0x119, %edx # imm = 0x119 // 173: ff 15 00 00 00 00 callq *(%rip) # 0x179 <_JIT_ENTRY+0x179> // 0000000000000175: R_X86_64_GOTPCRELX __assert_fail-0x4 // 179: const unsigned char code_body[377] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x0f, 0x85, 0x25, 0x01, 0x00, 0x00, 0x4d, 0x89, 0xea, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x5d, 0xf8, 0x45, 0x31, 0xed, 0x4d, 0x85, 0xdb, 0x0f, 0x95, 0xc0, 0x49, 0x8b, 0x5f, 0x30, 0x4d, 0x8b, 0xb4, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x63, 0x4b, 0x4c, 0x49, 0x8d, 0x0c, 0xce, 0x49, 0x89, 0x8c, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x3b, 0x8c, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x83, 0x07, 0x01, 0x00, 0x00, 0x41, 0x88, 0xc5, 0x4d, 0x89, 0x7e, 0x10, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x22, 0x89, 0x03, 0x4c, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x4c, 0x89, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xeb, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x54, 0x24, 0x10, 0x48, 0x8d, 0x45, 0xf8, 0x49, 0x89, 0x1e, 0x41, 0x0f, 0x10, 0x47, 0x10, 0x41, 0x0f, 0x11, 0x46, 0x18, 0x49, 0xc7, 0x46, 0x28, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x4b, 0x48, 0x41, 0x89, 0x4e, 0x40, 0x49, 0xc7, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc3, 0xc8, 0x00, 0x00, 0x00, 0x49, 0x89, 0x5e, 0x38, 0x66, 0x41, 0xc7, 0x46, 0x44, 0x00, 0x00, 0x41, 0xc6, 0x46, 0x46, 0x00, 0x44, 0x39, 0xe9, 0x7e, 0x5c, 0x31, 0xd2, 0x4d, 0x85, 0xdb, 0x0f, 0x95, 0xc2, 0x48, 0x89, 0xce, 0x48, 0x29, 0xd6, 0x48, 0x83, 0xfe, 0x04, 0x72, 0x37, 0x48, 0x89, 0xf7, 0x48, 0x83, 0xe7, 0xfc, 0x4d, 0x8d, 0x04, 0xd6, 0x49, 0x83, 0xc0, 0x58, 0x45, 0x31, 0xc9, 0x0f, 0x57, 0xc0, 0x66, 0x90, 0x43, 0x0f, 0x11, 0x44, 0xc8, 0xf0, 0x43, 0x0f, 0x11, 0x04, 0xc8, 0x49, 0x83, 0xc1, 0x04, 0x4c, 0x39, 0xcf, 0x75, 0xec, 0x48, 0x39, 0xfe, 0x74, 0x18, 0x48, 0x09, 0xfa, 0x0f, 0x1f, 0x40, 0x00, 0x49, 0xc7, 0x44, 0xd6, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x48, 0x39, 0xd1, 0x75, 0xef, 0x4d, 0x89, 0x5e, 0x48, 0x4c, 0x89, 0x75, 0xf0, 0x4d, 0x89, 0xd5, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc9, 0x0c, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00tstate->datastack_top < tstate->datastack_limit\x00_PyInterpreterFrame *_PyFrame_PushUnchecked(PyThreadState *, PyFunctionObject *, int)\x00' // 173: 00 00 00 00 00 // 178: OPARG // 180: &_Py_INCREF_IncRefTotal+0x0 // 188: CONTINUE // 190: &__assert_fail+0x0 const unsigned char data_body[408] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3c, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x00, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x50, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x178, instruction->oparg); patch_64(data + 0x180, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x188, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x190, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x135, (uintptr_t)data + 0x184); patch_32r(code + 0x13c, (uintptr_t)data + 0x8a); patch_32r(code + 0x143, (uintptr_t)data + -0x4); patch_32r(code + 0x14a, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x155, (uintptr_t)data + 0x18c); patch_32r(code + 0x15c, (uintptr_t)data + 0xe9); patch_32r(code + 0x163, (uintptr_t)data + 0xa3); patch_32r(code + 0x16a, (uintptr_t)data + 0x119); patch_x86_64_32rx(code + 0x175, (uintptr_t)data + 0x18c); } void emit__INIT_CALL_PY_EXACT_ARGS_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INIT_CALL_PY_EXACT_ARGS_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // b: 66 83 f8 01 cmpw $0x1, %ax // f: 0f 85 35 01 00 00 jne 0x14a <_JIT_ENTRY+0x14a> // 15: 4d 89 ea movq %r13, %r10 // 18: 4c 8b 5d f0 movq -0x10(%rbp), %r11 // 1c: 49 83 fb 01 cmpq $0x1, %r11 // 20: 41 bd 01 00 00 00 movl $0x1, %r13d // 26: 41 83 dd ff sbbl $-0x1, %r13d // 2a: 4c 8b 7d e8 movq -0x18(%rbp), %r15 // 2e: 49 8b 5f 30 movq 0x30(%r15), %rbx // 32: 4d 8b b4 24 f0 00 00 00 movq 0xf0(%r12), %r14 // 3a: 48 63 43 4c movslq 0x4c(%rbx), %rax // 3e: 49 8d 04 c6 leaq (%r14,%rax,8), %rax // 42: 49 89 84 24 f0 00 00 00 movq %rax, 0xf0(%r12) // 4a: 49 3b 84 24 f8 00 00 00 cmpq 0xf8(%r12), %rax // 52: 0f 83 12 01 00 00 jae 0x16a <_JIT_ENTRY+0x16a> // 58: 4d 89 7e 10 movq %r15, 0x10(%r14) // 5c: 8b 03 movl (%rbx), %eax // 5e: ff c0 incl %eax // 60: 74 22 je 0x84 <_JIT_ENTRY+0x84> // 62: 89 03 movl %eax, (%rbx) // 64: 4c 89 54 24 10 movq %r10, 0x10(%rsp) // 69: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 6e: 4c 89 dd movq %r11, %rbp // 71: ff 15 00 00 00 00 callq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 77: 49 89 eb movq %rbp, %r11 // 7a: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // 7f: 4c 8b 54 24 10 movq 0x10(%rsp), %r10 // 84: 48 8d 45 f0 leaq -0x10(%rbp), %rax // 88: 49 89 1e movq %rbx, (%r14) // 8b: 41 0f 10 47 10 movups 0x10(%r15), %xmm0 // 90: 41 0f 11 46 18 movups %xmm0, 0x18(%r14) // 95: 49 c7 46 28 00 00 00 00 movq $0x0, 0x28(%r14) // 9d: 8b 4b 48 movl 0x48(%rbx), %ecx // a0: 41 89 4e 40 movl %ecx, 0x40(%r14) // a4: 49 c7 46 30 00 00 00 00 movq $0x0, 0x30(%r14) // ac: 48 81 c3 c8 00 00 00 addq $0xc8, %rbx // b3: 49 89 5e 38 movq %rbx, 0x38(%r14) // b7: 66 41 c7 46 44 00 00 movw $0x0, 0x44(%r14) // be: 41 c6 46 46 00 movb $0x0, 0x46(%r14) // c3: 44 39 e9 cmpl %r13d, %ecx // c6: 7e 59 jle 0x121 <_JIT_ENTRY+0x121> // c8: 44 89 ea movl %r13d, %edx // cb: 48 89 ce movq %rcx, %rsi // ce: 48 29 d6 subq %rdx, %rsi // d1: 48 83 fe 04 cmpq $0x4, %rsi // d5: 72 39 jb 0x110 <_JIT_ENTRY+0x110> // d7: 48 89 f7 movq %rsi, %rdi // da: 48 83 e7 fc andq $-0x4, %rdi // de: 4d 8d 04 d6 leaq (%r14,%rdx,8), %r8 // e2: 49 83 c0 58 addq $0x58, %r8 // e6: 45 31 c9 xorl %r9d, %r9d // e9: 0f 57 c0 xorps %xmm0, %xmm0 // ec: 0f 1f 40 00 nopl (%rax) // f0: 43 0f 11 44 c8 f0 movups %xmm0, -0x10(%r8,%r9,8) // f6: 43 0f 11 04 c8 movups %xmm0, (%r8,%r9,8) // fb: 49 83 c1 04 addq $0x4, %r9 // ff: 4c 39 cf cmpq %r9, %rdi // 102: 75 ec jne 0xf0 <_JIT_ENTRY+0xf0> // 104: 48 39 fe cmpq %rdi, %rsi // 107: 74 18 je 0x121 <_JIT_ENTRY+0x121> // 109: 48 09 fa orq %rdi, %rdx // 10c: 0f 1f 40 00 nopl (%rax) // 110: 49 c7 44 d6 48 00 00 00 00 movq $0x0, 0x48(%r14,%rdx,8) // 119: 48 ff c2 incq %rdx // 11c: 48 39 d1 cmpq %rdx, %rcx // 11f: 75 ef jne 0x110 <_JIT_ENTRY+0x110> // 121: 31 c9 xorl %ecx, %ecx // 123: 4d 85 db testq %r11, %r11 // 126: 0f 95 c1 setne %cl // 129: 4d 89 5e 48 movq %r11, 0x48(%r14) // 12d: 48 8b 55 f8 movq -0x8(%rbp), %rdx // 131: 49 89 54 ce 48 movq %rdx, 0x48(%r14,%rcx,8) // 136: 4c 89 75 e8 movq %r14, -0x18(%rbp) // 13a: 4d 89 d5 movq %r10, %r13 // 13d: 48 89 c5 movq %rax, %rbp // 140: 48 83 c4 18 addq $0x18, %rsp // 144: ff 25 00 00 00 00 jmpq *(%rip) # 0x14a <_JIT_ENTRY+0x14a> // 0000000000000146: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 14a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x151 <_JIT_ENTRY+0x151> // 000000000000014d: R_X86_64_PC32 .L.str.3-0x4 // 151: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x158 <_JIT_ENTRY+0x158> // 0000000000000154: R_X86_64_PC32 .L.str.1-0x4 // 158: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x15f <_JIT_ENTRY+0x15f> // 000000000000015b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 15f: ba e1 0c 00 00 movl $0xce1, %edx # imm = 0xCE1 // 164: ff 15 00 00 00 00 callq *(%rip) # 0x16a <_JIT_ENTRY+0x16a> // 0000000000000166: R_X86_64_GOTPCRELX __assert_fail-0x4 // 16a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x171 <_JIT_ENTRY+0x171> // 000000000000016d: R_X86_64_PC32 .L.str.161-0x4 // 171: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x178 <_JIT_ENTRY+0x178> // 0000000000000174: R_X86_64_PC32 .L.str.109-0x4 // 178: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x17f <_JIT_ENTRY+0x17f> // 000000000000017b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_PushUnchecked-0x4 // 17f: ba 19 01 00 00 movl $0x119, %edx # imm = 0x119 // 184: ff 15 00 00 00 00 callq *(%rip) # 0x18a <_JIT_ENTRY+0x18a> // 0000000000000186: R_X86_64_GOTPCRELX __assert_fail-0x4 // 18a: const unsigned char code_body[394] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x0f, 0x85, 0x35, 0x01, 0x00, 0x00, 0x4d, 0x89, 0xea, 0x4c, 0x8b, 0x5d, 0xf0, 0x49, 0x83, 0xfb, 0x01, 0x41, 0xbd, 0x01, 0x00, 0x00, 0x00, 0x41, 0x83, 0xdd, 0xff, 0x4c, 0x8b, 0x7d, 0xe8, 0x49, 0x8b, 0x5f, 0x30, 0x4d, 0x8b, 0xb4, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x63, 0x43, 0x4c, 0x49, 0x8d, 0x04, 0xc6, 0x49, 0x89, 0x84, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x3b, 0x84, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x83, 0x12, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x7e, 0x10, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x22, 0x89, 0x03, 0x4c, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x4c, 0x89, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xeb, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x54, 0x24, 0x10, 0x48, 0x8d, 0x45, 0xf0, 0x49, 0x89, 0x1e, 0x41, 0x0f, 0x10, 0x47, 0x10, 0x41, 0x0f, 0x11, 0x46, 0x18, 0x49, 0xc7, 0x46, 0x28, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x4b, 0x48, 0x41, 0x89, 0x4e, 0x40, 0x49, 0xc7, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc3, 0xc8, 0x00, 0x00, 0x00, 0x49, 0x89, 0x5e, 0x38, 0x66, 0x41, 0xc7, 0x46, 0x44, 0x00, 0x00, 0x41, 0xc6, 0x46, 0x46, 0x00, 0x44, 0x39, 0xe9, 0x7e, 0x59, 0x44, 0x89, 0xea, 0x48, 0x89, 0xce, 0x48, 0x29, 0xd6, 0x48, 0x83, 0xfe, 0x04, 0x72, 0x39, 0x48, 0x89, 0xf7, 0x48, 0x83, 0xe7, 0xfc, 0x4d, 0x8d, 0x04, 0xd6, 0x49, 0x83, 0xc0, 0x58, 0x45, 0x31, 0xc9, 0x0f, 0x57, 0xc0, 0x0f, 0x1f, 0x40, 0x00, 0x43, 0x0f, 0x11, 0x44, 0xc8, 0xf0, 0x43, 0x0f, 0x11, 0x04, 0xc8, 0x49, 0x83, 0xc1, 0x04, 0x4c, 0x39, 0xcf, 0x75, 0xec, 0x48, 0x39, 0xfe, 0x74, 0x18, 0x48, 0x09, 0xfa, 0x0f, 0x1f, 0x40, 0x00, 0x49, 0xc7, 0x44, 0xd6, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x48, 0x39, 0xd1, 0x75, 0xef, 0x31, 0xc9, 0x4d, 0x85, 0xdb, 0x0f, 0x95, 0xc1, 0x4d, 0x89, 0x5e, 0x48, 0x48, 0x8b, 0x55, 0xf8, 0x49, 0x89, 0x54, 0xce, 0x48, 0x4c, 0x89, 0x75, 0xe8, 0x4d, 0x89, 0xd5, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xe1, 0x0c, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00tstate->datastack_top < tstate->datastack_limit\x00_PyInterpreterFrame *_PyFrame_PushUnchecked(PyThreadState *, PyFunctionObject *, int)\x00' // 173: 00 00 00 00 00 // 178: OPARG // 180: &_Py_INCREF_IncRefTotal+0x0 // 188: CONTINUE // 190: &__assert_fail+0x0 const unsigned char data_body[408] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3c, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x00, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x50, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x178, instruction->oparg); patch_64(data + 0x180, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x188, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x190, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x146, (uintptr_t)data + 0x184); patch_32r(code + 0x14d, (uintptr_t)data + 0x8a); patch_32r(code + 0x154, (uintptr_t)data + -0x4); patch_32r(code + 0x15b, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x166, (uintptr_t)data + 0x18c); patch_32r(code + 0x16d, (uintptr_t)data + 0xe9); patch_32r(code + 0x174, (uintptr_t)data + 0xa3); patch_32r(code + 0x17b, (uintptr_t)data + 0x119); patch_x86_64_32rx(code + 0x186, (uintptr_t)data + 0x18c); } void emit__INIT_CALL_PY_EXACT_ARGS_2( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INIT_CALL_PY_EXACT_ARGS_2.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // b: 66 83 f8 02 cmpw $0x2, %ax // f: 0f 85 3e 01 00 00 jne 0x153 <_JIT_ENTRY+0x153> // 15: 4d 89 ea movq %r13, %r10 // 18: 4c 8b 5d e8 movq -0x18(%rbp), %r11 // 1c: 49 83 fb 01 cmpq $0x1, %r11 // 20: 41 bd 02 00 00 00 movl $0x2, %r13d // 26: 41 83 dd ff sbbl $-0x1, %r13d // 2a: 4c 8b 7d e0 movq -0x20(%rbp), %r15 // 2e: 49 8b 5f 30 movq 0x30(%r15), %rbx // 32: 4d 8b b4 24 f0 00 00 00 movq 0xf0(%r12), %r14 // 3a: 48 63 43 4c movslq 0x4c(%rbx), %rax // 3e: 49 8d 04 c6 leaq (%r14,%rax,8), %rax // 42: 49 89 84 24 f0 00 00 00 movq %rax, 0xf0(%r12) // 4a: 49 3b 84 24 f8 00 00 00 cmpq 0xf8(%r12), %rax // 52: 0f 83 1b 01 00 00 jae 0x173 <_JIT_ENTRY+0x173> // 58: 4d 89 7e 10 movq %r15, 0x10(%r14) // 5c: 8b 03 movl (%rbx), %eax // 5e: ff c0 incl %eax // 60: 74 22 je 0x84 <_JIT_ENTRY+0x84> // 62: 89 03 movl %eax, (%rbx) // 64: 4c 89 54 24 10 movq %r10, 0x10(%rsp) // 69: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 6e: 4c 89 dd movq %r11, %rbp // 71: ff 15 00 00 00 00 callq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 77: 49 89 eb movq %rbp, %r11 // 7a: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // 7f: 4c 8b 54 24 10 movq 0x10(%rsp), %r10 // 84: 48 8d 45 e8 leaq -0x18(%rbp), %rax // 88: 49 89 1e movq %rbx, (%r14) // 8b: 41 0f 10 47 10 movups 0x10(%r15), %xmm0 // 90: 41 0f 11 46 18 movups %xmm0, 0x18(%r14) // 95: 49 c7 46 28 00 00 00 00 movq $0x0, 0x28(%r14) // 9d: 8b 4b 48 movl 0x48(%rbx), %ecx // a0: 41 89 4e 40 movl %ecx, 0x40(%r14) // a4: 49 c7 46 30 00 00 00 00 movq $0x0, 0x30(%r14) // ac: 48 81 c3 c8 00 00 00 addq $0xc8, %rbx // b3: 49 89 5e 38 movq %rbx, 0x38(%r14) // b7: 66 41 c7 46 44 00 00 movw $0x0, 0x44(%r14) // be: 41 c6 46 46 00 movb $0x0, 0x46(%r14) // c3: 44 39 e9 cmpl %r13d, %ecx // c6: 7e 59 jle 0x121 <_JIT_ENTRY+0x121> // c8: 44 89 ea movl %r13d, %edx // cb: 48 89 ce movq %rcx, %rsi // ce: 48 29 d6 subq %rdx, %rsi // d1: 48 83 fe 04 cmpq $0x4, %rsi // d5: 72 39 jb 0x110 <_JIT_ENTRY+0x110> // d7: 48 89 f7 movq %rsi, %rdi // da: 48 83 e7 fc andq $-0x4, %rdi // de: 4d 8d 04 d6 leaq (%r14,%rdx,8), %r8 // e2: 49 83 c0 58 addq $0x58, %r8 // e6: 45 31 c9 xorl %r9d, %r9d // e9: 0f 57 c0 xorps %xmm0, %xmm0 // ec: 0f 1f 40 00 nopl (%rax) // f0: 43 0f 11 44 c8 f0 movups %xmm0, -0x10(%r8,%r9,8) // f6: 43 0f 11 04 c8 movups %xmm0, (%r8,%r9,8) // fb: 49 83 c1 04 addq $0x4, %r9 // ff: 4c 39 cf cmpq %r9, %rdi // 102: 75 ec jne 0xf0 <_JIT_ENTRY+0xf0> // 104: 48 39 fe cmpq %rdi, %rsi // 107: 74 18 je 0x121 <_JIT_ENTRY+0x121> // 109: 48 09 fa orq %rdi, %rdx // 10c: 0f 1f 40 00 nopl (%rax) // 110: 49 c7 44 d6 48 00 00 00 00 movq $0x0, 0x48(%r14,%rdx,8) // 119: 48 ff c2 incq %rdx // 11c: 48 39 d1 cmpq %rdx, %rcx // 11f: 75 ef jne 0x110 <_JIT_ENTRY+0x110> // 121: 31 c9 xorl %ecx, %ecx // 123: 4d 85 db testq %r11, %r11 // 126: 0f 95 c1 setne %cl // 129: 4d 89 5e 48 movq %r11, 0x48(%r14) // 12d: 48 8b 55 f0 movq -0x10(%rbp), %rdx // 131: 49 89 54 ce 48 movq %rdx, 0x48(%r14,%rcx,8) // 136: 48 8b 55 f8 movq -0x8(%rbp), %rdx // 13a: 49 89 54 ce 50 movq %rdx, 0x50(%r14,%rcx,8) // 13f: 4c 89 75 e0 movq %r14, -0x20(%rbp) // 143: 4d 89 d5 movq %r10, %r13 // 146: 48 89 c5 movq %rax, %rbp // 149: 48 83 c4 18 addq $0x18, %rsp // 14d: ff 25 00 00 00 00 jmpq *(%rip) # 0x153 <_JIT_ENTRY+0x153> // 000000000000014f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 153: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x15a <_JIT_ENTRY+0x15a> // 0000000000000156: R_X86_64_PC32 .L.str.3-0x4 // 15a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x161 <_JIT_ENTRY+0x161> // 000000000000015d: R_X86_64_PC32 .L.str.1-0x4 // 161: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x168 <_JIT_ENTRY+0x168> // 0000000000000164: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 168: ba f9 0c 00 00 movl $0xcf9, %edx # imm = 0xCF9 // 16d: ff 15 00 00 00 00 callq *(%rip) # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 173: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_PC32 .L.str.161-0x4 // 17a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x181 <_JIT_ENTRY+0x181> // 000000000000017d: R_X86_64_PC32 .L.str.109-0x4 // 181: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x188 <_JIT_ENTRY+0x188> // 0000000000000184: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_PushUnchecked-0x4 // 188: ba 19 01 00 00 movl $0x119, %edx # imm = 0x119 // 18d: ff 15 00 00 00 00 callq *(%rip) # 0x193 <_JIT_ENTRY+0x193> // 000000000000018f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 193: const unsigned char code_body[403] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x02, 0x0f, 0x85, 0x3e, 0x01, 0x00, 0x00, 0x4d, 0x89, 0xea, 0x4c, 0x8b, 0x5d, 0xe8, 0x49, 0x83, 0xfb, 0x01, 0x41, 0xbd, 0x02, 0x00, 0x00, 0x00, 0x41, 0x83, 0xdd, 0xff, 0x4c, 0x8b, 0x7d, 0xe0, 0x49, 0x8b, 0x5f, 0x30, 0x4d, 0x8b, 0xb4, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x63, 0x43, 0x4c, 0x49, 0x8d, 0x04, 0xc6, 0x49, 0x89, 0x84, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x3b, 0x84, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x83, 0x1b, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x7e, 0x10, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x22, 0x89, 0x03, 0x4c, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x4c, 0x89, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xeb, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x54, 0x24, 0x10, 0x48, 0x8d, 0x45, 0xe8, 0x49, 0x89, 0x1e, 0x41, 0x0f, 0x10, 0x47, 0x10, 0x41, 0x0f, 0x11, 0x46, 0x18, 0x49, 0xc7, 0x46, 0x28, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x4b, 0x48, 0x41, 0x89, 0x4e, 0x40, 0x49, 0xc7, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc3, 0xc8, 0x00, 0x00, 0x00, 0x49, 0x89, 0x5e, 0x38, 0x66, 0x41, 0xc7, 0x46, 0x44, 0x00, 0x00, 0x41, 0xc6, 0x46, 0x46, 0x00, 0x44, 0x39, 0xe9, 0x7e, 0x59, 0x44, 0x89, 0xea, 0x48, 0x89, 0xce, 0x48, 0x29, 0xd6, 0x48, 0x83, 0xfe, 0x04, 0x72, 0x39, 0x48, 0x89, 0xf7, 0x48, 0x83, 0xe7, 0xfc, 0x4d, 0x8d, 0x04, 0xd6, 0x49, 0x83, 0xc0, 0x58, 0x45, 0x31, 0xc9, 0x0f, 0x57, 0xc0, 0x0f, 0x1f, 0x40, 0x00, 0x43, 0x0f, 0x11, 0x44, 0xc8, 0xf0, 0x43, 0x0f, 0x11, 0x04, 0xc8, 0x49, 0x83, 0xc1, 0x04, 0x4c, 0x39, 0xcf, 0x75, 0xec, 0x48, 0x39, 0xfe, 0x74, 0x18, 0x48, 0x09, 0xfa, 0x0f, 0x1f, 0x40, 0x00, 0x49, 0xc7, 0x44, 0xd6, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x48, 0x39, 0xd1, 0x75, 0xef, 0x31, 0xc9, 0x4d, 0x85, 0xdb, 0x0f, 0x95, 0xc1, 0x4d, 0x89, 0x5e, 0x48, 0x48, 0x8b, 0x55, 0xf0, 0x49, 0x89, 0x54, 0xce, 0x48, 0x48, 0x8b, 0x55, 0xf8, 0x49, 0x89, 0x54, 0xce, 0x50, 0x4c, 0x89, 0x75, 0xe0, 0x4d, 0x89, 0xd5, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf9, 0x0c, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00tstate->datastack_top < tstate->datastack_limit\x00_PyInterpreterFrame *_PyFrame_PushUnchecked(PyThreadState *, PyFunctionObject *, int)\x00' // 173: 00 00 00 00 00 // 178: OPARG // 180: &_Py_INCREF_IncRefTotal+0x0 // 188: CONTINUE // 190: &__assert_fail+0x0 const unsigned char data_body[408] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3c, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x00, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x50, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x178, instruction->oparg); patch_64(data + 0x180, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x188, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x190, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x14f, (uintptr_t)data + 0x184); patch_32r(code + 0x156, (uintptr_t)data + 0x8a); patch_32r(code + 0x15d, (uintptr_t)data + -0x4); patch_32r(code + 0x164, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x16f, (uintptr_t)data + 0x18c); patch_32r(code + 0x176, (uintptr_t)data + 0xe9); patch_32r(code + 0x17d, (uintptr_t)data + 0xa3); patch_32r(code + 0x184, (uintptr_t)data + 0x119); patch_x86_64_32rx(code + 0x18f, (uintptr_t)data + 0x18c); } void emit__INIT_CALL_PY_EXACT_ARGS_3( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INIT_CALL_PY_EXACT_ARGS_3.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // b: 66 83 f8 03 cmpw $0x3, %ax // f: 0f 85 47 01 00 00 jne 0x15c <_JIT_ENTRY+0x15c> // 15: 4d 89 ea movq %r13, %r10 // 18: 4c 8b 5d e0 movq -0x20(%rbp), %r11 // 1c: 49 83 fb 01 cmpq $0x1, %r11 // 20: 41 bd 03 00 00 00 movl $0x3, %r13d // 26: 41 83 dd ff sbbl $-0x1, %r13d // 2a: 4c 8b 7d d8 movq -0x28(%rbp), %r15 // 2e: 49 8b 5f 30 movq 0x30(%r15), %rbx // 32: 4d 8b b4 24 f0 00 00 00 movq 0xf0(%r12), %r14 // 3a: 48 63 43 4c movslq 0x4c(%rbx), %rax // 3e: 49 8d 04 c6 leaq (%r14,%rax,8), %rax // 42: 49 89 84 24 f0 00 00 00 movq %rax, 0xf0(%r12) // 4a: 49 3b 84 24 f8 00 00 00 cmpq 0xf8(%r12), %rax // 52: 0f 83 24 01 00 00 jae 0x17c <_JIT_ENTRY+0x17c> // 58: 4d 89 7e 10 movq %r15, 0x10(%r14) // 5c: 8b 03 movl (%rbx), %eax // 5e: ff c0 incl %eax // 60: 74 22 je 0x84 <_JIT_ENTRY+0x84> // 62: 89 03 movl %eax, (%rbx) // 64: 4c 89 54 24 10 movq %r10, 0x10(%rsp) // 69: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 6e: 4c 89 dd movq %r11, %rbp // 71: ff 15 00 00 00 00 callq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 77: 49 89 eb movq %rbp, %r11 // 7a: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // 7f: 4c 8b 54 24 10 movq 0x10(%rsp), %r10 // 84: 48 8d 45 e0 leaq -0x20(%rbp), %rax // 88: 49 89 1e movq %rbx, (%r14) // 8b: 41 0f 10 47 10 movups 0x10(%r15), %xmm0 // 90: 41 0f 11 46 18 movups %xmm0, 0x18(%r14) // 95: 49 c7 46 28 00 00 00 00 movq $0x0, 0x28(%r14) // 9d: 8b 4b 48 movl 0x48(%rbx), %ecx // a0: 41 89 4e 40 movl %ecx, 0x40(%r14) // a4: 49 c7 46 30 00 00 00 00 movq $0x0, 0x30(%r14) // ac: 48 81 c3 c8 00 00 00 addq $0xc8, %rbx // b3: 49 89 5e 38 movq %rbx, 0x38(%r14) // b7: 66 41 c7 46 44 00 00 movw $0x0, 0x44(%r14) // be: 41 c6 46 46 00 movb $0x0, 0x46(%r14) // c3: 44 39 e9 cmpl %r13d, %ecx // c6: 7e 59 jle 0x121 <_JIT_ENTRY+0x121> // c8: 44 89 ea movl %r13d, %edx // cb: 48 89 ce movq %rcx, %rsi // ce: 48 29 d6 subq %rdx, %rsi // d1: 48 83 fe 04 cmpq $0x4, %rsi // d5: 72 39 jb 0x110 <_JIT_ENTRY+0x110> // d7: 48 89 f7 movq %rsi, %rdi // da: 48 83 e7 fc andq $-0x4, %rdi // de: 4d 8d 04 d6 leaq (%r14,%rdx,8), %r8 // e2: 49 83 c0 58 addq $0x58, %r8 // e6: 45 31 c9 xorl %r9d, %r9d // e9: 0f 57 c0 xorps %xmm0, %xmm0 // ec: 0f 1f 40 00 nopl (%rax) // f0: 43 0f 11 44 c8 f0 movups %xmm0, -0x10(%r8,%r9,8) // f6: 43 0f 11 04 c8 movups %xmm0, (%r8,%r9,8) // fb: 49 83 c1 04 addq $0x4, %r9 // ff: 4c 39 cf cmpq %r9, %rdi // 102: 75 ec jne 0xf0 <_JIT_ENTRY+0xf0> // 104: 48 39 fe cmpq %rdi, %rsi // 107: 74 18 je 0x121 <_JIT_ENTRY+0x121> // 109: 48 01 fa addq %rdi, %rdx // 10c: 0f 1f 40 00 nopl (%rax) // 110: 49 c7 44 d6 48 00 00 00 00 movq $0x0, 0x48(%r14,%rdx,8) // 119: 48 ff c2 incq %rdx // 11c: 48 39 d1 cmpq %rdx, %rcx // 11f: 75 ef jne 0x110 <_JIT_ENTRY+0x110> // 121: 31 c9 xorl %ecx, %ecx // 123: 4d 85 db testq %r11, %r11 // 126: 0f 95 c1 setne %cl // 129: 4d 89 5e 48 movq %r11, 0x48(%r14) // 12d: 48 8b 55 e8 movq -0x18(%rbp), %rdx // 131: 49 89 54 ce 48 movq %rdx, 0x48(%r14,%rcx,8) // 136: 48 8b 55 f0 movq -0x10(%rbp), %rdx // 13a: 49 89 54 ce 50 movq %rdx, 0x50(%r14,%rcx,8) // 13f: 48 8b 55 f8 movq -0x8(%rbp), %rdx // 143: 49 89 54 ce 58 movq %rdx, 0x58(%r14,%rcx,8) // 148: 4c 89 75 d8 movq %r14, -0x28(%rbp) // 14c: 4d 89 d5 movq %r10, %r13 // 14f: 48 89 c5 movq %rax, %rbp // 152: 48 83 c4 18 addq $0x18, %rsp // 156: ff 25 00 00 00 00 jmpq *(%rip) # 0x15c <_JIT_ENTRY+0x15c> // 0000000000000158: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 15c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x163 <_JIT_ENTRY+0x163> // 000000000000015f: R_X86_64_PC32 .L.str.3-0x4 // 163: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x16a <_JIT_ENTRY+0x16a> // 0000000000000166: R_X86_64_PC32 .L.str.1-0x4 // 16a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x171 <_JIT_ENTRY+0x171> // 000000000000016d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 171: ba 11 0d 00 00 movl $0xd11, %edx # imm = 0xD11 // 176: ff 15 00 00 00 00 callq *(%rip) # 0x17c <_JIT_ENTRY+0x17c> // 0000000000000178: R_X86_64_GOTPCRELX __assert_fail-0x4 // 17c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x183 <_JIT_ENTRY+0x183> // 000000000000017f: R_X86_64_PC32 .L.str.161-0x4 // 183: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x18a <_JIT_ENTRY+0x18a> // 0000000000000186: R_X86_64_PC32 .L.str.109-0x4 // 18a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x191 <_JIT_ENTRY+0x191> // 000000000000018d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_PushUnchecked-0x4 // 191: ba 19 01 00 00 movl $0x119, %edx # imm = 0x119 // 196: ff 15 00 00 00 00 callq *(%rip) # 0x19c <_JIT_ENTRY+0x19c> // 0000000000000198: R_X86_64_GOTPCRELX __assert_fail-0x4 // 19c: const unsigned char code_body[412] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x03, 0x0f, 0x85, 0x47, 0x01, 0x00, 0x00, 0x4d, 0x89, 0xea, 0x4c, 0x8b, 0x5d, 0xe0, 0x49, 0x83, 0xfb, 0x01, 0x41, 0xbd, 0x03, 0x00, 0x00, 0x00, 0x41, 0x83, 0xdd, 0xff, 0x4c, 0x8b, 0x7d, 0xd8, 0x49, 0x8b, 0x5f, 0x30, 0x4d, 0x8b, 0xb4, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x48, 0x63, 0x43, 0x4c, 0x49, 0x8d, 0x04, 0xc6, 0x49, 0x89, 0x84, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x3b, 0x84, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x83, 0x24, 0x01, 0x00, 0x00, 0x4d, 0x89, 0x7e, 0x10, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x22, 0x89, 0x03, 0x4c, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x4c, 0x89, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xeb, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x54, 0x24, 0x10, 0x48, 0x8d, 0x45, 0xe0, 0x49, 0x89, 0x1e, 0x41, 0x0f, 0x10, 0x47, 0x10, 0x41, 0x0f, 0x11, 0x46, 0x18, 0x49, 0xc7, 0x46, 0x28, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x4b, 0x48, 0x41, 0x89, 0x4e, 0x40, 0x49, 0xc7, 0x46, 0x30, 0x00, 0x00, 0x00, 0x00, 0x48, 0x81, 0xc3, 0xc8, 0x00, 0x00, 0x00, 0x49, 0x89, 0x5e, 0x38, 0x66, 0x41, 0xc7, 0x46, 0x44, 0x00, 0x00, 0x41, 0xc6, 0x46, 0x46, 0x00, 0x44, 0x39, 0xe9, 0x7e, 0x59, 0x44, 0x89, 0xea, 0x48, 0x89, 0xce, 0x48, 0x29, 0xd6, 0x48, 0x83, 0xfe, 0x04, 0x72, 0x39, 0x48, 0x89, 0xf7, 0x48, 0x83, 0xe7, 0xfc, 0x4d, 0x8d, 0x04, 0xd6, 0x49, 0x83, 0xc0, 0x58, 0x45, 0x31, 0xc9, 0x0f, 0x57, 0xc0, 0x0f, 0x1f, 0x40, 0x00, 0x43, 0x0f, 0x11, 0x44, 0xc8, 0xf0, 0x43, 0x0f, 0x11, 0x04, 0xc8, 0x49, 0x83, 0xc1, 0x04, 0x4c, 0x39, 0xcf, 0x75, 0xec, 0x48, 0x39, 0xfe, 0x74, 0x18, 0x48, 0x01, 0xfa, 0x0f, 0x1f, 0x40, 0x00, 0x49, 0xc7, 0x44, 0xd6, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x48, 0x39, 0xd1, 0x75, 0xef, 0x31, 0xc9, 0x4d, 0x85, 0xdb, 0x0f, 0x95, 0xc1, 0x4d, 0x89, 0x5e, 0x48, 0x48, 0x8b, 0x55, 0xe8, 0x49, 0x89, 0x54, 0xce, 0x48, 0x48, 0x8b, 0x55, 0xf0, 0x49, 0x89, 0x54, 0xce, 0x50, 0x48, 0x8b, 0x55, 0xf8, 0x49, 0x89, 0x54, 0xce, 0x58, 0x4c, 0x89, 0x75, 0xd8, 0x4d, 0x89, 0xd5, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x11, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00tstate->datastack_top < tstate->datastack_limit\x00_PyInterpreterFrame *_PyFrame_PushUnchecked(PyThreadState *, PyFunctionObject *, int)\x00' // 173: 00 00 00 00 00 // 178: OPARG // 180: &_Py_INCREF_IncRefTotal+0x0 // 188: CONTINUE // 190: &__assert_fail+0x0 const unsigned char data_body[408] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3c, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x00, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x50, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x178, instruction->oparg); patch_64(data + 0x180, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x188, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x190, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x158, (uintptr_t)data + 0x184); patch_32r(code + 0x15f, (uintptr_t)data + 0x8a); patch_32r(code + 0x166, (uintptr_t)data + -0x4); patch_32r(code + 0x16d, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x178, (uintptr_t)data + 0x18c); patch_32r(code + 0x17f, (uintptr_t)data + 0xe9); patch_32r(code + 0x186, (uintptr_t)data + 0xa3); patch_32r(code + 0x18d, (uintptr_t)data + 0x119); patch_x86_64_32rx(code + 0x198, (uintptr_t)data + 0x18c); } void emit__INIT_CALL_PY_EXACT_ARGS_4( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INIT_CALL_PY_EXACT_ARGS_4.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // b: 66 83 f8 04 cmpw $0x4, %ax // f: 0f 85 50 01 00 00 jne 0x165 <_JIT_ENTRY+0x165> // 15: 4d 89 ea movq %r13, %r10 // 18: 4c 8b 5d d8 movq -0x28(%rbp), %r11 // 1c: 49 83 fb 01 cmpq $0x1, %r11 // 20: 41 bd 04 00 00 00 movl $0x4, %r13d // 26: 41 83 dd ff sbbl $-0x1, %r13d // 2a: 4c 8b 7d d0 movq -0x30(%rbp), %r15 // 2e: 4d 8b 77 30 movq 0x30(%r15), %r14 // 32: 49 8b 9c 24 f0 00 00 00 movq 0xf0(%r12), %rbx // 3a: 49 63 46 4c movslq 0x4c(%r14), %rax // 3e: 48 8d 04 c3 leaq (%rbx,%rax,8), %rax // 42: 49 89 84 24 f0 00 00 00 movq %rax, 0xf0(%r12) // 4a: 49 3b 84 24 f8 00 00 00 cmpq 0xf8(%r12), %rax // 52: 0f 83 2d 01 00 00 jae 0x185 <_JIT_ENTRY+0x185> // 58: 4c 89 7b 10 movq %r15, 0x10(%rbx) // 5c: 41 8b 06 movl (%r14), %eax // 5f: ff c0 incl %eax // 61: 74 23 je 0x86 <_JIT_ENTRY+0x86> // 63: 41 89 06 movl %eax, (%r14) // 66: 4c 89 54 24 10 movq %r10, 0x10(%rsp) // 6b: 48 89 6c 24 08 movq %rbp, 0x8(%rsp) // 70: 4c 89 dd movq %r11, %rbp // 73: ff 15 00 00 00 00 callq *(%rip) # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 79: 49 89 eb movq %rbp, %r11 // 7c: 48 8b 6c 24 08 movq 0x8(%rsp), %rbp // 81: 4c 8b 54 24 10 movq 0x10(%rsp), %r10 // 86: 48 8d 45 d8 leaq -0x28(%rbp), %rax // 8a: 4c 89 33 movq %r14, (%rbx) // 8d: 41 0f 10 47 10 movups 0x10(%r15), %xmm0 // 92: 0f 11 43 18 movups %xmm0, 0x18(%rbx) // 96: 48 c7 43 28 00 00 00 00 movq $0x0, 0x28(%rbx) // 9e: 41 8b 4e 48 movl 0x48(%r14), %ecx // a2: 89 4b 40 movl %ecx, 0x40(%rbx) // a5: 48 c7 43 30 00 00 00 00 movq $0x0, 0x30(%rbx) // ad: 49 81 c6 c8 00 00 00 addq $0xc8, %r14 // b4: 4c 89 73 38 movq %r14, 0x38(%rbx) // b8: 66 c7 43 44 00 00 movw $0x0, 0x44(%rbx) // be: c6 43 46 00 movb $0x0, 0x46(%rbx) // c2: 44 39 e9 cmpl %r13d, %ecx // c5: 7e 5a jle 0x121 <_JIT_ENTRY+0x121> // c7: 44 89 ea movl %r13d, %edx // ca: 48 89 ce movq %rcx, %rsi // cd: 48 29 d6 subq %rdx, %rsi // d0: 48 83 fe 04 cmpq $0x4, %rsi // d4: 72 3a jb 0x110 <_JIT_ENTRY+0x110> // d6: 48 89 f7 movq %rsi, %rdi // d9: 48 83 e7 fc andq $-0x4, %rdi // dd: 4c 8d 04 d3 leaq (%rbx,%rdx,8), %r8 // e1: 49 83 c0 58 addq $0x58, %r8 // e5: 45 31 c9 xorl %r9d, %r9d // e8: 0f 57 c0 xorps %xmm0, %xmm0 // eb: 0f 1f 44 00 00 nopl (%rax,%rax) // f0: 43 0f 11 44 c8 f0 movups %xmm0, -0x10(%r8,%r9,8) // f6: 43 0f 11 04 c8 movups %xmm0, (%r8,%r9,8) // fb: 49 83 c1 04 addq $0x4, %r9 // ff: 4c 39 cf cmpq %r9, %rdi // 102: 75 ec jne 0xf0 <_JIT_ENTRY+0xf0> // 104: 48 39 fe cmpq %rdi, %rsi // 107: 74 18 je 0x121 <_JIT_ENTRY+0x121> // 109: 48 01 fa addq %rdi, %rdx // 10c: 0f 1f 40 00 nopl (%rax) // 110: 48 c7 44 d3 48 00 00 00 00 movq $0x0, 0x48(%rbx,%rdx,8) // 119: 48 ff c2 incq %rdx // 11c: 48 39 d1 cmpq %rdx, %rcx // 11f: 75 ef jne 0x110 <_JIT_ENTRY+0x110> // 121: 31 c9 xorl %ecx, %ecx // 123: 4d 85 db testq %r11, %r11 // 126: 0f 95 c1 setne %cl // 129: 4c 89 5b 48 movq %r11, 0x48(%rbx) // 12d: 48 8b 55 e0 movq -0x20(%rbp), %rdx // 131: 48 89 54 cb 48 movq %rdx, 0x48(%rbx,%rcx,8) // 136: 48 8b 55 e8 movq -0x18(%rbp), %rdx // 13a: 48 89 54 cb 50 movq %rdx, 0x50(%rbx,%rcx,8) // 13f: 48 8b 55 f0 movq -0x10(%rbp), %rdx // 143: 48 89 54 cb 58 movq %rdx, 0x58(%rbx,%rcx,8) // 148: 48 8b 55 f8 movq -0x8(%rbp), %rdx // 14c: 48 89 54 cb 60 movq %rdx, 0x60(%rbx,%rcx,8) // 151: 48 89 5d d0 movq %rbx, -0x30(%rbp) // 155: 4d 89 d5 movq %r10, %r13 // 158: 48 89 c5 movq %rax, %rbp // 15b: 48 83 c4 18 addq $0x18, %rsp // 15f: ff 25 00 00 00 00 jmpq *(%rip) # 0x165 <_JIT_ENTRY+0x165> // 0000000000000161: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 165: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_PC32 .L.str.3-0x4 // 16c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_PC32 .L.str.1-0x4 // 173: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 17a: ba 29 0d 00 00 movl $0xd29, %edx # imm = 0xD29 // 17f: ff 15 00 00 00 00 callq *(%rip) # 0x185 <_JIT_ENTRY+0x185> // 0000000000000181: R_X86_64_GOTPCRELX __assert_fail-0x4 // 185: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x18c <_JIT_ENTRY+0x18c> // 0000000000000188: R_X86_64_PC32 .L.str.161-0x4 // 18c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x193 <_JIT_ENTRY+0x193> // 000000000000018f: R_X86_64_PC32 .L.str.109-0x4 // 193: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x19a <_JIT_ENTRY+0x19a> // 0000000000000196: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_PushUnchecked-0x4 // 19a: ba 19 01 00 00 movl $0x119, %edx # imm = 0x119 // 19f: ff 15 00 00 00 00 callq *(%rip) # 0x1a5 <_JIT_ENTRY+0x1a5> // 00000000000001a1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1a5: const unsigned char code_body[421] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x04, 0x0f, 0x85, 0x50, 0x01, 0x00, 0x00, 0x4d, 0x89, 0xea, 0x4c, 0x8b, 0x5d, 0xd8, 0x49, 0x83, 0xfb, 0x01, 0x41, 0xbd, 0x04, 0x00, 0x00, 0x00, 0x41, 0x83, 0xdd, 0xff, 0x4c, 0x8b, 0x7d, 0xd0, 0x4d, 0x8b, 0x77, 0x30, 0x49, 0x8b, 0x9c, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x63, 0x46, 0x4c, 0x48, 0x8d, 0x04, 0xc3, 0x49, 0x89, 0x84, 0x24, 0xf0, 0x00, 0x00, 0x00, 0x49, 0x3b, 0x84, 0x24, 0xf8, 0x00, 0x00, 0x00, 0x0f, 0x83, 0x2d, 0x01, 0x00, 0x00, 0x4c, 0x89, 0x7b, 0x10, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x74, 0x23, 0x41, 0x89, 0x06, 0x4c, 0x89, 0x54, 0x24, 0x10, 0x48, 0x89, 0x6c, 0x24, 0x08, 0x4c, 0x89, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xeb, 0x48, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x8b, 0x54, 0x24, 0x10, 0x48, 0x8d, 0x45, 0xd8, 0x4c, 0x89, 0x33, 0x41, 0x0f, 0x10, 0x47, 0x10, 0x0f, 0x11, 0x43, 0x18, 0x48, 0xc7, 0x43, 0x28, 0x00, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x4e, 0x48, 0x89, 0x4b, 0x40, 0x48, 0xc7, 0x43, 0x30, 0x00, 0x00, 0x00, 0x00, 0x49, 0x81, 0xc6, 0xc8, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x73, 0x38, 0x66, 0xc7, 0x43, 0x44, 0x00, 0x00, 0xc6, 0x43, 0x46, 0x00, 0x44, 0x39, 0xe9, 0x7e, 0x5a, 0x44, 0x89, 0xea, 0x48, 0x89, 0xce, 0x48, 0x29, 0xd6, 0x48, 0x83, 0xfe, 0x04, 0x72, 0x3a, 0x48, 0x89, 0xf7, 0x48, 0x83, 0xe7, 0xfc, 0x4c, 0x8d, 0x04, 0xd3, 0x49, 0x83, 0xc0, 0x58, 0x45, 0x31, 0xc9, 0x0f, 0x57, 0xc0, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x43, 0x0f, 0x11, 0x44, 0xc8, 0xf0, 0x43, 0x0f, 0x11, 0x04, 0xc8, 0x49, 0x83, 0xc1, 0x04, 0x4c, 0x39, 0xcf, 0x75, 0xec, 0x48, 0x39, 0xfe, 0x74, 0x18, 0x48, 0x01, 0xfa, 0x0f, 0x1f, 0x40, 0x00, 0x48, 0xc7, 0x44, 0xd3, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc2, 0x48, 0x39, 0xd1, 0x75, 0xef, 0x31, 0xc9, 0x4d, 0x85, 0xdb, 0x0f, 0x95, 0xc1, 0x4c, 0x89, 0x5b, 0x48, 0x48, 0x8b, 0x55, 0xe0, 0x48, 0x89, 0x54, 0xcb, 0x48, 0x48, 0x8b, 0x55, 0xe8, 0x48, 0x89, 0x54, 0xcb, 0x50, 0x48, 0x8b, 0x55, 0xf0, 0x48, 0x89, 0x54, 0xcb, 0x58, 0x48, 0x8b, 0x55, 0xf8, 0x48, 0x89, 0x54, 0xcb, 0x60, 0x48, 0x89, 0x5d, 0xd0, 0x4d, 0x89, 0xd5, 0x48, 0x89, 0xc5, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x29, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00tstate->datastack_top < tstate->datastack_limit\x00_PyInterpreterFrame *_PyFrame_PushUnchecked(PyThreadState *, PyFunctionObject *, int)\x00' // 173: 00 00 00 00 00 // 178: OPARG // 180: &_Py_INCREF_IncRefTotal+0x0 // 188: CONTINUE // 190: &__assert_fail+0x0 const unsigned char data_body[408] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x74, 0x6f, 0x70, 0x20, 0x3c, 0x20, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x64, 0x61, 0x74, 0x61, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x5f, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x00, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x50, 0x75, 0x73, 0x68, 0x55, 0x6e, 0x63, 0x68, 0x65, 0x63, 0x6b, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x69, 0x6e, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x178, instruction->oparg); patch_64(data + 0x180, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x188, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x190, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x75, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x161, (uintptr_t)data + 0x184); patch_32r(code + 0x168, (uintptr_t)data + 0x8a); patch_32r(code + 0x16f, (uintptr_t)data + -0x4); patch_32r(code + 0x176, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x181, (uintptr_t)data + 0x18c); patch_32r(code + 0x188, (uintptr_t)data + 0xe9); patch_32r(code + 0x18f, (uintptr_t)data + 0xa3); patch_32r(code + 0x196, (uintptr_t)data + 0x119); patch_x86_64_32rx(code + 0x1a1, (uintptr_t)data + 0x18c); } void emit__INTERNAL_INCREMENT_OPT_COUNTER( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_INTERNAL_INCREMENT_OPT_COUNTER.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 ff 40 18 incq 0x18(%rax) // 8: 48 83 c5 f8 addq $-0x8, %rbp // c: ff 25 00 00 00 00 jmpq *(%rip) # 0x12 <_JIT_ENTRY+0x12> // 000000000000000e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c: const unsigned char code_body[12] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0xff, 0x40, 0x18, 0x48, 0x83, 0xc5, 0xf8, }; // 0: memcpy(code, code_body, sizeof(code_body)); } void emit__IS_NONE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_IS_NONE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 3b 1d 00 00 00 00 cmpq (%rip), %rbx # 0xc <_JIT_ENTRY+0xc> // 0000000000000008: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // c: 74 1e je 0x2c <_JIT_ENTRY+0x2c> // e: 48 8b 03 movq (%rbx), %rax // 11: 48 85 c0 testq %rax, %rax // 14: 7e 28 jle 0x3e <_JIT_ENTRY+0x3e> // 16: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 1d: 85 c0 testl %eax, %eax // 1f: 79 40 jns 0x61 <_JIT_ENTRY+0x61> // 21: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 25: 58 popq %rax // 26: ff 25 00 00 00 00 jmpq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2c: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 33: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 37: 58 popq %rax // 38: ff 25 00 00 00 00 jmpq *(%rip) # 0x3e <_JIT_ENTRY+0x3e> // 000000000000003a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 3e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_PC32 .L.str.1-0x4 // 45: be dc 09 00 00 movl $0x9dc, %esi # imm = 0x9DC // 4a: 48 89 da movq %rbx, %rdx // 4d: ff 15 00 00 00 00 callq *(%rip) # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 53: 48 8b 03 movq (%rbx), %rax // 56: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 5d: 85 c0 testl %eax, %eax // 5f: 78 c0 js 0x21 <_JIT_ENTRY+0x21> // 61: ff 15 00 00 00 00 callq *(%rip) # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 67: 48 ff 0b decq (%rbx) // 6a: 75 b5 jne 0x21 <_JIT_ENTRY+0x21> // 6c: 48 89 df movq %rbx, %rdi // 6f: ff 15 00 00 00 00 callq *(%rip) # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 75: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 79: 58 popq %rax // 7a: ff 25 00 00 00 00 jmpq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 7a: const unsigned char code_body[122] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x3b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x74, 0x1e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x28, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x79, 0x40, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xdc, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xb5, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_Py_NoneStruct+0x0 // 48: &_Py_FalseStruct+0x0 // 50: CONTINUE // 58: &_Py_TrueStruct+0x0 // 60: &_Py_NegativeRefcount+0x0 // 68: &_Py_DECREF_DecRefTotal+0x0 // 70: &_Py_Dealloc+0x0 const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x48, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x50, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x58, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x60, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x68, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x70, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x8, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x19, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x3a, (uintptr_t)data + 0x4c); patch_32r(code + 0x41, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4f, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x63, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0x6c); } void emit__IS_OP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_IS_OP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 5: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 9: 48 8b 03 movq (%rbx), %rax // c: 48 85 c0 testq %rax, %rax // f: 7e 06 jle 0x17 <_JIT_ENTRY+0x17> // 11: 85 c0 testl %eax, %eax // 13: 79 1e jns 0x33 <_JIT_ENTRY+0x33> // 15: eb 27 jmp 0x3e <_JIT_ENTRY+0x3e> // 17: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1e <_JIT_ENTRY+0x1e> // 000000000000001a: R_X86_64_PC32 .L.str.1-0x4 // 1e: be 5a 09 00 00 movl $0x95a, %esi # imm = 0x95A // 23: 48 89 da movq %rbx, %rdx // 26: ff 15 00 00 00 00 callq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 2c: 48 8b 03 movq (%rbx), %rax // 2f: 85 c0 testl %eax, %eax // 31: 78 0b js 0x3e <_JIT_ENTRY+0x3e> // 33: ff 15 00 00 00 00 callq *(%rip) # 0x39 <_JIT_ENTRY+0x39> // 0000000000000035: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 39: 48 ff 0b decq (%rbx) // 3c: 74 0e je 0x4c <_JIT_ENTRY+0x4c> // 3e: 49 8b 06 movq (%r14), %rax // 41: 48 85 c0 testq %rax, %rax // 44: 7e 17 jle 0x5d <_JIT_ENTRY+0x5d> // 46: 85 c0 testl %eax, %eax // 48: 79 2f jns 0x79 <_JIT_ENTRY+0x79> // 4a: eb 41 jmp 0x8d <_JIT_ENTRY+0x8d> // 4c: 48 89 df movq %rbx, %rdi // 4f: ff 15 00 00 00 00 callq *(%rip) # 0x55 <_JIT_ENTRY+0x55> // 0000000000000051: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 55: 49 8b 06 movq (%r14), %rax // 58: 48 85 c0 testq %rax, %rax // 5b: 7f e9 jg 0x46 <_JIT_ENTRY+0x46> // 5d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_PC32 .L.str.1-0x4 // 64: be 5b 09 00 00 movl $0x95b, %esi # imm = 0x95B // 69: 4c 89 f2 movq %r14, %rdx // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 72: 49 8b 06 movq (%r14), %rax // 75: 85 c0 testl %eax, %eax // 77: 78 14 js 0x8d <_JIT_ENTRY+0x8d> // 79: ff 15 00 00 00 00 callq *(%rip) # 0x7f <_JIT_ENTRY+0x7f> // 000000000000007b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 7f: 49 ff 0e decq (%r14) // 82: 75 09 jne 0x8d <_JIT_ENTRY+0x8d> // 84: 4c 89 f7 movq %r14, %rdi // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 8d: 48 8d 45 f8 leaq -0x8(%rbp), %rax // 91: 31 c9 xorl %ecx, %ecx // 93: 4c 39 f3 cmpq %r14, %rbx // 96: 0f 94 c1 sete %cl // 99: 48 8b 15 00 00 00 00 movq (%rip), %rdx # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // a0: 66 39 d1 cmpw %dx, %cx // a3: 75 15 jne 0xba <_JIT_ENTRY+0xba> // a5: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // ac: 48 89 4d f0 movq %rcx, -0x10(%rbp) // b0: 48 89 c5 movq %rax, %rbp // b3: 58 popq %rax // b4: ff 25 00 00 00 00 jmpq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ba: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // c1: 48 89 4d f0 movq %rcx, -0x10(%rbp) // c5: 48 89 c5 movq %rax, %rbp // c8: 58 popq %rax // c9: ff 25 00 00 00 00 jmpq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c9: const unsigned char code_body[201] = { 0x50, 0x48, 0x8b, 0x5d, 0xf0, 0x4c, 0x8b, 0x75, 0xf8, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x5a, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x41, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x5b, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x45, 0xf8, 0x31, 0xc9, 0x4c, 0x39, 0xf3, 0x0f, 0x94, 0xc1, 0x48, 0x8b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x66, 0x39, 0xd1, 0x75, 0x15, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0xf0, 0x48, 0x89, 0xc5, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_Py_NegativeRefcount+0x0 // 48: &_Py_DECREF_DecRefTotal+0x0 // 50: &_Py_Dealloc+0x0 // 58: OPARG // 60: &_Py_FalseStruct+0x0 // 68: CONTINUE // 70: &_Py_TrueStruct+0x0 const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x48, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x50, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x58, instruction->oparg); patch_64(data + 0x60, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x68, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x70, (uintptr_t)&_Py_TrueStruct); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x1a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x35, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x51, (uintptr_t)data + 0x4c); patch_32r(code + 0x60, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x7b, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x9c, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0xbd, (uintptr_t)data + 0x6c); } void emit__ITER_CHECK_LIST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_ITER_CHECK_LIST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyListIter_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyListIter_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyListIter_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__ITER_CHECK_RANGE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_ITER_CHECK_RANGE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyRangeIter_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyRangeIter_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyRangeIter_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__ITER_CHECK_TUPLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_ITER_CHECK_TUPLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyTupleIter_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyTupleIter_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyTupleIter_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__ITER_NEXT_LIST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_ITER_NEXT_LIST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyListIter_Type-0x4 // 10: 75 73 jne 0x85 <_JIT_ENTRY+0x85> // 12: 48 8b 48 18 movq 0x18(%rax), %rcx // 16: 48 85 c9 testq %rcx, %rcx // 19: 0f 84 86 00 00 00 je 0xa5 <_JIT_ENTRY+0xa5> // 1f: 48 8b 51 08 movq 0x8(%rcx), %rdx // 23: f6 82 ab 00 00 00 02 testb $0x2, 0xab(%rdx) // 2a: 0f 84 95 00 00 00 je 0xc5 <_JIT_ENTRY+0xc5> // 30: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 37: 0f 84 a8 00 00 00 je 0xe5 <_JIT_ENTRY+0xe5> // 3d: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 44: 0f 84 bb 00 00 00 je 0x105 <_JIT_ENTRY+0x105> // 4a: 48 8b 50 10 movq 0x10(%rax), %rdx // 4e: 48 3b 51 10 cmpq 0x10(%rcx), %rdx // 52: 0f 8d cd 00 00 00 jge 0x125 <_JIT_ENTRY+0x125> // 58: 48 8b 49 18 movq 0x18(%rcx), %rcx // 5c: 48 8d 72 01 leaq 0x1(%rdx), %rsi // 60: 48 89 70 10 movq %rsi, 0x10(%rax) // 64: 48 8b 1c d1 movq (%rcx,%rdx,8), %rbx // 68: 8b 03 movl (%rbx), %eax // 6a: ff c0 incl %eax // 6c: 74 08 je 0x76 <_JIT_ENTRY+0x76> // 6e: 89 03 movl %eax, (%rbx) // 70: ff 15 00 00 00 00 callq *(%rip) # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 76: 48 89 5d 00 movq %rbx, (%rbp) // 7a: 48 83 c5 08 addq $0x8, %rbp // 7e: 58 popq %rax // 7f: ff 25 00 00 00 00 jmpq *(%rip) # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 85: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_PC32 .L.str.67-0x4 // 8c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_PC32 .L.str.1-0x4 // 93: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 9a: ba 9d 0a 00 00 movl $0xa9d, %edx # imm = 0xA9D // 9f: ff 15 00 00 00 00 callq *(%rip) # 0xa5 <_JIT_ENTRY+0xa5> // 00000000000000a1: R_X86_64_GOTPCRELX __assert_fail-0x4 // a5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_PC32 .L.str.68-0x4 // ac: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_PC32 .L.str.1-0x4 // b3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // ba: ba 9f 0a 00 00 movl $0xa9f, %edx # imm = 0xA9F // bf: ff 15 00 00 00 00 callq *(%rip) # 0xc5 <_JIT_ENTRY+0xc5> // 00000000000000c1: R_X86_64_GOTPCRELX __assert_fail-0x4 // c5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_PC32 .L.str.122-0x4 // cc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd3 <_JIT_ENTRY+0xd3> // 00000000000000cf: R_X86_64_PC32 .L.str.123-0x4 // d3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xda <_JIT_ENTRY+0xda> // 00000000000000d6: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyList_GET_SIZE-0x4 // da: ba 1f 00 00 00 movl $0x1f, %edx // df: ff 15 00 00 00 00 callq *(%rip) # 0xe5 <_JIT_ENTRY+0xe5> // 00000000000000e1: R_X86_64_GOTPCRELX __assert_fail-0x4 // e5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xec <_JIT_ENTRY+0xec> // 00000000000000e8: R_X86_64_PC32 .L.str.115-0x4 // ec: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf3 <_JIT_ENTRY+0xf3> // 00000000000000ef: R_X86_64_PC32 .L.str.114-0x4 // f3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xfa <_JIT_ENTRY+0xfa> // 00000000000000f6: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // fa: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // ff: ff 15 00 00 00 00 callq *(%rip) # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_GOTPCRELX __assert_fail-0x4 // 105: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x10c <_JIT_ENTRY+0x10c> // 0000000000000108: R_X86_64_PC32 .L.str.116-0x4 // 10c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x113 <_JIT_ENTRY+0x113> // 000000000000010f: R_X86_64_PC32 .L.str.114-0x4 // 113: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x11a <_JIT_ENTRY+0x11a> // 0000000000000116: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 11a: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 11f: ff 15 00 00 00 00 callq *(%rip) # 0x125 <_JIT_ENTRY+0x125> // 0000000000000121: R_X86_64_GOTPCRELX __assert_fail-0x4 // 125: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12c <_JIT_ENTRY+0x12c> // 0000000000000128: R_X86_64_PC32 .L.str.69-0x4 // 12c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x133 <_JIT_ENTRY+0x133> // 000000000000012f: R_X86_64_PC32 .L.str.1-0x4 // 133: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x13a <_JIT_ENTRY+0x13a> // 0000000000000136: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 13a: ba a0 0a 00 00 movl $0xaa0, %edx # imm = 0xAA0 // 13f: ff 15 00 00 00 00 callq *(%rip) # 0x145 <_JIT_ENTRY+0x145> // 0000000000000141: R_X86_64_GOTPCRELX __assert_fail-0x4 // 145: const unsigned char code_body[325] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x73, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0x86, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x51, 0x08, 0xf6, 0x82, 0xab, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x84, 0x95, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xbb, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x50, 0x10, 0x48, 0x3b, 0x51, 0x10, 0x0f, 0x8d, 0xcd, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x49, 0x18, 0x48, 0x8d, 0x72, 0x01, 0x48, 0x89, 0x70, 0x10, 0x48, 0x8b, 0x1c, 0xd1, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9d, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9f, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1f, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xa0, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(iter) == &PyListIter_Type\x00seq\x00it->it_index < PyList_GET_SIZE(seq)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00PyList_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/listobject.h\x00Py_ssize_t PyList_GET_SIZE(PyObject *)\x00' // 1e1: 00 00 00 00 00 00 00 // 1e8: &PyListIter_Type+0x0 // 1f0: &PyLong_Type+0x0 // 1f8: &PyBool_Type+0x0 // 200: &_Py_INCREF_IncRefTotal+0x0 // 208: CONTINUE // 210: &__assert_fail+0x0 const unsigned char data_body[536] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x69, 0x74, 0x65, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x49, 0x74, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x73, 0x65, 0x71, 0x00, 0x69, 0x74, 0x2d, 0x3e, 0x69, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x73, 0x65, 0x71, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1e8, (uintptr_t)&PyListIter_Type); patch_64(data + 0x1f0, (uintptr_t)&PyLong_Type); patch_64(data + 0x1f8, (uintptr_t)&PyBool_Type); patch_64(data + 0x200, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x208, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x210, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1e4); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0x1ec); patch_x86_64_32rx(code + 0x40, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x72, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x81, (uintptr_t)data + 0x204); patch_32r(code + 0x88, (uintptr_t)data + 0x8a); patch_32r(code + 0x8f, (uintptr_t)data + -0x4); patch_32r(code + 0x96, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xa1, (uintptr_t)data + 0x20c); patch_32r(code + 0xa8, (uintptr_t)data + 0xac); patch_32r(code + 0xaf, (uintptr_t)data + -0x4); patch_32r(code + 0xb6, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xc1, (uintptr_t)data + 0x20c); patch_32r(code + 0xc8, (uintptr_t)data + 0x162); patch_32r(code + 0xcf, (uintptr_t)data + 0x173); patch_32r(code + 0xd6, (uintptr_t)data + 0x1b6); patch_x86_64_32rx(code + 0xe1, (uintptr_t)data + 0x20c); patch_32r(code + 0xe8, (uintptr_t)data + 0x10b); patch_32r(code + 0xef, (uintptr_t)data + 0xd4); patch_32r(code + 0xf6, (uintptr_t)data + 0x127); patch_x86_64_32rx(code + 0x101, (uintptr_t)data + 0x20c); patch_32r(code + 0x108, (uintptr_t)data + 0x146); patch_32r(code + 0x10f, (uintptr_t)data + 0xd4); patch_32r(code + 0x116, (uintptr_t)data + 0x127); patch_x86_64_32rx(code + 0x121, (uintptr_t)data + 0x20c); patch_32r(code + 0x128, (uintptr_t)data + 0xb0); patch_32r(code + 0x12f, (uintptr_t)data + -0x4); patch_32r(code + 0x136, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x141, (uintptr_t)data + 0x20c); } void emit__ITER_NEXT_RANGE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_ITER_NEXT_RANGE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyRangeIter_Type-0x4 // 10: 75 40 jne 0x52 <_JIT_ENTRY+0x52> // 12: 48 8b 48 20 movq 0x20(%rax), %rcx // 16: 48 85 c9 testq %rcx, %rcx // 19: 7e 57 jle 0x72 <_JIT_ENTRY+0x72> // 1b: 48 8b 78 10 movq 0x10(%rax), %rdi // 1f: 48 8b 50 18 movq 0x18(%rax), %rdx // 23: 48 01 fa addq %rdi, %rdx // 26: 48 89 50 10 movq %rdx, 0x10(%rax) // 2a: 48 ff c9 decq %rcx // 2d: 48 89 48 20 movq %rcx, 0x20(%rax) // 31: ff 15 00 00 00 00 callq *(%rip) # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_GOTPCRELX PyLong_FromLong-0x4 // 37: 48 85 c0 testq %rax, %rax // 3a: 74 0f je 0x4b <_JIT_ENTRY+0x4b> // 3c: 48 89 45 00 movq %rax, (%rbp) // 40: 48 83 c5 08 addq $0x8, %rbp // 44: 58 popq %rax // 45: ff 25 00 00 00 00 jmpq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 4b: 58 popq %rax // 4c: ff 25 00 00 00 00 jmpq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 52: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x59 <_JIT_ENTRY+0x59> // 0000000000000055: R_X86_64_PC32 .L.str.72-0x4 // 59: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_PC32 .L.str.1-0x4 // 60: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 67: ba f1 0a 00 00 movl $0xaf1, %edx # imm = 0xAF1 // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 72: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_PC32 .L.str.73-0x4 // 79: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_PC32 .L.str.1-0x4 // 80: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 87: ba f2 0a 00 00 movl $0xaf2, %edx # imm = 0xAF2 // 8c: ff 15 00 00 00 00 callq *(%rip) # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 92: const unsigned char code_body[146] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x40, 0x48, 0x8b, 0x48, 0x20, 0x48, 0x85, 0xc9, 0x7e, 0x57, 0x48, 0x8b, 0x78, 0x10, 0x48, 0x8b, 0x50, 0x18, 0x48, 0x01, 0xfa, 0x48, 0x89, 0x50, 0x10, 0x48, 0xff, 0xc9, 0x48, 0x89, 0x48, 0x20, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf1, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf2, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(r) == &PyRangeIter_Type\x00r->len > 0\x00' // b9: 00 00 00 00 00 00 00 // c0: &PyRangeIter_Type+0x0 // c8: &PyLong_FromLong+0x0 // d0: CONTINUE // d8: ERROR_TARGET // e0: &__assert_fail+0x0 const unsigned char data_body[232] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x52, 0x61, 0x6e, 0x67, 0x65, 0x49, 0x74, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x72, 0x2d, 0x3e, 0x6c, 0x65, 0x6e, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc0, (uintptr_t)&PyRangeIter_Type); patch_64(data + 0xc8, (uintptr_t)&PyLong_FromLong); patch_64(data + 0xd0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd8, instruction_starts[instruction->error_target]); patch_64(data + 0xe0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0xd4); patch_32r(code + 0x55, (uintptr_t)data + 0x8a); patch_32r(code + 0x5c, (uintptr_t)data + -0x4); patch_32r(code + 0x63, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0xdc); patch_32r(code + 0x75, (uintptr_t)data + 0xaa); patch_32r(code + 0x7c, (uintptr_t)data + -0x4); patch_32r(code + 0x83, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x8e, (uintptr_t)data + 0xdc); } void emit__ITER_NEXT_TUPLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_ITER_NEXT_TUPLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyTupleIter_Type-0x4 // 10: 75 70 jne 0x82 <_JIT_ENTRY+0x82> // 12: 48 8b 48 18 movq 0x18(%rax), %rcx // 16: 48 85 c9 testq %rcx, %rcx // 19: 0f 84 83 00 00 00 je 0xa2 <_JIT_ENTRY+0xa2> // 1f: 48 8b 51 08 movq 0x8(%rcx), %rdx // 23: f6 82 ab 00 00 00 04 testb $0x4, 0xab(%rdx) // 2a: 0f 84 92 00 00 00 je 0xc2 <_JIT_ENTRY+0xc2> // 30: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 37: 0f 84 a5 00 00 00 je 0xe2 <_JIT_ENTRY+0xe2> // 3d: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 44: 0f 84 b8 00 00 00 je 0x102 <_JIT_ENTRY+0x102> // 4a: 48 8b 50 10 movq 0x10(%rax), %rdx // 4e: 48 3b 51 10 cmpq 0x10(%rcx), %rdx // 52: 0f 8d ca 00 00 00 jge 0x122 <_JIT_ENTRY+0x122> // 58: 48 8d 72 01 leaq 0x1(%rdx), %rsi // 5c: 48 89 70 10 movq %rsi, 0x10(%rax) // 60: 48 8b 5c d1 18 movq 0x18(%rcx,%rdx,8), %rbx // 65: 8b 03 movl (%rbx), %eax // 67: ff c0 incl %eax // 69: 74 08 je 0x73 <_JIT_ENTRY+0x73> // 6b: 89 03 movl %eax, (%rbx) // 6d: ff 15 00 00 00 00 callq *(%rip) # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 73: 48 89 5d 00 movq %rbx, (%rbp) // 77: 48 83 c5 08 addq $0x8, %rbp // 7b: 58 popq %rax // 7c: ff 25 00 00 00 00 jmpq *(%rip) # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 82: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_PC32 .L.str.70-0x4 // 89: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_PC32 .L.str.1-0x4 // 90: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 97: ba c9 0a 00 00 movl $0xac9, %edx # imm = 0xAC9 // 9c: ff 15 00 00 00 00 callq *(%rip) # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_GOTPCRELX __assert_fail-0x4 // a2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa9 <_JIT_ENTRY+0xa9> // 00000000000000a5: R_X86_64_PC32 .L.str.68-0x4 // a9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_PC32 .L.str.1-0x4 // b0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // b7: ba cb 0a 00 00 movl $0xacb, %edx # imm = 0xACB // bc: ff 15 00 00 00 00 callq *(%rip) # 0xc2 <_JIT_ENTRY+0xc2> // 00000000000000be: R_X86_64_GOTPCRELX __assert_fail-0x4 // c2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_PC32 .L.str.132-0x4 // c9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L.str.133-0x4 // d0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyTuple_GET_SIZE-0x4 // d7: ba 16 00 00 00 movl $0x16, %edx // dc: ff 15 00 00 00 00 callq *(%rip) # 0xe2 <_JIT_ENTRY+0xe2> // 00000000000000de: R_X86_64_GOTPCRELX __assert_fail-0x4 // e2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_PC32 .L.str.115-0x4 // e9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.114-0x4 // f0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // f7: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // fc: ff 15 00 00 00 00 callq *(%rip) # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_GOTPCRELX __assert_fail-0x4 // 102: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_PC32 .L.str.116-0x4 // 109: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_PC32 .L.str.114-0x4 // 110: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 117: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 122: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_PC32 .L.str.71-0x4 // 129: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x130 <_JIT_ENTRY+0x130> // 000000000000012c: R_X86_64_PC32 .L.str.1-0x4 // 130: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 137: ba cc 0a 00 00 movl $0xacc, %edx # imm = 0xACC // 13c: ff 15 00 00 00 00 callq *(%rip) # 0x142 <_JIT_ENTRY+0x142> // 000000000000013e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 142: const unsigned char code_body[322] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x70, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x85, 0xc9, 0x0f, 0x84, 0x83, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x51, 0x08, 0xf6, 0x82, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x92, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xa5, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xb8, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x50, 0x10, 0x48, 0x3b, 0x51, 0x10, 0x0f, 0x8d, 0xca, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x72, 0x01, 0x48, 0x89, 0x70, 0x10, 0x48, 0x8b, 0x5c, 0xd1, 0x18, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc9, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcb, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x16, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcc, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00seq\x00Py_TYPE(iter) == &PyTupleIter_Type\x00it->it_index < PyTuple_GET_SIZE(seq)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00PyTuple_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/tupleobject.h\x00Py_ssize_t PyTuple_GET_SIZE(PyObject *)\x00' // 1e6: 00 00 // 1e8: &PyTupleIter_Type+0x0 // 1f0: &PyLong_Type+0x0 // 1f8: &PyBool_Type+0x0 // 200: &_Py_INCREF_IncRefTotal+0x0 // 208: CONTINUE // 210: &__assert_fail+0x0 const unsigned char data_body[536] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x73, 0x65, 0x71, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x69, 0x74, 0x65, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x49, 0x74, 0x65, 0x72, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x69, 0x74, 0x2d, 0x3e, 0x69, 0x74, 0x5f, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x73, 0x65, 0x71, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1e8, (uintptr_t)&PyTupleIter_Type); patch_64(data + 0x1f0, (uintptr_t)&PyLong_Type); patch_64(data + 0x1f8, (uintptr_t)&PyBool_Type); patch_64(data + 0x200, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x208, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x210, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1e4); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0x1ec); patch_x86_64_32rx(code + 0x40, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x6f, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x7e, (uintptr_t)data + 0x204); patch_32r(code + 0x85, (uintptr_t)data + 0x8e); patch_32r(code + 0x8c, (uintptr_t)data + -0x4); patch_32r(code + 0x93, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0x20c); patch_32r(code + 0xa5, (uintptr_t)data + 0x8a); patch_32r(code + 0xac, (uintptr_t)data + -0x4); patch_32r(code + 0xb3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xbe, (uintptr_t)data + 0x20c); patch_32r(code + 0xc5, (uintptr_t)data + 0x164); patch_32r(code + 0xcc, (uintptr_t)data + 0x176); patch_32r(code + 0xd3, (uintptr_t)data + 0x1ba); patch_x86_64_32rx(code + 0xde, (uintptr_t)data + 0x20c); patch_32r(code + 0xe5, (uintptr_t)data + 0x10d); patch_32r(code + 0xec, (uintptr_t)data + 0xd6); patch_32r(code + 0xf3, (uintptr_t)data + 0x129); patch_x86_64_32rx(code + 0xfe, (uintptr_t)data + 0x20c); patch_32r(code + 0x105, (uintptr_t)data + 0x148); patch_32r(code + 0x10c, (uintptr_t)data + 0xd6); patch_32r(code + 0x113, (uintptr_t)data + 0x129); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0x20c); patch_32r(code + 0x125, (uintptr_t)data + 0xb1); patch_32r(code + 0x12c, (uintptr_t)data + -0x4); patch_32r(code + 0x133, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x13e, (uintptr_t)data + 0x20c); } void emit__JUMP_TO_TOP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_JUMP_TO_TOP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: ff 25 00 00 00 00 jmpq *(%rip) # 0x6 <_JIT_ENTRY+0x6> // 0000000000000002: R_X86_64_GOTPCRELX _JIT_TOP-0x4 // 6: const unsigned char code_body[6] = { 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: TOP const unsigned char data_body[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction_starts[1]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x2, (uintptr_t)data + -0x4); } void emit__LIST_APPEND( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LIST_APPEND.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 75 f8 movq -0x8(%rbp), %rsi // 5: 48 85 f6 testq %rsi, %rsi // 8: 0f 84 c5 00 00 00 je 0xd3 <_JIT_ENTRY+0xd3> // e: 8b 05 00 00 00 00 movl (%rip), %eax # 0x14 <_JIT_ENTRY+0x14> // 0000000000000010: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 14: f7 d0 notl %eax // 16: c1 e0 03 shll $0x3, %eax // 19: 48 0d 00 00 f8 ff orq $-0x80000, %rax # imm = 0xFFF80000 // 1f: 48 8b 7c 05 00 movq (%rbp,%rax), %rdi // 24: 48 85 ff testq %rdi, %rdi // 27: 0f 84 a6 00 00 00 je 0xd3 <_JIT_ENTRY+0xd3> // 2d: 48 8b 47 08 movq 0x8(%rdi), %rax // 31: f6 80 ab 00 00 00 02 testb $0x2, 0xab(%rax) // 38: 0f 84 b5 00 00 00 je 0xf3 <_JIT_ENTRY+0xf3> // 3e: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 45: 0f 84 c8 00 00 00 je 0x113 <_JIT_ENTRY+0x113> // 4b: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 52: 0f 84 db 00 00 00 je 0x133 <_JIT_ENTRY+0x133> // 58: 48 8b 4f 10 movq 0x10(%rdi), %rcx // 5c: 48 8d 41 01 leaq 0x1(%rcx), %rax // 60: 48 ba ff ff ff ff ff ff ff 7f movabsq $0x7fffffffffffffff, %rdx # imm = 0x7FFFFFFFFFFFFFFF // 6a: 48 39 d0 cmpq %rdx, %rax // 6d: 0f 83 e0 00 00 00 jae 0x153 <_JIT_ENTRY+0x153> // 73: 48 39 4f 20 cmpq %rcx, 0x20(%rdi) // 77: 7e 3e jle 0xb7 <_JIT_ENTRY+0xb7> // 79: 48 85 c9 testq %rcx, %rcx // 7c: 0f 88 f1 00 00 00 js 0x173 <_JIT_ENTRY+0x173> // 82: 48 8b 57 18 movq 0x18(%rdi), %rdx // 86: 48 89 34 ca movq %rsi, (%rdx,%rcx,8) // 8a: 48 8b 4f 08 movq 0x8(%rdi), %rcx // 8e: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 95: 0f 84 f8 00 00 00 je 0x193 <_JIT_ENTRY+0x193> // 9b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // a2: 0f 84 0b 01 00 00 je 0x1b3 <_JIT_ENTRY+0x1b3> // a8: 48 89 47 10 movq %rax, 0x10(%rdi) // ac: 48 83 c5 f8 addq $-0x8, %rbp // b0: 58 popq %rax // b1: ff 25 00 00 00 00 jmpq *(%rip) # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // b7: ff 15 00 00 00 00 callq *(%rip) # 0xbd <_JIT_ENTRY+0xbd> // 00000000000000b9: R_X86_64_GOTPCRELX _PyList_AppendTakeRefListResize-0x4 // bd: 85 c0 testl %eax, %eax // bf: 78 0b js 0xcc <_JIT_ENTRY+0xcc> // c1: 48 83 c5 f8 addq $-0x8, %rbp // c5: 58 popq %rax // c6: ff 25 00 00 00 00 jmpq *(%rip) # 0xcc <_JIT_ENTRY+0xcc> // 00000000000000c8: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // cc: 58 popq %rax // cd: ff 25 00 00 00 00 jmpq *(%rip) # 0xd3 <_JIT_ENTRY+0xd3> // 00000000000000cf: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // d3: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xda <_JIT_ENTRY+0xda> // 00000000000000d6: R_X86_64_PC32 .L.str.134-0x4 // da: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_PC32 .L.str.135-0x4 // e1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xe8 <_JIT_ENTRY+0xe8> // 00000000000000e4: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyList_AppendTakeRef-0x4 // e8: ba 19 00 00 00 movl $0x19, %edx // ed: ff 15 00 00 00 00 callq *(%rip) # 0xf3 <_JIT_ENTRY+0xf3> // 00000000000000ef: R_X86_64_GOTPCRELX __assert_fail-0x4 // f3: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xfa <_JIT_ENTRY+0xfa> // 00000000000000f6: R_X86_64_PC32 .L.str.136-0x4 // fa: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x101 <_JIT_ENTRY+0x101> // 00000000000000fd: R_X86_64_PC32 .L.str.135-0x4 // 101: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x108 <_JIT_ENTRY+0x108> // 0000000000000104: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyList_AppendTakeRef-0x4 // 108: ba 1a 00 00 00 movl $0x1a, %edx // 10d: ff 15 00 00 00 00 callq *(%rip) # 0x113 <_JIT_ENTRY+0x113> // 000000000000010f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 113: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x11a <_JIT_ENTRY+0x11a> // 0000000000000116: R_X86_64_PC32 .L.str.115-0x4 // 11a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x121 <_JIT_ENTRY+0x121> // 000000000000011d: R_X86_64_PC32 .L.str.114-0x4 // 121: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x128 <_JIT_ENTRY+0x128> // 0000000000000124: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 128: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 12d: ff 15 00 00 00 00 callq *(%rip) # 0x133 <_JIT_ENTRY+0x133> // 000000000000012f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 133: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x13a <_JIT_ENTRY+0x13a> // 0000000000000136: R_X86_64_PC32 .L.str.116-0x4 // 13a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x141 <_JIT_ENTRY+0x141> // 000000000000013d: R_X86_64_PC32 .L.str.114-0x4 // 141: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x148 <_JIT_ENTRY+0x148> // 0000000000000144: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 148: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 14d: ff 15 00 00 00 00 callq *(%rip) # 0x153 <_JIT_ENTRY+0x153> // 000000000000014f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 153: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x15a <_JIT_ENTRY+0x15a> // 0000000000000156: R_X86_64_PC32 .L.str.137-0x4 // 15a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x161 <_JIT_ENTRY+0x161> // 000000000000015d: R_X86_64_PC32 .L.str.135-0x4 // 161: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x168 <_JIT_ENTRY+0x168> // 0000000000000164: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyList_AppendTakeRef-0x4 // 168: ba 1d 00 00 00 movl $0x1d, %edx // 16d: ff 15 00 00 00 00 callq *(%rip) # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 173: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_PC32 .L.str.140-0x4 // 17a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x181 <_JIT_ENTRY+0x181> // 000000000000017d: R_X86_64_PC32 .L.str.123-0x4 // 181: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x188 <_JIT_ENTRY+0x188> // 0000000000000184: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyList_SET_ITEM-0x4 // 188: ba 2d 00 00 00 movl $0x2d, %edx // 18d: ff 15 00 00 00 00 callq *(%rip) # 0x193 <_JIT_ENTRY+0x193> // 000000000000018f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 193: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x19a <_JIT_ENTRY+0x19a> // 0000000000000196: R_X86_64_PC32 .L.str.138-0x4 // 19a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a1 <_JIT_ENTRY+0x1a1> // 000000000000019d: R_X86_64_PC32 .L.str.114-0x4 // 1a1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1a8 <_JIT_ENTRY+0x1a8> // 00000000000001a4: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SET_SIZE-0x4 // 1a8: ba af 01 00 00 movl $0x1af, %edx # imm = 0x1AF // 1ad: ff 15 00 00 00 00 callq *(%rip) # 0x1b3 <_JIT_ENTRY+0x1b3> // 00000000000001af: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b3: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1ba <_JIT_ENTRY+0x1ba> // 00000000000001b6: R_X86_64_PC32 .L.str.139-0x4 // 1ba: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1c1 <_JIT_ENTRY+0x1c1> // 00000000000001bd: R_X86_64_PC32 .L.str.114-0x4 // 1c1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1c8 <_JIT_ENTRY+0x1c8> // 00000000000001c4: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SET_SIZE-0x4 // 1c8: ba b0 01 00 00 movl $0x1b0, %edx # imm = 0x1B0 // 1cd: ff 15 00 00 00 00 callq *(%rip) # 0x1d3 <_JIT_ENTRY+0x1d3> // 00000000000001cf: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1d3: const unsigned char code_body[467] = { 0x50, 0x48, 0x8b, 0x75, 0xf8, 0x48, 0x85, 0xf6, 0x0f, 0x84, 0xc5, 0x00, 0x00, 0x00, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd0, 0xc1, 0xe0, 0x03, 0x48, 0x0d, 0x00, 0x00, 0xf8, 0xff, 0x48, 0x8b, 0x7c, 0x05, 0x00, 0x48, 0x85, 0xff, 0x0f, 0x84, 0xa6, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x47, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x84, 0xb5, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xc8, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xdb, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4f, 0x10, 0x48, 0x8d, 0x41, 0x01, 0x48, 0xba, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0x48, 0x39, 0xd0, 0x0f, 0x83, 0xe0, 0x00, 0x00, 0x00, 0x48, 0x39, 0x4f, 0x20, 0x7e, 0x3e, 0x48, 0x85, 0xc9, 0x0f, 0x88, 0xf1, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x57, 0x18, 0x48, 0x89, 0x34, 0xca, 0x48, 0x8b, 0x4f, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xf8, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x0b, 0x01, 0x00, 0x00, 0x48, 0x89, 0x47, 0x10, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x0b, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1a, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x2d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xaf, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb0, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/listobject.h\x00self != NULL && newitem != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_list.h\x00int _PyList_AppendTakeRef(PyListObject *, PyObject *)\x00PyList_Check(self)\x00(size_t)len + 1 < PY_SSIZE_T_MAX\x00ob->ob_base.ob_type != &PyLong_Type\x00void Py_SET_SIZE(PyVarObject *, Py_ssize_t)\x00ob->ob_base.ob_type != &PyBool_Type\x00void PyList_SET_ITEM(PyObject *, Py_ssize_t, PyObject *)\x000 <= index\x00' // 258: // 258: OPARG // 260: &PyLong_Type+0x0 // 268: &PyBool_Type+0x0 // 270: CONTINUE // 278: &_PyList_AppendTakeRefListResize+0x0 // 280: ERROR_TARGET // 288: &__assert_fail+0x0 const unsigned char data_body[656] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x73, 0x65, 0x6c, 0x66, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x20, 0x26, 0x26, 0x20, 0x6e, 0x65, 0x77, 0x69, 0x74, 0x65, 0x6d, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x69, 0x73, 0x74, 0x2e, 0x68, 0x00, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x41, 0x70, 0x70, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x6b, 0x65, 0x52, 0x65, 0x66, 0x28, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x73, 0x65, 0x6c, 0x66, 0x29, 0x00, 0x28, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x6c, 0x65, 0x6e, 0x20, 0x2b, 0x20, 0x31, 0x20, 0x3c, 0x20, 0x50, 0x59, 0x5f, 0x53, 0x53, 0x49, 0x5a, 0x45, 0x5f, 0x54, 0x5f, 0x4d, 0x41, 0x58, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x56, 0x61, 0x72, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x62, 0x61, 0x73, 0x65, 0x2e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x30, 0x20, 0x3c, 0x3d, 0x20, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x258, instruction->oparg); patch_64(data + 0x260, (uintptr_t)&PyLong_Type); patch_64(data + 0x268, (uintptr_t)&PyBool_Type); patch_64(data + 0x270, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x278, (uintptr_t)&_PyList_AppendTakeRefListResize); patch_64(data + 0x280, instruction_starts[instruction->error_target]); patch_64(data + 0x288, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x10, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0x41, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0x264); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0x264); patch_x86_64_32rx(code + 0xb3, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0xb9, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0xc8, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0xcf, (uintptr_t)data + 0x27c); patch_32r(code + 0xd6, (uintptr_t)data + 0xcd); patch_32r(code + 0xdd, (uintptr_t)data + 0xed); patch_32r(code + 0xe4, (uintptr_t)data + 0x132); patch_x86_64_32rx(code + 0xef, (uintptr_t)data + 0x284); patch_32r(code + 0xf6, (uintptr_t)data + 0x168); patch_32r(code + 0xfd, (uintptr_t)data + 0xed); patch_32r(code + 0x104, (uintptr_t)data + 0x132); patch_x86_64_32rx(code + 0x10f, (uintptr_t)data + 0x284); patch_32r(code + 0x116, (uintptr_t)data + 0x33); patch_32r(code + 0x11d, (uintptr_t)data + -0x4); patch_32r(code + 0x124, (uintptr_t)data + 0x4f); patch_x86_64_32rx(code + 0x12f, (uintptr_t)data + 0x284); patch_32r(code + 0x136, (uintptr_t)data + 0x6e); patch_32r(code + 0x13d, (uintptr_t)data + -0x4); patch_32r(code + 0x144, (uintptr_t)data + 0x4f); patch_x86_64_32rx(code + 0x14f, (uintptr_t)data + 0x284); patch_32r(code + 0x156, (uintptr_t)data + 0x17b); patch_32r(code + 0x15d, (uintptr_t)data + 0xed); patch_32r(code + 0x164, (uintptr_t)data + 0x132); patch_x86_64_32rx(code + 0x16f, (uintptr_t)data + 0x284); patch_32r(code + 0x176, (uintptr_t)data + 0x249); patch_32r(code + 0x17d, (uintptr_t)data + 0x8a); patch_32r(code + 0x184, (uintptr_t)data + 0x210); patch_x86_64_32rx(code + 0x18f, (uintptr_t)data + 0x284); patch_32r(code + 0x196, (uintptr_t)data + 0x19c); patch_32r(code + 0x19d, (uintptr_t)data + -0x4); patch_32r(code + 0x1a4, (uintptr_t)data + 0x1c0); patch_x86_64_32rx(code + 0x1af, (uintptr_t)data + 0x284); patch_32r(code + 0x1b6, (uintptr_t)data + 0x1ec); patch_32r(code + 0x1bd, (uintptr_t)data + -0x4); patch_32r(code + 0x1c4, (uintptr_t)data + 0x1c0); patch_x86_64_32rx(code + 0x1cf, (uintptr_t)data + 0x284); } void emit__LIST_EXTEND( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LIST_EXTEND.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 8b 05 00 00 00 00 movl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 7: f7 d0 notl %eax // 9: 48 8b 5d f8 movq -0x8(%rbp), %rbx // d: c1 e0 03 shll $0x3, %eax // 10: 48 0d 00 00 f8 ff orq $-0x80000, %rax # imm = 0xFFF80000 // 16: 48 8b 7c 05 00 movq (%rbp,%rax), %rdi // 1b: 48 89 de movq %rbx, %rsi // 1e: ff 15 00 00 00 00 callq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX _PyList_Extend-0x4 // 24: 48 85 c0 testq %rax, %rax // 27: 74 28 je 0x51 <_JIT_ENTRY+0x51> // 29: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x30 <_JIT_ENTRY+0x30> // 000000000000002c: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 30: 0f 85 00 01 00 00 jne 0x136 <_JIT_ENTRY+0x136> // 36: 48 8b 03 movq (%rbx), %rax // 39: 48 85 c0 testq %rax, %rax // 3c: 7e 7e jle 0xbc <_JIT_ENTRY+0xbc> // 3e: 48 83 c5 f8 addq $-0x8, %rbp // 42: 85 c0 testl %eax, %eax // 44: 0f 89 96 00 00 00 jns 0xe0 <_JIT_ENTRY+0xe0> // 4a: 58 popq %rax // 4b: ff 25 00 00 00 00 jmpq *(%rip) # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 51: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_REX_GOTPCRELX PyExc_TypeError-0x4 // 58: 49 8b 36 movq (%r14), %rsi // 5b: 4c 89 e7 movq %r12, %rdi // 5e: ff 15 00 00 00 00 callq *(%rip) # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_GOTPCRELX _PyErr_ExceptionMatches-0x4 // 64: 85 c0 testl %eax, %eax // 66: 74 41 je 0xa9 <_JIT_ENTRY+0xa9> // 68: 48 8b 43 08 movq 0x8(%rbx), %rax // 6c: 48 83 b8 d8 00 00 00 00 cmpq $0x0, 0xd8(%rax) // 74: 75 33 jne 0xa9 <_JIT_ENTRY+0xa9> // 76: 48 89 df movq %rbx, %rdi // 79: ff 15 00 00 00 00 callq *(%rip) # 0x7f <_JIT_ENTRY+0x7f> // 000000000000007b: R_X86_64_GOTPCRELX PySequence_Check-0x4 // 7f: 85 c0 testl %eax, %eax // 81: 75 26 jne 0xa9 <_JIT_ENTRY+0xa9> // 83: 4c 89 e7 movq %r12, %rdi // 86: ff 15 00 00 00 00 callq *(%rip) # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_GOTPCRELX _PyErr_Clear-0x4 // 8c: 49 8b 36 movq (%r14), %rsi // 8f: 48 8b 43 08 movq 0x8(%rbx), %rax // 93: 48 8b 48 18 movq 0x18(%rax), %rcx // 97: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_PC32 .L.str.36-0x4 // 9e: 4c 89 e7 movq %r12, %rdi // a1: 31 c0 xorl %eax, %eax // a3: ff 15 00 00 00 00 callq *(%rip) # 0xa9 <_JIT_ENTRY+0xa9> // 00000000000000a5: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // a9: 48 8b 03 movq (%rbx), %rax // ac: 48 85 c0 testq %rax, %rax // af: 7e 4e jle 0xff <_JIT_ENTRY+0xff> // b1: 85 c0 testl %eax, %eax // b3: 79 66 jns 0x11b <_JIT_ENTRY+0x11b> // b5: 58 popq %rax // b6: ff 25 00 00 00 00 jmpq *(%rip) # 0xbc <_JIT_ENTRY+0xbc> // 00000000000000b8: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // bc: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc3 <_JIT_ENTRY+0xc3> // 00000000000000bf: R_X86_64_PC32 .L.str.1-0x4 // c3: be ac 06 00 00 movl $0x6ac, %esi # imm = 0x6AC // c8: 48 89 da movq %rbx, %rdx // cb: ff 15 00 00 00 00 callq *(%rip) # 0xd1 <_JIT_ENTRY+0xd1> // 00000000000000cd: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // d1: 48 8b 03 movq (%rbx), %rax // d4: 48 83 c5 f8 addq $-0x8, %rbp // d8: 85 c0 testl %eax, %eax // da: 0f 88 6a ff ff ff js 0x4a <_JIT_ENTRY+0x4a> // e0: ff 15 00 00 00 00 callq *(%rip) # 0xe6 <_JIT_ENTRY+0xe6> // 00000000000000e2: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // e6: 48 ff 0b decq (%rbx) // e9: 0f 85 5b ff ff ff jne 0x4a <_JIT_ENTRY+0x4a> // ef: 48 89 df movq %rbx, %rdi // f2: ff 15 00 00 00 00 callq *(%rip) # 0xf8 <_JIT_ENTRY+0xf8> // 00000000000000f4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // f8: 58 popq %rax // f9: ff 25 00 00 00 00 jmpq *(%rip) # 0xff <_JIT_ENTRY+0xff> // 00000000000000fb: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ff: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x106 <_JIT_ENTRY+0x106> // 0000000000000102: R_X86_64_PC32 .L.str.1-0x4 // 106: be a8 06 00 00 movl $0x6a8, %esi # imm = 0x6A8 // 10b: 48 89 da movq %rbx, %rdx // 10e: ff 15 00 00 00 00 callq *(%rip) # 0x114 <_JIT_ENTRY+0x114> // 0000000000000110: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 114: 48 8b 03 movq (%rbx), %rax // 117: 85 c0 testl %eax, %eax // 119: 78 9a js 0xb5 <_JIT_ENTRY+0xb5> // 11b: ff 15 00 00 00 00 callq *(%rip) # 0x121 <_JIT_ENTRY+0x121> // 000000000000011d: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 121: 48 ff 0b decq (%rbx) // 124: 75 8f jne 0xb5 <_JIT_ENTRY+0xb5> // 126: 48 89 df movq %rbx, %rdi // 129: ff 15 00 00 00 00 callq *(%rip) # 0x12f <_JIT_ENTRY+0x12f> // 000000000000012b: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 12f: 58 popq %rax // 130: ff 25 00 00 00 00 jmpq *(%rip) # 0x136 <_JIT_ENTRY+0x136> // 0000000000000132: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 136: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x13d <_JIT_ENTRY+0x13d> // 0000000000000139: R_X86_64_PC32 .L.str.37-0x4 // 13d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x144 <_JIT_ENTRY+0x144> // 0000000000000140: R_X86_64_PC32 .L.str.1-0x4 // 144: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x14b <_JIT_ENTRY+0x14b> // 0000000000000147: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 14b: ba ab 06 00 00 movl $0x6ab, %edx # imm = 0x6AB // 150: ff 15 00 00 00 00 callq *(%rip) # 0x156 <_JIT_ENTRY+0x156> // 0000000000000152: R_X86_64_GOTPCRELX __assert_fail-0x4 // 156: const unsigned char code_body[342] = { 0x50, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd0, 0x48, 0x8b, 0x5d, 0xf8, 0xc1, 0xe0, 0x03, 0x48, 0x0d, 0x00, 0x00, 0xf8, 0xff, 0x48, 0x8b, 0x7c, 0x05, 0x00, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x28, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x00, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x7e, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x0f, 0x89, 0x96, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x36, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x41, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x83, 0xb8, 0xd8, 0x00, 0x00, 0x00, 0x00, 0x75, 0x33, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x75, 0x26, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x36, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x48, 0x18, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x4e, 0x85, 0xc0, 0x79, 0x66, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xac, 0x06, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x0f, 0x88, 0x6a, 0xff, 0xff, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x0f, 0x85, 0x5b, 0xff, 0xff, 0xff, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xa8, 0x06, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x9a, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x8f, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xab, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Value after * must be an iterable, not %.200s\x00Py_IsNone(none_val)\x00' // d0: // d0: OPARG // d8: &_PyList_Extend+0x0 // e0: &_Py_NoneStruct+0x0 // e8: CONTINUE // f0: &PyExc_TypeError+0x0 // f8: &_PyErr_ExceptionMatches+0x0 // 100: &PySequence_Check+0x0 // 108: &_PyErr_Clear+0x0 // 110: &_PyErr_Format+0x0 // 118: ERROR_TARGET // 120: &_Py_NegativeRefcount+0x0 // 128: &_Py_DECREF_DecRefTotal+0x0 // 130: &_Py_Dealloc+0x0 // 138: &__assert_fail+0x0 const unsigned char data_body[320] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x61, 0x66, 0x74, 0x65, 0x72, 0x20, 0x2a, 0x20, 0x6d, 0x75, 0x73, 0x74, 0x20, 0x62, 0x65, 0x20, 0x61, 0x6e, 0x20, 0x69, 0x74, 0x65, 0x72, 0x61, 0x62, 0x6c, 0x65, 0x2c, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x25, 0x2e, 0x32, 0x30, 0x30, 0x73, 0x00, 0x50, 0x79, 0x5f, 0x49, 0x73, 0x4e, 0x6f, 0x6e, 0x65, 0x28, 0x6e, 0x6f, 0x6e, 0x65, 0x5f, 0x76, 0x61, 0x6c, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xd0, instruction->oparg); patch_64(data + 0xd8, (uintptr_t)&_PyList_Extend); patch_64(data + 0xe0, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&PyExc_TypeError); patch_64(data + 0xf8, (uintptr_t)&_PyErr_ExceptionMatches); patch_64(data + 0x100, (uintptr_t)&PySequence_Check); patch_64(data + 0x108, (uintptr_t)&_PyErr_Clear); patch_64(data + 0x110, (uintptr_t)&_PyErr_Format); patch_64(data + 0x118, instruction_starts[instruction->error_target]); patch_64(data + 0x120, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x128, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x130, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x138, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x2c, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x60, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x7b, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x88, (uintptr_t)data + 0x104); patch_32r(code + 0x9a, (uintptr_t)data + 0x8a); patch_x86_64_32rx(code + 0xa5, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0xb8, (uintptr_t)data + 0x114); patch_32r(code + 0xbf, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xcd, (uintptr_t)data + 0x11c); patch_x86_64_32rx(code + 0xe2, (uintptr_t)data + 0x124); patch_x86_64_32rx(code + 0xf4, (uintptr_t)data + 0x12c); patch_x86_64_32rx(code + 0xfb, (uintptr_t)data + 0xe4); patch_32r(code + 0x102, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x110, (uintptr_t)data + 0x11c); patch_x86_64_32rx(code + 0x11d, (uintptr_t)data + 0x124); patch_x86_64_32rx(code + 0x12b, (uintptr_t)data + 0x12c); patch_x86_64_32rx(code + 0x132, (uintptr_t)data + 0x114); patch_32r(code + 0x139, (uintptr_t)data + 0xb8); patch_32r(code + 0x140, (uintptr_t)data + -0x4); patch_32r(code + 0x147, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x152, (uintptr_t)data + 0x134); } void emit__LOAD_ASSERTION_ERROR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ASSERTION_ERROR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX PyExc_AssertionError-0x4 // 8: 48 8b 18 movq (%rax), %rbx // b: 8b 03 movl (%rbx), %eax // d: ff c0 incl %eax // f: 74 08 je 0x19 <_JIT_ENTRY+0x19> // 11: 89 03 movl %eax, (%rbx) // 13: ff 15 00 00 00 00 callq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 19: 48 89 5d 00 movq %rbx, (%rbp) // 1d: 48 83 c5 08 addq $0x8, %rbp // 21: 58 popq %rax // 22: ff 25 00 00 00 00 jmpq *(%rip) # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 22: const unsigned char code_body[34] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x18, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, }; // 0: // 0: &PyExc_AssertionError+0x0 // 8: &_Py_INCREF_IncRefTotal+0x0 const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyExc_AssertionError); patch_64(data + 0x8, (uintptr_t)&_Py_INCREF_IncRefTotal); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x4); } void emit__LOAD_ATTR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 62 01 00 00 jne 0x178 <_JIT_ENTRY+0x178> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 6d 01 00 00 je 0x198 <_JIT_ENTRY+0x198> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 80 01 00 00 je 0x1b8 <_JIT_ENTRY+0x1b8> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 93 01 00 00 je 0x1d8 <_JIT_ENTRY+0x1d8> // 45: 44 0f b7 3d 00 00 00 00 movzwl (%rip), %r15d # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4d: 44 89 f9 movl %r15d, %ecx // 50: d1 e9 shrl %ecx // 52: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 56: 0f 8e 9c 01 00 00 jle 0x1f8 <_JIT_ENTRY+0x1f8> // 5c: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 60: 48 8b 74 c8 18 movq 0x18(%rax,%rcx,8), %rsi // 65: 41 83 e7 01 andl $0x1, %r15d // 69: 75 1a jne 0x85 <_JIT_ENTRY+0x85> // 6b: 48 89 df movq %rbx, %rdi // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX PyObject_GetAttr-0x4 // 74: 49 89 c6 movq %rax, %r14 // 77: 48 8b 03 movq (%rbx), %rax // 7a: 48 85 c0 testq %rax, %rax // 7d: 7e 4b jle 0xca <_JIT_ENTRY+0xca> // 7f: 85 c0 testl %eax, %eax // 81: 79 63 jns 0xe6 <_JIT_ENTRY+0xe6> // 83: eb 6c jmp 0xf1 <_JIT_ENTRY+0xf1> // 85: 48 c7 04 24 00 00 00 00 movq $0x0, (%rsp) // 8d: 48 89 e2 movq %rsp, %rdx // 90: 48 89 df movq %rbx, %rdi // 93: ff 15 00 00 00 00 callq *(%rip) # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_GOTPCRELX _PyObject_GetMethod-0x4 // 99: 85 c0 testl %eax, %eax // 9b: 74 6c je 0x109 <_JIT_ENTRY+0x109> // 9d: 48 8b 04 24 movq (%rsp), %rax // a1: 48 85 c0 testq %rax, %rax // a4: 0f 85 a2 00 00 00 jne 0x14c <_JIT_ENTRY+0x14c> // aa: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb1 <_JIT_ENTRY+0xb1> // 00000000000000ad: R_X86_64_PC32 .L.str.46-0x4 // b1: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb8 <_JIT_ENTRY+0xb8> // 00000000000000b4: R_X86_64_PC32 .L.str.1-0x4 // b8: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xbf <_JIT_ENTRY+0xbf> // 00000000000000bb: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // bf: ba 90 07 00 00 movl $0x790, %edx # imm = 0x790 // c4: ff 15 00 00 00 00 callq *(%rip) # 0xca <_JIT_ENTRY+0xca> // 00000000000000c6: R_X86_64_GOTPCRELX __assert_fail-0x4 // ca: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd1 <_JIT_ENTRY+0xd1> // 00000000000000cd: R_X86_64_PC32 .L.str.1-0x4 // d1: be a2 07 00 00 movl $0x7a2, %esi # imm = 0x7A2 // d6: 48 89 da movq %rbx, %rdx // d9: ff 15 00 00 00 00 callq *(%rip) # 0xdf <_JIT_ENTRY+0xdf> // 00000000000000db: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // df: 48 8b 03 movq (%rbx), %rax // e2: 85 c0 testl %eax, %eax // e4: 78 0b js 0xf1 <_JIT_ENTRY+0xf1> // e6: ff 15 00 00 00 00 callq *(%rip) # 0xec <_JIT_ENTRY+0xec> // 00000000000000e8: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ec: 48 ff 0b decq (%rbx) // ef: 74 72 je 0x163 <_JIT_ENTRY+0x163> // f1: 4d 85 f6 testq %r14, %r14 // f4: 74 7b je 0x171 <_JIT_ENTRY+0x171> // f6: 4c 89 75 f8 movq %r14, -0x8(%rbp) // fa: 44 89 f8 movl %r15d, %eax // fd: 48 8d 6c c5 00 leaq (%rbp,%rax,8), %rbp // 102: 58 popq %rax // 103: ff 25 00 00 00 00 jmpq *(%rip) # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 109: 48 8b 03 movq (%rbx), %rax // 10c: 48 85 c0 testq %rax, %rax // 10f: 7f 18 jg 0x129 <_JIT_ENTRY+0x129> // 111: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x118 <_JIT_ENTRY+0x118> // 0000000000000114: R_X86_64_PC32 .L.str.1-0x4 // 118: be 9a 07 00 00 movl $0x79a, %esi # imm = 0x79A // 11d: 48 89 da movq %rbx, %rdx // 120: ff 15 00 00 00 00 callq *(%rip) # 0x126 <_JIT_ENTRY+0x126> // 0000000000000122: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 126: 48 8b 03 movq (%rbx), %rax // 129: 85 c0 testl %eax, %eax // 12b: 78 14 js 0x141 <_JIT_ENTRY+0x141> // 12d: ff 15 00 00 00 00 callq *(%rip) # 0x133 <_JIT_ENTRY+0x133> // 000000000000012f: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 133: 48 ff 0b decq (%rbx) // 136: 75 09 jne 0x141 <_JIT_ENTRY+0x141> // 138: 48 89 df movq %rbx, %rdi // 13b: ff 15 00 00 00 00 callq *(%rip) # 0x141 <_JIT_ENTRY+0x141> // 000000000000013d: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 141: 48 8b 04 24 movq (%rsp), %rax // 145: 48 85 c0 testq %rax, %rax // 148: 74 27 je 0x171 <_JIT_ENTRY+0x171> // 14a: 31 db xorl %ebx, %ebx // 14c: 48 89 45 f8 movq %rax, -0x8(%rbp) // 150: 48 89 5d 00 movq %rbx, (%rbp) // 154: 44 89 f8 movl %r15d, %eax // 157: 48 8d 6c c5 00 leaq (%rbp,%rax,8), %rbp // 15c: 58 popq %rax // 15d: ff 25 00 00 00 00 jmpq *(%rip) # 0x163 <_JIT_ENTRY+0x163> // 000000000000015f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 163: 48 89 df movq %rbx, %rdi // 166: ff 15 00 00 00 00 callq *(%rip) # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 16c: 4d 85 f6 testq %r14, %r14 // 16f: 75 85 jne 0xf6 <_JIT_ENTRY+0xf6> // 171: 58 popq %rax // 172: ff 25 00 00 00 00 jmpq *(%rip) # 0x178 <_JIT_ENTRY+0x178> // 0000000000000174: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 178: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x17f <_JIT_ENTRY+0x17f> // 000000000000017b: R_X86_64_PC32 .L.str.108-0x4 // 17f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x186 <_JIT_ENTRY+0x186> // 0000000000000182: R_X86_64_PC32 .L.str.109-0x4 // 186: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x18d <_JIT_ENTRY+0x18d> // 0000000000000189: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 18d: ba 4d 00 00 00 movl $0x4d, %edx // 192: ff 15 00 00 00 00 callq *(%rip) # 0x198 <_JIT_ENTRY+0x198> // 0000000000000194: R_X86_64_GOTPCRELX __assert_fail-0x4 // 198: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x19f <_JIT_ENTRY+0x19f> // 000000000000019b: R_X86_64_PC32 .L.str.110-0x4 // 19f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a6 <_JIT_ENTRY+0x1a6> // 00000000000001a2: R_X86_64_PC32 .L.str.111-0x4 // 1a6: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ad <_JIT_ENTRY+0x1ad> // 00000000000001a9: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 1ad: ba 99 00 00 00 movl $0x99, %edx // 1b2: ff 15 00 00 00 00 callq *(%rip) # 0x1b8 <_JIT_ENTRY+0x1b8> // 00000000000001b4: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1bf <_JIT_ENTRY+0x1bf> // 00000000000001bb: R_X86_64_PC32 .L.str.115-0x4 // 1bf: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1c6 <_JIT_ENTRY+0x1c6> // 00000000000001c2: R_X86_64_PC32 .L.str.114-0x4 // 1c6: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1cd <_JIT_ENTRY+0x1cd> // 00000000000001c9: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1cd: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 1d2: ff 15 00 00 00 00 callq *(%rip) # 0x1d8 <_JIT_ENTRY+0x1d8> // 00000000000001d4: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1d8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1df <_JIT_ENTRY+0x1df> // 00000000000001db: R_X86_64_PC32 .L.str.116-0x4 // 1df: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1e6 <_JIT_ENTRY+0x1e6> // 00000000000001e2: R_X86_64_PC32 .L.str.114-0x4 // 1e6: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ed <_JIT_ENTRY+0x1ed> // 00000000000001e9: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1ed: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 1f2: ff 15 00 00 00 00 callq *(%rip) # 0x1f8 <_JIT_ENTRY+0x1f8> // 00000000000001f4: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1f8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1ff <_JIT_ENTRY+0x1ff> // 00000000000001fb: R_X86_64_PC32 .L.str.113-0x4 // 1ff: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x206 <_JIT_ENTRY+0x206> // 0000000000000202: R_X86_64_PC32 .L.str.111-0x4 // 206: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x20d <_JIT_ENTRY+0x20d> // 0000000000000209: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 20d: ba 9b 00 00 00 movl $0x9b, %edx // 212: ff 15 00 00 00 00 callq *(%rip) # 0x218 <_JIT_ENTRY+0x218> // 0000000000000214: R_X86_64_GOTPCRELX __assert_fail-0x4 // 218: const unsigned char code_body[536] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x62, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x6d, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x80, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x93, 0x01, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0xf9, 0xd1, 0xe9, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0x9c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x74, 0xc8, 0x18, 0x41, 0x83, 0xe7, 0x01, 0x75, 0x1a, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x4b, 0x85, 0xc0, 0x79, 0x63, 0xeb, 0x6c, 0x48, 0xc7, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xe2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x6c, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x0f, 0x85, 0xa2, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x90, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xa2, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x72, 0x4d, 0x85, 0xf6, 0x74, 0x7b, 0x4c, 0x89, 0x75, 0xf8, 0x44, 0x89, 0xf8, 0x48, 0x8d, 0x6c, 0xc5, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9a, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x74, 0x27, 0x31, 0xdb, 0x48, 0x89, 0x45, 0xf8, 0x48, 0x89, 0x5d, 0x00, 0x44, 0x89, 0xf8, 0x48, 0x8d, 0x6c, 0xc5, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x75, 0x85, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00attr != NULL\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 252: 00 00 00 00 00 00 // 258: &PyCode_Type+0x0 // 260: &PyLong_Type+0x0 // 268: &PyBool_Type+0x0 // 270: OPARG // 278: &PyObject_GetAttr+0x0 // 280: &_PyObject_GetMethod+0x0 // 288: &__assert_fail+0x0 // 290: &_Py_NegativeRefcount+0x0 // 298: &_Py_DECREF_DecRefTotal+0x0 // 2a0: CONTINUE // 2a8: &_Py_Dealloc+0x0 // 2b0: ERROR_TARGET const unsigned char data_body[696] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x61, 0x74, 0x74, 0x72, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x258, (uintptr_t)&PyCode_Type); patch_64(data + 0x260, (uintptr_t)&PyLong_Type); patch_64(data + 0x268, (uintptr_t)&PyBool_Type); patch_64(data + 0x270, instruction->oparg); patch_64(data + 0x278, (uintptr_t)&PyObject_GetAttr); patch_64(data + 0x280, (uintptr_t)&_PyObject_GetMethod); patch_64(data + 0x288, (uintptr_t)&__assert_fail); patch_64(data + 0x290, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x298, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x2a0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x2a8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x2b0, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x264); patch_32r(code + 0x49, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x95, (uintptr_t)data + 0x27c); patch_32r(code + 0xad, (uintptr_t)data + 0x8a); patch_32r(code + 0xb4, (uintptr_t)data + -0x4); patch_32r(code + 0xbb, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xc6, (uintptr_t)data + 0x284); patch_32r(code + 0xcd, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xdb, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0xe8, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x105, (uintptr_t)data + 0x29c); patch_32r(code + 0x114, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x122, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x12f, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x13d, (uintptr_t)data + 0x2a4); patch_x86_64_32rx(code + 0x15f, (uintptr_t)data + 0x29c); patch_x86_64_32rx(code + 0x168, (uintptr_t)data + 0x2a4); patch_x86_64_32rx(code + 0x174, (uintptr_t)data + 0x2ac); patch_32r(code + 0x17b, (uintptr_t)data + 0x97); patch_32r(code + 0x182, (uintptr_t)data + 0xb5); patch_32r(code + 0x189, (uintptr_t)data + 0xfb); patch_x86_64_32rx(code + 0x194, (uintptr_t)data + 0x284); patch_32r(code + 0x19b, (uintptr_t)data + 0x131); patch_32r(code + 0x1a2, (uintptr_t)data + 0x142); patch_32r(code + 0x1a9, (uintptr_t)data + 0x17e); patch_x86_64_32rx(code + 0x1b4, (uintptr_t)data + 0x284); patch_32r(code + 0x1bb, (uintptr_t)data + 0x1f7); patch_32r(code + 0x1c2, (uintptr_t)data + 0x1c0); patch_32r(code + 0x1c9, (uintptr_t)data + 0x213); patch_x86_64_32rx(code + 0x1d4, (uintptr_t)data + 0x284); patch_32r(code + 0x1db, (uintptr_t)data + 0x232); patch_32r(code + 0x1e2, (uintptr_t)data + 0x1c0); patch_32r(code + 0x1e9, (uintptr_t)data + 0x213); patch_x86_64_32rx(code + 0x1f4, (uintptr_t)data + 0x284); patch_32r(code + 0x1fb, (uintptr_t)data + 0x1a8); patch_32r(code + 0x202, (uintptr_t)data + 0x142); patch_32r(code + 0x209, (uintptr_t)data + 0x17e); patch_x86_64_32rx(code + 0x214, (uintptr_t)data + 0x284); } void emit__LOAD_ATTR_CLASS_0( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_CLASS_0.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0xc <_JIT_ENTRY+0xc> // 0000000000000008: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // c: 41 8b 06 movl (%r14), %eax // f: ff c0 incl %eax // 11: 75 17 jne 0x2a <_JIT_ENTRY+0x2a> // 13: 48 8b 03 movq (%rbx), %rax // 16: 48 85 c0 testq %rax, %rax // 19: 7e 20 jle 0x3b <_JIT_ENTRY+0x3b> // 1b: 85 c0 testl %eax, %eax // 1d: 79 38 jns 0x57 <_JIT_ENTRY+0x57> // 1f: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 23: 58 popq %rax // 24: ff 25 00 00 00 00 jmpq *(%rip) # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2a: 41 89 06 movl %eax, (%r14) // 2d: ff 15 00 00 00 00 callq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 33: 48 8b 03 movq (%rbx), %rax // 36: 48 85 c0 testq %rax, %rax // 39: 7f e0 jg 0x1b <_JIT_ENTRY+0x1b> // 3b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: be 9c 08 00 00 movl $0x89c, %esi # imm = 0x89C // 47: 48 89 da movq %rbx, %rdx // 4a: ff 15 00 00 00 00 callq *(%rip) # 0x50 <_JIT_ENTRY+0x50> // 000000000000004c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 50: 48 8b 03 movq (%rbx), %rax // 53: 85 c0 testl %eax, %eax // 55: 78 c8 js 0x1f <_JIT_ENTRY+0x1f> // 57: ff 15 00 00 00 00 callq *(%rip) # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5d: 48 ff 0b decq (%rbx) // 60: 75 bd jne 0x1f <_JIT_ENTRY+0x1f> // 62: 48 89 df movq %rbx, %rdi // 65: ff 15 00 00 00 00 callq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 6b: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 6f: 58 popq %rax // 70: ff 25 00 00 00 00 jmpq *(%rip) # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 70: const unsigned char code_body[112] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x75, 0x17, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x20, 0x85, 0xc0, 0x79, 0x38, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe0, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9c, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xc8, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xbd, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPERAND // 48: CONTINUE // 50: &_Py_INCREF_IncRefTotal+0x0 // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->operand); patch_64(data + 0x48, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x50, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x8, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x26, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0x4c); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4c, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0x64); } void emit__LOAD_ATTR_CLASS_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_CLASS_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0xc <_JIT_ENTRY+0xc> // 0000000000000008: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // c: 41 8b 06 movl (%r14), %eax // f: ff c0 incl %eax // 11: 75 0e jne 0x21 <_JIT_ENTRY+0x21> // 13: 48 8b 03 movq (%rbx), %rax // 16: 48 85 c0 testq %rax, %rax // 19: 7e 17 jle 0x32 <_JIT_ENTRY+0x32> // 1b: 85 c0 testl %eax, %eax // 1d: 79 2f jns 0x4e <_JIT_ENTRY+0x4e> // 1f: eb 41 jmp 0x62 <_JIT_ENTRY+0x62> // 21: 41 89 06 movl %eax, (%r14) // 24: ff 15 00 00 00 00 callq *(%rip) # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 2a: 48 8b 03 movq (%rbx), %rax // 2d: 48 85 c0 testq %rax, %rax // 30: 7f e9 jg 0x1b <_JIT_ENTRY+0x1b> // 32: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x39 <_JIT_ENTRY+0x39> // 0000000000000035: R_X86_64_PC32 .L.str.1-0x4 // 39: be ac 08 00 00 movl $0x8ac, %esi # imm = 0x8AC // 3e: 48 89 da movq %rbx, %rdx // 41: ff 15 00 00 00 00 callq *(%rip) # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 47: 48 8b 03 movq (%rbx), %rax // 4a: 85 c0 testl %eax, %eax // 4c: 78 14 js 0x62 <_JIT_ENTRY+0x62> // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 54: 48 ff 0b decq (%rbx) // 57: 75 09 jne 0x62 <_JIT_ENTRY+0x62> // 59: 48 89 df movq %rbx, %rdi // 5c: ff 15 00 00 00 00 callq *(%rip) # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 62: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 66: 48 c7 45 00 00 00 00 00 movq $0x0, (%rbp) // 6e: 48 83 c5 08 addq $0x8, %rbp // 72: 58 popq %rax // 73: ff 25 00 00 00 00 jmpq *(%rip) # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 73: const unsigned char code_body[115] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x75, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x41, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xac, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x48, 0xc7, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPERAND // 48: &_Py_INCREF_IncRefTotal+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: &_Py_Dealloc+0x0 const unsigned char data_body[104] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->operand); patch_64(data + 0x48, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x8, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x26, (uintptr_t)data + 0x44); patch_32r(code + 0x35, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x43, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x5e, (uintptr_t)data + 0x5c); } void emit__LOAD_ATTR_INSTANCE_VALUE_0( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_INSTANCE_VALUE_0.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 8b 88 a8 00 00 00 movq 0xa8(%rax), %rcx // 10: f6 c1 04 testb $0x4, %cl // 13: 0f 84 96 00 00 00 je 0xaf <_JIT_ENTRY+0xaf> // 19: f6 c1 10 testb $0x10, %cl // 1c: 0f 84 ad 00 00 00 je 0xcf <_JIT_ENTRY+0xcf> // 22: 48 83 78 20 10 cmpq $0x10, 0x20(%rax) // 27: 0f 85 c2 00 00 00 jne 0xef <_JIT_ENTRY+0xef> // 2d: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 34: 4c 8b 74 c3 18 movq 0x18(%rbx,%rax,8), %r14 // 39: 4d 85 f6 testq %r14, %r14 // 3c: 74 1e je 0x5c <_JIT_ENTRY+0x5c> // 3e: 41 8b 06 movl (%r14), %eax // 41: ff c0 incl %eax // 43: 75 1e jne 0x63 <_JIT_ENTRY+0x63> // 45: 48 8b 03 movq (%rbx), %rax // 48: 48 85 c0 testq %rax, %rax // 4b: 7e 27 jle 0x74 <_JIT_ENTRY+0x74> // 4d: 85 c0 testl %eax, %eax // 4f: 79 3f jns 0x90 <_JIT_ENTRY+0x90> // 51: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 55: 58 popq %rax // 56: ff 25 00 00 00 00 jmpq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5c: 58 popq %rax // 5d: ff 25 00 00 00 00 jmpq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 63: 41 89 06 movl %eax, (%r14) // 66: ff 15 00 00 00 00 callq *(%rip) # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 6c: 48 8b 03 movq (%rbx), %rax // 6f: 48 85 c0 testq %rax, %rax // 72: 7f d9 jg 0x4d <_JIT_ENTRY+0x4d> // 74: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: be d3 07 00 00 movl $0x7d3, %esi # imm = 0x7D3 // 80: 48 89 da movq %rbx, %rdx // 83: ff 15 00 00 00 00 callq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 89: 48 8b 03 movq (%rbx), %rax // 8c: 85 c0 testl %eax, %eax // 8e: 78 c1 js 0x51 <_JIT_ENTRY+0x51> // 90: ff 15 00 00 00 00 callq *(%rip) # 0x96 <_JIT_ENTRY+0x96> // 0000000000000092: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 96: 48 ff 0b decq (%rbx) // 99: 75 b6 jne 0x51 <_JIT_ENTRY+0x51> // 9b: 48 89 df movq %rbx, %rdi // 9e: ff 15 00 00 00 00 callq *(%rip) # 0xa4 <_JIT_ENTRY+0xa4> // 00000000000000a0: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // a4: 4c 89 75 f8 movq %r14, -0x8(%rbp) // a8: 58 popq %rax // a9: ff 25 00 00 00 00 jmpq *(%rip) # 0xaf <_JIT_ENTRY+0xaf> // 00000000000000ab: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // af: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb6 <_JIT_ENTRY+0xb6> // 00000000000000b2: R_X86_64_PC32 .L.str.147-0x4 // b6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xbd <_JIT_ENTRY+0xbd> // 00000000000000b9: R_X86_64_PC32 .L.str.118-0x4 // bd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc4 <_JIT_ENTRY+0xc4> // 00000000000000c0: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // c4: ba ba 02 00 00 movl $0x2ba, %edx # imm = 0x2BA // c9: ff 15 00 00 00 00 callq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX __assert_fail-0x4 // cf: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd6 <_JIT_ENTRY+0xd6> // 00000000000000d2: R_X86_64_PC32 .L.str.148-0x4 // d6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xdd <_JIT_ENTRY+0xdd> // 00000000000000d9: R_X86_64_PC32 .L.str.118-0x4 // dd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xe4 <_JIT_ENTRY+0xe4> // 00000000000000e0: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // e4: ba bb 02 00 00 movl $0x2bb, %edx # imm = 0x2BB // e9: ff 15 00 00 00 00 callq *(%rip) # 0xef <_JIT_ENTRY+0xef> // 00000000000000eb: R_X86_64_GOTPCRELX __assert_fail-0x4 // ef: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf6 <_JIT_ENTRY+0xf6> // 00000000000000f2: R_X86_64_PC32 .L.str.149-0x4 // f6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xfd <_JIT_ENTRY+0xfd> // 00000000000000f9: R_X86_64_PC32 .L.str.118-0x4 // fd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x104 <_JIT_ENTRY+0x104> // 0000000000000100: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // 104: ba bc 02 00 00 movl $0x2bc, %edx # imm = 0x2BC // 109: ff 15 00 00 00 00 callq *(%rip) # 0x10f <_JIT_ENTRY+0x10f> // 000000000000010b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 10f: const unsigned char code_body[271] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x88, 0xa8, 0x00, 0x00, 0x00, 0xf6, 0xc1, 0x04, 0x0f, 0x84, 0x96, 0x00, 0x00, 0x00, 0xf6, 0xc1, 0x10, 0x0f, 0x84, 0xad, 0x00, 0x00, 0x00, 0x48, 0x83, 0x78, 0x20, 0x10, 0x0f, 0x85, 0xc2, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x74, 0xc3, 0x18, 0x4d, 0x85, 0xf6, 0x74, 0x1e, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x75, 0x1e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x27, 0x85, 0xc0, 0x79, 0x3f, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xd9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xd3, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xc1, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xb6, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xba, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbb, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES\x00PyDictValues *_PyObject_InlineValues(PyObject *)\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00Py_TYPE(obj)->tp_basicsize == sizeof(PyObject)\x00' // 14a: 00 00 00 00 00 00 // 150: OPERAND // 158: CONTINUE // 160: JUMP_TARGET // 168: &_Py_INCREF_IncRefTotal+0x0 // 170: &_Py_NegativeRefcount+0x0 // 178: &_Py_DECREF_DecRefTotal+0x0 // 180: &_Py_Dealloc+0x0 // 188: &__assert_fail+0x0 const unsigned char data_body[400] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x150, instruction->operand); patch_64(data + 0x158, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x160, instruction_starts[instruction->jump_target]); patch_64(data + 0x168, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x170, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x178, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x180, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x188, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x30, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x68, (uintptr_t)data + 0x164); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x92, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0xa0, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0xab, (uintptr_t)data + 0x154); patch_32r(code + 0xb2, (uintptr_t)data + 0x83); patch_32r(code + 0xb9, (uintptr_t)data + 0x3c); patch_32r(code + 0xc0, (uintptr_t)data + 0xb5); patch_x86_64_32rx(code + 0xcb, (uintptr_t)data + 0x184); patch_32r(code + 0xd2, (uintptr_t)data + 0xe6); patch_32r(code + 0xd9, (uintptr_t)data + 0x3c); patch_32r(code + 0xe0, (uintptr_t)data + 0xb5); patch_x86_64_32rx(code + 0xeb, (uintptr_t)data + 0x184); patch_32r(code + 0xf2, (uintptr_t)data + 0x117); patch_32r(code + 0xf9, (uintptr_t)data + 0x3c); patch_32r(code + 0x100, (uintptr_t)data + 0xb5); patch_x86_64_32rx(code + 0x10b, (uintptr_t)data + 0x184); } void emit__LOAD_ATTR_INSTANCE_VALUE_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_INSTANCE_VALUE_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 8b 88 a8 00 00 00 movq 0xa8(%rax), %rcx // 10: f6 c1 04 testb $0x4, %cl // 13: 0f 84 99 00 00 00 je 0xb2 <_JIT_ENTRY+0xb2> // 19: f6 c1 10 testb $0x10, %cl // 1c: 0f 84 b0 00 00 00 je 0xd2 <_JIT_ENTRY+0xd2> // 22: 48 83 78 20 10 cmpq $0x10, 0x20(%rax) // 27: 0f 85 c5 00 00 00 jne 0xf2 <_JIT_ENTRY+0xf2> // 2d: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 34: 4c 8b 74 c3 18 movq 0x18(%rbx,%rax,8), %r14 // 39: 4d 85 f6 testq %r14, %r14 // 3c: 74 15 je 0x53 <_JIT_ENTRY+0x53> // 3e: 41 8b 06 movl (%r14), %eax // 41: ff c0 incl %eax // 43: 75 15 jne 0x5a <_JIT_ENTRY+0x5a> // 45: 48 8b 03 movq (%rbx), %rax // 48: 48 85 c0 testq %rax, %rax // 4b: 7e 1e jle 0x6b <_JIT_ENTRY+0x6b> // 4d: 85 c0 testl %eax, %eax // 4f: 79 36 jns 0x87 <_JIT_ENTRY+0x87> // 51: eb 48 jmp 0x9b <_JIT_ENTRY+0x9b> // 53: 58 popq %rax // 54: ff 25 00 00 00 00 jmpq *(%rip) # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 5a: 41 89 06 movl %eax, (%r14) // 5d: ff 15 00 00 00 00 callq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 63: 48 8b 03 movq (%rbx), %rax // 66: 48 85 c0 testq %rax, %rax // 69: 7f e2 jg 0x4d <_JIT_ENTRY+0x4d> // 6b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_PC32 .L.str.1-0x4 // 72: be e7 07 00 00 movl $0x7e7, %esi # imm = 0x7E7 // 77: 48 89 da movq %rbx, %rdx // 7a: ff 15 00 00 00 00 callq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 80: 48 8b 03 movq (%rbx), %rax // 83: 85 c0 testl %eax, %eax // 85: 78 14 js 0x9b <_JIT_ENTRY+0x9b> // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 8d: 48 ff 0b decq (%rbx) // 90: 75 09 jne 0x9b <_JIT_ENTRY+0x9b> // 92: 48 89 df movq %rbx, %rdi // 95: ff 15 00 00 00 00 callq *(%rip) # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 9b: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 9f: 48 c7 45 00 00 00 00 00 movq $0x0, (%rbp) // a7: 48 83 c5 08 addq $0x8, %rbp // ab: 58 popq %rax // ac: ff 25 00 00 00 00 jmpq *(%rip) # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // b2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_PC32 .L.str.147-0x4 // b9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_PC32 .L.str.118-0x4 // c0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // c7: ba ba 02 00 00 movl $0x2ba, %edx # imm = 0x2BA // cc: ff 15 00 00 00 00 callq *(%rip) # 0xd2 <_JIT_ENTRY+0xd2> // 00000000000000ce: R_X86_64_GOTPCRELX __assert_fail-0x4 // d2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd9 <_JIT_ENTRY+0xd9> // 00000000000000d5: R_X86_64_PC32 .L.str.148-0x4 // d9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xe0 <_JIT_ENTRY+0xe0> // 00000000000000dc: R_X86_64_PC32 .L.str.118-0x4 // e0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xe7 <_JIT_ENTRY+0xe7> // 00000000000000e3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // e7: ba bb 02 00 00 movl $0x2bb, %edx # imm = 0x2BB // ec: ff 15 00 00 00 00 callq *(%rip) # 0xf2 <_JIT_ENTRY+0xf2> // 00000000000000ee: R_X86_64_GOTPCRELX __assert_fail-0x4 // f2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf9 <_JIT_ENTRY+0xf9> // 00000000000000f5: R_X86_64_PC32 .L.str.149-0x4 // f9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x100 <_JIT_ENTRY+0x100> // 00000000000000fc: R_X86_64_PC32 .L.str.118-0x4 // 100: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x107 <_JIT_ENTRY+0x107> // 0000000000000103: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // 107: ba bc 02 00 00 movl $0x2bc, %edx # imm = 0x2BC // 10c: ff 15 00 00 00 00 callq *(%rip) # 0x112 <_JIT_ENTRY+0x112> // 000000000000010e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 112: const unsigned char code_body[274] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x88, 0xa8, 0x00, 0x00, 0x00, 0xf6, 0xc1, 0x04, 0x0f, 0x84, 0x99, 0x00, 0x00, 0x00, 0xf6, 0xc1, 0x10, 0x0f, 0x84, 0xb0, 0x00, 0x00, 0x00, 0x48, 0x83, 0x78, 0x20, 0x10, 0x0f, 0x85, 0xc5, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x74, 0xc3, 0x18, 0x4d, 0x85, 0xf6, 0x74, 0x15, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x75, 0x15, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x1e, 0x85, 0xc0, 0x79, 0x36, 0xeb, 0x48, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe2, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xe7, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x48, 0xc7, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xba, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbb, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES\x00PyDictValues *_PyObject_InlineValues(PyObject *)\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00Py_TYPE(obj)->tp_basicsize == sizeof(PyObject)\x00' // 14a: 00 00 00 00 00 00 // 150: OPERAND // 158: JUMP_TARGET // 160: &_Py_INCREF_IncRefTotal+0x0 // 168: &_Py_NegativeRefcount+0x0 // 170: &_Py_DECREF_DecRefTotal+0x0 // 178: &_Py_Dealloc+0x0 // 180: CONTINUE // 188: &__assert_fail+0x0 const unsigned char data_body[400] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x150, instruction->operand); patch_64(data + 0x158, instruction_starts[instruction->jump_target]); patch_64(data + 0x160, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x168, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x170, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x178, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x180, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x188, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x30, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0x15c); patch_32r(code + 0x6e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x7c, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x97, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0xae, (uintptr_t)data + 0x17c); patch_32r(code + 0xb5, (uintptr_t)data + 0x83); patch_32r(code + 0xbc, (uintptr_t)data + 0x3c); patch_32r(code + 0xc3, (uintptr_t)data + 0xb5); patch_x86_64_32rx(code + 0xce, (uintptr_t)data + 0x184); patch_32r(code + 0xd5, (uintptr_t)data + 0xe6); patch_32r(code + 0xdc, (uintptr_t)data + 0x3c); patch_32r(code + 0xe3, (uintptr_t)data + 0xb5); patch_x86_64_32rx(code + 0xee, (uintptr_t)data + 0x184); patch_32r(code + 0xf5, (uintptr_t)data + 0x117); patch_32r(code + 0xfc, (uintptr_t)data + 0x3c); patch_32r(code + 0x103, (uintptr_t)data + 0xb5); patch_x86_64_32rx(code + 0x10e, (uintptr_t)data + 0x184); } void emit__LOAD_ATTR_METHOD_LAZY_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_METHOD_LAZY_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: f6 05 00 00 00 00 01 testb $0x1, (%rip) # 0x8 <_JIT_ENTRY+0x8> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x5 // 8: 74 39 je 0x43 <_JIT_ENTRY+0x43> // a: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x11 <_JIT_ENTRY+0x11> // 000000000000000d: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 11: 48 8b 43 08 movq 0x8(%rbx), %rax // 15: f6 80 aa 00 00 00 02 testb $0x2, 0xaa(%rax) // 1c: 74 45 je 0x63 <_JIT_ENTRY+0x63> // 1e: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 22: 8b 03 movl (%rbx), %eax // 24: ff c0 incl %eax // 26: 74 08 je 0x30 <_JIT_ENTRY+0x30> // 28: 89 03 movl %eax, (%rbx) // 2a: ff 15 00 00 00 00 callq *(%rip) # 0x30 <_JIT_ENTRY+0x30> // 000000000000002c: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 30: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 34: 4c 89 75 00 movq %r14, (%rbp) // 38: 48 83 c5 08 addq $0x8, %rbp // 3c: 58 popq %rax // 3d: ff 25 00 00 00 00 jmpq *(%rip) # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 43: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_PC32 .L.str.45-0x4 // 4a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_PC32 .L.str.1-0x4 // 51: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 58: ba c8 0b 00 00 movl $0xbc8, %edx # imm = 0xBC8 // 5d: ff 15 00 00 00 00 callq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 63: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_PC32 .L.str.79-0x4 // 6a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_PC32 .L.str.1-0x4 // 71: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 78: ba cb 0b 00 00 movl $0xbcb, %edx # imm = 0xBCB // 7d: ff 15 00 00 00 00 callq *(%rip) # 0x83 <_JIT_ENTRY+0x83> // 000000000000007f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 83: const unsigned char code_body[131] = { 0x50, 0xf6, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x74, 0x39, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x08, 0xf6, 0x80, 0xaa, 0x00, 0x00, 0x00, 0x02, 0x74, 0x45, 0x4c, 0x8b, 0x75, 0xf8, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0xf8, 0x4c, 0x89, 0x75, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc8, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcb, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg & 1\x00_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)\x00' // d9: 00 00 00 00 00 00 00 // e0: OPARG // e8: OPERAND // f0: &_Py_INCREF_IncRefTotal+0x0 // f8: CONTINUE // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x31, 0x00, 0x5f, 0x50, 0x79, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x48, 0x61, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x28, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x64, 0x65, 0x73, 0x63, 0x72, 0x29, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x4f, 0x52, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, instruction->operand); patch_64(data + 0xf0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xf8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + 0xdb); patch_x86_64_32rx(code + 0xd, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x2c, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0xf4); patch_32r(code + 0x46, (uintptr_t)data + 0x8a); patch_32r(code + 0x4d, (uintptr_t)data + -0x4); patch_32r(code + 0x54, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0xfc); patch_32r(code + 0x66, (uintptr_t)data + 0x94); patch_32r(code + 0x6d, (uintptr_t)data + -0x4); patch_32r(code + 0x74, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x7f, (uintptr_t)data + 0xfc); } void emit__LOAD_ATTR_METHOD_NO_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_METHOD_NO_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: f6 05 00 00 00 00 01 testb $0x1, (%rip) # 0x8 <_JIT_ENTRY+0x8> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x5 // 8: 74 49 je 0x53 <_JIT_ENTRY+0x53> // a: 48 8b 5d f8 movq -0x8(%rbp), %rbx // e: 48 8b 43 08 movq 0x8(%rbx), %rax // 12: 48 83 b8 20 01 00 00 00 cmpq $0x0, 0x120(%rax) // 1a: 75 57 jne 0x73 <_JIT_ENTRY+0x73> // 1c: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 23: 49 8b 46 08 movq 0x8(%r14), %rax // 27: f6 80 aa 00 00 00 02 testb $0x2, 0xaa(%rax) // 2e: 74 63 je 0x93 <_JIT_ENTRY+0x93> // 30: 41 8b 06 movl (%r14), %eax // 33: ff c0 incl %eax // 35: 74 09 je 0x40 <_JIT_ENTRY+0x40> // 37: 41 89 06 movl %eax, (%r14) // 3a: ff 15 00 00 00 00 callq *(%rip) # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 40: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 44: 48 89 5d 00 movq %rbx, (%rbp) // 48: 48 83 c5 08 addq $0x8, %rbp // 4c: 58 popq %rax // 4d: ff 25 00 00 00 00 jmpq *(%rip) # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 53: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_PC32 .L.str.45-0x4 // 5a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_PC32 .L.str.1-0x4 // 61: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 68: ba 87 0b 00 00 movl $0xb87, %edx # imm = 0xB87 // 6d: ff 15 00 00 00 00 callq *(%rip) # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 73: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_PC32 .L.str.78-0x4 // 7a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_PC32 .L.str.1-0x4 // 81: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 88: ba 88 0b 00 00 movl $0xb88, %edx # imm = 0xB88 // 8d: ff 15 00 00 00 00 callq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 93: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_PC32 .L.str.79-0x4 // 9a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_PC32 .L.str.1-0x4 // a1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // a8: ba 8b 0b 00 00 movl $0xb8b, %edx # imm = 0xB8B // ad: ff 15 00 00 00 00 callq *(%rip) # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_GOTPCRELX __assert_fail-0x4 // b3: const unsigned char code_body[179] = { 0x50, 0xf6, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x74, 0x49, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x83, 0xb8, 0x20, 0x01, 0x00, 0x00, 0x00, 0x75, 0x57, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x46, 0x08, 0xf6, 0x80, 0xaa, 0x00, 0x00, 0x00, 0x02, 0x74, 0x63, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x87, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x88, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x8b, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg & 1\x00Py_TYPE(owner)->tp_dictoffset == 0\x00_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)\x00' // fc: 00 00 00 00 // 100: OPARG // 108: OPERAND // 110: &_Py_INCREF_IncRefTotal+0x0 // 118: CONTINUE // 120: &__assert_fail+0x0 const unsigned char data_body[296] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x31, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x00, 0x5f, 0x50, 0x79, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x48, 0x61, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x28, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x64, 0x65, 0x73, 0x63, 0x72, 0x29, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x4f, 0x52, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x100, instruction->oparg); patch_64(data + 0x108, instruction->operand); patch_64(data + 0x110, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x118, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x120, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + 0xfb); patch_x86_64_32rx(code + 0x1f, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0x4f, (uintptr_t)data + 0x114); patch_32r(code + 0x56, (uintptr_t)data + 0x8a); patch_32r(code + 0x5d, (uintptr_t)data + -0x4); patch_32r(code + 0x64, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x6f, (uintptr_t)data + 0x11c); patch_32r(code + 0x76, (uintptr_t)data + 0x94); patch_32r(code + 0x7d, (uintptr_t)data + -0x4); patch_32r(code + 0x84, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0x11c); patch_32r(code + 0x96, (uintptr_t)data + 0xb7); patch_32r(code + 0x9d, (uintptr_t)data + -0x4); patch_32r(code + 0xa4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0x11c); } void emit__LOAD_ATTR_METHOD_WITH_VALUES( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_METHOD_WITH_VALUES.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: f6 05 00 00 00 00 01 testb $0x1, (%rip) # 0x8 <_JIT_ENTRY+0x8> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x5 // 8: 74 3b je 0x45 <_JIT_ENTRY+0x45> // a: 48 8b 5d f8 movq -0x8(%rbp), %rbx // e: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 15: 41 8b 06 movl (%r14), %eax // 18: ff c0 incl %eax // 1a: 74 09 je 0x25 <_JIT_ENTRY+0x25> // 1c: 41 89 06 movl %eax, (%r14) // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 25: 49 8b 46 08 movq 0x8(%r14), %rax // 29: f6 80 aa 00 00 00 02 testb $0x2, 0xaa(%rax) // 30: 74 33 je 0x65 <_JIT_ENTRY+0x65> // 32: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 36: 48 89 5d 00 movq %rbx, (%rbp) // 3a: 48 83 c5 08 addq $0x8, %rbp // 3e: 58 popq %rax // 3f: ff 25 00 00 00 00 jmpq *(%rip) # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 45: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_PC32 .L.str.45-0x4 // 4c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_PC32 .L.str.1-0x4 // 53: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 5a: ba 73 0b 00 00 movl $0xb73, %edx # imm = 0xB73 // 5f: ff 15 00 00 00 00 callq *(%rip) # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_GOTPCRELX __assert_fail-0x4 // 65: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_PC32 .L.str.77-0x4 // 6c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_PC32 .L.str.1-0x4 // 73: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 7a: ba 78 0b 00 00 movl $0xb78, %edx # imm = 0xB78 // 7f: ff 15 00 00 00 00 callq *(%rip) # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_GOTPCRELX __assert_fail-0x4 // 85: const unsigned char code_body[133] = { 0x50, 0xf6, 0x05, 0x00, 0x00, 0x00, 0x00, 0x01, 0x74, 0x3b, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x46, 0x08, 0xf6, 0x80, 0xaa, 0x00, 0x00, 0x00, 0x02, 0x74, 0x33, 0x4c, 0x89, 0x75, 0xf8, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x73, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x78, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg & 1\x00_PyType_HasFeature(Py_TYPE(attr), Py_TPFLAGS_METHOD_DESCRIPTOR)\x00' // d8: // d8: OPARG // e0: OPERAND // e8: &_Py_INCREF_IncRefTotal+0x0 // f0: CONTINUE // f8: &__assert_fail+0x0 const unsigned char data_body[256] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x31, 0x00, 0x5f, 0x50, 0x79, 0x54, 0x79, 0x70, 0x65, 0x5f, 0x48, 0x61, 0x73, 0x46, 0x65, 0x61, 0x74, 0x75, 0x72, 0x65, 0x28, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x61, 0x74, 0x74, 0x72, 0x29, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x45, 0x54, 0x48, 0x4f, 0x44, 0x5f, 0x44, 0x45, 0x53, 0x43, 0x52, 0x49, 0x50, 0x54, 0x4f, 0x52, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xd8, instruction->oparg); patch_64(data + 0xe0, instruction->operand); patch_64(data + 0xe8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xf0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + 0xd3); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x41, (uintptr_t)data + 0xec); patch_32r(code + 0x48, (uintptr_t)data + 0x8a); patch_32r(code + 0x4f, (uintptr_t)data + -0x4); patch_32r(code + 0x56, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x61, (uintptr_t)data + 0xf4); patch_32r(code + 0x68, (uintptr_t)data + 0x94); patch_32r(code + 0x6f, (uintptr_t)data + -0x4); patch_32r(code + 0x76, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x81, (uintptr_t)data + 0xf4); } void emit__LOAD_ATTR_MODULE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_MODULE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 10 movq 0x10(%rbx), %rax // 9: 48 8b 40 20 movq 0x20(%rax), %rax // d: 80 78 0a 01 cmpb $0x1, 0xa(%rax) // 11: 0f 85 b2 00 00 00 jne 0xc9 <_JIT_ENTRY+0xc9> // 17: 0f b7 15 00 00 00 00 movzwl (%rip), %edx # 0x1e <_JIT_ENTRY+0x1e> // 000000000000001a: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 1e: 48 39 50 18 cmpq %rdx, 0x18(%rax) // 22: 0f 8e c1 00 00 00 jle 0xe9 <_JIT_ENTRY+0xe9> // 28: 0f b6 48 09 movzbl 0x9(%rax), %ecx // 2c: be 01 00 00 00 movl $0x1, %esi // 31: 48 d3 e6 shlq %cl, %rsi // 34: 48 01 c6 addq %rax, %rsi // 37: c1 e2 04 shll $0x4, %edx // 3a: 4c 8b 74 32 28 movq 0x28(%rdx,%rsi), %r14 // 3f: 4d 85 f6 testq %r14, %r14 // 42: 74 15 je 0x59 <_JIT_ENTRY+0x59> // 44: 41 8b 06 movl (%r14), %eax // 47: ff c0 incl %eax // 49: 75 15 jne 0x60 <_JIT_ENTRY+0x60> // 4b: 48 8b 03 movq (%rbx), %rax // 4e: 48 85 c0 testq %rax, %rax // 51: 7e 1e jle 0x71 <_JIT_ENTRY+0x71> // 53: 85 c0 testl %eax, %eax // 55: 79 36 jns 0x8d <_JIT_ENTRY+0x8d> // 57: eb 48 jmp 0xa1 <_JIT_ENTRY+0xa1> // 59: 58 popq %rax // 5a: ff 25 00 00 00 00 jmpq *(%rip) # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 60: 41 89 06 movl %eax, (%r14) // 63: ff 15 00 00 00 00 callq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 69: 48 8b 03 movq (%rbx), %rax // 6c: 48 85 c0 testq %rax, %rax // 6f: 7f e2 jg 0x53 <_JIT_ENTRY+0x53> // 71: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_PC32 .L.str.1-0x4 // 78: be 14 08 00 00 movl $0x814, %esi # imm = 0x814 // 7d: 48 89 da movq %rbx, %rdx // 80: ff 15 00 00 00 00 callq *(%rip) # 0x86 <_JIT_ENTRY+0x86> // 0000000000000082: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 86: 48 8b 03 movq (%rbx), %rax // 89: 85 c0 testl %eax, %eax // 8b: 78 14 js 0xa1 <_JIT_ENTRY+0xa1> // 8d: ff 15 00 00 00 00 callq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 93: 48 ff 0b decq (%rbx) // 96: 75 09 jne 0xa1 <_JIT_ENTRY+0xa1> // 98: 48 89 df movq %rbx, %rdi // 9b: ff 15 00 00 00 00 callq *(%rip) # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // a1: 4c 89 75 f8 movq %r14, -0x8(%rbp) // a5: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // ac: 66 83 e0 01 andw $0x1, %ax // b0: 74 08 je 0xba <_JIT_ENTRY+0xba> // b2: 48 c7 45 00 00 00 00 00 movq $0x0, (%rbp) // ba: 0f b7 c0 movzwl %ax, %eax // bd: 48 8d 6c c5 00 leaq (%rbp,%rax,8), %rbp // c2: 58 popq %rax // c3: ff 25 00 00 00 00 jmpq *(%rip) # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L.str.51-0x4 // d0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L.str.1-0x4 // d7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // de: ba 09 08 00 00 movl $0x809, %edx # imm = 0x809 // e3: ff 15 00 00 00 00 callq *(%rip) # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_GOTPCRELX __assert_fail-0x4 // e9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.52-0x4 // f0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L.str.1-0x4 // f7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // fe: ba 0a 08 00 00 movl $0x80a, %edx # imm = 0x80A // 103: ff 15 00 00 00 00 callq *(%rip) # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_GOTPCRELX __assert_fail-0x4 // 109: const unsigned char code_body[265] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x10, 0x48, 0x8b, 0x40, 0x20, 0x80, 0x78, 0x0a, 0x01, 0x0f, 0x85, 0xb2, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x50, 0x18, 0x0f, 0x8e, 0xc1, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x48, 0x09, 0xbe, 0x01, 0x00, 0x00, 0x00, 0x48, 0xd3, 0xe6, 0x48, 0x01, 0xc6, 0xc1, 0xe2, 0x04, 0x4c, 0x8b, 0x74, 0x32, 0x28, 0x4d, 0x85, 0xf6, 0x74, 0x15, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x75, 0x15, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x1e, 0x85, 0xc0, 0x79, 0x36, 0xeb, 0x48, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe2, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x14, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xe0, 0x01, 0x74, 0x08, 0x48, 0xc7, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0x48, 0x8d, 0x6c, 0xc5, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x09, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x0a, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00dict->ma_keys->dk_kind == DICT_KEYS_UNICODE\x00index < dict->ma_keys->dk_nentries\x00' // dd: 00 00 00 // e0: OPERAND // e8: JUMP_TARGET // f0: &_Py_INCREF_IncRefTotal+0x0 // f8: &_Py_NegativeRefcount+0x0 // 100: &_Py_DECREF_DecRefTotal+0x0 // 108: &_Py_Dealloc+0x0 // 110: OPARG // 118: CONTINUE // 120: &__assert_fail+0x0 const unsigned char data_body[296] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x64, 0x69, 0x63, 0x74, 0x2d, 0x3e, 0x6d, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x2d, 0x3e, 0x64, 0x6b, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x3d, 0x3d, 0x20, 0x44, 0x49, 0x43, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, 0x00, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x64, 0x69, 0x63, 0x74, 0x2d, 0x3e, 0x6d, 0x61, 0x5f, 0x6b, 0x65, 0x79, 0x73, 0x2d, 0x3e, 0x64, 0x6b, 0x5f, 0x6e, 0x65, 0x6e, 0x74, 0x72, 0x69, 0x65, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->operand); patch_64(data + 0xe8, instruction_starts[instruction->jump_target]); patch_64(data + 0xf0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xf8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x100, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x108, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x110, instruction->oparg); patch_64(data + 0x118, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x120, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x1a, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x5c, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x65, (uintptr_t)data + 0xec); patch_32r(code + 0x74, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x82, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x9d, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x10c); patch_x86_64_32rx(code + 0xc5, (uintptr_t)data + 0x114); patch_32r(code + 0xcc, (uintptr_t)data + 0x8a); patch_32r(code + 0xd3, (uintptr_t)data + -0x4); patch_32r(code + 0xda, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xe5, (uintptr_t)data + 0x11c); patch_32r(code + 0xec, (uintptr_t)data + 0xb6); patch_32r(code + 0xf3, (uintptr_t)data + -0x4); patch_32r(code + 0xfa, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x105, (uintptr_t)data + 0x11c); } void emit__LOAD_ATTR_NONDESCRIPTOR_NO_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_NONDESCRIPTOR_NO_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: a8 01 testb $0x1, %al // a: 0f 85 83 00 00 00 jne 0x93 <_JIT_ENTRY+0x93> // 10: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 14: 48 8b 43 08 movq 0x8(%rbx), %rax // 18: 48 83 b8 20 01 00 00 00 cmpq $0x0, 0x120(%rax) // 20: 0f 85 8d 00 00 00 jne 0xb3 <_JIT_ENTRY+0xb3> // 26: 48 8b 03 movq (%rbx), %rax // 29: 48 85 c0 testq %rax, %rax // 2c: 7e 06 jle 0x34 <_JIT_ENTRY+0x34> // 2e: 85 c0 testl %eax, %eax // 30: 79 1e jns 0x50 <_JIT_ENTRY+0x50> // 32: eb 27 jmp 0x5b <_JIT_ENTRY+0x5b> // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.1-0x4 // 3b: be ad 0b 00 00 movl $0xbad, %esi # imm = 0xBAD // 40: 48 89 da movq %rbx, %rdx // 43: ff 15 00 00 00 00 callq *(%rip) # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 49: 48 8b 03 movq (%rbx), %rax // 4c: 85 c0 testl %eax, %eax // 4e: 78 0b js 0x5b <_JIT_ENTRY+0x5b> // 50: ff 15 00 00 00 00 callq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 56: 48 ff 0b decq (%rbx) // 59: 74 20 je 0x7b <_JIT_ENTRY+0x7b> // 5b: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 62: 8b 03 movl (%rbx), %eax // 64: ff c0 incl %eax // 66: 74 08 je 0x70 <_JIT_ENTRY+0x70> // 68: 89 03 movl %eax, (%rbx) // 6a: ff 15 00 00 00 00 callq *(%rip) # 0x70 <_JIT_ENTRY+0x70> // 000000000000006c: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 70: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 74: 58 popq %rax // 75: ff 25 00 00 00 00 jmpq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 7b: 48 89 df movq %rbx, %rdi // 7e: ff 15 00 00 00 00 callq *(%rip) # 0x84 <_JIT_ENTRY+0x84> // 0000000000000080: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 84: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x8b <_JIT_ENTRY+0x8b> // 0000000000000087: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 8b: 8b 03 movl (%rbx), %eax // 8d: ff c0 incl %eax // 8f: 75 d7 jne 0x68 <_JIT_ENTRY+0x68> // 91: eb dd jmp 0x70 <_JIT_ENTRY+0x70> // 93: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_PC32 .L.str.80-0x4 // 9a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_PC32 .L.str.1-0x4 // a1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // a8: ba a9 0b 00 00 movl $0xba9, %edx # imm = 0xBA9 // ad: ff 15 00 00 00 00 callq *(%rip) # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_GOTPCRELX __assert_fail-0x4 // b3: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_PC32 .L.str.78-0x4 // ba: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xc1 <_JIT_ENTRY+0xc1> // 00000000000000bd: R_X86_64_PC32 .L.str.1-0x4 // c1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc8 <_JIT_ENTRY+0xc8> // 00000000000000c4: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // c8: ba aa 0b 00 00 movl $0xbaa, %edx # imm = 0xBAA // cd: ff 15 00 00 00 00 callq *(%rip) # 0xd3 <_JIT_ENTRY+0xd3> // 00000000000000cf: R_X86_64_GOTPCRELX __assert_fail-0x4 // d3: const unsigned char code_body[211] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x0f, 0x85, 0x83, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x83, 0xb8, 0x20, 0x01, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x8d, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xad, 0x0b, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x20, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x03, 0xff, 0xc0, 0x75, 0xd7, 0xeb, 0xdd, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xa9, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xaa, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(owner)->tp_dictoffset == 0\x00(oparg & 1) == 0\x00' // c2: 00 00 00 00 00 00 // c8: OPARG // d0: &_Py_NegativeRefcount+0x0 // d8: &_Py_DECREF_DecRefTotal+0x0 // e0: OPERAND // e8: &_Py_INCREF_IncRefTotal+0x0 // f0: CONTINUE // f8: &_Py_Dealloc+0x0 // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x6f, 0x66, 0x66, 0x73, 0x65, 0x74, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x00, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc8, instruction->oparg); patch_64(data + 0xd0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xd8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xe0, instruction->operand); patch_64(data + 0xe8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xf0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x45, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x5e, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x6c, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x80, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x87, (uintptr_t)data + 0xdc); patch_32r(code + 0x96, (uintptr_t)data + 0xad); patch_32r(code + 0x9d, (uintptr_t)data + -0x4); patch_32r(code + 0xa4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0xfc); patch_32r(code + 0xb6, (uintptr_t)data + 0x8a); patch_32r(code + 0xbd, (uintptr_t)data + -0x4); patch_32r(code + 0xc4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xcf, (uintptr_t)data + 0xfc); } void emit__LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: a8 01 testb $0x1, %al // a: 75 71 jne 0x7d <_JIT_ENTRY+0x7d> // c: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 10: 48 8b 03 movq (%rbx), %rax // 13: 48 85 c0 testq %rax, %rax // 16: 7e 06 jle 0x1e <_JIT_ENTRY+0x1e> // 18: 85 c0 testl %eax, %eax // 1a: 79 1e jns 0x3a <_JIT_ENTRY+0x3a> // 1c: eb 27 jmp 0x45 <_JIT_ENTRY+0x45> // 1e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_PC32 .L.str.1-0x4 // 25: be 9d 0b 00 00 movl $0xb9d, %esi # imm = 0xB9D // 2a: 48 89 da movq %rbx, %rdx // 2d: ff 15 00 00 00 00 callq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 33: 48 8b 03 movq (%rbx), %rax // 36: 85 c0 testl %eax, %eax // 38: 78 0b js 0x45 <_JIT_ENTRY+0x45> // 3a: ff 15 00 00 00 00 callq *(%rip) # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 40: 48 ff 0b decq (%rbx) // 43: 74 20 je 0x65 <_JIT_ENTRY+0x65> // 45: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 4c: 8b 03 movl (%rbx), %eax // 4e: ff c0 incl %eax // 50: 74 08 je 0x5a <_JIT_ENTRY+0x5a> // 52: 89 03 movl %eax, (%rbx) // 54: ff 15 00 00 00 00 callq *(%rip) # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 5a: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 5e: 58 popq %rax // 5f: ff 25 00 00 00 00 jmpq *(%rip) # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 65: 48 89 df movq %rbx, %rdi // 68: ff 15 00 00 00 00 callq *(%rip) # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 6e: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 75: 8b 03 movl (%rbx), %eax // 77: ff c0 incl %eax // 79: 75 d7 jne 0x52 <_JIT_ENTRY+0x52> // 7b: eb dd jmp 0x5a <_JIT_ENTRY+0x5a> // 7d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x84 <_JIT_ENTRY+0x84> // 0000000000000080: R_X86_64_PC32 .L.str.80-0x4 // 84: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x8b <_JIT_ENTRY+0x8b> // 0000000000000087: R_X86_64_PC32 .L.str.1-0x4 // 8b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 92: ba 9a 0b 00 00 movl $0xb9a, %edx # imm = 0xB9A // 97: ff 15 00 00 00 00 callq *(%rip) # 0x9d <_JIT_ENTRY+0x9d> // 0000000000000099: R_X86_64_GOTPCRELX __assert_fail-0x4 // 9d: const unsigned char code_body[157] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x75, 0x71, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9d, 0x0b, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x20, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x03, 0xff, 0xc0, 0x75, 0xd7, 0xeb, 0xdd, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9a, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00(oparg & 1) == 0\x00' // 9f: 00 // a0: OPARG // a8: &_Py_NegativeRefcount+0x0 // b0: &_Py_DECREF_DecRefTotal+0x0 // b8: OPERAND // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &_Py_Dealloc+0x0 // d8: &__assert_fail+0x0 const unsigned char data_body[224] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x31, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->oparg); patch_64(data + 0xa8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xb0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xb8, instruction->operand); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xd8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0x9c); patch_32r(code + 0x21, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x48, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x61, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x6a, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0xb4); patch_32r(code + 0x80, (uintptr_t)data + 0x8a); patch_32r(code + 0x87, (uintptr_t)data + -0x4); patch_32r(code + 0x8e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x99, (uintptr_t)data + 0xd4); } void emit__LOAD_ATTR_SLOT_0( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_SLOT_0.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0xc <_JIT_ENTRY+0xc> // 0000000000000008: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // c: 4c 8b 34 03 movq (%rbx,%rax), %r14 // 10: 4d 85 f6 testq %r14, %r14 // 13: 74 1e je 0x33 <_JIT_ENTRY+0x33> // 15: 41 8b 06 movl (%r14), %eax // 18: ff c0 incl %eax // 1a: 75 1e jne 0x3a <_JIT_ENTRY+0x3a> // 1c: 48 8b 03 movq (%rbx), %rax // 1f: 48 85 c0 testq %rax, %rax // 22: 7e 27 jle 0x4b <_JIT_ENTRY+0x4b> // 24: 85 c0 testl %eax, %eax // 26: 79 3f jns 0x67 <_JIT_ENTRY+0x67> // 28: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 2c: 58 popq %rax // 2d: ff 25 00 00 00 00 jmpq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 33: 58 popq %rax // 34: ff 25 00 00 00 00 jmpq *(%rip) # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 3a: 41 89 06 movl %eax, (%r14) // 3d: ff 15 00 00 00 00 callq *(%rip) # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 43: 48 8b 03 movq (%rbx), %rax // 46: 48 85 c0 testq %rax, %rax // 49: 7f d9 jg 0x24 <_JIT_ENTRY+0x24> // 4b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_PC32 .L.str.1-0x4 // 52: be 63 08 00 00 movl $0x863, %esi # imm = 0x863 // 57: 48 89 da movq %rbx, %rdx // 5a: ff 15 00 00 00 00 callq *(%rip) # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 60: 48 8b 03 movq (%rbx), %rax // 63: 85 c0 testl %eax, %eax // 65: 78 c1 js 0x28 <_JIT_ENTRY+0x28> // 67: ff 15 00 00 00 00 callq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 6d: 48 ff 0b decq (%rbx) // 70: 75 b6 jne 0x28 <_JIT_ENTRY+0x28> // 72: 48 89 df movq %rbx, %rdi // 75: ff 15 00 00 00 00 callq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 7b: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 7f: 58 popq %rax // 80: ff 25 00 00 00 00 jmpq *(%rip) # 0x86 <_JIT_ENTRY+0x86> // 0000000000000082: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 80: const unsigned char code_body[128] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x34, 0x03, 0x4d, 0x85, 0xf6, 0x74, 0x1e, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x75, 0x1e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x27, 0x85, 0xc0, 0x79, 0x3f, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xd9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x63, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xc1, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xb6, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPERAND // 48: CONTINUE // 50: JUMP_TARGET // 58: &_Py_INCREF_IncRefTotal+0x0 // 60: &_Py_NegativeRefcount+0x0 // 68: &_Py_DECREF_DecRefTotal+0x0 // 70: &_Py_Dealloc+0x0 const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->operand); patch_64(data + 0x48, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x50, instruction_starts[instruction->jump_target]); patch_64(data + 0x58, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x60, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x68, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x70, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x8, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x36, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0x54); patch_32r(code + 0x4e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x5c, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0x6c); } void emit__LOAD_ATTR_SLOT_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_SLOT_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0xc <_JIT_ENTRY+0xc> // 0000000000000008: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // c: 4c 8b 34 03 movq (%rbx,%rax), %r14 // 10: 4d 85 f6 testq %r14, %r14 // 13: 74 15 je 0x2a <_JIT_ENTRY+0x2a> // 15: 41 8b 06 movl (%r14), %eax // 18: ff c0 incl %eax // 1a: 75 15 jne 0x31 <_JIT_ENTRY+0x31> // 1c: 48 8b 03 movq (%rbx), %rax // 1f: 48 85 c0 testq %rax, %rax // 22: 7e 1e jle 0x42 <_JIT_ENTRY+0x42> // 24: 85 c0 testl %eax, %eax // 26: 79 36 jns 0x5e <_JIT_ENTRY+0x5e> // 28: eb 48 jmp 0x72 <_JIT_ENTRY+0x72> // 2a: 58 popq %rax // 2b: ff 25 00 00 00 00 jmpq *(%rip) # 0x31 <_JIT_ENTRY+0x31> // 000000000000002d: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 31: 41 89 06 movl %eax, (%r14) // 34: ff 15 00 00 00 00 callq *(%rip) # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 3a: 48 8b 03 movq (%rbx), %rax // 3d: 48 85 c0 testq %rax, %rax // 40: 7f e2 jg 0x24 <_JIT_ENTRY+0x24> // 42: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L.str.1-0x4 // 49: be 78 08 00 00 movl $0x878, %esi # imm = 0x878 // 4e: 48 89 da movq %rbx, %rdx // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 57: 48 8b 03 movq (%rbx), %rax // 5a: 85 c0 testl %eax, %eax // 5c: 78 14 js 0x72 <_JIT_ENTRY+0x72> // 5e: ff 15 00 00 00 00 callq *(%rip) # 0x64 <_JIT_ENTRY+0x64> // 0000000000000060: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 64: 48 ff 0b decq (%rbx) // 67: 75 09 jne 0x72 <_JIT_ENTRY+0x72> // 69: 48 89 df movq %rbx, %rdi // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 72: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 76: 48 c7 45 00 00 00 00 00 movq $0x0, (%rbp) // 7e: 48 83 c5 08 addq $0x8, %rbp // 82: 58 popq %rax // 83: ff 25 00 00 00 00 jmpq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 83: const unsigned char code_body[131] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x34, 0x03, 0x4d, 0x85, 0xf6, 0x74, 0x15, 0x41, 0x8b, 0x06, 0xff, 0xc0, 0x75, 0x15, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x1e, 0x85, 0xc0, 0x79, 0x36, 0xeb, 0x48, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x06, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe2, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x78, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x48, 0xc7, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPERAND // 48: JUMP_TARGET // 50: &_Py_INCREF_IncRefTotal+0x0 // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->operand); patch_64(data + 0x48, instruction_starts[instruction->jump_target]); patch_64(data + 0x50, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x8, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x2d, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x36, (uintptr_t)data + 0x4c); patch_32r(code + 0x45, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x60, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x64); } void emit__LOAD_ATTR_WITH_HINT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_ATTR_WITH_HINT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: f6 80 a8 00 00 00 10 testb $0x10, 0xa8(%rax) // 10: 0f 84 49 01 00 00 je 0x15f <_JIT_ENTRY+0x15f> // 16: 48 8b 4b e8 movq -0x18(%rbx), %rcx // 1a: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 21: 48 8b 51 20 movq 0x20(%rcx), %rdx // 25: 48 39 42 18 cmpq %rax, 0x18(%rdx) // 29: 0f 86 a2 00 00 00 jbe 0xd1 <_JIT_ENTRY+0xd1> // 2f: 49 8b 4d 00 movq (%r13), %rcx // 33: 48 8b 71 08 movq 0x8(%rcx), %rsi // 37: 48 3b 35 00 00 00 00 cmpq (%rip), %rsi # 0x3e <_JIT_ENTRY+0x3e> // 000000000000003a: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 3e: 0f 85 3b 01 00 00 jne 0x17f <_JIT_ENTRY+0x17f> // 44: 48 8b 71 20 movq 0x20(%rcx), %rsi // 48: 48 8b 4e 08 movq 0x8(%rsi), %rcx // 4c: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 53: 0f 84 46 01 00 00 je 0x19f <_JIT_ENTRY+0x19f> // 59: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x60 <_JIT_ENTRY+0x60> // 000000000000005c: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 60: 0f 84 59 01 00 00 je 0x1bf <_JIT_ENTRY+0x1bf> // 66: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 6d: 0f 84 6c 01 00 00 je 0x1df <_JIT_ENTRY+0x1df> // 73: 44 0f b7 35 00 00 00 00 movzwl (%rip), %r14d # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 7b: 44 89 f7 movl %r14d, %edi // 7e: d1 ef shrl %edi // 80: 48 39 7e 10 cmpq %rdi, 0x10(%rsi) // 84: 0f 8e 75 01 00 00 jle 0x1ff <_JIT_ENTRY+0x1ff> // 8a: 0f b6 4a 09 movzbl 0x9(%rdx), %ecx // 8e: 41 b8 01 00 00 00 movl $0x1, %r8d // 94: 49 d3 e0 shlq %cl, %r8 // 97: 48 8b 74 fe 18 movq 0x18(%rsi,%rdi,8), %rsi // 9c: 80 7a 0a 00 cmpb $0x0, 0xa(%rdx) // a0: 4a 8d 4c 02 20 leaq 0x20(%rdx,%r8), %rcx // a5: 74 1f je 0xc6 <_JIT_ENTRY+0xc6> // a7: 89 c2 movl %eax, %edx // a9: c1 e2 04 shll $0x4, %edx // ac: 48 39 34 11 cmpq %rsi, (%rcx,%rdx) // b0: 75 1f jne 0xd1 <_JIT_ENTRY+0xd1> // b2: c1 e0 04 shll $0x4, %eax // b5: 48 01 c8 addq %rcx, %rax // b8: 48 83 c0 08 addq $0x8, %rax // bc: 4c 8b 38 movq (%rax), %r15 // bf: 4d 85 ff testq %r15, %r15 // c2: 75 24 jne 0xe8 <_JIT_ENTRY+0xe8> // c4: eb 0b jmp 0xd1 <_JIT_ENTRY+0xd1> // c6: 48 8d 04 40 leaq (%rax,%rax,2), %rax // ca: 48 39 74 c1 08 cmpq %rsi, 0x8(%rcx,%rax,8) // cf: 74 07 je 0xd8 <_JIT_ENTRY+0xd8> // d1: 58 popq %rax // d2: ff 25 00 00 00 00 jmpq *(%rip) # 0xd8 <_JIT_ENTRY+0xd8> // 00000000000000d4: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // d8: 48 8d 04 c1 leaq (%rcx,%rax,8), %rax // dc: 48 83 c0 10 addq $0x10, %rax // e0: 4c 8b 38 movq (%rax), %r15 // e3: 4d 85 ff testq %r15, %r15 // e6: 74 e9 je 0xd1 <_JIT_ENTRY+0xd1> // e8: 41 8b 07 movl (%r15), %eax // eb: ff c0 incl %eax // ed: 75 0e jne 0xfd <_JIT_ENTRY+0xfd> // ef: 48 8b 03 movq (%rbx), %rax // f2: 48 85 c0 testq %rax, %rax // f5: 7e 17 jle 0x10e <_JIT_ENTRY+0x10e> // f7: 85 c0 testl %eax, %eax // f9: 79 2f jns 0x12a <_JIT_ENTRY+0x12a> // fb: eb 41 jmp 0x13e <_JIT_ENTRY+0x13e> // fd: 41 89 07 movl %eax, (%r15) // 100: ff 15 00 00 00 00 callq *(%rip) # 0x106 <_JIT_ENTRY+0x106> // 0000000000000102: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 106: 48 8b 03 movq (%rbx), %rax // 109: 48 85 c0 testq %rax, %rax // 10c: 7f e9 jg 0xf7 <_JIT_ENTRY+0xf7> // 10e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x115 <_JIT_ENTRY+0x115> // 0000000000000111: R_X86_64_PC32 .L.str.1-0x4 // 115: be 4c 08 00 00 movl $0x84c, %esi # imm = 0x84C // 11a: 48 89 da movq %rbx, %rdx // 11d: ff 15 00 00 00 00 callq *(%rip) # 0x123 <_JIT_ENTRY+0x123> // 000000000000011f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 123: 48 8b 03 movq (%rbx), %rax // 126: 85 c0 testl %eax, %eax // 128: 78 14 js 0x13e <_JIT_ENTRY+0x13e> // 12a: ff 15 00 00 00 00 callq *(%rip) # 0x130 <_JIT_ENTRY+0x130> // 000000000000012c: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 130: 48 ff 0b decq (%rbx) // 133: 75 09 jne 0x13e <_JIT_ENTRY+0x13e> // 135: 48 89 df movq %rbx, %rdi // 138: ff 15 00 00 00 00 callq *(%rip) # 0x13e <_JIT_ENTRY+0x13e> // 000000000000013a: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 13e: 4c 89 7d f8 movq %r15, -0x8(%rbp) // 142: 41 83 e6 01 andl $0x1, %r14d // 146: 74 08 je 0x150 <_JIT_ENTRY+0x150> // 148: 48 c7 45 00 00 00 00 00 movq $0x0, (%rbp) // 150: 44 89 f0 movl %r14d, %eax // 153: 48 8d 6c c5 00 leaq (%rbp,%rax,8), %rbp // 158: 58 popq %rax // 159: ff 25 00 00 00 00 jmpq *(%rip) # 0x15f <_JIT_ENTRY+0x15f> // 000000000000015b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 15f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x166 <_JIT_ENTRY+0x166> // 0000000000000162: R_X86_64_PC32 .L.str.148-0x4 // 166: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x16d <_JIT_ENTRY+0x16d> // 0000000000000169: R_X86_64_PC32 .L.str.118-0x4 // 16d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x174 <_JIT_ENTRY+0x174> // 0000000000000170: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_ManagedDictPointer-0x4 // 174: ba ac 02 00 00 movl $0x2ac, %edx # imm = 0x2AC // 179: ff 15 00 00 00 00 callq *(%rip) # 0x17f <_JIT_ENTRY+0x17f> // 000000000000017b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 17f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x186 <_JIT_ENTRY+0x186> // 0000000000000182: R_X86_64_PC32 .L.str.108-0x4 // 186: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x18d <_JIT_ENTRY+0x18d> // 0000000000000189: R_X86_64_PC32 .L.str.109-0x4 // 18d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x194 <_JIT_ENTRY+0x194> // 0000000000000190: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 194: ba 4d 00 00 00 movl $0x4d, %edx // 199: ff 15 00 00 00 00 callq *(%rip) # 0x19f <_JIT_ENTRY+0x19f> // 000000000000019b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 19f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a6 <_JIT_ENTRY+0x1a6> // 00000000000001a2: R_X86_64_PC32 .L.str.110-0x4 // 1a6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1ad <_JIT_ENTRY+0x1ad> // 00000000000001a9: R_X86_64_PC32 .L.str.111-0x4 // 1ad: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1b4 <_JIT_ENTRY+0x1b4> // 00000000000001b0: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 1b4: ba 99 00 00 00 movl $0x99, %edx // 1b9: ff 15 00 00 00 00 callq *(%rip) # 0x1bf <_JIT_ENTRY+0x1bf> // 00000000000001bb: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1bf: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1c6 <_JIT_ENTRY+0x1c6> // 00000000000001c2: R_X86_64_PC32 .L.str.115-0x4 // 1c6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1cd <_JIT_ENTRY+0x1cd> // 00000000000001c9: R_X86_64_PC32 .L.str.114-0x4 // 1cd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1d4 <_JIT_ENTRY+0x1d4> // 00000000000001d0: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1d4: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 1d9: ff 15 00 00 00 00 callq *(%rip) # 0x1df <_JIT_ENTRY+0x1df> // 00000000000001db: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1df: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1e6 <_JIT_ENTRY+0x1e6> // 00000000000001e2: R_X86_64_PC32 .L.str.116-0x4 // 1e6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1ed <_JIT_ENTRY+0x1ed> // 00000000000001e9: R_X86_64_PC32 .L.str.114-0x4 // 1ed: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1f4 <_JIT_ENTRY+0x1f4> // 00000000000001f0: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1f4: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 1f9: ff 15 00 00 00 00 callq *(%rip) # 0x1ff <_JIT_ENTRY+0x1ff> // 00000000000001fb: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1ff: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x206 <_JIT_ENTRY+0x206> // 0000000000000202: R_X86_64_PC32 .L.str.113-0x4 // 206: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x20d <_JIT_ENTRY+0x20d> // 0000000000000209: R_X86_64_PC32 .L.str.111-0x4 // 20d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x214 <_JIT_ENTRY+0x214> // 0000000000000210: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 214: ba 9b 00 00 00 movl $0x9b, %edx // 219: ff 15 00 00 00 00 callq *(%rip) # 0x21f <_JIT_ENTRY+0x21f> // 000000000000021b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 21f: const unsigned char code_body[543] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0xf6, 0x80, 0xa8, 0x00, 0x00, 0x00, 0x10, 0x0f, 0x84, 0x49, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4b, 0xe8, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x51, 0x20, 0x48, 0x39, 0x42, 0x18, 0x0f, 0x86, 0xa2, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x71, 0x08, 0x48, 0x3b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x3b, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x71, 0x20, 0x48, 0x8b, 0x4e, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x46, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x59, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x6c, 0x01, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0xf7, 0xd1, 0xef, 0x48, 0x39, 0x7e, 0x10, 0x0f, 0x8e, 0x75, 0x01, 0x00, 0x00, 0x0f, 0xb6, 0x4a, 0x09, 0x41, 0xb8, 0x01, 0x00, 0x00, 0x00, 0x49, 0xd3, 0xe0, 0x48, 0x8b, 0x74, 0xfe, 0x18, 0x80, 0x7a, 0x0a, 0x00, 0x4a, 0x8d, 0x4c, 0x02, 0x20, 0x74, 0x1f, 0x89, 0xc2, 0xc1, 0xe2, 0x04, 0x48, 0x39, 0x34, 0x11, 0x75, 0x1f, 0xc1, 0xe0, 0x04, 0x48, 0x01, 0xc8, 0x48, 0x83, 0xc0, 0x08, 0x4c, 0x8b, 0x38, 0x4d, 0x85, 0xff, 0x75, 0x24, 0xeb, 0x0b, 0x48, 0x8d, 0x04, 0x40, 0x48, 0x39, 0x74, 0xc1, 0x08, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x04, 0xc1, 0x48, 0x83, 0xc0, 0x10, 0x4c, 0x8b, 0x38, 0x4d, 0x85, 0xff, 0x74, 0xe9, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x75, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x41, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x4c, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf8, 0x41, 0x83, 0xe6, 0x01, 0x74, 0x08, 0x48, 0xc7, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0xf0, 0x48, 0x8d, 0x6c, 0xc5, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xac, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00PyManagedDictPointer *_PyObject_ManagedDictPointer(PyObject *)\x00' // 2ae: 00 00 // 2b0: OPERAND // 2b8: &PyCode_Type+0x0 // 2c0: &PyLong_Type+0x0 // 2c8: &PyBool_Type+0x0 // 2d0: OPARG // 2d8: JUMP_TARGET // 2e0: &_Py_INCREF_IncRefTotal+0x0 // 2e8: &_Py_NegativeRefcount+0x0 // 2f0: &_Py_DECREF_DecRefTotal+0x0 // 2f8: &_Py_Dealloc+0x0 // 300: CONTINUE // 308: &__assert_fail+0x0 const unsigned char data_body[784] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x69, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x69, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x2b0, instruction->operand); patch_64(data + 0x2b8, (uintptr_t)&PyCode_Type); patch_64(data + 0x2c0, (uintptr_t)&PyLong_Type); patch_64(data + 0x2c8, (uintptr_t)&PyBool_Type); patch_64(data + 0x2d0, instruction->oparg); patch_64(data + 0x2d8, instruction_starts[instruction->jump_target]); patch_64(data + 0x2e0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x2e8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x2f0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x2f8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x300, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x308, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x1d, (uintptr_t)data + 0x2ac); patch_x86_64_32rx(code + 0x3a, (uintptr_t)data + 0x2b4); patch_x86_64_32rx(code + 0x5c, (uintptr_t)data + 0x2bc); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0x2c4); patch_32r(code + 0x77, (uintptr_t)data + 0x2cc); patch_x86_64_32rx(code + 0xd4, (uintptr_t)data + 0x2d4); patch_x86_64_32rx(code + 0x102, (uintptr_t)data + 0x2dc); patch_32r(code + 0x111, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x11f, (uintptr_t)data + 0x2e4); patch_x86_64_32rx(code + 0x12c, (uintptr_t)data + 0x2ec); patch_x86_64_32rx(code + 0x13a, (uintptr_t)data + 0x2f4); patch_x86_64_32rx(code + 0x15b, (uintptr_t)data + 0x2fc); patch_32r(code + 0x162, (uintptr_t)data + 0x23a); patch_32r(code + 0x169, (uintptr_t)data + 0x1f3); patch_32r(code + 0x170, (uintptr_t)data + 0x26b); patch_x86_64_32rx(code + 0x17b, (uintptr_t)data + 0x304); patch_32r(code + 0x182, (uintptr_t)data + 0x3c); patch_32r(code + 0x189, (uintptr_t)data + 0x5a); patch_32r(code + 0x190, (uintptr_t)data + 0xa0); patch_x86_64_32rx(code + 0x19b, (uintptr_t)data + 0x304); patch_32r(code + 0x1a2, (uintptr_t)data + 0xd6); patch_32r(code + 0x1a9, (uintptr_t)data + 0xe7); patch_32r(code + 0x1b0, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x1bb, (uintptr_t)data + 0x304); patch_32r(code + 0x1c2, (uintptr_t)data + 0x19c); patch_32r(code + 0x1c9, (uintptr_t)data + 0x165); patch_32r(code + 0x1d0, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x1db, (uintptr_t)data + 0x304); patch_32r(code + 0x1e2, (uintptr_t)data + 0x1d7); patch_32r(code + 0x1e9, (uintptr_t)data + 0x165); patch_32r(code + 0x1f0, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x1fb, (uintptr_t)data + 0x304); patch_32r(code + 0x202, (uintptr_t)data + 0x14d); patch_32r(code + 0x209, (uintptr_t)data + 0xe7); patch_32r(code + 0x210, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x21b, (uintptr_t)data + 0x304); } void emit__LOAD_BUILD_CLASS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_BUILD_CLASS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 7d 20 movq 0x20(%r13), %rdi // 5: be e0 c2 00 00 movl $0xc2e0, %esi # imm = 0xC2E0 // a: 48 03 35 00 00 00 00 addq (%rip), %rsi # 0x11 <_JIT_ENTRY+0x11> // 000000000000000d: R_X86_64_REX_GOTPCRELX _PyRuntime-0x4 // 11: 48 89 e2 movq %rsp, %rdx // 14: ff 15 00 00 00 00 callq *(%rip) # 0x1a <_JIT_ENTRY+0x1a> // 0000000000000016: R_X86_64_GOTPCRELX PyMapping_GetOptionalItem-0x4 // 1a: 85 c0 testl %eax, %eax // 1c: 78 18 js 0x36 <_JIT_ENTRY+0x36> // 1e: 48 8b 04 24 movq (%rsp), %rax // 22: 48 85 c0 testq %rax, %rax // 25: 74 16 je 0x3d <_JIT_ENTRY+0x3d> // 27: 48 89 45 00 movq %rax, (%rbp) // 2b: 48 83 c5 08 addq $0x8, %rbp // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 58 popq %rax // 37: ff 25 00 00 00 00 jmpq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 3d: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_REX_GOTPCRELX PyExc_NameError-0x4 // 44: 48 8b 30 movq (%rax), %rsi // 47: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_PC32 .L.str.21-0x4 // 4e: 4c 89 e7 movq %r12, %rdi // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _PyErr_SetString-0x4 // 57: 58 popq %rax // 58: ff 25 00 00 00 00 jmpq *(%rip) # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 5e: const unsigned char code_body[94] = { 0x50, 0x49, 0x8b, 0x7d, 0x20, 0xbe, 0xe0, 0xc2, 0x00, 0x00, 0x48, 0x03, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xe2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x18, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x74, 0x16, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '__build_class__ not found\x00' // 1a: 00 00 00 00 00 00 // 20: &_PyRuntime+0x0 // 28: &PyMapping_GetOptionalItem+0x0 // 30: CONTINUE // 38: ERROR_TARGET // 40: &PyExc_NameError+0x0 // 48: &_PyErr_SetString+0x0 const unsigned char data_body[80] = { 0x5f, 0x5f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x5f, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x5f, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x20, (uintptr_t)&_PyRuntime); patch_64(data + 0x28, (uintptr_t)&PyMapping_GetOptionalItem); patch_64(data + 0x30, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x38, instruction_starts[instruction->error_target]); patch_64(data + 0x40, (uintptr_t)&PyExc_NameError); patch_64(data + 0x48, (uintptr_t)&_PyErr_SetString); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xd, (uintptr_t)data + 0x1c); patch_x86_64_32rx(code + 0x16, (uintptr_t)data + 0x24); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0x2c); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0x34); patch_x86_64_32rx(code + 0x40, (uintptr_t)data + 0x3c); patch_32r(code + 0x4a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0x34); } void emit__LOAD_CONST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_CONST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 75 5e jne 0x70 <_JIT_ENTRY+0x70> // 12: 48 8b 40 18 movq 0x18(%rax), %rax // 16: 48 8b 48 08 movq 0x8(%rax), %rcx // 1a: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 21: 74 6d je 0x90 <_JIT_ENTRY+0x90> // 23: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 2a: 0f 84 80 00 00 00 je 0xb0 <_JIT_ENTRY+0xb0> // 30: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 37: 0f 84 93 00 00 00 je 0xd0 <_JIT_ENTRY+0xd0> // 3d: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 44: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 48: 0f 8e a2 00 00 00 jle 0xf0 <_JIT_ENTRY+0xf0> // 4e: 48 8b 5c c8 18 movq 0x18(%rax,%rcx,8), %rbx // 53: 8b 03 movl (%rbx), %eax // 55: ff c0 incl %eax // 57: 74 08 je 0x61 <_JIT_ENTRY+0x61> // 59: 89 03 movl %eax, (%rbx) // 5b: ff 15 00 00 00 00 callq *(%rip) # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 61: 48 89 5d 00 movq %rbx, (%rbp) // 65: 48 83 c5 08 addq $0x8, %rbp // 69: 58 popq %rax // 6a: ff 25 00 00 00 00 jmpq *(%rip) # 0x70 <_JIT_ENTRY+0x70> // 000000000000006c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 70: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_PC32 .L.str.108-0x4 // 77: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_PC32 .L.str.109-0x4 // 7e: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 85: ba 4d 00 00 00 movl $0x4d, %edx // 8a: ff 15 00 00 00 00 callq *(%rip) # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_GOTPCRELX __assert_fail-0x4 // 90: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_PC32 .L.str.110-0x4 // 97: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_PC32 .L.str.111-0x4 // 9e: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa5 <_JIT_ENTRY+0xa5> // 00000000000000a1: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // a5: ba 99 00 00 00 movl $0x99, %edx // aa: ff 15 00 00 00 00 callq *(%rip) # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_GOTPCRELX __assert_fail-0x4 // b0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb7 <_JIT_ENTRY+0xb7> // 00000000000000b3: R_X86_64_PC32 .L.str.115-0x4 // b7: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xbe <_JIT_ENTRY+0xbe> // 00000000000000ba: R_X86_64_PC32 .L.str.114-0x4 // be: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc5 <_JIT_ENTRY+0xc5> // 00000000000000c1: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // c5: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // ca: ff 15 00 00 00 00 callq *(%rip) # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_GOTPCRELX __assert_fail-0x4 // d0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L.str.116-0x4 // d7: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_PC32 .L.str.114-0x4 // de: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xe5 <_JIT_ENTRY+0xe5> // 00000000000000e1: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // e5: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // ea: ff 15 00 00 00 00 callq *(%rip) # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_GOTPCRELX __assert_fail-0x4 // f0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L.str.113-0x4 // f7: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_PC32 .L.str.111-0x4 // fe: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 105: ba 9b 00 00 00 movl $0x9b, %edx // 10a: ff 15 00 00 00 00 callq *(%rip) # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_GOTPCRELX __assert_fail-0x4 // 110: const unsigned char code_body[272] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x5e, 0x48, 0x8b, 0x40, 0x18, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x74, 0x6d, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x93, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0xa2, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0xc8, 0x18, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 1b7: 00 // 1b8: &PyCode_Type+0x0 // 1c0: &PyLong_Type+0x0 // 1c8: &PyBool_Type+0x0 // 1d0: OPARG // 1d8: &_Py_INCREF_IncRefTotal+0x0 // 1e0: CONTINUE // 1e8: &__assert_fail+0x0 const unsigned char data_body[496] = { 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1b8, (uintptr_t)&PyCode_Type); patch_64(data + 0x1c0, (uintptr_t)&PyLong_Type); patch_64(data + 0x1c8, (uintptr_t)&PyBool_Type); patch_64(data + 0x1d0, instruction->oparg); patch_64(data + 0x1d8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x1e0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1e8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1b4); patch_x86_64_32rx(code + 0x26, (uintptr_t)data + 0x1bc); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0x1c4); patch_32r(code + 0x40, (uintptr_t)data + 0x1cc); patch_x86_64_32rx(code + 0x5d, (uintptr_t)data + 0x1d4); patch_x86_64_32rx(code + 0x6c, (uintptr_t)data + 0x1dc); patch_32r(code + 0x73, (uintptr_t)data + -0x4); patch_32r(code + 0x7a, (uintptr_t)data + 0x1a); patch_32r(code + 0x81, (uintptr_t)data + 0x60); patch_x86_64_32rx(code + 0x8c, (uintptr_t)data + 0x1e4); patch_32r(code + 0x93, (uintptr_t)data + 0x96); patch_32r(code + 0x9a, (uintptr_t)data + 0xa7); patch_32r(code + 0xa1, (uintptr_t)data + 0xe3); patch_x86_64_32rx(code + 0xac, (uintptr_t)data + 0x1e4); patch_32r(code + 0xb3, (uintptr_t)data + 0x15c); patch_32r(code + 0xba, (uintptr_t)data + 0x125); patch_32r(code + 0xc1, (uintptr_t)data + 0x178); patch_x86_64_32rx(code + 0xcc, (uintptr_t)data + 0x1e4); patch_32r(code + 0xd3, (uintptr_t)data + 0x197); patch_32r(code + 0xda, (uintptr_t)data + 0x125); patch_32r(code + 0xe1, (uintptr_t)data + 0x178); patch_x86_64_32rx(code + 0xec, (uintptr_t)data + 0x1e4); patch_32r(code + 0xf3, (uintptr_t)data + 0x10d); patch_32r(code + 0xfa, (uintptr_t)data + 0xa7); patch_32r(code + 0x101, (uintptr_t)data + 0xe3); patch_x86_64_32rx(code + 0x10c, (uintptr_t)data + 0x1e4); } void emit__LOAD_CONST_INLINE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_CONST_INLINE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 8: 8b 03 movl (%rbx), %eax // a: ff c0 incl %eax // c: 74 08 je 0x16 <_JIT_ENTRY+0x16> // e: 89 03 movl %eax, (%rbx) // 10: ff 15 00 00 00 00 callq *(%rip) # 0x16 <_JIT_ENTRY+0x16> // 0000000000000012: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 16: 48 89 5d 00 movq %rbx, (%rbp) // 1a: 48 83 c5 08 addq $0x8, %rbp // 1e: 58 popq %rax // 1f: ff 25 00 00 00 00 jmpq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1f: const unsigned char code_body[31] = { 0x50, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, }; // 0: // 0: OPERAND // 8: &_Py_INCREF_IncRefTotal+0x0 const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->operand); patch_64(data + 0x8, (uintptr_t)&_Py_INCREF_IncRefTotal); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x12, (uintptr_t)data + 0x4); } void emit__LOAD_CONST_INLINE_BORROW( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_CONST_INLINE_BORROW.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 7: 48 89 45 00 movq %rax, (%rbp) // b: 48 83 c5 08 addq $0x8, %rbp // f: ff 25 00 00 00 00 jmpq *(%rip) # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // f: const unsigned char code_body[15] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, }; // 0: // 0: OPERAND const unsigned char data_body[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->operand); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + -0x4); } void emit__LOAD_CONST_INLINE_BORROW_WITH_NULL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_CONST_INLINE_BORROW_WITH_NULL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 7: 48 89 45 00 movq %rax, (%rbp) // b: 48 c7 45 08 00 00 00 00 movq $0x0, 0x8(%rbp) // 13: 48 83 c5 10 addq $0x10, %rbp // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0x00, 0x48, 0xc7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0x10, }; // 0: // 0: OPERAND const unsigned char data_body[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->operand); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + -0x4); } void emit__LOAD_CONST_INLINE_WITH_NULL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_CONST_INLINE_WITH_NULL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 8: 8b 03 movl (%rbx), %eax // a: ff c0 incl %eax // c: 74 08 je 0x16 <_JIT_ENTRY+0x16> // e: 89 03 movl %eax, (%rbx) // 10: ff 15 00 00 00 00 callq *(%rip) # 0x16 <_JIT_ENTRY+0x16> // 0000000000000012: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 16: 48 89 5d 00 movq %rbx, (%rbp) // 1a: 48 c7 45 08 00 00 00 00 movq $0x0, 0x8(%rbp) // 22: 48 83 c5 10 addq $0x10, %rbp // 26: 58 popq %rax // 27: ff 25 00 00 00 00 jmpq *(%rip) # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 27: const unsigned char code_body[39] = { 0x50, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0xc7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0x10, 0x58, }; // 0: // 0: OPERAND // 8: &_Py_INCREF_IncRefTotal+0x0 const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->operand); patch_64(data + 0x8, (uintptr_t)&_Py_INCREF_IncRefTotal); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x12, (uintptr_t)data + 0x4); } void emit__LOAD_DEREF( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_DEREF.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: 49 8b 44 c5 48 movq 0x48(%r13,%rax,8), %rax // d: 48 8b 58 10 movq 0x10(%rax), %rbx // 11: 48 85 db testq %rbx, %rbx // 14: 74 1d je 0x33 <_JIT_ENTRY+0x33> // 16: 8b 03 movl (%rbx), %eax // 18: ff c0 incl %eax // 1a: 74 08 je 0x24 <_JIT_ENTRY+0x24> // 1c: 89 03 movl %eax, (%rbx) // 1e: ff 15 00 00 00 00 callq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 24: 48 89 5d 00 movq %rbx, (%rbp) // 28: 48 83 c5 08 addq $0x8, %rbp // 2c: 58 popq %rax // 2d: ff 25 00 00 00 00 jmpq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 33: 49 8b 75 00 movq (%r13), %rsi // 37: 48 8b 46 08 movq 0x8(%rsi), %rax // 3b: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 42: 75 17 jne 0x5b <_JIT_ENTRY+0x5b> // 44: 0f b7 15 00 00 00 00 movzwl (%rip), %edx # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4b: 4c 89 e7 movq %r12, %rdi // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX _PyEval_FormatExcUnbound-0x4 // 54: 58 popq %rax // 55: ff 25 00 00 00 00 jmpq *(%rip) # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 5b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.108-0x4 // 62: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L.str.109-0x4 // 69: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x70 <_JIT_ENTRY+0x70> // 000000000000006c: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 70: ba 4d 00 00 00 movl $0x4d, %edx // 75: ff 15 00 00 00 00 callq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX __assert_fail-0x4 // 7b: const unsigned char code_body[123] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x44, 0xc5, 0x48, 0x48, 0x8b, 0x58, 0x10, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x75, 0x00, 0x48, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x17, 0x0f, 0xb7, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 9a: 00 00 00 00 00 00 // a0: OPARG // a8: &_Py_INCREF_IncRefTotal+0x0 // b0: CONTINUE // b8: &PyCode_Type+0x0 // c0: &_PyEval_FormatExcUnbound+0x0 // c8: ERROR_TARGET // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->oparg); patch_64(data + 0xa8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xb0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xb8, (uintptr_t)&PyCode_Type); patch_64(data + 0xc0, (uintptr_t)&_PyEval_FormatExcUnbound); patch_64(data + 0xc8, instruction_starts[instruction->error_target]); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x3e, (uintptr_t)data + 0xb4); patch_32r(code + 0x47, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x57, (uintptr_t)data + 0xc4); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x1a); patch_32r(code + 0x6c, (uintptr_t)data + 0x60); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: 49 8b 5c c5 48 movq 0x48(%r13,%rax,8), %rbx // d: 48 85 db testq %rbx, %rbx // 10: 74 1d je 0x2f <_JIT_ENTRY+0x2f> // 12: 8b 03 movl (%rbx), %eax // 14: ff c0 incl %eax // 16: 74 08 je 0x20 <_JIT_ENTRY+0x20> // 18: 89 03 movl %eax, (%rbx) // 1a: ff 15 00 00 00 00 callq *(%rip) # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 20: 48 89 5d 00 movq %rbx, (%rbp) // 24: 48 83 c5 08 addq $0x8, %rbp // 28: 58 popq %rax // 29: ff 25 00 00 00 00 jmpq *(%rip) # 0x2f <_JIT_ENTRY+0x2f> // 000000000000002b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_PC32 .L.str.4-0x4 // 36: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.1-0x4 // 3d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 44: ba 98 00 00 00 movl $0x98, %edx // 49: ff 15 00 00 00 00 callq *(%rip) # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 4f: const unsigned char code_body[79] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x5c, 0xc5, 0x48, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x98, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00value != NULL\x00' // 9c: 00 00 00 00 // a0: OPARG // a8: &_Py_INCREF_IncRefTotal+0x0 // b0: CONTINUE // b8: &__assert_fail+0x0 const unsigned char data_body[192] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->oparg); patch_64(data + 0xa8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xb0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xb8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x2b, (uintptr_t)data + 0xac); patch_32r(code + 0x32, (uintptr_t)data + 0x8a); patch_32r(code + 0x39, (uintptr_t)data + -0x4); patch_32r(code + 0x40, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x4b, (uintptr_t)data + 0xb4); } void emit__LOAD_FAST_0( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_0.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 85 c0 testw %ax, %ax // b: 75 26 jne 0x33 <_JIT_ENTRY+0x33> // d: 49 8b 5d 48 movq 0x48(%r13), %rbx // 11: 48 85 db testq %rbx, %rbx // 14: 74 3d je 0x53 <_JIT_ENTRY+0x53> // 16: 8b 03 movl (%rbx), %eax // 18: ff c0 incl %eax // 1a: 74 08 je 0x24 <_JIT_ENTRY+0x24> // 1c: 89 03 movl %eax, (%rbx) // 1e: ff 15 00 00 00 00 callq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 24: 48 89 5d 00 movq %rbx, (%rbp) // 28: 48 83 c5 08 addq $0x8, %rbp // 2c: 58 popq %rax // 2d: ff 25 00 00 00 00 jmpq *(%rip) # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 33: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_PC32 .L.str.3-0x4 // 3a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_PC32 .L.str.1-0x4 // 41: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 48: ba 37 00 00 00 movl $0x37, %edx // 4d: ff 15 00 00 00 00 callq *(%rip) # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 53: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_PC32 .L.str.4-0x4 // 5a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_PC32 .L.str.1-0x4 // 61: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 68: ba 39 00 00 00 movl $0x39, %edx // 6d: ff 15 00 00 00 00 callq *(%rip) # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 73: const unsigned char code_body[115] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x75, 0x26, 0x49, 0x8b, 0x5d, 0x48, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x37, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x39, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x2f, (uintptr_t)data + 0xc4); patch_32r(code + 0x36, (uintptr_t)data + 0x8a); patch_32r(code + 0x3d, (uintptr_t)data + -0x4); patch_32r(code + 0x44, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x4f, (uintptr_t)data + 0xcc); patch_32r(code + 0x56, (uintptr_t)data + 0xa3); patch_32r(code + 0x5d, (uintptr_t)data + -0x4); patch_32r(code + 0x64, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x6f, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 01 cmpw $0x1, %ax // c: 75 26 jne 0x34 <_JIT_ENTRY+0x34> // e: 49 8b 5d 50 movq 0x50(%r13), %rbx // 12: 48 85 db testq %rbx, %rbx // 15: 74 3d je 0x54 <_JIT_ENTRY+0x54> // 17: 8b 03 movl (%rbx), %eax // 19: ff c0 incl %eax // 1b: 74 08 je 0x25 <_JIT_ENTRY+0x25> // 1d: 89 03 movl %eax, (%rbx) // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 25: 48 89 5d 00 movq %rbx, (%rbp) // 29: 48 83 c5 08 addq $0x8, %rbp // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.3-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba 43 00 00 00 movl $0x43, %edx // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L.str.4-0x4 // 5b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.1-0x4 // 62: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 69: ba 45 00 00 00 movl $0x45, %edx // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX __assert_fail-0x4 // 74: const unsigned char code_body[116] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x75, 0x26, 0x49, 0x8b, 0x5d, 0x50, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x43, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x45, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); patch_32r(code + 0x57, (uintptr_t)data + 0xa3); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_2( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_2.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 02 cmpw $0x2, %ax // c: 75 26 jne 0x34 <_JIT_ENTRY+0x34> // e: 49 8b 5d 58 movq 0x58(%r13), %rbx // 12: 48 85 db testq %rbx, %rbx // 15: 74 3d je 0x54 <_JIT_ENTRY+0x54> // 17: 8b 03 movl (%rbx), %eax // 19: ff c0 incl %eax // 1b: 74 08 je 0x25 <_JIT_ENTRY+0x25> // 1d: 89 03 movl %eax, (%rbx) // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 25: 48 89 5d 00 movq %rbx, (%rbp) // 29: 48 83 c5 08 addq $0x8, %rbp // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.3-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba 4f 00 00 00 movl $0x4f, %edx // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L.str.4-0x4 // 5b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.1-0x4 // 62: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 69: ba 51 00 00 00 movl $0x51, %edx // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX __assert_fail-0x4 // 74: const unsigned char code_body[116] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x02, 0x75, 0x26, 0x49, 0x8b, 0x5d, 0x58, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4f, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x51, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); patch_32r(code + 0x57, (uintptr_t)data + 0xa3); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_3( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_3.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 03 cmpw $0x3, %ax // c: 75 26 jne 0x34 <_JIT_ENTRY+0x34> // e: 49 8b 5d 60 movq 0x60(%r13), %rbx // 12: 48 85 db testq %rbx, %rbx // 15: 74 3d je 0x54 <_JIT_ENTRY+0x54> // 17: 8b 03 movl (%rbx), %eax // 19: ff c0 incl %eax // 1b: 74 08 je 0x25 <_JIT_ENTRY+0x25> // 1d: 89 03 movl %eax, (%rbx) // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 25: 48 89 5d 00 movq %rbx, (%rbp) // 29: 48 83 c5 08 addq $0x8, %rbp // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.3-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba 5b 00 00 00 movl $0x5b, %edx // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L.str.4-0x4 // 5b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.1-0x4 // 62: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 69: ba 5d 00 00 00 movl $0x5d, %edx // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX __assert_fail-0x4 // 74: const unsigned char code_body[116] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x03, 0x75, 0x26, 0x49, 0x8b, 0x5d, 0x60, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); patch_32r(code + 0x57, (uintptr_t)data + 0xa3); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_4( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_4.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 04 cmpw $0x4, %ax // c: 75 26 jne 0x34 <_JIT_ENTRY+0x34> // e: 49 8b 5d 68 movq 0x68(%r13), %rbx // 12: 48 85 db testq %rbx, %rbx // 15: 74 3d je 0x54 <_JIT_ENTRY+0x54> // 17: 8b 03 movl (%rbx), %eax // 19: ff c0 incl %eax // 1b: 74 08 je 0x25 <_JIT_ENTRY+0x25> // 1d: 89 03 movl %eax, (%rbx) // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 25: 48 89 5d 00 movq %rbx, (%rbp) // 29: 48 83 c5 08 addq $0x8, %rbp // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.3-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba 67 00 00 00 movl $0x67, %edx // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L.str.4-0x4 // 5b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.1-0x4 // 62: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 69: ba 69 00 00 00 movl $0x69, %edx // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX __assert_fail-0x4 // 74: const unsigned char code_body[116] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x04, 0x75, 0x26, 0x49, 0x8b, 0x5d, 0x68, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x67, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x69, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); patch_32r(code + 0x57, (uintptr_t)data + 0xa3); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_5( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_5.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 05 cmpw $0x5, %ax // c: 75 26 jne 0x34 <_JIT_ENTRY+0x34> // e: 49 8b 5d 70 movq 0x70(%r13), %rbx // 12: 48 85 db testq %rbx, %rbx // 15: 74 3d je 0x54 <_JIT_ENTRY+0x54> // 17: 8b 03 movl (%rbx), %eax // 19: ff c0 incl %eax // 1b: 74 08 je 0x25 <_JIT_ENTRY+0x25> // 1d: 89 03 movl %eax, (%rbx) // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 25: 48 89 5d 00 movq %rbx, (%rbp) // 29: 48 83 c5 08 addq $0x8, %rbp // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.3-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba 73 00 00 00 movl $0x73, %edx // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L.str.4-0x4 // 5b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.1-0x4 // 62: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 69: ba 75 00 00 00 movl $0x75, %edx // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX __assert_fail-0x4 // 74: const unsigned char code_body[116] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x05, 0x75, 0x26, 0x49, 0x8b, 0x5d, 0x70, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x73, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x75, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); patch_32r(code + 0x57, (uintptr_t)data + 0xa3); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_6( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_6.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 06 cmpw $0x6, %ax // c: 75 26 jne 0x34 <_JIT_ENTRY+0x34> // e: 49 8b 5d 78 movq 0x78(%r13), %rbx // 12: 48 85 db testq %rbx, %rbx // 15: 74 3d je 0x54 <_JIT_ENTRY+0x54> // 17: 8b 03 movl (%rbx), %eax // 19: ff c0 incl %eax // 1b: 74 08 je 0x25 <_JIT_ENTRY+0x25> // 1d: 89 03 movl %eax, (%rbx) // 1f: ff 15 00 00 00 00 callq *(%rip) # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 25: 48 89 5d 00 movq %rbx, (%rbp) // 29: 48 83 c5 08 addq $0x8, %rbp // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.3-0x4 // 3b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 49: ba 7f 00 00 00 movl $0x7f, %edx // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX __assert_fail-0x4 // 54: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L.str.4-0x4 // 5b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_PC32 .L.str.1-0x4 // 62: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 69: ba 81 00 00 00 movl $0x81, %edx // 6e: ff 15 00 00 00 00 callq *(%rip) # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_GOTPCRELX __assert_fail-0x4 // 74: const unsigned char code_body[116] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x06, 0x75, 0x26, 0x49, 0x8b, 0x5d, 0x78, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x7f, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x81, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xc4); patch_32r(code + 0x37, (uintptr_t)data + 0x8a); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_32r(code + 0x45, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0xcc); patch_32r(code + 0x57, (uintptr_t)data + 0xa3); patch_32r(code + 0x5e, (uintptr_t)data + -0x4); patch_32r(code + 0x65, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x70, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_7( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_7.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 07 cmpw $0x7, %ax // c: 75 29 jne 0x37 <_JIT_ENTRY+0x37> // e: 49 8b 9d 80 00 00 00 movq 0x80(%r13), %rbx // 15: 48 85 db testq %rbx, %rbx // 18: 74 3d je 0x57 <_JIT_ENTRY+0x57> // 1a: 8b 03 movl (%rbx), %eax // 1c: ff c0 incl %eax // 1e: 74 08 je 0x28 <_JIT_ENTRY+0x28> // 20: 89 03 movl %eax, (%rbx) // 22: ff 15 00 00 00 00 callq *(%rip) # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 28: 48 89 5d 00 movq %rbx, (%rbp) // 2c: 48 83 c5 08 addq $0x8, %rbp // 30: 58 popq %rax // 31: ff 25 00 00 00 00 jmpq *(%rip) # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 37: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3e <_JIT_ENTRY+0x3e> // 000000000000003a: R_X86_64_PC32 .L.str.3-0x4 // 3e: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_PC32 .L.str.1-0x4 // 45: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 4c: ba 8b 00 00 00 movl $0x8b, %edx // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX __assert_fail-0x4 // 57: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_PC32 .L.str.4-0x4 // 5e: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_PC32 .L.str.1-0x4 // 65: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 6c: ba 8d 00 00 00 movl $0x8d, %edx // 71: ff 15 00 00 00 00 callq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX __assert_fail-0x4 // 77: const unsigned char code_body[119] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x07, 0x75, 0x29, 0x49, 0x8b, 0x9d, 0x80, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x3d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x8b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x8d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00value != NULL\x00' // b5: 00 00 00 // b8: OPARG // c0: &_Py_INCREF_IncRefTotal+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0xc4); patch_32r(code + 0x3a, (uintptr_t)data + 0x8a); patch_32r(code + 0x41, (uintptr_t)data + -0x4); patch_32r(code + 0x48, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0xcc); patch_32r(code + 0x5a, (uintptr_t)data + 0xa3); patch_32r(code + 0x61, (uintptr_t)data + -0x4); patch_32r(code + 0x68, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0xcc); } void emit__LOAD_FAST_AND_CLEAR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_AND_CLEAR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 7: 49 8b 4c c5 48 movq 0x48(%r13,%rax,8), %rcx // c: 49 c7 44 c5 48 00 00 00 00 movq $0x0, 0x48(%r13,%rax,8) // 15: 48 89 4d 00 movq %rcx, (%rbp) // 19: 48 83 c5 08 addq $0x8, %rbp // 1d: ff 25 00 00 00 00 jmpq *(%rip) # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1d: const unsigned char code_body[29] = { 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4c, 0xc5, 0x48, 0x49, 0xc7, 0x44, 0xc5, 0x48, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x4d, 0x00, 0x48, 0x83, 0xc5, 0x08, }; // 0: // 0: OPARG const unsigned char data_body[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3, (uintptr_t)data + -0x4); } void emit__LOAD_FAST_CHECK( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FAST_CHECK.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 0f b7 c8 movzwl %ax, %ecx // b: 49 8b 5c cd 48 movq 0x48(%r13,%rcx,8), %rbx // 10: 48 85 db testq %rbx, %rbx // 13: 74 1d je 0x32 <_JIT_ENTRY+0x32> // 15: 8b 03 movl (%rbx), %eax // 17: ff c0 incl %eax // 19: 74 08 je 0x23 <_JIT_ENTRY+0x23> // 1b: 89 03 movl %eax, (%rbx) // 1d: ff 15 00 00 00 00 callq *(%rip) # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 23: 48 89 5d 00 movq %rbx, (%rbp) // 27: 48 83 c5 08 addq $0x8, %rbp // 2b: 58 popq %rax // 2c: ff 25 00 00 00 00 jmpq *(%rip) # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 32: 49 8b 4d 00 movq (%r13), %rcx // 36: 48 8b 51 08 movq 0x8(%rcx), %rdx // 3a: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 41: 75 34 jne 0x77 <_JIT_ENTRY+0x77> // 43: 0f b7 f0 movzwl %ax, %esi // 46: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_REX_GOTPCRELX PyExc_UnboundLocalError-0x4 // 4d: 48 8b 18 movq (%rax), %rbx // 50: 48 8b 79 60 movq 0x60(%rcx), %rdi // 54: ff 15 00 00 00 00 callq *(%rip) # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_GOTPCRELX PyTuple_GetItem-0x4 // 5a: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_PC32 .L.str.2-0x4 // 61: 4c 89 e7 movq %r12, %rdi // 64: 48 89 de movq %rbx, %rsi // 67: 48 89 c1 movq %rax, %rcx // 6a: ff 15 00 00 00 00 callq *(%rip) # 0x70 <_JIT_ENTRY+0x70> // 000000000000006c: R_X86_64_GOTPCRELX _PyEval_FormatExcCheckArg-0x4 // 70: 58 popq %rax // 71: ff 25 00 00 00 00 jmpq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 77: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_PC32 .L.str.108-0x4 // 7e: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x85 <_JIT_ENTRY+0x85> // 0000000000000081: R_X86_64_PC32 .L.str.109-0x4 // 85: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 8c: ba 4d 00 00 00 movl $0x4d, %edx // 91: ff 15 00 00 00 00 callq *(%rip) # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_GOTPCRELX __assert_fail-0x4 // 97: const unsigned char code_body[151] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc8, 0x49, 0x8b, 0x5c, 0xcd, 0x48, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x34, 0x0f, 0xb7, 0xf0, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x18, 0x48, 0x8b, 0x79, 0x60, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xde, 0x48, 0x89, 0xc1, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "cannot access local variable '%s' where it is not associated with a value\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00" // e4: 00 00 00 00 // e8: OPARG // f0: &_Py_INCREF_IncRefTotal+0x0 // f8: CONTINUE // 100: &PyCode_Type+0x0 // 108: &PyExc_UnboundLocalError+0x0 // 110: &PyTuple_GetItem+0x0 // 118: &_PyEval_FormatExcCheckArg+0x0 // 120: ERROR_TARGET // 128: &__assert_fail+0x0 const unsigned char data_body[304] = { 0x63, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x63, 0x63, 0x65, 0x73, 0x73, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x20, 0x76, 0x61, 0x72, 0x69, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x27, 0x25, 0x73, 0x27, 0x20, 0x77, 0x68, 0x65, 0x72, 0x65, 0x20, 0x69, 0x74, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x61, 0x73, 0x73, 0x6f, 0x63, 0x69, 0x61, 0x74, 0x65, 0x64, 0x20, 0x77, 0x69, 0x74, 0x68, 0x20, 0x61, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe8, instruction->oparg); patch_64(data + 0xf0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xf8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x100, (uintptr_t)&PyCode_Type); patch_64(data + 0x108, (uintptr_t)&PyExc_UnboundLocalError); patch_64(data + 0x110, (uintptr_t)&PyTuple_GetItem); patch_64(data + 0x118, (uintptr_t)&_PyEval_FormatExcCheckArg); patch_64(data + 0x120, instruction_starts[instruction->error_target]); patch_64(data + 0x128, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x1f, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x104); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0x10c); patch_32r(code + 0x5d, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x6c, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0x11c); patch_32r(code + 0x7a, (uintptr_t)data + 0x46); patch_32r(code + 0x81, (uintptr_t)data + 0x64); patch_32r(code + 0x88, (uintptr_t)data + 0xaa); patch_x86_64_32rx(code + 0x93, (uintptr_t)data + 0x124); } void emit__LOAD_FROM_DICT_OR_DEREF( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FROM_DICT_OR_DEREF.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 85 db testq %rbx, %rbx // 8: 0f 84 3e 01 00 00 je 0x14c <_JIT_ENTRY+0x14c> // e: 49 8b 45 00 movq (%r13), %rax // 12: 48 8b 48 08 movq 0x8(%rax), %rcx // 16: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 1d: 0f 85 09 01 00 00 jne 0x12c <_JIT_ENTRY+0x12c> // 23: 44 0f b7 35 00 00 00 00 movzwl (%rip), %r14d # 0x2b <_JIT_ENTRY+0x2b> // 0000000000000027: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 2b: 44 39 70 48 cmpl %r14d, 0x48(%rax) // 2f: 0f 8e 37 01 00 00 jle 0x16c <_JIT_ENTRY+0x16c> // 35: 48 8b 40 60 movq 0x60(%rax), %rax // 39: 48 8b 48 08 movq 0x8(%rax), %rcx // 3d: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 44: 0f 84 42 01 00 00 je 0x18c <_JIT_ENTRY+0x18c> // 4a: 4c 8b 3d 00 00 00 00 movq (%rip), %r15 # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 51: 41 0f b7 cf movzwl %r15w, %ecx // 55: 48 8b 74 c8 18 movq 0x18(%rax,%rcx,8), %rsi // 5a: 48 89 e2 movq %rsp, %rdx // 5d: 48 89 df movq %rbx, %rdi // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX PyMapping_GetOptionalItem-0x4 // 66: 85 c0 testl %eax, %eax // 68: 78 22 js 0x8c <_JIT_ENTRY+0x8c> // 6a: 48 83 3c 24 00 cmpq $0x0, (%rsp) // 6f: 74 22 je 0x93 <_JIT_ENTRY+0x93> // 71: 48 8b 03 movq (%rbx), %rax // 74: 48 85 c0 testq %rax, %rax // 77: 7e 48 jle 0xc1 <_JIT_ENTRY+0xc1> // 79: 85 c0 testl %eax, %eax // 7b: 79 60 jns 0xdd <_JIT_ENTRY+0xdd> // 7d: 48 8b 04 24 movq (%rsp), %rax // 81: 48 89 45 f8 movq %rax, -0x8(%rbp) // 85: 58 popq %rax // 86: ff 25 00 00 00 00 jmpq *(%rip) # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 8c: 58 popq %rax // 8d: ff 25 00 00 00 00 jmpq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 93: 41 0f b7 c7 movzwl %r15w, %eax // 97: 49 8b 44 c5 48 movq 0x48(%r13,%rax,8), %rax // 9c: 4c 8b 78 10 movq 0x10(%rax), %r15 // a0: 4d 85 ff testq %r15, %r15 // a3: 74 5b je 0x100 <_JIT_ENTRY+0x100> // a5: 41 8b 07 movl (%r15), %eax // a8: ff c0 incl %eax // aa: 74 09 je 0xb5 <_JIT_ENTRY+0xb5> // ac: 41 89 07 movl %eax, (%r15) // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // b5: 4c 89 3c 24 movq %r15, (%rsp) // b9: 48 8b 03 movq (%rbx), %rax // bc: 48 85 c0 testq %rax, %rax // bf: 7f b8 jg 0x79 <_JIT_ENTRY+0x79> // c1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc8 <_JIT_ENTRY+0xc8> // 00000000000000c4: R_X86_64_PC32 .L.str.1-0x4 // c8: be 45 06 00 00 movl $0x645, %esi # imm = 0x645 // cd: 48 89 da movq %rbx, %rdx // d0: ff 15 00 00 00 00 callq *(%rip) # 0xd6 <_JIT_ENTRY+0xd6> // 00000000000000d2: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // d6: 48 8b 03 movq (%rbx), %rax // d9: 85 c0 testl %eax, %eax // db: 78 a0 js 0x7d <_JIT_ENTRY+0x7d> // dd: ff 15 00 00 00 00 callq *(%rip) # 0xe3 <_JIT_ENTRY+0xe3> // 00000000000000df: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // e3: 48 ff 0b decq (%rbx) // e6: 75 95 jne 0x7d <_JIT_ENTRY+0x7d> // e8: 48 89 df movq %rbx, %rdi // eb: ff 15 00 00 00 00 callq *(%rip) # 0xf1 <_JIT_ENTRY+0xf1> // 00000000000000ed: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // f1: 48 8b 04 24 movq (%rsp), %rax // f5: 48 89 45 f8 movq %rax, -0x8(%rbp) // f9: 58 popq %rax // fa: ff 25 00 00 00 00 jmpq *(%rip) # 0x100 <_JIT_ENTRY+0x100> // 00000000000000fc: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 100: 48 c7 04 24 00 00 00 00 movq $0x0, (%rsp) // 108: 49 8b 75 00 movq (%r13), %rsi // 10c: 48 8b 46 08 movq 0x8(%rsi), %rax // 110: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 117: 75 13 jne 0x12c <_JIT_ENTRY+0x12c> // 119: 4c 89 e7 movq %r12, %rdi // 11c: 44 89 f2 movl %r14d, %edx // 11f: ff 15 00 00 00 00 callq *(%rip) # 0x125 <_JIT_ENTRY+0x125> // 0000000000000121: R_X86_64_GOTPCRELX _PyEval_FormatExcUnbound-0x4 // 125: 58 popq %rax // 126: ff 25 00 00 00 00 jmpq *(%rip) # 0x12c <_JIT_ENTRY+0x12c> // 0000000000000128: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 12c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x133 <_JIT_ENTRY+0x133> // 000000000000012f: R_X86_64_PC32 .L.str.108-0x4 // 133: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x13a <_JIT_ENTRY+0x13a> // 0000000000000136: R_X86_64_PC32 .L.str.109-0x4 // 13a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x141 <_JIT_ENTRY+0x141> // 000000000000013d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 141: ba 4d 00 00 00 movl $0x4d, %edx // 146: ff 15 00 00 00 00 callq *(%rip) # 0x14c <_JIT_ENTRY+0x14c> // 0000000000000148: R_X86_64_GOTPCRELX __assert_fail-0x4 // 14c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x153 <_JIT_ENTRY+0x153> // 000000000000014f: R_X86_64_PC32 .L.str.30-0x4 // 153: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x15a <_JIT_ENTRY+0x15a> // 0000000000000156: R_X86_64_PC32 .L.str.1-0x4 // 15a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x161 <_JIT_ENTRY+0x161> // 000000000000015d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 161: ba 37 06 00 00 movl $0x637, %edx # imm = 0x637 // 166: ff 15 00 00 00 00 callq *(%rip) # 0x16c <_JIT_ENTRY+0x16c> // 0000000000000168: R_X86_64_GOTPCRELX __assert_fail-0x4 // 16c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x173 <_JIT_ENTRY+0x173> // 000000000000016f: R_X86_64_PC32 .L.str.31-0x4 // 173: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_PC32 .L.str.1-0x4 // 17a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x181 <_JIT_ENTRY+0x181> // 000000000000017d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 181: ba 38 06 00 00 movl $0x638, %edx # imm = 0x638 // 186: ff 15 00 00 00 00 callq *(%rip) # 0x18c <_JIT_ENTRY+0x18c> // 0000000000000188: R_X86_64_GOTPCRELX __assert_fail-0x4 // 18c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x193 <_JIT_ENTRY+0x193> // 000000000000018f: R_X86_64_PC32 .L.str.32-0x4 // 193: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x19a <_JIT_ENTRY+0x19a> // 0000000000000196: R_X86_64_PC32 .L.str.1-0x4 // 19a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1a1 <_JIT_ENTRY+0x1a1> // 000000000000019d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1a1: ba 39 06 00 00 movl $0x639, %edx # imm = 0x639 // 1a6: ff 15 00 00 00 00 callq *(%rip) # 0x1ac <_JIT_ENTRY+0x1ac> // 00000000000001a8: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1ac: const unsigned char code_body[428] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x85, 0xdb, 0x0f, 0x84, 0x3e, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x09, 0x01, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x44, 0x39, 0x70, 0x48, 0x0f, 0x8e, 0x37, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x60, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x42, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb7, 0xcf, 0x48, 0x8b, 0x74, 0xc8, 0x18, 0x48, 0x89, 0xe2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x22, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x74, 0x22, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x48, 0x85, 0xc0, 0x79, 0x60, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x0f, 0xb7, 0xc7, 0x49, 0x8b, 0x44, 0xc5, 0x48, 0x4c, 0x8b, 0x78, 0x10, 0x4d, 0x85, 0xff, 0x74, 0x5b, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x74, 0x09, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x3c, 0x24, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xb8, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x45, 0x06, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xa0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x95, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc7, 0x04, 0x24, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x75, 0x00, 0x48, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x13, 0x4c, 0x89, 0xe7, 0x44, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x37, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x38, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x39, 0x06, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00class_dict\x00oparg >= 0 && oparg < _PyFrame_GetCode(frame)->co_nlocalsplus\x00PyTuple_Check(_PyFrame_GetCode(frame)->co_localsplusnames)\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 1ac: 00 00 00 00 // 1b0: &PyCode_Type+0x0 // 1b8: OPARG // 1c0: &PyMapping_GetOptionalItem+0x0 // 1c8: CONTINUE // 1d0: ERROR_TARGET // 1d8: &_Py_INCREF_IncRefTotal+0x0 // 1e0: &_Py_NegativeRefcount+0x0 // 1e8: &_Py_DECREF_DecRefTotal+0x0 // 1f0: &_Py_Dealloc+0x0 // 1f8: &_PyEval_FormatExcUnbound+0x0 // 200: &__assert_fail+0x0 const unsigned char data_body[520] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x63, 0x6c, 0x61, 0x73, 0x73, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3e, 0x3d, 0x20, 0x30, 0x20, 0x26, 0x26, 0x20, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3c, 0x20, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x29, 0x2d, 0x3e, 0x63, 0x6f, 0x5f, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x73, 0x70, 0x6c, 0x75, 0x73, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x29, 0x2d, 0x3e, 0x63, 0x6f, 0x5f, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x73, 0x70, 0x6c, 0x75, 0x73, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x29, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1b0, (uintptr_t)&PyCode_Type); patch_64(data + 0x1b8, instruction->oparg); patch_64(data + 0x1c0, (uintptr_t)&PyMapping_GetOptionalItem); patch_64(data + 0x1c8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1d0, instruction_starts[instruction->error_target]); patch_64(data + 0x1d8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x1e0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x1e8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x1f0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x1f8, (uintptr_t)&_PyEval_FormatExcUnbound); patch_64(data + 0x200, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x19, (uintptr_t)data + 0x1ac); patch_32r(code + 0x27, (uintptr_t)data + 0x1b4); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x1b4); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0x1bc); patch_x86_64_32rx(code + 0x88, (uintptr_t)data + 0x1c4); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0x1cc); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0x1d4); patch_32r(code + 0xc4, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xd2, (uintptr_t)data + 0x1dc); patch_x86_64_32rx(code + 0xdf, (uintptr_t)data + 0x1e4); patch_x86_64_32rx(code + 0xed, (uintptr_t)data + 0x1ec); patch_x86_64_32rx(code + 0xfc, (uintptr_t)data + 0x1c4); patch_x86_64_32rx(code + 0x113, (uintptr_t)data + 0x1ac); patch_x86_64_32rx(code + 0x121, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x128, (uintptr_t)data + 0x1cc); patch_32r(code + 0x12f, (uintptr_t)data + 0x10e); patch_32r(code + 0x136, (uintptr_t)data + 0x12c); patch_32r(code + 0x13d, (uintptr_t)data + 0x172); patch_x86_64_32rx(code + 0x148, (uintptr_t)data + 0x1fc); patch_32r(code + 0x14f, (uintptr_t)data + 0x8a); patch_32r(code + 0x156, (uintptr_t)data + -0x4); patch_32r(code + 0x15d, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x168, (uintptr_t)data + 0x1fc); patch_32r(code + 0x16f, (uintptr_t)data + 0x95); patch_32r(code + 0x176, (uintptr_t)data + -0x4); patch_32r(code + 0x17d, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x188, (uintptr_t)data + 0x1fc); patch_32r(code + 0x18f, (uintptr_t)data + 0xd3); patch_32r(code + 0x196, (uintptr_t)data + -0x4); patch_32r(code + 0x19d, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1a8, (uintptr_t)data + 0x1fc); } void emit__LOAD_FROM_DICT_OR_GLOBALS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_FROM_DICT_OR_GLOBALS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 1c 01 00 00 jne 0x132 <_JIT_ENTRY+0x132> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 27 01 00 00 je 0x152 <_JIT_ENTRY+0x152> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 3a 01 00 00 je 0x172 <_JIT_ENTRY+0x172> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 4d 01 00 00 je 0x192 <_JIT_ENTRY+0x192> // 45: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4c: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 50: 0f 8e 5c 01 00 00 jle 0x1b2 <_JIT_ENTRY+0x1b2> // 56: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5a: 4c 8b 74 c8 18 movq 0x18(%rax,%rcx,8), %r14 // 5f: 48 89 e2 movq %rsp, %rdx // 62: 48 89 df movq %rbx, %rdi // 65: 4c 89 f6 movq %r14, %rsi // 68: ff 15 00 00 00 00 callq *(%rip) # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_GOTPCRELX PyMapping_GetOptionalItem-0x4 // 6e: 85 c0 testl %eax, %eax // 70: 78 6b js 0xdd <_JIT_ENTRY+0xdd> // 72: 48 83 3c 24 00 cmpq $0x0, (%rsp) // 77: 74 11 je 0x8a <_JIT_ENTRY+0x8a> // 79: 48 8b 03 movq (%rbx), %rax // 7c: 48 85 c0 testq %rax, %rax // 7f: 7e 63 jle 0xe4 <_JIT_ENTRY+0xe4> // 81: 85 c0 testl %eax, %eax // 83: 79 7b jns 0x100 <_JIT_ENTRY+0x100> // 85: e9 81 00 00 00 jmp 0x10b <_JIT_ENTRY+0x10b> // 8a: 49 8b 7d 18 movq 0x18(%r13), %rdi // 8e: 48 89 e2 movq %rsp, %rdx // 91: 4c 89 f6 movq %r14, %rsi // 94: ff 15 00 00 00 00 callq *(%rip) # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_GOTPCRELX PyDict_GetItemRef-0x4 // 9a: 85 c0 testl %eax, %eax // 9c: 78 3f js 0xdd <_JIT_ENTRY+0xdd> // 9e: 48 83 3c 24 00 cmpq $0x0, (%rsp) // a3: 75 d4 jne 0x79 <_JIT_ENTRY+0x79> // a5: 49 8b 7d 20 movq 0x20(%r13), %rdi // a9: 48 89 e2 movq %rsp, %rdx // ac: 4c 89 f6 movq %r14, %rsi // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX PyMapping_GetOptionalItem-0x4 // b5: 85 c0 testl %eax, %eax // b7: 78 24 js 0xdd <_JIT_ENTRY+0xdd> // b9: 48 83 3c 24 00 cmpq $0x0, (%rsp) // be: 75 b9 jne 0x79 <_JIT_ENTRY+0x79> // c0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_REX_GOTPCRELX PyExc_NameError-0x4 // c7: 48 8b 30 movq (%rax), %rsi // ca: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0xd1 <_JIT_ENTRY+0xd1> // 00000000000000cd: R_X86_64_PC32 .L.str.24-0x4 // d1: 4c 89 e7 movq %r12, %rdi // d4: 4c 89 f1 movq %r14, %rcx // d7: ff 15 00 00 00 00 callq *(%rip) # 0xdd <_JIT_ENTRY+0xdd> // 00000000000000d9: R_X86_64_GOTPCRELX _PyEval_FormatExcCheckArg-0x4 // dd: 58 popq %rax // de: ff 25 00 00 00 00 jmpq *(%rip) # 0xe4 <_JIT_ENTRY+0xe4> // 00000000000000e0: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // e4: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xeb <_JIT_ENTRY+0xeb> // 00000000000000e7: R_X86_64_PC32 .L.str.1-0x4 // eb: be 8e 05 00 00 movl $0x58e, %esi # imm = 0x58E // f0: 48 89 da movq %rbx, %rdx // f3: ff 15 00 00 00 00 callq *(%rip) # 0xf9 <_JIT_ENTRY+0xf9> // 00000000000000f5: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // f9: 48 8b 03 movq (%rbx), %rax // fc: 85 c0 testl %eax, %eax // fe: 78 0b js 0x10b <_JIT_ENTRY+0x10b> // 100: ff 15 00 00 00 00 callq *(%rip) # 0x106 <_JIT_ENTRY+0x106> // 0000000000000102: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 106: 48 ff 0b decq (%rbx) // 109: 74 0f je 0x11a <_JIT_ENTRY+0x11a> // 10b: 48 8b 04 24 movq (%rsp), %rax // 10f: 48 89 45 f8 movq %rax, -0x8(%rbp) // 113: 58 popq %rax // 114: ff 25 00 00 00 00 jmpq *(%rip) # 0x11a <_JIT_ENTRY+0x11a> // 0000000000000116: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 11a: 48 89 df movq %rbx, %rdi // 11d: ff 15 00 00 00 00 callq *(%rip) # 0x123 <_JIT_ENTRY+0x123> // 000000000000011f: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 123: 48 8b 04 24 movq (%rsp), %rax // 127: 48 89 45 f8 movq %rax, -0x8(%rbp) // 12b: 58 popq %rax // 12c: ff 25 00 00 00 00 jmpq *(%rip) # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 132: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x139 <_JIT_ENTRY+0x139> // 0000000000000135: R_X86_64_PC32 .L.str.108-0x4 // 139: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_PC32 .L.str.109-0x4 // 140: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x147 <_JIT_ENTRY+0x147> // 0000000000000143: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 147: ba 4d 00 00 00 movl $0x4d, %edx // 14c: ff 15 00 00 00 00 callq *(%rip) # 0x152 <_JIT_ENTRY+0x152> // 000000000000014e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 152: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x159 <_JIT_ENTRY+0x159> // 0000000000000155: R_X86_64_PC32 .L.str.110-0x4 // 159: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x160 <_JIT_ENTRY+0x160> // 000000000000015c: R_X86_64_PC32 .L.str.111-0x4 // 160: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x167 <_JIT_ENTRY+0x167> // 0000000000000163: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 167: ba 99 00 00 00 movl $0x99, %edx // 16c: ff 15 00 00 00 00 callq *(%rip) # 0x172 <_JIT_ENTRY+0x172> // 000000000000016e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 172: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x179 <_JIT_ENTRY+0x179> // 0000000000000175: R_X86_64_PC32 .L.str.115-0x4 // 179: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x180 <_JIT_ENTRY+0x180> // 000000000000017c: R_X86_64_PC32 .L.str.114-0x4 // 180: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x187 <_JIT_ENTRY+0x187> // 0000000000000183: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 187: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 18c: ff 15 00 00 00 00 callq *(%rip) # 0x192 <_JIT_ENTRY+0x192> // 000000000000018e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 192: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x199 <_JIT_ENTRY+0x199> // 0000000000000195: R_X86_64_PC32 .L.str.116-0x4 // 199: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a0 <_JIT_ENTRY+0x1a0> // 000000000000019c: R_X86_64_PC32 .L.str.114-0x4 // 1a0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1a7 <_JIT_ENTRY+0x1a7> // 00000000000001a3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1a7: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 1ac: ff 15 00 00 00 00 callq *(%rip) # 0x1b2 <_JIT_ENTRY+0x1b2> // 00000000000001ae: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_PC32 .L.str.113-0x4 // 1b9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1c0 <_JIT_ENTRY+0x1c0> // 00000000000001bc: R_X86_64_PC32 .L.str.111-0x4 // 1c0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1c7 <_JIT_ENTRY+0x1c7> // 00000000000001c3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 1c7: ba 9b 00 00 00 movl $0x9b, %edx // 1cc: ff 15 00 00 00 00 callq *(%rip) # 0x1d2 <_JIT_ENTRY+0x1d2> // 00000000000001ce: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1d2: const unsigned char code_body[466] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x1c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x27, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x3a, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x4d, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0x5c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x8b, 0x74, 0xc8, 0x18, 0x48, 0x89, 0xe2, 0x48, 0x89, 0xdf, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x6b, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x74, 0x11, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x63, 0x85, 0xc0, 0x79, 0x7b, 0xe9, 0x81, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x7d, 0x18, 0x48, 0x89, 0xe2, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x3f, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x75, 0xd4, 0x49, 0x8b, 0x7d, 0x20, 0x48, 0x89, 0xe2, 0x4c, 0x89, 0xf6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x24, 0x48, 0x83, 0x3c, 0x24, 0x00, 0x75, 0xb9, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x4c, 0x89, 0xf1, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x8e, 0x05, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0f, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00name '%.200s' is not defined\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00" // 214: 00 00 00 00 // 218: &PyCode_Type+0x0 // 220: &PyLong_Type+0x0 // 228: &PyBool_Type+0x0 // 230: OPARG // 238: &PyMapping_GetOptionalItem+0x0 // 240: &PyDict_GetItemRef+0x0 // 248: &PyExc_NameError+0x0 // 250: &_PyEval_FormatExcCheckArg+0x0 // 258: ERROR_TARGET // 260: &_Py_NegativeRefcount+0x0 // 268: &_Py_DECREF_DecRefTotal+0x0 // 270: CONTINUE // 278: &_Py_Dealloc+0x0 // 280: &__assert_fail+0x0 const unsigned char data_body[648] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x27, 0x25, 0x2e, 0x32, 0x30, 0x30, 0x73, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x218, (uintptr_t)&PyCode_Type); patch_64(data + 0x220, (uintptr_t)&PyLong_Type); patch_64(data + 0x228, (uintptr_t)&PyBool_Type); patch_64(data + 0x230, instruction->oparg); patch_64(data + 0x238, (uintptr_t)&PyMapping_GetOptionalItem); patch_64(data + 0x240, (uintptr_t)&PyDict_GetItemRef); patch_64(data + 0x248, (uintptr_t)&PyExc_NameError); patch_64(data + 0x250, (uintptr_t)&_PyEval_FormatExcCheckArg); patch_64(data + 0x258, instruction_starts[instruction->error_target]); patch_64(data + 0x260, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x268, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x270, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x278, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x280, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x214); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x21c); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x224); patch_32r(code + 0x48, (uintptr_t)data + 0x22c); patch_x86_64_32rx(code + 0x6a, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0x96, (uintptr_t)data + 0x23c); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0xc3, (uintptr_t)data + 0x244); patch_32r(code + 0xcd, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xd9, (uintptr_t)data + 0x24c); patch_x86_64_32rx(code + 0xe0, (uintptr_t)data + 0x254); patch_32r(code + 0xe7, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xf5, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0x102, (uintptr_t)data + 0x264); patch_x86_64_32rx(code + 0x116, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0x11f, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x12e, (uintptr_t)data + 0x26c); patch_32r(code + 0x135, (uintptr_t)data + 0x59); patch_32r(code + 0x13c, (uintptr_t)data + 0x77); patch_32r(code + 0x143, (uintptr_t)data + 0xbd); patch_x86_64_32rx(code + 0x14e, (uintptr_t)data + 0x27c); patch_32r(code + 0x155, (uintptr_t)data + 0xf3); patch_32r(code + 0x15c, (uintptr_t)data + 0x104); patch_32r(code + 0x163, (uintptr_t)data + 0x140); patch_x86_64_32rx(code + 0x16e, (uintptr_t)data + 0x27c); patch_32r(code + 0x175, (uintptr_t)data + 0x1b9); patch_32r(code + 0x17c, (uintptr_t)data + 0x182); patch_32r(code + 0x183, (uintptr_t)data + 0x1d5); patch_x86_64_32rx(code + 0x18e, (uintptr_t)data + 0x27c); patch_32r(code + 0x195, (uintptr_t)data + 0x1f4); patch_32r(code + 0x19c, (uintptr_t)data + 0x182); patch_32r(code + 0x1a3, (uintptr_t)data + 0x1d5); patch_x86_64_32rx(code + 0x1ae, (uintptr_t)data + 0x27c); patch_32r(code + 0x1b5, (uintptr_t)data + 0x16a); patch_32r(code + 0x1bc, (uintptr_t)data + 0x104); patch_32r(code + 0x1c3, (uintptr_t)data + 0x140); patch_x86_64_32rx(code + 0x1ce, (uintptr_t)data + 0x27c); } void emit__LOAD_GLOBAL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_GLOBAL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 34 01 00 00 jne 0x14a <_JIT_ENTRY+0x14a> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 3f 01 00 00 je 0x16a <_JIT_ENTRY+0x16a> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 52 01 00 00 je 0x18a <_JIT_ENTRY+0x18a> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 65 01 00 00 je 0x1aa <_JIT_ENTRY+0x1aa> // 45: 44 0f b7 35 00 00 00 00 movzwl (%rip), %r14d # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4d: 44 89 f1 movl %r14d, %ecx // 50: d1 e9 shrl %ecx // 52: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 56: 0f 8e 6e 01 00 00 jle 0x1ca <_JIT_ENTRY+0x1ca> // 5c: 48 8b 5c c8 18 movq 0x18(%rax,%rcx,8), %rbx // 61: 49 8b 7d 18 movq 0x18(%r13), %rdi // 65: 48 8b 47 08 movq 0x8(%rdi), %rax // 69: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x70 <_JIT_ENTRY+0x70> // 000000000000006c: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 70: 75 11 jne 0x83 <_JIT_ENTRY+0x83> // 72: 49 8b 75 20 movq 0x20(%r13), %rsi // 76: 48 8b 46 08 movq 0x8(%rsi), %rax // 7a: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 81: 74 5a je 0xdd <_JIT_ENTRY+0xdd> // 83: 48 89 e2 movq %rsp, %rdx // 86: 48 89 de movq %rbx, %rsi // 89: ff 15 00 00 00 00 callq *(%rip) # 0x8f <_JIT_ENTRY+0x8f> // 000000000000008b: R_X86_64_GOTPCRELX PyMapping_GetOptionalItem-0x4 // 8f: 85 c0 testl %eax, %eax // 91: 78 43 js 0xd6 <_JIT_ENTRY+0xd6> // 93: 48 8b 04 24 movq (%rsp), %rax // 97: 48 85 c0 testq %rax, %rax // 9a: 75 4f jne 0xeb <_JIT_ENTRY+0xeb> // 9c: 49 8b 7d 20 movq 0x20(%r13), %rdi // a0: 48 89 e2 movq %rsp, %rdx // a3: 48 89 de movq %rbx, %rsi // a6: ff 15 00 00 00 00 callq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX PyMapping_GetOptionalItem-0x4 // ac: 85 c0 testl %eax, %eax // ae: 78 26 js 0xd6 <_JIT_ENTRY+0xd6> // b0: 48 8b 04 24 movq (%rsp), %rax // b4: 48 85 c0 testq %rax, %rax // b7: 75 32 jne 0xeb <_JIT_ENTRY+0xeb> // b9: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_REX_GOTPCRELX PyExc_NameError-0x4 // c0: 48 8b 30 movq (%rax), %rsi // c3: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0xca <_JIT_ENTRY+0xca> // 00000000000000c6: R_X86_64_PC32 .L.str.24-0x4 // ca: 4c 89 e7 movq %r12, %rdi // cd: 48 89 d9 movq %rbx, %rcx // d0: ff 15 00 00 00 00 callq *(%rip) # 0xd6 <_JIT_ENTRY+0xd6> // 00000000000000d2: R_X86_64_GOTPCRELX _PyEval_FormatExcCheckArg-0x4 // d6: 58 popq %rax // d7: ff 25 00 00 00 00 jmpq *(%rip) # 0xdd <_JIT_ENTRY+0xdd> // 00000000000000d9: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // dd: 48 89 da movq %rbx, %rdx // e0: ff 15 00 00 00 00 callq *(%rip) # 0xe6 <_JIT_ENTRY+0xe6> // 00000000000000e2: R_X86_64_GOTPCRELX _PyDict_LoadGlobal-0x4 // e6: 48 85 c0 testq %rax, %rax // e9: 74 21 je 0x10c <_JIT_ENTRY+0x10c> // eb: 48 89 45 00 movq %rax, (%rbp) // ef: 41 83 e6 01 andl $0x1, %r14d // f3: 74 08 je 0xfd <_JIT_ENTRY+0xfd> // f5: 48 c7 45 08 00 00 00 00 movq $0x0, 0x8(%rbp) // fd: 44 89 f0 movl %r14d, %eax // 100: 48 8d 6c c5 08 leaq 0x8(%rbp,%rax,8), %rbp // 105: 58 popq %rax // 106: ff 25 00 00 00 00 jmpq *(%rip) # 0x10c <_JIT_ENTRY+0x10c> // 0000000000000108: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 10c: 4d 85 e4 testq %r12, %r12 // 10f: 0f 84 d5 00 00 00 je 0x1ea <_JIT_ENTRY+0x1ea> // 115: 49 8b 44 24 70 movq 0x70(%r12), %rax // 11a: 48 85 c0 testq %rax, %rax // 11d: 74 07 je 0x126 <_JIT_ENTRY+0x126> // 11f: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // 124: 75 1d jne 0x143 <_JIT_ENTRY+0x143> // 126: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_REX_GOTPCRELX PyExc_NameError-0x4 // 12d: 48 8b 30 movq (%rax), %rsi // 130: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_PC32 .L.str.24-0x4 // 137: 4c 89 e7 movq %r12, %rdi // 13a: 48 89 d9 movq %rbx, %rcx // 13d: ff 15 00 00 00 00 callq *(%rip) # 0x143 <_JIT_ENTRY+0x143> // 000000000000013f: R_X86_64_GOTPCRELX _PyEval_FormatExcCheckArg-0x4 // 143: 58 popq %rax // 144: ff 25 00 00 00 00 jmpq *(%rip) # 0x14a <_JIT_ENTRY+0x14a> // 0000000000000146: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 14a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x151 <_JIT_ENTRY+0x151> // 000000000000014d: R_X86_64_PC32 .L.str.108-0x4 // 151: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x158 <_JIT_ENTRY+0x158> // 0000000000000154: R_X86_64_PC32 .L.str.109-0x4 // 158: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x15f <_JIT_ENTRY+0x15f> // 000000000000015b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 15f: ba 4d 00 00 00 movl $0x4d, %edx // 164: ff 15 00 00 00 00 callq *(%rip) # 0x16a <_JIT_ENTRY+0x16a> // 0000000000000166: R_X86_64_GOTPCRELX __assert_fail-0x4 // 16a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x171 <_JIT_ENTRY+0x171> // 000000000000016d: R_X86_64_PC32 .L.str.110-0x4 // 171: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x178 <_JIT_ENTRY+0x178> // 0000000000000174: R_X86_64_PC32 .L.str.111-0x4 // 178: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x17f <_JIT_ENTRY+0x17f> // 000000000000017b: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 17f: ba 99 00 00 00 movl $0x99, %edx // 184: ff 15 00 00 00 00 callq *(%rip) # 0x18a <_JIT_ENTRY+0x18a> // 0000000000000186: R_X86_64_GOTPCRELX __assert_fail-0x4 // 18a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x191 <_JIT_ENTRY+0x191> // 000000000000018d: R_X86_64_PC32 .L.str.115-0x4 // 191: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x198 <_JIT_ENTRY+0x198> // 0000000000000194: R_X86_64_PC32 .L.str.114-0x4 // 198: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x19f <_JIT_ENTRY+0x19f> // 000000000000019b: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 19f: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 1a4: ff 15 00 00 00 00 callq *(%rip) # 0x1aa <_JIT_ENTRY+0x1aa> // 00000000000001a6: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1aa: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1b1 <_JIT_ENTRY+0x1b1> // 00000000000001ad: R_X86_64_PC32 .L.str.116-0x4 // 1b1: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1b8 <_JIT_ENTRY+0x1b8> // 00000000000001b4: R_X86_64_PC32 .L.str.114-0x4 // 1b8: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1bf <_JIT_ENTRY+0x1bf> // 00000000000001bb: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1bf: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 1c4: ff 15 00 00 00 00 callq *(%rip) # 0x1ca <_JIT_ENTRY+0x1ca> // 00000000000001c6: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1ca: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1d1 <_JIT_ENTRY+0x1d1> // 00000000000001cd: R_X86_64_PC32 .L.str.113-0x4 // 1d1: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1d8 <_JIT_ENTRY+0x1d8> // 00000000000001d4: R_X86_64_PC32 .L.str.111-0x4 // 1d8: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1df <_JIT_ENTRY+0x1df> // 00000000000001db: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 1df: ba 9b 00 00 00 movl $0x9b, %edx // 1e4: ff 15 00 00 00 00 callq *(%rip) # 0x1ea <_JIT_ENTRY+0x1ea> // 00000000000001e6: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1ea: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1f1 <_JIT_ENTRY+0x1f1> // 00000000000001ed: R_X86_64_PC32 .L.str.143-0x4 // 1f1: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1f8 <_JIT_ENTRY+0x1f8> // 00000000000001f4: R_X86_64_PC32 .L.str.144-0x4 // 1f8: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ff <_JIT_ENTRY+0x1ff> // 00000000000001fb: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 1ff: ba 4b 00 00 00 movl $0x4b, %edx // 204: ff 15 00 00 00 00 callq *(%rip) # 0x20a <_JIT_ENTRY+0x20a> // 0000000000000206: R_X86_64_GOTPCRELX __assert_fail-0x4 // 20a: const unsigned char code_body[522] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x34, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x3f, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x52, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x65, 0x01, 0x00, 0x00, 0x44, 0x0f, 0xb7, 0x35, 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0xf1, 0xd1, 0xe9, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0x6e, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0xc8, 0x18, 0x49, 0x8b, 0x7d, 0x18, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x49, 0x8b, 0x75, 0x20, 0x48, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x5a, 0x48, 0x89, 0xe2, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x43, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x75, 0x4f, 0x49, 0x8b, 0x7d, 0x20, 0x48, 0x89, 0xe2, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x26, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x75, 0x32, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xd9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x21, 0x48, 0x89, 0x45, 0x00, 0x41, 0x83, 0xe6, 0x01, 0x74, 0x08, 0x48, 0xc7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x44, 0x89, 0xf0, 0x48, 0x8d, 0x6c, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xe4, 0x0f, 0x84, 0xd5, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x48, 0x85, 0xc0, 0x74, 0x07, 0x48, 0x83, 0x78, 0x08, 0x00, 0x75, 0x1d, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xd9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "name '%.200s' is not defined\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00" // 257: 00 // 258: &PyCode_Type+0x0 // 260: &PyLong_Type+0x0 // 268: &PyBool_Type+0x0 // 270: OPARG // 278: &PyDict_Type+0x0 // 280: &PyMapping_GetOptionalItem+0x0 // 288: &PyExc_NameError+0x0 // 290: &_PyEval_FormatExcCheckArg+0x0 // 298: ERROR_TARGET // 2a0: &_PyDict_LoadGlobal+0x0 // 2a8: CONTINUE // 2b0: &__assert_fail+0x0 const unsigned char data_body[696] = { 0x6e, 0x61, 0x6d, 0x65, 0x20, 0x27, 0x25, 0x2e, 0x32, 0x30, 0x30, 0x73, 0x27, 0x20, 0x69, 0x73, 0x20, 0x6e, 0x6f, 0x74, 0x20, 0x64, 0x65, 0x66, 0x69, 0x6e, 0x65, 0x64, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x258, (uintptr_t)&PyCode_Type); patch_64(data + 0x260, (uintptr_t)&PyLong_Type); patch_64(data + 0x268, (uintptr_t)&PyBool_Type); patch_64(data + 0x270, instruction->oparg); patch_64(data + 0x278, (uintptr_t)&PyDict_Type); patch_64(data + 0x280, (uintptr_t)&PyMapping_GetOptionalItem); patch_64(data + 0x288, (uintptr_t)&PyExc_NameError); patch_64(data + 0x290, (uintptr_t)&_PyEval_FormatExcCheckArg); patch_64(data + 0x298, instruction_starts[instruction->error_target]); patch_64(data + 0x2a0, (uintptr_t)&_PyDict_LoadGlobal); patch_64(data + 0x2a8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x2b0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x264); patch_32r(code + 0x49, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0x6c, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x8b, (uintptr_t)data + 0x27c); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x27c); patch_x86_64_32rx(code + 0xbc, (uintptr_t)data + 0x284); patch_32r(code + 0xc6, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xd2, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0xd9, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0xe2, (uintptr_t)data + 0x29c); patch_x86_64_32rx(code + 0x108, (uintptr_t)data + 0x2a4); patch_x86_64_32rx(code + 0x129, (uintptr_t)data + 0x284); patch_32r(code + 0x133, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13f, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x146, (uintptr_t)data + 0x294); patch_32r(code + 0x14d, (uintptr_t)data + 0x19); patch_32r(code + 0x154, (uintptr_t)data + 0x37); patch_32r(code + 0x15b, (uintptr_t)data + 0x7d); patch_x86_64_32rx(code + 0x166, (uintptr_t)data + 0x2ac); patch_32r(code + 0x16d, (uintptr_t)data + 0xb3); patch_32r(code + 0x174, (uintptr_t)data + 0xc4); patch_32r(code + 0x17b, (uintptr_t)data + 0x100); patch_x86_64_32rx(code + 0x186, (uintptr_t)data + 0x2ac); patch_32r(code + 0x18d, (uintptr_t)data + 0x179); patch_32r(code + 0x194, (uintptr_t)data + 0x142); patch_32r(code + 0x19b, (uintptr_t)data + 0x195); patch_x86_64_32rx(code + 0x1a6, (uintptr_t)data + 0x2ac); patch_32r(code + 0x1ad, (uintptr_t)data + 0x1b4); patch_32r(code + 0x1b4, (uintptr_t)data + 0x142); patch_32r(code + 0x1bb, (uintptr_t)data + 0x195); patch_x86_64_32rx(code + 0x1c6, (uintptr_t)data + 0x2ac); patch_32r(code + 0x1cd, (uintptr_t)data + 0x12a); patch_32r(code + 0x1d4, (uintptr_t)data + 0xc4); patch_32r(code + 0x1db, (uintptr_t)data + 0x100); patch_x86_64_32rx(code + 0x1e6, (uintptr_t)data + 0x2ac); patch_32r(code + 0x1ed, (uintptr_t)data + 0x1d0); patch_32r(code + 0x1f4, (uintptr_t)data + 0x1df); patch_32r(code + 0x1fb, (uintptr_t)data + 0x228); patch_x86_64_32rx(code + 0x206, (uintptr_t)data + 0x2ac); } void emit__LOAD_GLOBAL_BUILTINS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_GLOBAL_BUILTINS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 20 movq 0x20(%r13), %rax // 5: 48 8b 40 20 movq 0x20(%rax), %rax // 9: 80 78 0a 00 cmpb $0x0, 0xa(%rax) // d: 0f 84 80 00 00 00 je 0x93 <_JIT_ENTRY+0x93> // 13: 0f b6 48 09 movzbl 0x9(%rax), %ecx // 17: ba 01 00 00 00 movl $0x1, %edx // 1c: 48 d3 e2 shlq %cl, %rdx // 1f: 48 01 c2 addq %rax, %rdx // 22: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x29 <_JIT_ENTRY+0x29> // 0000000000000025: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 29: c1 e0 04 shll $0x4, %eax // 2c: 48 8b 5c 10 28 movq 0x28(%rax,%rdx), %rbx // 31: 48 85 db testq %rbx, %rbx // 34: 74 26 je 0x5c <_JIT_ENTRY+0x5c> // 36: 8b 03 movl (%rbx), %eax // 38: ff c0 incl %eax // 3a: 75 27 jne 0x63 <_JIT_ENTRY+0x63> // 3c: 48 89 5d 00 movq %rbx, (%rbp) // 40: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 47: 66 83 e0 01 andw $0x1, %ax // 4b: 75 2f jne 0x7c <_JIT_ENTRY+0x7c> // 4d: 0f b7 c0 movzwl %ax, %eax // 50: 48 8d 6c c5 08 leaq 0x8(%rbp,%rax,8), %rbp // 55: 58 popq %rax // 56: ff 25 00 00 00 00 jmpq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5c: 58 popq %rax // 5d: ff 25 00 00 00 00 jmpq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 63: 89 03 movl %eax, (%rbx) // 65: ff 15 00 00 00 00 callq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 6b: 48 89 5d 00 movq %rbx, (%rbp) // 6f: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 76: 66 83 e0 01 andw $0x1, %ax // 7a: 74 d1 je 0x4d <_JIT_ENTRY+0x4d> // 7c: 48 c7 45 08 00 00 00 00 movq $0x0, 0x8(%rbp) // 84: 0f b7 c0 movzwl %ax, %eax // 87: 48 8d 6c c5 08 leaq 0x8(%rbp,%rax,8), %rbp // 8c: 58 popq %rax // 8d: ff 25 00 00 00 00 jmpq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 93: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_PC32 .L.str.145-0x4 // 9a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_PC32 .L.str.146-0x4 // a1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_PC32 .L__PRETTY_FUNCTION__.DK_UNICODE_ENTRIES-0x4 // a8: ba d5 00 00 00 movl $0xd5, %edx // ad: ff 15 00 00 00 00 callq *(%rip) # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_GOTPCRELX __assert_fail-0x4 // b3: const unsigned char code_body[179] = { 0x50, 0x49, 0x8b, 0x45, 0x20, 0x48, 0x8b, 0x40, 0x20, 0x80, 0x78, 0x0a, 0x00, 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x48, 0x09, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0xd3, 0xe2, 0x48, 0x01, 0xc2, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x04, 0x48, 0x8b, 0x5c, 0x10, 0x28, 0x48, 0x85, 0xdb, 0x74, 0x26, 0x8b, 0x03, 0xff, 0xc0, 0x75, 0x27, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xe0, 0x01, 0x75, 0x2f, 0x0f, 0xb7, 0xc0, 0x48, 0x8d, 0x6c, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xe0, 0x01, 0x74, 0xd1, 0x48, 0xc7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0x48, 0x8d, 0x6c, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xd5, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'dk->dk_kind != DICT_KEYS_GENERAL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_dict.h\x00PyDictUnicodeEntry *DK_UNICODE_ENTRIES(PyDictKeysObject *)\x00' // a1: 00 00 00 00 00 00 00 // a8: OPERAND // b0: OPARG // b8: CONTINUE // c0: JUMP_TARGET // c8: &_Py_INCREF_IncRefTotal+0x0 // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x64, 0x6b, 0x2d, 0x3e, 0x64, 0x6b, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x44, 0x49, 0x43, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x2a, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x49, 0x45, 0x53, 0x28, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, instruction->operand); patch_64(data + 0xb0, instruction->oparg); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, instruction_starts[instruction->jump_target]); patch_64(data + 0xc8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x25, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x43, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x72, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0xb4); patch_32r(code + 0x96, (uintptr_t)data + -0x4); patch_32r(code + 0x9d, (uintptr_t)data + 0x1d); patch_32r(code + 0xa4, (uintptr_t)data + 0x62); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0xcc); } void emit__LOAD_GLOBAL_MODULE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_GLOBAL_MODULE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 18 movq 0x18(%r13), %rax // 5: 48 8b 40 20 movq 0x20(%rax), %rax // 9: 80 78 0a 00 cmpb $0x0, 0xa(%rax) // d: 0f 84 80 00 00 00 je 0x93 <_JIT_ENTRY+0x93> // 13: 0f b6 48 09 movzbl 0x9(%rax), %ecx // 17: ba 01 00 00 00 movl $0x1, %edx // 1c: 48 d3 e2 shlq %cl, %rdx // 1f: 48 01 c2 addq %rax, %rdx // 22: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x29 <_JIT_ENTRY+0x29> // 0000000000000025: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 29: c1 e0 04 shll $0x4, %eax // 2c: 48 8b 5c 10 28 movq 0x28(%rax,%rdx), %rbx // 31: 48 85 db testq %rbx, %rbx // 34: 74 26 je 0x5c <_JIT_ENTRY+0x5c> // 36: 8b 03 movl (%rbx), %eax // 38: ff c0 incl %eax // 3a: 75 27 jne 0x63 <_JIT_ENTRY+0x63> // 3c: 48 89 5d 00 movq %rbx, (%rbp) // 40: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 47: 66 83 e0 01 andw $0x1, %ax // 4b: 75 2f jne 0x7c <_JIT_ENTRY+0x7c> // 4d: 0f b7 c0 movzwl %ax, %eax // 50: 48 8d 6c c5 08 leaq 0x8(%rbp,%rax,8), %rbp // 55: 58 popq %rax // 56: ff 25 00 00 00 00 jmpq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5c: 58 popq %rax // 5d: ff 25 00 00 00 00 jmpq *(%rip) # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 63: 89 03 movl %eax, (%rbx) // 65: ff 15 00 00 00 00 callq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 6b: 48 89 5d 00 movq %rbx, (%rbp) // 6f: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 76: 66 83 e0 01 andw $0x1, %ax // 7a: 74 d1 je 0x4d <_JIT_ENTRY+0x4d> // 7c: 48 c7 45 08 00 00 00 00 movq $0x0, 0x8(%rbp) // 84: 0f b7 c0 movzwl %ax, %eax // 87: 48 8d 6c c5 08 leaq 0x8(%rbp,%rax,8), %rbp // 8c: 58 popq %rax // 8d: ff 25 00 00 00 00 jmpq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 93: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_PC32 .L.str.145-0x4 // 9a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_PC32 .L.str.146-0x4 // a1: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_PC32 .L__PRETTY_FUNCTION__.DK_UNICODE_ENTRIES-0x4 // a8: ba d5 00 00 00 movl $0xd5, %edx // ad: ff 15 00 00 00 00 callq *(%rip) # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_GOTPCRELX __assert_fail-0x4 // b3: const unsigned char code_body[179] = { 0x50, 0x49, 0x8b, 0x45, 0x18, 0x48, 0x8b, 0x40, 0x20, 0x80, 0x78, 0x0a, 0x00, 0x0f, 0x84, 0x80, 0x00, 0x00, 0x00, 0x0f, 0xb6, 0x48, 0x09, 0xba, 0x01, 0x00, 0x00, 0x00, 0x48, 0xd3, 0xe2, 0x48, 0x01, 0xc2, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x04, 0x48, 0x8b, 0x5c, 0x10, 0x28, 0x48, 0x85, 0xdb, 0x74, 0x26, 0x8b, 0x03, 0xff, 0xc0, 0x75, 0x27, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xe0, 0x01, 0x75, 0x2f, 0x0f, 0xb7, 0xc0, 0x48, 0x8d, 0x6c, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xe0, 0x01, 0x74, 0xd1, 0x48, 0xc7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0x48, 0x8d, 0x6c, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xd5, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: 'dk->dk_kind != DICT_KEYS_GENERAL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_dict.h\x00PyDictUnicodeEntry *DK_UNICODE_ENTRIES(PyDictKeysObject *)\x00' // a1: 00 00 00 00 00 00 00 // a8: OPERAND // b0: OPARG // b8: CONTINUE // c0: JUMP_TARGET // c8: &_Py_INCREF_IncRefTotal+0x0 // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x64, 0x6b, 0x2d, 0x3e, 0x64, 0x6b, 0x5f, 0x6b, 0x69, 0x6e, 0x64, 0x20, 0x21, 0x3d, 0x20, 0x44, 0x49, 0x43, 0x54, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x55, 0x6e, 0x69, 0x63, 0x6f, 0x64, 0x65, 0x45, 0x6e, 0x74, 0x72, 0x79, 0x20, 0x2a, 0x44, 0x4b, 0x5f, 0x55, 0x4e, 0x49, 0x43, 0x4f, 0x44, 0x45, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x49, 0x45, 0x53, 0x28, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x4b, 0x65, 0x79, 0x73, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, instruction->operand); patch_64(data + 0xb0, instruction->oparg); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, instruction_starts[instruction->jump_target]); patch_64(data + 0xc8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x25, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x43, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x5f, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x72, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0xb4); patch_32r(code + 0x96, (uintptr_t)data + -0x4); patch_32r(code + 0x9d, (uintptr_t)data + 0x1d); patch_32r(code + 0xa4, (uintptr_t)data + 0x62); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0xcc); } void emit__LOAD_LOCALS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_LOCALS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 5d 28 movq 0x28(%r13), %rbx // 5: 48 85 db testq %rbx, %rbx // 8: 74 1d je 0x27 <_JIT_ENTRY+0x27> // a: 8b 03 movl (%rbx), %eax // c: ff c0 incl %eax // e: 74 08 je 0x18 <_JIT_ENTRY+0x18> // 10: 89 03 movl %eax, (%rbx) // 12: ff 15 00 00 00 00 callq *(%rip) # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 18: 48 89 5d 00 movq %rbx, (%rbp) // 1c: 48 83 c5 08 addq $0x8, %rbp // 20: 58 popq %rax // 21: ff 25 00 00 00 00 jmpq *(%rip) # 0x27 <_JIT_ENTRY+0x27> // 0000000000000023: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 27: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_REX_GOTPCRELX PyExc_SystemError-0x4 // 2e: 48 8b 30 movq (%rax), %rsi // 31: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_PC32 .L.str.28-0x4 // 38: 4c 89 e7 movq %r12, %rdi // 3b: ff 15 00 00 00 00 callq *(%rip) # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_GOTPCRELX _PyErr_SetString-0x4 // 41: 58 popq %rax // 42: ff 25 00 00 00 00 jmpq *(%rip) # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 48: const unsigned char code_body[72] = { 0x50, 0x49, 0x8b, 0x5d, 0x28, 0x48, 0x85, 0xdb, 0x74, 0x1d, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: 'no locals found\x00' // 10: // 10: &_Py_INCREF_IncRefTotal+0x0 // 18: CONTINUE // 20: &PyExc_SystemError+0x0 // 28: &_PyErr_SetString+0x0 // 30: ERROR_TARGET const unsigned char data_body[56] = { 0x6e, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x10, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x18, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x20, (uintptr_t)&PyExc_SystemError); patch_64(data + 0x28, (uintptr_t)&_PyErr_SetString); patch_64(data + 0x30, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + 0xc); patch_x86_64_32rx(code + 0x23, (uintptr_t)data + 0x14); patch_x86_64_32rx(code + 0x2a, (uintptr_t)data + 0x1c); patch_32r(code + 0x34, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0x24); patch_x86_64_32rx(code + 0x44, (uintptr_t)data + 0x2c); } void emit__LOAD_SUPER_ATTR_ATTR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_SUPER_ATTR_ATTR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 8b 05 00 00 00 00 movl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 7: a8 01 testb $0x1, %al // 9: 0f 85 66 01 00 00 jne 0x175 <_JIT_ENTRY+0x175> // f: 48 8b 4d e8 movq -0x18(%rbp), %rcx // 13: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x1a <_JIT_ENTRY+0x1a> // 0000000000000016: R_X86_64_REX_GOTPCRELX PySuper_Type-0x4 // 1a: 75 11 jne 0x2d <_JIT_ENTRY+0x2d> // 1c: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 20: 48 8b 4b 08 movq 0x8(%rbx), %rcx // 24: f6 81 ab 00 00 00 80 testb $-0x80, 0xab(%rcx) // 2b: 75 07 jne 0x34 <_JIT_ENTRY+0x34> // 2d: 58 popq %rax // 2e: ff 25 00 00 00 00 jmpq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 34: 49 8b 4d 00 movq (%r13), %rcx // 38: 48 8b 51 08 movq 0x8(%rcx), %rdx // 3c: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 43: 0f 85 4c 01 00 00 jne 0x195 <_JIT_ENTRY+0x195> // 49: 48 8b 49 20 movq 0x20(%rcx), %rcx // 4d: 48 8b 51 08 movq 0x8(%rcx), %rdx // 51: f6 82 ab 00 00 00 04 testb $0x4, 0xab(%rdx) // 58: 0f 84 57 01 00 00 je 0x1b5 <_JIT_ENTRY+0x1b5> // 5e: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 65: 0f 84 6a 01 00 00 je 0x1d5 <_JIT_ENTRY+0x1d5> // 6b: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 72: 0f 84 7d 01 00 00 je 0x1f5 <_JIT_ENTRY+0x1f5> // 78: 0f b7 c0 movzwl %ax, %eax // 7b: c1 e8 02 shrl $0x2, %eax // 7e: 48 39 41 10 cmpq %rax, 0x10(%rcx) // 82: 0f 8e 8d 01 00 00 jle 0x215 <_JIT_ENTRY+0x215> // 88: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 8c: 48 8b 54 c1 18 movq 0x18(%rcx,%rax,8), %rdx // 91: 48 89 df movq %rbx, %rdi // 94: 4c 89 f6 movq %r14, %rsi // 97: 31 c9 xorl %ecx, %ecx // 99: ff 15 00 00 00 00 callq *(%rip) # 0x9f <_JIT_ENTRY+0x9f> // 000000000000009b: R_X86_64_GOTPCRELX _PySuper_Lookup-0x4 // 9f: 48 89 04 24 movq %rax, (%rsp) // a3: 4c 8b 3d 00 00 00 00 movq (%rip), %r15 # 0xaa <_JIT_ENTRY+0xaa> // 00000000000000a6: R_X86_64_REX_GOTPCRELX PySuper_Type-0x4 // aa: 49 8b 07 movq (%r15), %rax // ad: 48 85 c0 testq %rax, %rax // b0: 7f 18 jg 0xca <_JIT_ENTRY+0xca> // b2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_PC32 .L.str.1-0x4 // b9: be 4d 07 00 00 movl $0x74d, %esi # imm = 0x74D // be: 4c 89 fa movq %r15, %rdx // c1: ff 15 00 00 00 00 callq *(%rip) # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // c7: 49 8b 07 movq (%r15), %rax // ca: 85 c0 testl %eax, %eax // cc: 78 18 js 0xe6 <_JIT_ENTRY+0xe6> // ce: ff 15 00 00 00 00 callq *(%rip) # 0xd4 <_JIT_ENTRY+0xd4> // 00000000000000d0: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // d4: 49 ff 0f decq (%r15) // d7: 75 0d jne 0xe6 <_JIT_ENTRY+0xe6> // d9: 48 8b 3d 00 00 00 00 movq (%rip), %rdi # 0xe0 <_JIT_ENTRY+0xe0> // 00000000000000dc: R_X86_64_REX_GOTPCRELX PySuper_Type-0x4 // e0: ff 15 00 00 00 00 callq *(%rip) # 0xe6 <_JIT_ENTRY+0xe6> // 00000000000000e2: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // e6: 48 8b 03 movq (%rbx), %rax // e9: 48 85 c0 testq %rax, %rax // ec: 7f 18 jg 0x106 <_JIT_ENTRY+0x106> // ee: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf5 <_JIT_ENTRY+0xf5> // 00000000000000f1: R_X86_64_PC32 .L.str.1-0x4 // f5: be 4e 07 00 00 movl $0x74e, %esi # imm = 0x74E // fa: 48 89 da movq %rbx, %rdx // fd: ff 15 00 00 00 00 callq *(%rip) # 0x103 <_JIT_ENTRY+0x103> // 00000000000000ff: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 103: 48 8b 03 movq (%rbx), %rax // 106: 85 c0 testl %eax, %eax // 108: 78 14 js 0x11e <_JIT_ENTRY+0x11e> // 10a: ff 15 00 00 00 00 callq *(%rip) # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 110: 48 ff 0b decq (%rbx) // 113: 75 09 jne 0x11e <_JIT_ENTRY+0x11e> // 115: 48 89 df movq %rbx, %rdi // 118: ff 15 00 00 00 00 callq *(%rip) # 0x11e <_JIT_ENTRY+0x11e> // 000000000000011a: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 11e: 49 8b 06 movq (%r14), %rax // 121: 48 85 c0 testq %rax, %rax // 124: 7f 18 jg 0x13e <_JIT_ENTRY+0x13e> // 126: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_PC32 .L.str.1-0x4 // 12d: be 4f 07 00 00 movl $0x74f, %esi # imm = 0x74F // 132: 4c 89 f2 movq %r14, %rdx // 135: ff 15 00 00 00 00 callq *(%rip) # 0x13b <_JIT_ENTRY+0x13b> // 0000000000000137: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 13b: 49 8b 06 movq (%r14), %rax // 13e: 85 c0 testl %eax, %eax // 140: 78 14 js 0x156 <_JIT_ENTRY+0x156> // 142: ff 15 00 00 00 00 callq *(%rip) # 0x148 <_JIT_ENTRY+0x148> // 0000000000000144: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 148: 49 ff 0e decq (%r14) // 14b: 75 09 jne 0x156 <_JIT_ENTRY+0x156> // 14d: 4c 89 f7 movq %r14, %rdi // 150: ff 15 00 00 00 00 callq *(%rip) # 0x156 <_JIT_ENTRY+0x156> // 0000000000000152: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 156: 48 8b 04 24 movq (%rsp), %rax // 15a: 48 85 c0 testq %rax, %rax // 15d: 74 0f je 0x16e <_JIT_ENTRY+0x16e> // 15f: 48 89 45 e8 movq %rax, -0x18(%rbp) // 163: 48 83 c5 f0 addq $-0x10, %rbp // 167: 58 popq %rax // 168: ff 25 00 00 00 00 jmpq *(%rip) # 0x16e <_JIT_ENTRY+0x16e> // 000000000000016a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 16e: 58 popq %rax // 16f: ff 25 00 00 00 00 jmpq *(%rip) # 0x175 <_JIT_ENTRY+0x175> // 0000000000000171: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 175: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x17c <_JIT_ENTRY+0x17c> // 0000000000000178: R_X86_64_PC32 .L.str.44-0x4 // 17c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x183 <_JIT_ENTRY+0x183> // 000000000000017f: R_X86_64_PC32 .L.str.1-0x4 // 183: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x18a <_JIT_ENTRY+0x18a> // 0000000000000186: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 18a: ba 41 07 00 00 movl $0x741, %edx # imm = 0x741 // 18f: ff 15 00 00 00 00 callq *(%rip) # 0x195 <_JIT_ENTRY+0x195> // 0000000000000191: R_X86_64_GOTPCRELX __assert_fail-0x4 // 195: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x19c <_JIT_ENTRY+0x19c> // 0000000000000198: R_X86_64_PC32 .L.str.108-0x4 // 19c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a3 <_JIT_ENTRY+0x1a3> // 000000000000019f: R_X86_64_PC32 .L.str.109-0x4 // 1a3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1aa <_JIT_ENTRY+0x1aa> // 00000000000001a6: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 1aa: ba 4d 00 00 00 movl $0x4d, %edx // 1af: ff 15 00 00 00 00 callq *(%rip) # 0x1b5 <_JIT_ENTRY+0x1b5> // 00000000000001b1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1bc <_JIT_ENTRY+0x1bc> // 00000000000001b8: R_X86_64_PC32 .L.str.110-0x4 // 1bc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1c3 <_JIT_ENTRY+0x1c3> // 00000000000001bf: R_X86_64_PC32 .L.str.111-0x4 // 1c3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ca <_JIT_ENTRY+0x1ca> // 00000000000001c6: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 1ca: ba 99 00 00 00 movl $0x99, %edx // 1cf: ff 15 00 00 00 00 callq *(%rip) # 0x1d5 <_JIT_ENTRY+0x1d5> // 00000000000001d1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1d5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1dc <_JIT_ENTRY+0x1dc> // 00000000000001d8: R_X86_64_PC32 .L.str.115-0x4 // 1dc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1e3 <_JIT_ENTRY+0x1e3> // 00000000000001df: R_X86_64_PC32 .L.str.114-0x4 // 1e3: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ea <_JIT_ENTRY+0x1ea> // 00000000000001e6: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1ea: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 1ef: ff 15 00 00 00 00 callq *(%rip) # 0x1f5 <_JIT_ENTRY+0x1f5> // 00000000000001f1: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1f5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1fc <_JIT_ENTRY+0x1fc> // 00000000000001f8: R_X86_64_PC32 .L.str.116-0x4 // 1fc: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x203 <_JIT_ENTRY+0x203> // 00000000000001ff: R_X86_64_PC32 .L.str.114-0x4 // 203: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x20a <_JIT_ENTRY+0x20a> // 0000000000000206: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 20a: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 20f: ff 15 00 00 00 00 callq *(%rip) # 0x215 <_JIT_ENTRY+0x215> // 0000000000000211: R_X86_64_GOTPCRELX __assert_fail-0x4 // 215: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x21c <_JIT_ENTRY+0x21c> // 0000000000000218: R_X86_64_PC32 .L.str.113-0x4 // 21c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x223 <_JIT_ENTRY+0x223> // 000000000000021f: R_X86_64_PC32 .L.str.111-0x4 // 223: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x22a <_JIT_ENTRY+0x22a> // 0000000000000226: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 22a: ba 9b 00 00 00 movl $0x9b, %edx // 22f: ff 15 00 00 00 00 callq *(%rip) # 0x235 <_JIT_ENTRY+0x235> // 0000000000000231: R_X86_64_GOTPCRELX __assert_fail-0x4 // 235: const unsigned char code_body[565] = { 0x50, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x0f, 0x85, 0x66, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x48, 0x8b, 0x5d, 0xf0, 0x48, 0x8b, 0x4b, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x80, 0x75, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x4c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x49, 0x20, 0x48, 0x8b, 0x51, 0x08, 0xf6, 0x82, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x57, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x6a, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x7d, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0xc1, 0xe8, 0x02, 0x48, 0x39, 0x41, 0x10, 0x0f, 0x8e, 0x8d, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x75, 0xf8, 0x48, 0x8b, 0x54, 0xc1, 0x18, 0x48, 0x89, 0xdf, 0x4c, 0x89, 0xf6, 0x31, 0xc9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x04, 0x24, 0x4c, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x4d, 0x07, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x18, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x0d, 0x48, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x4e, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x4f, 0x07, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x48, 0x89, 0x45, 0xe8, 0x48, 0x83, 0xc5, 0xf0, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x41, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00!(oparg & 1)\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 252: 00 00 00 00 00 00 // 258: OPARG // 260: &PySuper_Type+0x0 // 268: JUMP_TARGET // 270: &PyCode_Type+0x0 // 278: &PyLong_Type+0x0 // 280: &PyBool_Type+0x0 // 288: &_PySuper_Lookup+0x0 // 290: &_Py_NegativeRefcount+0x0 // 298: &_Py_DECREF_DecRefTotal+0x0 // 2a0: &_Py_Dealloc+0x0 // 2a8: CONTINUE // 2b0: ERROR_TARGET // 2b8: &__assert_fail+0x0 const unsigned char data_body[704] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x21, 0x28, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x31, 0x29, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x258, instruction->oparg); patch_64(data + 0x260, (uintptr_t)&PySuper_Type); patch_64(data + 0x268, instruction_starts[instruction->jump_target]); patch_64(data + 0x270, (uintptr_t)&PyCode_Type); patch_64(data + 0x278, (uintptr_t)&PyLong_Type); patch_64(data + 0x280, (uintptr_t)&PyBool_Type); patch_64(data + 0x288, (uintptr_t)&_PySuper_Lookup); patch_64(data + 0x290, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x298, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x2a0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x2a8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x2b0, instruction_starts[instruction->error_target]); patch_64(data + 0x2b8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0x16, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x264); patch_x86_64_32rx(code + 0x3f, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0x61, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x27c); patch_x86_64_32rx(code + 0x9b, (uintptr_t)data + 0x284); patch_x86_64_32rx(code + 0xa6, (uintptr_t)data + 0x25c); patch_32r(code + 0xb5, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xc3, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0xd0, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0xdc, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0xe2, (uintptr_t)data + 0x29c); patch_32r(code + 0xf1, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xff, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x10c, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x11a, (uintptr_t)data + 0x29c); patch_32r(code + 0x129, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x137, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x144, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x152, (uintptr_t)data + 0x29c); patch_x86_64_32rx(code + 0x16a, (uintptr_t)data + 0x2a4); patch_x86_64_32rx(code + 0x171, (uintptr_t)data + 0x2ac); patch_32r(code + 0x178, (uintptr_t)data + 0x8a); patch_32r(code + 0x17f, (uintptr_t)data + -0x4); patch_32r(code + 0x186, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x191, (uintptr_t)data + 0x2b4); patch_32r(code + 0x198, (uintptr_t)data + 0x97); patch_32r(code + 0x19f, (uintptr_t)data + 0xb5); patch_32r(code + 0x1a6, (uintptr_t)data + 0xfb); patch_x86_64_32rx(code + 0x1b1, (uintptr_t)data + 0x2b4); patch_32r(code + 0x1b8, (uintptr_t)data + 0x131); patch_32r(code + 0x1bf, (uintptr_t)data + 0x142); patch_32r(code + 0x1c6, (uintptr_t)data + 0x17e); patch_x86_64_32rx(code + 0x1d1, (uintptr_t)data + 0x2b4); patch_32r(code + 0x1d8, (uintptr_t)data + 0x1f7); patch_32r(code + 0x1df, (uintptr_t)data + 0x1c0); patch_32r(code + 0x1e6, (uintptr_t)data + 0x213); patch_x86_64_32rx(code + 0x1f1, (uintptr_t)data + 0x2b4); patch_32r(code + 0x1f8, (uintptr_t)data + 0x232); patch_32r(code + 0x1ff, (uintptr_t)data + 0x1c0); patch_32r(code + 0x206, (uintptr_t)data + 0x213); patch_x86_64_32rx(code + 0x211, (uintptr_t)data + 0x2b4); patch_32r(code + 0x218, (uintptr_t)data + 0x1a8); patch_32r(code + 0x21f, (uintptr_t)data + 0x142); patch_32r(code + 0x226, (uintptr_t)data + 0x17e); patch_x86_64_32rx(code + 0x231, (uintptr_t)data + 0x2b4); } void emit__LOAD_SUPER_ATTR_METHOD( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_LOAD_SUPER_ATTR_METHOD.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // b: a8 01 testb $0x1, %al // d: 0f 84 dc 01 00 00 je 0x1ef <_JIT_ENTRY+0x1ef> // 13: 48 8b 4d e8 movq -0x18(%rbp), %rcx // 17: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x1e <_JIT_ENTRY+0x1e> // 000000000000001a: R_X86_64_REX_GOTPCRELX PySuper_Type-0x4 // 1e: 75 11 jne 0x31 <_JIT_ENTRY+0x31> // 20: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 24: 49 8b 4f 08 movq 0x8(%r15), %rcx // 28: f6 81 ab 00 00 00 80 testb $-0x80, 0xab(%rcx) // 2f: 75 0a jne 0x3b <_JIT_ENTRY+0x3b> // 31: 48 83 c4 18 addq $0x18, %rsp // 35: ff 25 00 00 00 00 jmpq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 3b: 49 8b 4d 00 movq (%r13), %rcx // 3f: 48 8b 51 08 movq 0x8(%rcx), %rdx // 43: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 4a: 0f 85 bf 01 00 00 jne 0x20f <_JIT_ENTRY+0x20f> // 50: 48 8b 49 20 movq 0x20(%rcx), %rcx // 54: 48 8b 51 08 movq 0x8(%rcx), %rdx // 58: f6 82 ab 00 00 00 04 testb $0x4, 0xab(%rdx) // 5f: 0f 84 ca 01 00 00 je 0x22f <_JIT_ENTRY+0x22f> // 65: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 6c: 0f 84 dd 01 00 00 je 0x24f <_JIT_ENTRY+0x24f> // 72: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 79: 0f 84 f0 01 00 00 je 0x26f <_JIT_ENTRY+0x26f> // 7f: 0f b7 c0 movzwl %ax, %eax // 82: c1 e8 02 shrl $0x2, %eax // 85: 48 39 41 10 cmpq %rax, 0x10(%rcx) // 89: 0f 8e 00 02 00 00 jle 0x28f <_JIT_ENTRY+0x28f> // 8f: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 93: 48 8b 54 c1 18 movq 0x18(%rcx,%rax,8), %rdx // 98: c7 44 24 0c 00 00 00 00 movl $0x0, 0xc(%rsp) // a0: 48 8b 43 08 movq 0x8(%rbx), %rax // a4: 48 8b 80 90 00 00 00 movq 0x90(%rax), %rax // ab: 31 f6 xorl %esi, %esi // ad: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xb4 <_JIT_ENTRY+0xb4> // 00000000000000b0: R_X86_64_REX_GOTPCRELX PyObject_GenericGetAttr-0x4 // b4: 48 8d 4c 24 0c leaq 0xc(%rsp), %rcx // b9: 48 0f 45 ce cmovneq %rsi, %rcx // bd: 4c 89 ff movq %r15, %rdi // c0: 48 89 de movq %rbx, %rsi // c3: ff 15 00 00 00 00 callq *(%rip) # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_GOTPCRELX _PySuper_Lookup-0x4 // c9: 48 89 44 24 10 movq %rax, 0x10(%rsp) // ce: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0xd5 <_JIT_ENTRY+0xd5> // 00000000000000d1: R_X86_64_REX_GOTPCRELX PySuper_Type-0x4 // d5: 49 8b 06 movq (%r14), %rax // d8: 48 85 c0 testq %rax, %rax // db: 7f 18 jg 0xf5 <_JIT_ENTRY+0xf5> // dd: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe4 <_JIT_ENTRY+0xe4> // 00000000000000e0: R_X86_64_PC32 .L.str.1-0x4 // e4: be 6f 07 00 00 movl $0x76f, %esi # imm = 0x76F // e9: 4c 89 f2 movq %r14, %rdx // ec: ff 15 00 00 00 00 callq *(%rip) # 0xf2 <_JIT_ENTRY+0xf2> // 00000000000000ee: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // f2: 49 8b 06 movq (%r14), %rax // f5: 85 c0 testl %eax, %eax // f7: 78 18 js 0x111 <_JIT_ENTRY+0x111> // f9: ff 15 00 00 00 00 callq *(%rip) # 0xff <_JIT_ENTRY+0xff> // 00000000000000fb: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ff: 49 ff 0e decq (%r14) // 102: 75 0d jne 0x111 <_JIT_ENTRY+0x111> // 104: 48 8b 3d 00 00 00 00 movq (%rip), %rdi # 0x10b <_JIT_ENTRY+0x10b> // 0000000000000107: R_X86_64_REX_GOTPCRELX PySuper_Type-0x4 // 10b: ff 15 00 00 00 00 callq *(%rip) # 0x111 <_JIT_ENTRY+0x111> // 000000000000010d: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 111: 49 8b 07 movq (%r15), %rax // 114: 48 85 c0 testq %rax, %rax // 117: 7f 18 jg 0x131 <_JIT_ENTRY+0x131> // 119: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x120 <_JIT_ENTRY+0x120> // 000000000000011c: R_X86_64_PC32 .L.str.1-0x4 // 120: be 70 07 00 00 movl $0x770, %esi # imm = 0x770 // 125: 4c 89 fa movq %r15, %rdx // 128: ff 15 00 00 00 00 callq *(%rip) # 0x12e <_JIT_ENTRY+0x12e> // 000000000000012a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 12e: 49 8b 07 movq (%r15), %rax // 131: 85 c0 testl %eax, %eax // 133: 4c 8b 74 24 10 movq 0x10(%rsp), %r14 // 138: 78 14 js 0x14e <_JIT_ENTRY+0x14e> // 13a: ff 15 00 00 00 00 callq *(%rip) # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 140: 49 ff 0f decq (%r15) // 143: 75 09 jne 0x14e <_JIT_ENTRY+0x14e> // 145: 4c 89 ff movq %r15, %rdi // 148: ff 15 00 00 00 00 callq *(%rip) # 0x14e <_JIT_ENTRY+0x14e> // 000000000000014a: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 14e: 4d 85 f6 testq %r14, %r14 // 151: 74 5a je 0x1ad <_JIT_ENTRY+0x1ad> // 153: 4c 8d 7d f8 leaq -0x8(%rbp), %r15 // 157: 83 7c 24 0c 00 cmpl $0x0, 0xc(%rsp) // 15c: 75 3a jne 0x198 <_JIT_ENTRY+0x198> // 15e: 48 8b 03 movq (%rbx), %rax // 161: 48 85 c0 testq %rax, %rax // 164: 7f 18 jg 0x17e <_JIT_ENTRY+0x17e> // 166: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x16d <_JIT_ENTRY+0x16d> // 0000000000000169: R_X86_64_PC32 .L.str.1-0x4 // 16d: be 78 07 00 00 movl $0x778, %esi # imm = 0x778 // 172: 48 89 da movq %rbx, %rdx // 175: ff 15 00 00 00 00 callq *(%rip) # 0x17b <_JIT_ENTRY+0x17b> // 0000000000000177: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 17b: 48 8b 03 movq (%rbx), %rax // 17e: 85 c0 testl %eax, %eax // 180: 78 14 js 0x196 <_JIT_ENTRY+0x196> // 182: ff 15 00 00 00 00 callq *(%rip) # 0x188 <_JIT_ENTRY+0x188> // 0000000000000184: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 188: 48 ff 0b decq (%rbx) // 18b: 75 09 jne 0x196 <_JIT_ENTRY+0x196> // 18d: 48 89 df movq %rbx, %rdi // 190: ff 15 00 00 00 00 callq *(%rip) # 0x196 <_JIT_ENTRY+0x196> // 0000000000000192: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 196: 31 db xorl %ebx, %ebx // 198: 4c 89 75 e8 movq %r14, -0x18(%rbp) // 19c: 48 89 5d f0 movq %rbx, -0x10(%rbp) // 1a0: 4c 89 fd movq %r15, %rbp // 1a3: 48 83 c4 18 addq $0x18, %rsp // 1a7: ff 25 00 00 00 00 jmpq *(%rip) # 0x1ad <_JIT_ENTRY+0x1ad> // 00000000000001a9: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1ad: 48 8b 03 movq (%rbx), %rax // 1b0: 48 85 c0 testq %rax, %rax // 1b3: 7f 18 jg 0x1cd <_JIT_ENTRY+0x1cd> // 1b5: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1bc <_JIT_ENTRY+0x1bc> // 00000000000001b8: R_X86_64_PC32 .L.str.1-0x4 // 1bc: be 72 07 00 00 movl $0x772, %esi # imm = 0x772 // 1c1: 48 89 da movq %rbx, %rdx // 1c4: ff 15 00 00 00 00 callq *(%rip) # 0x1ca <_JIT_ENTRY+0x1ca> // 00000000000001c6: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 1ca: 48 8b 03 movq (%rbx), %rax // 1cd: 85 c0 testl %eax, %eax // 1cf: 78 14 js 0x1e5 <_JIT_ENTRY+0x1e5> // 1d1: ff 15 00 00 00 00 callq *(%rip) # 0x1d7 <_JIT_ENTRY+0x1d7> // 00000000000001d3: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 1d7: 48 ff 0b decq (%rbx) // 1da: 75 09 jne 0x1e5 <_JIT_ENTRY+0x1e5> // 1dc: 48 89 df movq %rbx, %rdi // 1df: ff 15 00 00 00 00 callq *(%rip) # 0x1e5 <_JIT_ENTRY+0x1e5> // 00000000000001e1: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 1e5: 48 83 c4 18 addq $0x18, %rsp // 1e9: ff 25 00 00 00 00 jmpq *(%rip) # 0x1ef <_JIT_ENTRY+0x1ef> // 00000000000001eb: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1ef: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1f6 <_JIT_ENTRY+0x1f6> // 00000000000001f2: R_X86_64_PC32 .L.str.45-0x4 // 1f6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1fd <_JIT_ENTRY+0x1fd> // 00000000000001f9: R_X86_64_PC32 .L.str.1-0x4 // 1fd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x204 <_JIT_ENTRY+0x204> // 0000000000000200: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 204: ba 60 07 00 00 movl $0x760, %edx # imm = 0x760 // 209: ff 15 00 00 00 00 callq *(%rip) # 0x20f <_JIT_ENTRY+0x20f> // 000000000000020b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 20f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x216 <_JIT_ENTRY+0x216> // 0000000000000212: R_X86_64_PC32 .L.str.108-0x4 // 216: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x21d <_JIT_ENTRY+0x21d> // 0000000000000219: R_X86_64_PC32 .L.str.109-0x4 // 21d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x224 <_JIT_ENTRY+0x224> // 0000000000000220: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 224: ba 4d 00 00 00 movl $0x4d, %edx // 229: ff 15 00 00 00 00 callq *(%rip) # 0x22f <_JIT_ENTRY+0x22f> // 000000000000022b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 22f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x236 <_JIT_ENTRY+0x236> // 0000000000000232: R_X86_64_PC32 .L.str.110-0x4 // 236: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x23d <_JIT_ENTRY+0x23d> // 0000000000000239: R_X86_64_PC32 .L.str.111-0x4 // 23d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x244 <_JIT_ENTRY+0x244> // 0000000000000240: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 244: ba 99 00 00 00 movl $0x99, %edx // 249: ff 15 00 00 00 00 callq *(%rip) # 0x24f <_JIT_ENTRY+0x24f> // 000000000000024b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 24f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x256 <_JIT_ENTRY+0x256> // 0000000000000252: R_X86_64_PC32 .L.str.115-0x4 // 256: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x25d <_JIT_ENTRY+0x25d> // 0000000000000259: R_X86_64_PC32 .L.str.114-0x4 // 25d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x264 <_JIT_ENTRY+0x264> // 0000000000000260: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 264: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 269: ff 15 00 00 00 00 callq *(%rip) # 0x26f <_JIT_ENTRY+0x26f> // 000000000000026b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 26f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x276 <_JIT_ENTRY+0x276> // 0000000000000272: R_X86_64_PC32 .L.str.116-0x4 // 276: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x27d <_JIT_ENTRY+0x27d> // 0000000000000279: R_X86_64_PC32 .L.str.114-0x4 // 27d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x284 <_JIT_ENTRY+0x284> // 0000000000000280: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 284: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 289: ff 15 00 00 00 00 callq *(%rip) # 0x28f <_JIT_ENTRY+0x28f> // 000000000000028b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 28f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x296 <_JIT_ENTRY+0x296> // 0000000000000292: R_X86_64_PC32 .L.str.113-0x4 // 296: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x29d <_JIT_ENTRY+0x29d> // 0000000000000299: R_X86_64_PC32 .L.str.111-0x4 // 29d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x2a4 <_JIT_ENTRY+0x2a4> // 00000000000002a0: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 2a4: ba 9b 00 00 00 movl $0x9b, %edx // 2a9: ff 15 00 00 00 00 callq *(%rip) # 0x2af <_JIT_ENTRY+0x2af> // 00000000000002ab: R_X86_64_GOTPCRELX __assert_fail-0x4 // 2af: const unsigned char code_body[687] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xa8, 0x01, 0x0f, 0x84, 0xdc, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x75, 0x11, 0x4c, 0x8b, 0x7d, 0xf0, 0x49, 0x8b, 0x4f, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x80, 0x75, 0x0a, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xbf, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x49, 0x20, 0x48, 0x8b, 0x51, 0x08, 0xf6, 0x82, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xca, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xdd, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xf0, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0xc0, 0xc1, 0xe8, 0x02, 0x48, 0x39, 0x41, 0x10, 0x0f, 0x8e, 0x00, 0x02, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x54, 0xc1, 0x18, 0xc7, 0x44, 0x24, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x80, 0x90, 0x00, 0x00, 0x00, 0x31, 0xf6, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x4c, 0x24, 0x0c, 0x48, 0x0f, 0x45, 0xce, 0x4c, 0x89, 0xff, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x44, 0x24, 0x10, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x6f, 0x07, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x18, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x0d, 0x48, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x70, 0x07, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x4c, 0x8b, 0x74, 0x24, 0x10, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0x5a, 0x4c, 0x8d, 0x7d, 0xf8, 0x83, 0x7c, 0x24, 0x0c, 0x00, 0x75, 0x3a, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x78, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x31, 0xdb, 0x4c, 0x89, 0x75, 0xe8, 0x48, 0x89, 0x5d, 0xf0, 0x4c, 0x89, 0xfd, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x72, 0x07, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x60, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg & 1\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 24f: 00 // 250: OPARG // 258: &PySuper_Type+0x0 // 260: JUMP_TARGET // 268: &PyCode_Type+0x0 // 270: &PyLong_Type+0x0 // 278: &PyBool_Type+0x0 // 280: &PyObject_GenericGetAttr+0x0 // 288: &_PySuper_Lookup+0x0 // 290: &_Py_NegativeRefcount+0x0 // 298: &_Py_DECREF_DecRefTotal+0x0 // 2a0: &_Py_Dealloc+0x0 // 2a8: CONTINUE // 2b0: ERROR_TARGET // 2b8: &__assert_fail+0x0 const unsigned char data_body[704] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x26, 0x20, 0x31, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x250, instruction->oparg); patch_64(data + 0x258, (uintptr_t)&PySuper_Type); patch_64(data + 0x260, instruction_starts[instruction->jump_target]); patch_64(data + 0x268, (uintptr_t)&PyCode_Type); patch_64(data + 0x270, (uintptr_t)&PyLong_Type); patch_64(data + 0x278, (uintptr_t)&PyBool_Type); patch_64(data + 0x280, (uintptr_t)&PyObject_GenericGetAttr); patch_64(data + 0x288, (uintptr_t)&_PySuper_Lookup); patch_64(data + 0x290, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x298, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x2a0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x2a8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x2b0, instruction_starts[instruction->error_target]); patch_64(data + 0x2b8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + 0x24c); patch_x86_64_32rx(code + 0x1a, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0x37, (uintptr_t)data + 0x25c); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0x264); patch_x86_64_32rx(code + 0x68, (uintptr_t)data + 0x26c); patch_x86_64_32rx(code + 0x75, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0xb0, (uintptr_t)data + 0x27c); patch_x86_64_32rx(code + 0xc5, (uintptr_t)data + 0x284); patch_x86_64_32rx(code + 0xd1, (uintptr_t)data + 0x254); patch_32r(code + 0xe0, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xee, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0xfb, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x107, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0x10d, (uintptr_t)data + 0x29c); patch_32r(code + 0x11c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x12a, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x13c, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x14a, (uintptr_t)data + 0x29c); patch_32r(code + 0x169, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x177, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x184, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x192, (uintptr_t)data + 0x29c); patch_x86_64_32rx(code + 0x1a9, (uintptr_t)data + 0x2a4); patch_32r(code + 0x1b8, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1c6, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x1d3, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x1e1, (uintptr_t)data + 0x29c); patch_x86_64_32rx(code + 0x1eb, (uintptr_t)data + 0x2ac); patch_32r(code + 0x1f2, (uintptr_t)data + 0x8a); patch_32r(code + 0x1f9, (uintptr_t)data + -0x4); patch_32r(code + 0x200, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x20b, (uintptr_t)data + 0x2b4); patch_32r(code + 0x212, (uintptr_t)data + 0x94); patch_32r(code + 0x219, (uintptr_t)data + 0xb2); patch_32r(code + 0x220, (uintptr_t)data + 0xf8); patch_x86_64_32rx(code + 0x22b, (uintptr_t)data + 0x2b4); patch_32r(code + 0x232, (uintptr_t)data + 0x12e); patch_32r(code + 0x239, (uintptr_t)data + 0x13f); patch_32r(code + 0x240, (uintptr_t)data + 0x17b); patch_x86_64_32rx(code + 0x24b, (uintptr_t)data + 0x2b4); patch_32r(code + 0x252, (uintptr_t)data + 0x1f4); patch_32r(code + 0x259, (uintptr_t)data + 0x1bd); patch_32r(code + 0x260, (uintptr_t)data + 0x210); patch_x86_64_32rx(code + 0x26b, (uintptr_t)data + 0x2b4); patch_32r(code + 0x272, (uintptr_t)data + 0x22f); patch_32r(code + 0x279, (uintptr_t)data + 0x1bd); patch_32r(code + 0x280, (uintptr_t)data + 0x210); patch_x86_64_32rx(code + 0x28b, (uintptr_t)data + 0x2b4); patch_32r(code + 0x292, (uintptr_t)data + 0x1a5); patch_32r(code + 0x299, (uintptr_t)data + 0x13f); patch_32r(code + 0x2a0, (uintptr_t)data + 0x17b); patch_x86_64_32rx(code + 0x2ab, (uintptr_t)data + 0x2b4); } void emit__MAKE_CELL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_MAKE_CELL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 1d 00 00 00 00 movq (%rip), %rbx # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 0f b7 c3 movzwl %bx, %eax // b: 49 8b 7c c5 48 movq 0x48(%r13,%rax,8), %rdi // 10: ff 15 00 00 00 00 callq *(%rip) # 0x16 <_JIT_ENTRY+0x16> // 0000000000000012: R_X86_64_GOTPCRELX PyCell_New-0x4 // 16: 48 85 c0 testq %rax, %rax // 19: 74 25 je 0x40 <_JIT_ENTRY+0x40> // 1b: 0f b7 cb movzwl %bx, %ecx // 1e: 49 8b 5c cd 48 movq 0x48(%r13,%rcx,8), %rbx // 23: 49 89 44 cd 48 movq %rax, 0x48(%r13,%rcx,8) // 28: 48 85 db testq %rbx, %rbx // 2b: 74 0c je 0x39 <_JIT_ENTRY+0x39> // 2d: 48 8b 03 movq (%rbx), %rax // 30: 48 85 c0 testq %rax, %rax // 33: 7e 12 jle 0x47 <_JIT_ENTRY+0x47> // 35: 85 c0 testl %eax, %eax // 37: 79 2a jns 0x63 <_JIT_ENTRY+0x63> // 39: 58 popq %rax // 3a: ff 25 00 00 00 00 jmpq *(%rip) # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 40: 58 popq %rax // 41: ff 25 00 00 00 00 jmpq *(%rip) # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 47: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_PC32 .L.str.114-0x4 // 4e: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 53: 48 89 da movq %rbx, %rdx // 56: ff 15 00 00 00 00 callq *(%rip) # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 5c: 48 8b 03 movq (%rbx), %rax // 5f: 85 c0 testl %eax, %eax // 61: 78 d6 js 0x39 <_JIT_ENTRY+0x39> // 63: ff 15 00 00 00 00 callq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 69: 48 ff 0b decq (%rbx) // 6c: 75 cb jne 0x39 <_JIT_ENTRY+0x39> // 6e: 48 89 df movq %rbx, %rdi // 71: ff 15 00 00 00 00 callq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 77: 58 popq %rax // 78: ff 25 00 00 00 00 jmpq *(%rip) # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 78: const unsigned char code_body[120] = { 0x50, 0x48, 0x8b, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0xc3, 0x49, 0x8b, 0x7c, 0xc5, 0x48, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x25, 0x0f, 0xb7, 0xcb, 0x49, 0x8b, 0x5c, 0xcd, 0x48, 0x49, 0x89, 0x44, 0xcd, 0x48, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x12, 0x85, 0xc0, 0x79, 0x2a, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xd6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xcb, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // 37: 00 // 38: OPARG // 40: &PyCell_New+0x0 // 48: CONTINUE // 50: ERROR_TARGET // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x38, instruction->oparg); patch_64(data + 0x40, (uintptr_t)&PyCell_New); patch_64(data + 0x48, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x50, instruction_starts[instruction->error_target]); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0x34); patch_x86_64_32rx(code + 0x12, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x43, (uintptr_t)data + 0x4c); patch_32r(code + 0x4a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x58, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x65, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0x64); } void emit__MAKE_FUNCTION( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_MAKE_FUNCTION.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 49 8b 75 18 movq 0x18(%r13), %rsi // 9: 48 89 df movq %rbx, %rdi // c: ff 15 00 00 00 00 callq *(%rip) # 0x12 <_JIT_ENTRY+0x12> // 000000000000000e: R_X86_64_GOTPCRELX PyFunction_New-0x4 // 12: 49 89 c6 movq %rax, %r14 // 15: 48 8b 03 movq (%rbx), %rax // 18: 48 85 c0 testq %rax, %rax // 1b: 7e 06 jle 0x23 <_JIT_ENTRY+0x23> // 1d: 85 c0 testl %eax, %eax // 1f: 79 1e jns 0x3f <_JIT_ENTRY+0x3f> // 21: eb 27 jmp 0x4a <_JIT_ENTRY+0x4a> // 23: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_PC32 .L.str.1-0x4 // 2a: be 97 0f 00 00 movl $0xf97, %esi # imm = 0xF97 // 2f: 48 89 da movq %rbx, %rdx // 32: ff 15 00 00 00 00 callq *(%rip) # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 38: 48 8b 03 movq (%rbx), %rax // 3b: 85 c0 testl %eax, %eax // 3d: 78 0b js 0x4a <_JIT_ENTRY+0x4a> // 3f: ff 15 00 00 00 00 callq *(%rip) # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 45: 48 ff 0b decq (%rbx) // 48: 74 1c je 0x66 <_JIT_ENTRY+0x66> // 4a: 4d 85 f6 testq %r14, %r14 // 4d: 74 25 je 0x74 <_JIT_ENTRY+0x74> // 4f: 8b 73 5c movl 0x5c(%rbx), %esi // 52: 4c 89 f7 movq %r14, %rdi // 55: ff 15 00 00 00 00 callq *(%rip) # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_GOTPCRELX _PyFunction_SetVersion-0x4 // 5b: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 5f: 58 popq %rax // 60: ff 25 00 00 00 00 jmpq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 66: 48 89 df movq %rbx, %rdi // 69: ff 15 00 00 00 00 callq *(%rip) # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 6f: 4d 85 f6 testq %r14, %r14 // 72: 75 db jne 0x4f <_JIT_ENTRY+0x4f> // 74: 58 popq %rax // 75: ff 25 00 00 00 00 jmpq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 7b: const unsigned char code_body[123] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x49, 0x8b, 0x75, 0x18, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x97, 0x0f, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x1c, 0x4d, 0x85, 0xf6, 0x74, 0x25, 0x8b, 0x73, 0x5c, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x75, 0xdb, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyFunction_New+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_PyFunction_SetVersion+0x0 // 60: CONTINUE // 68: &_Py_Dealloc+0x0 // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyFunction_New); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_PyFunction_SetVersion); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xe, (uintptr_t)data + 0x3c); patch_32r(code + 0x26, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x41, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x57, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x6b, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0x6c); } void emit__MAP_ADD( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_MAP_ADD.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: 48 c7 c1 fe ff ff ff movq $-0x2, %rcx // f: 48 29 c1 subq %rax, %rcx // 12: 48 8b 7c cd 00 movq (%rbp,%rcx,8), %rdi // 17: 48 8b 47 08 movq 0x8(%rdi), %rax // 1b: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x22 <_JIT_ENTRY+0x22> // 000000000000001e: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 22: 75 24 jne 0x48 <_JIT_ENTRY+0x48> // 24: 48 8b 75 f0 movq -0x10(%rbp), %rsi // 28: 48 8b 55 f8 movq -0x8(%rbp), %rdx // 2c: ff 15 00 00 00 00 callq *(%rip) # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_GOTPCRELX _PyDict_SetItem_Take2-0x4 // 32: 85 c0 testl %eax, %eax // 34: 74 07 je 0x3d <_JIT_ENTRY+0x3d> // 36: 58 popq %rax // 37: ff 25 00 00 00 00 jmpq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 3d: 48 83 c5 f0 addq $-0x10, %rbp // 41: 58 popq %rax // 42: ff 25 00 00 00 00 jmpq *(%rip) # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 48: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_PC32 .L.str.43-0x4 // 4f: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_PC32 .L.str.1-0x4 // 56: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 5d: ba 2e 07 00 00 movl $0x72e, %edx # imm = 0x72E // 62: ff 15 00 00 00 00 callq *(%rip) # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_GOTPCRELX __assert_fail-0x4 // 68: const unsigned char code_body[104] = { 0x50, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0xc7, 0xc1, 0xfe, 0xff, 0xff, 0xff, 0x48, 0x29, 0xc1, 0x48, 0x8b, 0x7c, 0xcd, 0x00, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x24, 0x48, 0x8b, 0x75, 0xf0, 0x48, 0x8b, 0x55, 0xf8, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0xf0, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x2e, 0x07, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyDict_CheckExact(dict)\x00' // a6: 00 00 // a8: OPARG // b0: &PyDict_Type+0x0 // b8: &_PyDict_SetItem_Take2+0x0 // c0: ERROR_TARGET // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x63, 0x74, 0x28, 0x64, 0x69, 0x63, 0x74, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, instruction->oparg); patch_64(data + 0xb0, (uintptr_t)&PyDict_Type); patch_64(data + 0xb8, (uintptr_t)&_PyDict_SetItem_Take2); patch_64(data + 0xc0, instruction_starts[instruction->error_target]); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x1e, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x44, (uintptr_t)data + 0xc4); patch_32r(code + 0x4b, (uintptr_t)data + 0x8a); patch_32r(code + 0x52, (uintptr_t)data + -0x4); patch_32r(code + 0x59, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x64, (uintptr_t)data + 0xcc); } void emit__MATCH_CLASS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_MATCH_CLASS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 89 2c 24 movq %r13, (%rsp) // 5: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 9: 49 8b 46 08 movq 0x8(%r14), %rax // d: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x14 <_JIT_ENTRY+0x14> // 0000000000000010: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 14: 0f 85 40 01 00 00 jne 0x15a <_JIT_ENTRY+0x15a> // 1a: 48 8b 5d e8 movq -0x18(%rbp), %rbx // 1e: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 22: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x29 <_JIT_ENTRY+0x29> // 0000000000000025: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 29: 4c 89 e7 movq %r12, %rdi // 2c: 48 89 de movq %rbx, %rsi // 2f: 4c 89 fa movq %r15, %rdx // 32: 4d 89 f0 movq %r14, %r8 // 35: ff 15 00 00 00 00 callq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _PyEval_MatchClass-0x4 // 3b: 49 89 c5 movq %rax, %r13 // 3e: 48 8b 03 movq (%rbx), %rax // 41: 48 85 c0 testq %rax, %rax // 44: 7e 06 jle 0x4c <_JIT_ENTRY+0x4c> // 46: 85 c0 testl %eax, %eax // 48: 79 1e jns 0x68 <_JIT_ENTRY+0x68> // 4a: eb 27 jmp 0x73 <_JIT_ENTRY+0x73> // 4c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_PC32 .L.str.1-0x4 // 53: be fd 09 00 00 movl $0x9fd, %esi # imm = 0x9FD // 58: 48 89 da movq %rbx, %rdx // 5b: ff 15 00 00 00 00 callq *(%rip) # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 61: 48 8b 03 movq (%rbx), %rax // 64: 85 c0 testl %eax, %eax // 66: 78 0b js 0x73 <_JIT_ENTRY+0x73> // 68: ff 15 00 00 00 00 callq *(%rip) # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 6e: 48 ff 0b decq (%rbx) // 71: 74 0e je 0x81 <_JIT_ENTRY+0x81> // 73: 49 8b 07 movq (%r15), %rax // 76: 48 85 c0 testq %rax, %rax // 79: 7e 17 jle 0x92 <_JIT_ENTRY+0x92> // 7b: 85 c0 testl %eax, %eax // 7d: 79 2f jns 0xae <_JIT_ENTRY+0xae> // 7f: eb 38 jmp 0xb9 <_JIT_ENTRY+0xb9> // 81: 48 89 df movq %rbx, %rdi // 84: ff 15 00 00 00 00 callq *(%rip) # 0x8a <_JIT_ENTRY+0x8a> // 0000000000000086: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 8a: 49 8b 07 movq (%r15), %rax // 8d: 48 85 c0 testq %rax, %rax // 90: 7f e9 jg 0x7b <_JIT_ENTRY+0x7b> // 92: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_PC32 .L.str.1-0x4 // 99: be fe 09 00 00 movl $0x9fe, %esi # imm = 0x9FE // 9e: 4c 89 fa movq %r15, %rdx // a1: ff 15 00 00 00 00 callq *(%rip) # 0xa7 <_JIT_ENTRY+0xa7> // 00000000000000a3: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // a7: 49 8b 07 movq (%r15), %rax // aa: 85 c0 testl %eax, %eax // ac: 78 0b js 0xb9 <_JIT_ENTRY+0xb9> // ae: ff 15 00 00 00 00 callq *(%rip) # 0xb4 <_JIT_ENTRY+0xb4> // 00000000000000b0: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // b4: 49 ff 0f decq (%r15) // b7: 74 0e je 0xc7 <_JIT_ENTRY+0xc7> // b9: 49 8b 06 movq (%r14), %rax // bc: 48 85 c0 testq %rax, %rax // bf: 7e 17 jle 0xd8 <_JIT_ENTRY+0xd8> // c1: 85 c0 testl %eax, %eax // c3: 79 2f jns 0xf4 <_JIT_ENTRY+0xf4> // c5: eb 38 jmp 0xff <_JIT_ENTRY+0xff> // c7: 4c 89 ff movq %r15, %rdi // ca: ff 15 00 00 00 00 callq *(%rip) # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // d0: 49 8b 06 movq (%r14), %rax // d3: 48 85 c0 testq %rax, %rax // d6: 7f e9 jg 0xc1 <_JIT_ENTRY+0xc1> // d8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xdf <_JIT_ENTRY+0xdf> // 00000000000000db: R_X86_64_PC32 .L.str.1-0x4 // df: be ff 09 00 00 movl $0x9ff, %esi # imm = 0x9FF // e4: 4c 89 f2 movq %r14, %rdx // e7: ff 15 00 00 00 00 callq *(%rip) # 0xed <_JIT_ENTRY+0xed> // 00000000000000e9: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // ed: 49 8b 06 movq (%r14), %rax // f0: 85 c0 testl %eax, %eax // f2: 78 0b js 0xff <_JIT_ENTRY+0xff> // f4: ff 15 00 00 00 00 callq *(%rip) # 0xfa <_JIT_ENTRY+0xfa> // 00000000000000f6: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // fa: 49 ff 0e decq (%r14) // fd: 74 25 je 0x124 <_JIT_ENTRY+0x124> // ff: 4d 85 ed testq %r13, %r13 // 102: 74 2e je 0x132 <_JIT_ENTRY+0x132> // 104: 49 8b 45 08 movq 0x8(%r13), %rax // 108: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10f <_JIT_ENTRY+0x10f> // 000000000000010b: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 10f: 75 69 jne 0x17a <_JIT_ENTRY+0x17a> // 111: 4c 89 6d e8 movq %r13, -0x18(%rbp) // 115: 48 83 c5 f0 addq $-0x10, %rbp // 119: 4c 8b 2c 24 movq (%rsp), %r13 // 11d: 58 popq %rax // 11e: ff 25 00 00 00 00 jmpq *(%rip) # 0x124 <_JIT_ENTRY+0x124> // 0000000000000120: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 124: 4c 89 f7 movq %r14, %rdi // 127: ff 15 00 00 00 00 callq *(%rip) # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 12d: 4d 85 ed testq %r13, %r13 // 130: 75 d2 jne 0x104 <_JIT_ENTRY+0x104> // 132: 4d 85 e4 testq %r12, %r12 // 135: 74 63 je 0x19a <_JIT_ENTRY+0x19a> // 137: 49 8b 44 24 70 movq 0x70(%r12), %rax // 13c: 4c 8b 2d 00 00 00 00 movq (%rip), %r13 # 0x143 <_JIT_ENTRY+0x143> // 000000000000013f: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 143: 48 85 c0 testq %rax, %rax // 146: 74 c9 je 0x111 <_JIT_ENTRY+0x111> // 148: 48 83 78 08 00 cmpq $0x0, 0x8(%rax) // 14d: 74 c2 je 0x111 <_JIT_ENTRY+0x111> // 14f: 4c 8b 2c 24 movq (%rsp), %r13 // 153: 58 popq %rax // 154: ff 25 00 00 00 00 jmpq *(%rip) # 0x15a <_JIT_ENTRY+0x15a> // 0000000000000156: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 15a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x161 <_JIT_ENTRY+0x161> // 000000000000015d: R_X86_64_PC32 .L.str.64-0x4 // 161: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x168 <_JIT_ENTRY+0x168> // 0000000000000164: R_X86_64_PC32 .L.str.1-0x4 // 168: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x16f <_JIT_ENTRY+0x16f> // 000000000000016b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 16f: ba fb 09 00 00 movl $0x9fb, %edx # imm = 0x9FB // 174: ff 15 00 00 00 00 callq *(%rip) # 0x17a <_JIT_ENTRY+0x17a> // 0000000000000176: R_X86_64_GOTPCRELX __assert_fail-0x4 // 17a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x181 <_JIT_ENTRY+0x181> // 000000000000017d: R_X86_64_PC32 .L.str.65-0x4 // 181: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x188 <_JIT_ENTRY+0x188> // 0000000000000184: R_X86_64_PC32 .L.str.1-0x4 // 188: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x18f <_JIT_ENTRY+0x18f> // 000000000000018b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 18f: ba 01 0a 00 00 movl $0xa01, %edx # imm = 0xA01 // 194: ff 15 00 00 00 00 callq *(%rip) # 0x19a <_JIT_ENTRY+0x19a> // 0000000000000196: R_X86_64_GOTPCRELX __assert_fail-0x4 // 19a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a1 <_JIT_ENTRY+0x1a1> // 000000000000019d: R_X86_64_PC32 .L.str.143-0x4 // 1a1: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a8 <_JIT_ENTRY+0x1a8> // 00000000000001a4: R_X86_64_PC32 .L.str.144-0x4 // 1a8: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1af <_JIT_ENTRY+0x1af> // 00000000000001ab: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyErr_Occurred-0x4 // 1af: ba 4b 00 00 00 movl $0x4b, %edx // 1b4: ff 15 00 00 00 00 callq *(%rip) # 0x1ba <_JIT_ENTRY+0x1ba> // 00000000000001b6: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1ba: const unsigned char code_body[442] = { 0x50, 0x4c, 0x89, 0x2c, 0x24, 0x4c, 0x8b, 0x75, 0xf8, 0x49, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x40, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xe8, 0x4c, 0x8b, 0x7d, 0xf0, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xde, 0x4c, 0x89, 0xfa, 0x4d, 0x89, 0xf0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0xc5, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xfd, 0x09, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0e, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xfe, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xff, 0x09, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x25, 0x4d, 0x85, 0xed, 0x74, 0x2e, 0x49, 0x8b, 0x45, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x69, 0x4c, 0x89, 0x6d, 0xe8, 0x48, 0x83, 0xc5, 0xf0, 0x4c, 0x8b, 0x2c, 0x24, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xed, 0x75, 0xd2, 0x4d, 0x85, 0xe4, 0x74, 0x63, 0x49, 0x8b, 0x44, 0x24, 0x70, 0x4c, 0x8b, 0x2d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0xc9, 0x48, 0x83, 0x78, 0x08, 0x00, 0x74, 0xc2, 0x4c, 0x8b, 0x2c, 0x24, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xfb, 0x09, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x01, 0x0a, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyTuple_CheckExact(names)\x00PyTuple_CheckExact(attrs)\x00tstate != NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_pyerrors.h\x00PyObject *_PyErr_Occurred(PyThreadState *)\x00' // 145: 00 00 00 // 148: &PyTuple_Type+0x0 // 150: OPARG // 158: &_PyEval_MatchClass+0x0 // 160: &_Py_NegativeRefcount+0x0 // 168: &_Py_DECREF_DecRefTotal+0x0 // 170: &_Py_Dealloc+0x0 // 178: CONTINUE // 180: &_Py_NoneStruct+0x0 // 188: ERROR_TARGET // 190: &__assert_fail+0x0 const unsigned char data_body[408] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x63, 0x74, 0x28, 0x6e, 0x61, 0x6d, 0x65, 0x73, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x63, 0x74, 0x28, 0x61, 0x74, 0x74, 0x72, 0x73, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x70, 0x79, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x45, 0x72, 0x72, 0x5f, 0x4f, 0x63, 0x63, 0x75, 0x72, 0x72, 0x65, 0x64, 0x28, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x148, (uintptr_t)&PyTuple_Type); patch_64(data + 0x150, instruction->oparg); patch_64(data + 0x158, (uintptr_t)&_PyEval_MatchClass); patch_64(data + 0x160, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x168, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x170, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x178, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x180, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x188, instruction_starts[instruction->error_target]); patch_64(data + 0x190, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x10, (uintptr_t)data + 0x144); patch_32r(code + 0x25, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x37, (uintptr_t)data + 0x154); patch_32r(code + 0x4f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x5d, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0x6a, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x86, (uintptr_t)data + 0x16c); patch_32r(code + 0x95, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xa3, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0xb0, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0xcc, (uintptr_t)data + 0x16c); patch_32r(code + 0xdb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xe9, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0xf6, (uintptr_t)data + 0x164); patch_x86_64_32rx(code + 0x10b, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x120, (uintptr_t)data + 0x174); patch_x86_64_32rx(code + 0x129, (uintptr_t)data + 0x16c); patch_x86_64_32rx(code + 0x13f, (uintptr_t)data + 0x17c); patch_x86_64_32rx(code + 0x156, (uintptr_t)data + 0x184); patch_32r(code + 0x15d, (uintptr_t)data + 0x8a); patch_32r(code + 0x164, (uintptr_t)data + -0x4); patch_32r(code + 0x16b, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x176, (uintptr_t)data + 0x18c); patch_32r(code + 0x17d, (uintptr_t)data + 0xa4); patch_32r(code + 0x184, (uintptr_t)data + -0x4); patch_32r(code + 0x18b, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x196, (uintptr_t)data + 0x18c); patch_32r(code + 0x19d, (uintptr_t)data + 0xbe); patch_32r(code + 0x1a4, (uintptr_t)data + 0xcd); patch_32r(code + 0x1ab, (uintptr_t)data + 0x116); patch_x86_64_32rx(code + 0x1b6, (uintptr_t)data + 0x18c); } void emit__MATCH_KEYS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_MATCH_KEYS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 75 f0 movq -0x10(%rbp), %rsi // 5: 48 8b 55 f8 movq -0x8(%rbp), %rdx // 9: 4c 89 e7 movq %r12, %rdi // c: ff 15 00 00 00 00 callq *(%rip) # 0x12 <_JIT_ENTRY+0x12> // 000000000000000e: R_X86_64_GOTPCRELX _PyEval_MatchKeys-0x4 // 12: 48 85 c0 testq %rax, %rax // 15: 74 0f je 0x26 <_JIT_ENTRY+0x26> // 17: 48 89 45 00 movq %rax, (%rbp) // 1b: 48 83 c5 08 addq $0x8, %rbp // 1f: 58 popq %rax // 20: ff 25 00 00 00 00 jmpq *(%rip) # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 26: 58 popq %rax // 27: ff 25 00 00 00 00 jmpq *(%rip) # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 2d: const unsigned char code_body[45] = { 0x50, 0x48, 0x8b, 0x75, 0xf0, 0x48, 0x8b, 0x55, 0xf8, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x0f, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &_PyEval_MatchKeys+0x0 // 8: CONTINUE // 10: ERROR_TARGET const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&_PyEval_MatchKeys); patch_64(data + 0x8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x10, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xe, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x29, (uintptr_t)data + 0xc); } void emit__MATCH_MAPPING( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_MATCH_MAPPING.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: f6 80 a8 00 00 00 40 testb $0x40, 0xa8(%rax) // f: 75 15 jne 0x26 <_JIT_ENTRY+0x26> // 11: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 18: 48 89 45 00 movq %rax, (%rbp) // 1c: 48 83 c5 08 addq $0x8, %rbp // 20: ff 25 00 00 00 00 jmpq *(%rip) # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 26: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 2d: 48 89 45 00 movq %rax, (%rbp) // 31: 48 83 c5 08 addq $0x8, %rbp // 35: ff 25 00 00 00 00 jmpq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 35: const unsigned char code_body[53] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0xf6, 0x80, 0xa8, 0x00, 0x00, 0x00, 0x40, 0x75, 0x15, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, }; // 0: // 0: &_Py_FalseStruct+0x0 // 8: CONTINUE // 10: &_Py_TrueStruct+0x0 const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x10, (uintptr_t)&_Py_TrueStruct); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x29, (uintptr_t)data + 0xc); } void emit__MATCH_SEQUENCE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_MATCH_SEQUENCE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: f6 80 a8 00 00 00 20 testb $0x20, 0xa8(%rax) // f: 75 15 jne 0x26 <_JIT_ENTRY+0x26> // 11: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 18: 48 89 45 00 movq %rax, (%rbp) // 1c: 48 83 c5 08 addq $0x8, %rbp // 20: ff 25 00 00 00 00 jmpq *(%rip) # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 26: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x2d <_JIT_ENTRY+0x2d> // 0000000000000029: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 2d: 48 89 45 00 movq %rax, (%rbp) // 31: 48 83 c5 08 addq $0x8, %rbp // 35: ff 25 00 00 00 00 jmpq *(%rip) # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 35: const unsigned char code_body[53] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0xf6, 0x80, 0xa8, 0x00, 0x00, 0x00, 0x20, 0x75, 0x15, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, }; // 0: // 0: &_Py_FalseStruct+0x0 // 8: CONTINUE // 10: &_Py_TrueStruct+0x0 const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x10, (uintptr_t)&_Py_TrueStruct); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x22, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x29, (uintptr_t)data + 0xc); } void emit__NOP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_NOP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: ff 25 00 00 00 00 jmpq *(%rip) # 0x6 <_JIT_ENTRY+0x6> // 0000000000000002: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 0: // 0: } void emit__POP_EXCEPT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_POP_EXCEPT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 83 c5 f8 addq $-0x8, %rbp // 9: 49 8b 4c 24 78 movq 0x78(%r12), %rcx // e: 48 8b 19 movq (%rcx), %rbx // 11: 31 d2 xorl %edx, %edx // 13: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x1a <_JIT_ENTRY+0x1a> // 0000000000000016: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 1a: 48 0f 45 d0 cmovneq %rax, %rdx // 1e: 48 89 11 movq %rdx, (%rcx) // 21: 48 85 db testq %rbx, %rbx // 24: 74 0c je 0x32 <_JIT_ENTRY+0x32> // 26: 48 8b 03 movq (%rbx), %rax // 29: 48 85 c0 testq %rax, %rax // 2c: 7e 0b jle 0x39 <_JIT_ENTRY+0x39> // 2e: 85 c0 testl %eax, %eax // 30: 79 23 jns 0x55 <_JIT_ENTRY+0x55> // 32: 58 popq %rax // 33: ff 25 00 00 00 00 jmpq *(%rip) # 0x39 <_JIT_ENTRY+0x39> // 0000000000000035: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 39: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_PC32 .L.str.114-0x4 // 40: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 45: 48 89 da movq %rbx, %rdx // 48: ff 15 00 00 00 00 callq *(%rip) # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4e: 48 8b 03 movq (%rbx), %rax // 51: 85 c0 testl %eax, %eax // 53: 78 dd js 0x32 <_JIT_ENTRY+0x32> // 55: ff 15 00 00 00 00 callq *(%rip) # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5b: 48 ff 0b decq (%rbx) // 5e: 75 d2 jne 0x32 <_JIT_ENTRY+0x32> // 60: 48 89 df movq %rbx, %rdi // 63: ff 15 00 00 00 00 callq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 69: 58 popq %rax // 6a: ff 25 00 00 00 00 jmpq *(%rip) # 0x70 <_JIT_ENTRY+0x70> // 000000000000006c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6a: const unsigned char code_body[106] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x4c, 0x24, 0x78, 0x48, 0x8b, 0x19, 0x31, 0xd2, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x0f, 0x45, 0xd0, 0x48, 0x89, 0x11, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // 37: 00 // 38: &_Py_NoneStruct+0x0 // 40: CONTINUE // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 const unsigned char data_body[96] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x38, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x40, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x16, (uintptr_t)data + 0x34); patch_x86_64_32rx(code + 0x35, (uintptr_t)data + 0x3c); patch_32r(code + 0x3c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4a, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x57, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x65, (uintptr_t)data + 0x54); } void emit__POP_FRAME( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_POP_FRAME.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 48 83 c5 f8 addq $-0x8, %rbp // 9: 49 8d 45 48 leaq 0x48(%r13), %rax // d: 48 89 e9 movq %rbp, %rcx // 10: 48 29 c1 subq %rax, %rcx // 13: 48 c1 e9 03 shrq $0x3, %rcx // 17: 41 89 4d 40 movl %ecx, 0x40(%r13) // 1b: 49 8b 4d 00 movq (%r13), %rcx // 1f: 48 8b 51 08 movq 0x8(%rcx), %rdx // 23: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 2a: 75 4e jne 0x7a <_JIT_ENTRY+0x7a> // 2c: 8b 49 48 movl 0x48(%rcx), %ecx // 2f: 48 8d 04 c8 leaq (%rax,%rcx,8), %rax // 33: 48 29 c5 subq %rax, %rbp // 36: 48 c1 ed 03 shrq $0x3, %rbp // 3a: 85 ed testl %ebp, %ebp // 3c: 75 5c jne 0x9a <_JIT_ENTRY+0x9a> // 3e: 41 ff 44 24 2c incl 0x2c(%r12) // 43: 49 8b 5d 08 movq 0x8(%r13), %rbx // 47: 49 89 5c 24 48 movq %rbx, 0x48(%r12) // 4c: 4c 89 e7 movq %r12, %rdi // 4f: 4c 89 ee movq %r13, %rsi // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _PyEval_FrameClearAndPop-0x4 // 58: 48 63 43 40 movslq 0x40(%rbx), %rax // 5c: 4c 89 74 c3 48 movq %r14, 0x48(%rbx,%rax,8) // 61: 48 8d 2c c3 leaq (%rbx,%rax,8), %rbp // 65: 48 83 c5 50 addq $0x50, %rbp // 69: c7 43 40 ff ff ff ff movl $0xffffffff, 0x40(%rbx) # imm = 0xFFFFFFFF // 70: 49 89 dd movq %rbx, %r13 // 73: 58 popq %rax // 74: ff 25 00 00 00 00 jmpq *(%rip) # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 7a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_PC32 .L.str.108-0x4 // 81: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_PC32 .L.str.109-0x4 // 88: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x8f <_JIT_ENTRY+0x8f> // 000000000000008b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 8f: ba 4d 00 00 00 movl $0x4d, %edx // 94: ff 15 00 00 00 00 callq *(%rip) # 0x9a <_JIT_ENTRY+0x9a> // 0000000000000096: R_X86_64_GOTPCRELX __assert_fail-0x4 // 9a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_PC32 .L.str.14-0x4 // a1: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_PC32 .L.str.1-0x4 // a8: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xaf <_JIT_ENTRY+0xaf> // 00000000000000ab: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // af: ba d6 03 00 00 movl $0x3d6, %edx # imm = 0x3D6 // b4: ff 15 00 00 00 00 callq *(%rip) # 0xba <_JIT_ENTRY+0xba> // 00000000000000b6: R_X86_64_GOTPCRELX __assert_fail-0x4 // ba: const unsigned char code_body[186] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8d, 0x45, 0x48, 0x48, 0x89, 0xe9, 0x48, 0x29, 0xc1, 0x48, 0xc1, 0xe9, 0x03, 0x41, 0x89, 0x4d, 0x40, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x4e, 0x8b, 0x49, 0x48, 0x48, 0x8d, 0x04, 0xc8, 0x48, 0x29, 0xc5, 0x48, 0xc1, 0xed, 0x03, 0x85, 0xed, 0x75, 0x5c, 0x41, 0xff, 0x44, 0x24, 0x2c, 0x49, 0x8b, 0x5d, 0x08, 0x49, 0x89, 0x5c, 0x24, 0x48, 0x4c, 0x89, 0xe7, 0x4c, 0x89, 0xee, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x63, 0x43, 0x40, 0x4c, 0x89, 0x74, 0xc3, 0x48, 0x48, 0x8d, 0x2c, 0xc3, 0x48, 0x83, 0xc5, 0x50, 0xc7, 0x43, 0x40, 0xff, 0xff, 0xff, 0xff, 0x49, 0x89, 0xdd, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xd6, 0x03, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00EMPTY()\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 130: // 130: &PyCode_Type+0x0 // 138: &_PyEval_FrameClearAndPop+0x0 // 140: CONTINUE // 148: &__assert_fail+0x0 const unsigned char data_body[336] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x28, 0x29, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x130, (uintptr_t)&PyCode_Type); patch_64(data + 0x138, (uintptr_t)&_PyEval_FrameClearAndPop); patch_64(data + 0x140, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x148, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x26, (uintptr_t)data + 0x12c); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0x134); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0x13c); patch_32r(code + 0x7d, (uintptr_t)data + 0x92); patch_32r(code + 0x84, (uintptr_t)data + 0xb0); patch_32r(code + 0x8b, (uintptr_t)data + 0xf6); patch_x86_64_32rx(code + 0x96, (uintptr_t)data + 0x144); patch_32r(code + 0x9d, (uintptr_t)data + 0x8a); patch_32r(code + 0xa4, (uintptr_t)data + -0x4); patch_32r(code + 0xab, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xb6, (uintptr_t)data + 0x144); } void emit__POP_TOP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_POP_TOP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 03 movq (%rbx), %rax // 8: 48 85 c0 testq %rax, %rax // b: 7e 0f jle 0x1c <_JIT_ENTRY+0x1c> // d: 48 83 c5 f8 addq $-0x8, %rbp // 11: 85 c0 testl %eax, %eax // 13: 79 27 jns 0x3c <_JIT_ENTRY+0x3c> // 15: 58 popq %rax // 16: ff 25 00 00 00 00 jmpq *(%rip) # 0x1c <_JIT_ENTRY+0x1c> // 0000000000000018: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_PC32 .L.str.1-0x4 // 23: be 10 01 00 00 movl $0x110, %esi # imm = 0x110 // 28: 48 89 da movq %rbx, %rdx // 2b: ff 15 00 00 00 00 callq *(%rip) # 0x31 <_JIT_ENTRY+0x31> // 000000000000002d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 31: 48 8b 03 movq (%rbx), %rax // 34: 48 83 c5 f8 addq $-0x8, %rbp // 38: 85 c0 testl %eax, %eax // 3a: 78 d9 js 0x15 <_JIT_ENTRY+0x15> // 3c: ff 15 00 00 00 00 callq *(%rip) # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 42: 48 ff 0b decq (%rbx) // 45: 75 ce jne 0x15 <_JIT_ENTRY+0x15> // 47: 48 89 df movq %rbx, %rdi // 4a: ff 15 00 00 00 00 callq *(%rip) # 0x50 <_JIT_ENTRY+0x50> // 000000000000004c: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 50: 58 popq %rax // 51: ff 25 00 00 00 00 jmpq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 51: const unsigned char code_body[81] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0f, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x79, 0x27, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x01, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x83, 0xc5, 0xf8, 0x85, 0xc0, 0x78, 0xd9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xce, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: CONTINUE // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 const unsigned char data_body[96] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x18, (uintptr_t)data + 0x3c); patch_32r(code + 0x1f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x2d, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x3e, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x4c, (uintptr_t)data + 0x54); } void emit__POP_TOP_LOAD_CONST_INLINE_BORROW( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_POP_TOP_LOAD_CONST_INLINE_BORROW.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 03 movq (%rbx), %rax // 8: 48 85 c0 testq %rax, %rax // b: 7e 16 jle 0x23 <_JIT_ENTRY+0x23> // d: 85 c0 testl %eax, %eax // f: 79 2e jns 0x3f <_JIT_ENTRY+0x3f> // 11: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 18: 48 89 45 f8 movq %rax, -0x8(%rbp) // 1c: 58 popq %rax // 1d: ff 25 00 00 00 00 jmpq *(%rip) # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 23: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_PC32 .L.str.1-0x4 // 2a: be d8 10 00 00 movl $0x10d8, %esi # imm = 0x10D8 // 2f: 48 89 da movq %rbx, %rdx // 32: ff 15 00 00 00 00 callq *(%rip) # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 38: 48 8b 03 movq (%rbx), %rax // 3b: 85 c0 testl %eax, %eax // 3d: 78 d2 js 0x11 <_JIT_ENTRY+0x11> // 3f: ff 15 00 00 00 00 callq *(%rip) # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 45: 48 ff 0b decq (%rbx) // 48: 75 c7 jne 0x11 <_JIT_ENTRY+0x11> // 4a: 48 89 df movq %rbx, %rdi // 4d: ff 15 00 00 00 00 callq *(%rip) # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 53: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 5a: 48 89 45 f8 movq %rax, -0x8(%rbp) // 5e: 58 popq %rax // 5f: ff 25 00 00 00 00 jmpq *(%rip) # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5f: const unsigned char code_body[95] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x16, 0x85, 0xc0, 0x79, 0x2e, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xd8, 0x10, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xd2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xc7, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPERAND // 48: CONTINUE // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: &_Py_Dealloc+0x0 const unsigned char data_body[104] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->operand); patch_64(data + 0x48, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1f, (uintptr_t)data + 0x44); patch_32r(code + 0x26, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x41, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x4f, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0x3c); } void emit__PUSH_EXC_INFO( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_PUSH_EXC_INFO.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: f6 80 ab 00 00 00 40 testb $0x40, 0xab(%rax) // 10: 74 38 je 0x4a <_JIT_ENTRY+0x4a> // 12: 4d 8b 74 24 78 movq 0x78(%r12), %r14 // 17: 4d 8b 3e movq (%r14), %r15 // 1a: 8b 03 movl (%rbx), %eax // 1c: ff c0 incl %eax // 1e: 74 08 je 0x28 <_JIT_ENTRY+0x28> // 20: 89 03 movl %eax, (%rbx) // 22: ff 15 00 00 00 00 callq *(%rip) # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 28: 4d 85 ff testq %r15, %r15 // 2b: 75 07 jne 0x34 <_JIT_ENTRY+0x34> // 2d: 4c 8b 3d 00 00 00 00 movq (%rip), %r15 # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 34: 49 89 1e movq %rbx, (%r14) // 37: 4c 89 7d f8 movq %r15, -0x8(%rbp) // 3b: 48 89 5d 00 movq %rbx, (%rbp) // 3f: 48 83 c5 08 addq $0x8, %rbp // 43: 58 popq %rax // 44: ff 25 00 00 00 00 jmpq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 4a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_PC32 .L.str.76-0x4 // 51: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_PC32 .L.str.1-0x4 // 58: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 5f: ba 4c 0b 00 00 movl $0xb4c, %edx # imm = 0xB4C // 64: ff 15 00 00 00 00 callq *(%rip) # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_GOTPCRELX __assert_fail-0x4 // 6a: const unsigned char code_body[106] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x40, 0x74, 0x38, 0x4d, 0x8b, 0x74, 0x24, 0x78, 0x4d, 0x8b, 0x3e, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xff, 0x75, 0x07, 0x4c, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x1e, 0x4c, 0x89, 0x7d, 0xf8, 0x48, 0x89, 0x5d, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4c, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyExceptionInstance_Check(new_exc)\x00' // b1: 00 00 00 00 00 00 00 // b8: &_Py_INCREF_IncRefTotal+0x0 // c0: &_Py_NoneStruct+0x0 // c8: CONTINUE // d0: &__assert_fail+0x0 const unsigned char data_body[216] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6e, 0x65, 0x77, 0x5f, 0x65, 0x78, 0x63, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xc0, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0xc8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xd0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0xc4); patch_32r(code + 0x4d, (uintptr_t)data + 0x8a); patch_32r(code + 0x54, (uintptr_t)data + -0x4); patch_32r(code + 0x5b, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x66, (uintptr_t)data + 0xcc); } void emit__PUSH_FRAME( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_PUSH_FRAME.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 49 8b 44 24 10 movq 0x10(%r12), %rax // 5: 48 83 b8 20 21 00 00 00 cmpq $0x0, 0x2120(%rax) // d: 75 41 jne 0x50 <_JIT_ENTRY+0x50> // f: 48 8b 45 f8 movq -0x8(%rbp), %rax // 13: 48 83 c5 f8 addq $-0x8, %rbp // 17: 4c 29 ed subq %r13, %rbp // 1a: 48 83 c5 b8 addq $-0x48, %rbp // 1e: 48 c1 ed 03 shrq $0x3, %rbp // 22: 41 89 6d 40 movl %ebp, 0x40(%r13) // 26: 4c 89 68 08 movq %r13, 0x8(%rax) // 2a: 49 89 44 24 48 movq %rax, 0x48(%r12) // 2f: 41 ff 4c 24 2c decl 0x2c(%r12) // 34: 48 63 48 40 movslq 0x40(%rax), %rcx // 38: 48 8d 2c c8 leaq (%rax,%rcx,8), %rbp // 3c: 48 83 c5 48 addq $0x48, %rbp // 40: c7 40 40 ff ff ff ff movl $0xffffffff, 0x40(%rax) # imm = 0xFFFFFFFF // 47: 49 89 c5 movq %rax, %r13 // 4a: ff 25 00 00 00 00 jmpq *(%rip) # 0x50 <_JIT_ENTRY+0x50> // 000000000000004c: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 50: 50 pushq %rax // 51: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_PC32 .L.str.86-0x4 // 58: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_PC32 .L.str.1-0x4 // 5f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 66: ba 57 0d 00 00 movl $0xd57, %edx # imm = 0xD57 // 6b: ff 15 00 00 00 00 callq *(%rip) # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 71: const unsigned char code_body[113] = { 0x49, 0x8b, 0x44, 0x24, 0x10, 0x48, 0x83, 0xb8, 0x20, 0x21, 0x00, 0x00, 0x00, 0x75, 0x41, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x4c, 0x89, 0x68, 0x08, 0x49, 0x89, 0x44, 0x24, 0x48, 0x41, 0xff, 0x4c, 0x24, 0x2c, 0x48, 0x63, 0x48, 0x40, 0x48, 0x8d, 0x2c, 0xc8, 0x48, 0x83, 0xc5, 0x48, 0xc7, 0x40, 0x40, 0xff, 0xff, 0xff, 0xff, 0x49, 0x89, 0xc5, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x57, 0x0d, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00tstate->interp->eval_frame == NULL\x00' // b1: 00 00 00 00 00 00 00 // b8: CONTINUE // c0: &__assert_fail+0x0 const unsigned char data_body[200] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x2d, 0x3e, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4c, (uintptr_t)data + 0xb4); patch_32r(code + 0x54, (uintptr_t)data + 0x8a); patch_32r(code + 0x5b, (uintptr_t)data + -0x4); patch_32r(code + 0x62, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x6d, (uintptr_t)data + 0xbc); } void emit__PUSH_NULL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_PUSH_NULL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 c7 45 00 00 00 00 00 movq $0x0, (%rbp) // 8: 48 83 c5 08 addq $0x8, %rbp // c: ff 25 00 00 00 00 jmpq *(%rip) # 0x12 <_JIT_ENTRY+0x12> // 000000000000000e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c: const unsigned char code_body[12] = { 0x48, 0xc7, 0x45, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0x08, }; // 0: memcpy(code, code_body, sizeof(code_body)); } void emit__PY_FRAME_GENERAL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_PY_FRAME_GENERAL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 0f b7 1d 00 00 00 00 movzwl (%rip), %ebx # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // b: 89 d8 movl %ebx, %eax // d: f7 d0 notl %eax // f: 48 63 c8 movslq %eax, %rcx // 12: b8 fe ff ff ff movl $0xfffffffe, %eax # imm = 0xFFFFFFFE // 17: 29 d8 subl %ebx, %eax // 19: 4c 63 f0 movslq %eax, %r14 // 1c: 4a 8b 74 f5 00 movq (%rbp,%r14,8), %rsi // 21: 31 c0 xorl %eax, %eax // 23: 48 83 7c cd 00 00 cmpq $0x0, (%rbp,%rcx,8) // 29: 0f 95 c2 setne %dl // 2c: 48 8b 4e 08 movq 0x8(%rsi), %rcx // 30: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x37 <_JIT_ENTRY+0x37> // 0000000000000033: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 37: 0f 85 8c 00 00 00 jne 0xc9 <_JIT_ENTRY+0xc9> // 3d: 8d 3c dd 00 00 00 00 leal (,%rbx,8), %edi // 44: 48 89 e9 movq %rbp, %rcx // 47: 48 29 f9 subq %rdi, %rcx // 4a: 88 d0 movb %dl, %al // 4c: 01 c3 addl %eax, %ebx // 4e: c1 e0 03 shll $0x3, %eax // 51: 48 29 c1 subq %rax, %rcx // 54: 48 8b 46 30 movq 0x30(%rsi), %rax // 58: f6 40 30 01 testb $0x1, 0x30(%rax) // 5c: 75 34 jne 0x92 <_JIT_ENTRY+0x92> // 5e: 48 8b 56 10 movq 0x10(%rsi), %rdx // 62: 8b 02 movl (%rdx), %eax // 64: ff c0 incl %eax // 66: 74 2c je 0x94 <_JIT_ENTRY+0x94> // 68: 89 02 movl %eax, (%rdx) // 6a: 48 89 74 24 10 movq %rsi, 0x10(%rsp) // 6f: 49 89 cf movq %rcx, %r15 // 72: 4c 89 6c 24 08 movq %r13, 0x8(%rsp) // 77: 49 89 d5 movq %rdx, %r13 // 7a: ff 15 00 00 00 00 callq *(%rip) # 0x80 <_JIT_ENTRY+0x80> // 000000000000007c: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 80: 4c 89 ea movq %r13, %rdx // 83: 4c 8b 6c 24 08 movq 0x8(%rsp), %r13 // 88: 4c 89 f9 movq %r15, %rcx // 8b: 48 8b 74 24 10 movq 0x10(%rsp), %rsi // 90: eb 02 jmp 0x94 <_JIT_ENTRY+0x94> // 92: 31 d2 xorl %edx, %edx // 94: 4a 8d 6c f5 00 leaq (%rbp,%r14,8), %rbp // 99: 41 89 d8 movl %ebx, %r8d // 9c: 4c 89 e7 movq %r12, %rdi // 9f: 45 31 c9 xorl %r9d, %r9d // a2: ff 15 00 00 00 00 callq *(%rip) # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_GOTPCRELX _PyEvalFramePushAndInit-0x4 // a8: 48 85 c0 testq %rax, %rax // ab: 74 12 je 0xbf <_JIT_ENTRY+0xbf> // ad: 48 89 45 00 movq %rax, (%rbp) // b1: 48 83 c5 08 addq $0x8, %rbp // b5: 48 83 c4 18 addq $0x18, %rsp // b9: ff 25 00 00 00 00 jmpq *(%rip) # 0xbf <_JIT_ENTRY+0xbf> // 00000000000000bb: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // bf: 48 83 c4 18 addq $0x18, %rsp // c3: ff 25 00 00 00 00 jmpq *(%rip) # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // c9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L.str.81-0x4 // d0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L.str.1-0x4 // d7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // de: ba ec 0b 00 00 movl $0xbec, %edx # imm = 0xBEC // e3: ff 15 00 00 00 00 callq *(%rip) # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_GOTPCRELX __assert_fail-0x4 // e9: const unsigned char code_body[233] = { 0x48, 0x83, 0xec, 0x18, 0x0f, 0xb7, 0x1d, 0x00, 0x00, 0x00, 0x00, 0x89, 0xd8, 0xf7, 0xd0, 0x48, 0x63, 0xc8, 0xb8, 0xfe, 0xff, 0xff, 0xff, 0x29, 0xd8, 0x4c, 0x63, 0xf0, 0x4a, 0x8b, 0x74, 0xf5, 0x00, 0x31, 0xc0, 0x48, 0x83, 0x7c, 0xcd, 0x00, 0x00, 0x0f, 0x95, 0xc2, 0x48, 0x8b, 0x4e, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x8d, 0x3c, 0xdd, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xe9, 0x48, 0x29, 0xf9, 0x88, 0xd0, 0x01, 0xc3, 0xc1, 0xe0, 0x03, 0x48, 0x29, 0xc1, 0x48, 0x8b, 0x46, 0x30, 0xf6, 0x40, 0x30, 0x01, 0x75, 0x34, 0x48, 0x8b, 0x56, 0x10, 0x8b, 0x02, 0xff, 0xc0, 0x74, 0x2c, 0x89, 0x02, 0x48, 0x89, 0x74, 0x24, 0x10, 0x49, 0x89, 0xcf, 0x4c, 0x89, 0x6c, 0x24, 0x08, 0x49, 0x89, 0xd5, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xea, 0x4c, 0x8b, 0x6c, 0x24, 0x08, 0x4c, 0x89, 0xf9, 0x48, 0x8b, 0x74, 0x24, 0x10, 0xeb, 0x02, 0x31, 0xd2, 0x4a, 0x8d, 0x6c, 0xf5, 0x00, 0x41, 0x89, 0xd8, 0x4c, 0x89, 0xe7, 0x45, 0x31, 0xc9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x12, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xec, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00Py_TYPE(callable) == &PyFunction_Type\x00' // b4: 00 00 00 00 // b8: OPARG // c0: &PyFunction_Type+0x0 // c8: &_Py_INCREF_IncRefTotal+0x0 // d0: &_PyEvalFramePushAndInit+0x0 // d8: CONTINUE // e0: ERROR_TARGET // e8: &__assert_fail+0x0 const unsigned char data_body[240] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x63, 0x61, 0x6c, 0x6c, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, instruction->oparg); patch_64(data + 0xc0, (uintptr_t)&PyFunction_Type); patch_64(data + 0xc8, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xd0, (uintptr_t)&_PyEvalFramePushAndInit); patch_64(data + 0xd8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xe0, instruction_starts[instruction->error_target]); patch_64(data + 0xe8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x7, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x33, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x7c, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0xa4, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0xbb, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0xc5, (uintptr_t)data + 0xdc); patch_32r(code + 0xcc, (uintptr_t)data + 0x8a); patch_32r(code + 0xd3, (uintptr_t)data + -0x4); patch_32r(code + 0xda, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xe5, (uintptr_t)data + 0xe4); } void emit__REPLACE_WITH_TRUE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_REPLACE_WITH_TRUE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 03 movq (%rbx), %rax // 8: 48 85 c0 testq %rax, %rax // b: 7e 16 jle 0x23 <_JIT_ENTRY+0x23> // d: 85 c0 testl %eax, %eax // f: 79 2e jns 0x3f <_JIT_ENTRY+0x3f> // 11: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 18: 48 89 45 f8 movq %rax, -0x8(%rbp) // 1c: 58 popq %rax // 1d: ff 25 00 00 00 00 jmpq *(%rip) # 0x23 <_JIT_ENTRY+0x23> // 000000000000001f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 23: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_PC32 .L.str.1-0x4 // 2a: be a1 01 00 00 movl $0x1a1, %esi # imm = 0x1A1 // 2f: 48 89 da movq %rbx, %rdx // 32: ff 15 00 00 00 00 callq *(%rip) # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 38: 48 8b 03 movq (%rbx), %rax // 3b: 85 c0 testl %eax, %eax // 3d: 78 d2 js 0x11 <_JIT_ENTRY+0x11> // 3f: ff 15 00 00 00 00 callq *(%rip) # 0x45 <_JIT_ENTRY+0x45> // 0000000000000041: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 45: 48 ff 0b decq (%rbx) // 48: 75 c7 jne 0x11 <_JIT_ENTRY+0x11> // 4a: 48 89 df movq %rbx, %rdi // 4d: ff 15 00 00 00 00 callq *(%rip) # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 53: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 5a: 48 89 45 f8 movq %rax, -0x8(%rbp) // 5e: 58 popq %rax // 5f: ff 25 00 00 00 00 jmpq *(%rip) # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5f: const unsigned char code_body[95] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x16, 0x85, 0xc0, 0x79, 0x2e, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xa1, 0x01, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xd2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xc7, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_Py_TrueStruct+0x0 // 48: CONTINUE // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: &_Py_Dealloc+0x0 const unsigned char data_body[104] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x48, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1f, (uintptr_t)data + 0x44); patch_32r(code + 0x26, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x34, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x41, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x4f, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0x3c); } void emit__RESUME_CHECK( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_RESUME_CHECK.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 44 24 18 movq 0x18(%r12), %rax // 6: 49 8b 4d 00 movq (%r13), %rcx // a: 48 8b 51 08 movq 0x8(%rcx), %rdx // e: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x15 <_JIT_ENTRY+0x15> // 0000000000000011: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 15: 75 1e jne 0x35 <_JIT_ENTRY+0x35> // 17: 48 8b 89 a8 00 00 00 movq 0xa8(%rcx), %rcx // 1e: 84 c9 testb %cl, %cl // 20: 75 33 jne 0x55 <_JIT_ENTRY+0x55> // 22: 48 39 c8 cmpq %rcx, %rax // 25: 75 07 jne 0x2e <_JIT_ENTRY+0x2e> // 27: 58 popq %rax // 28: ff 25 00 00 00 00 jmpq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2e: 58 popq %rax // 2f: ff 25 00 00 00 00 jmpq *(%rip) # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 35: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_PC32 .L.str.108-0x4 // 3c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_PC32 .L.str.109-0x4 // 43: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 4a: ba 4d 00 00 00 movl $0x4d, %edx // 4f: ff 15 00 00 00 00 callq *(%rip) # 0x55 <_JIT_ENTRY+0x55> // 0000000000000051: R_X86_64_GOTPCRELX __assert_fail-0x4 // 55: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5c <_JIT_ENTRY+0x5c> // 0000000000000058: R_X86_64_PC32 .L.str-0x4 // 5c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_PC32 .L.str.1-0x4 // 63: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x6a <_JIT_ENTRY+0x6a> // 0000000000000066: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 6a: ba 19 00 00 00 movl $0x19, %edx // 6f: ff 15 00 00 00 00 callq *(%rip) # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_GOTPCRELX __assert_fail-0x4 // 75: const unsigned char code_body[117] = { 0x50, 0x49, 0x8b, 0x44, 0x24, 0x18, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1e, 0x48, 0x8b, 0x89, 0xa8, 0x00, 0x00, 0x00, 0x84, 0xc9, 0x75, 0x33, 0x48, 0x39, 0xc8, 0x75, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x19, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '(version & _PY_EVAL_EVENTS_MASK) == 0\x00/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 14e: 00 00 // 150: &PyCode_Type+0x0 // 158: CONTINUE // 160: JUMP_TARGET // 168: &__assert_fail+0x0 const unsigned char data_body[368] = { 0x28, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x20, 0x26, 0x20, 0x5f, 0x50, 0x59, 0x5f, 0x45, 0x56, 0x41, 0x4c, 0x5f, 0x45, 0x56, 0x45, 0x4e, 0x54, 0x53, 0x5f, 0x4d, 0x41, 0x53, 0x4b, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x150, (uintptr_t)&PyCode_Type); patch_64(data + 0x158, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x160, instruction_starts[instruction->jump_target]); patch_64(data + 0x168, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x11, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x2a, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0x31, (uintptr_t)data + 0x15c); patch_32r(code + 0x38, (uintptr_t)data + 0xb0); patch_32r(code + 0x3f, (uintptr_t)data + 0xce); patch_32r(code + 0x46, (uintptr_t)data + 0x114); patch_x86_64_32rx(code + 0x51, (uintptr_t)data + 0x164); patch_32r(code + 0x58, (uintptr_t)data + -0x4); patch_32r(code + 0x5f, (uintptr_t)data + 0x22); patch_32r(code + 0x66, (uintptr_t)data + 0x62); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0x164); } void emit__RETURN_GENERATOR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_RETURN_GENERATOR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 7d 10 movq 0x10(%r13), %rdi // 5: 48 8b 47 08 movq 0x8(%rdi), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 10: 0f 85 cb 01 00 00 jne 0x1e1 <_JIT_ENTRY+0x1e1> // 16: ff 15 00 00 00 00 callq *(%rip) # 0x1c <_JIT_ENTRY+0x1c> // 0000000000000018: R_X86_64_GOTPCRELX _Py_MakeCoro-0x4 // 1c: 48 85 c0 testq %rax, %rax // 1f: 0f 84 b5 01 00 00 je 0x1da <_JIT_ENTRY+0x1da> // 25: 49 8b 4d 00 movq (%r13), %rcx // 29: 48 8b 51 08 movq 0x8(%rcx), %rdx // 2d: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 34: 0f 85 c7 01 00 00 jne 0x201 <_JIT_ENTRY+0x201> // 3a: 8b 49 48 movl 0x48(%rcx), %ecx // 3d: 48 8d 14 cd 48 00 00 00 leaq 0x48(,%rcx,8), %rdx // 45: 4c 01 ea addq %r13, %rdx // 48: 48 89 ee movq %rbp, %rsi // 4b: 48 29 d6 subq %rdx, %rsi // 4e: 48 c1 ee 03 shrq $0x3, %rsi // 52: 85 f6 testl %esi, %esi // 54: 0f 85 c7 01 00 00 jne 0x221 <_JIT_ENTRY+0x221> // 5a: 49 8d 55 48 leaq 0x48(%r13), %rdx // 5e: 48 29 d5 subq %rdx, %rbp // 61: 48 c1 ed 03 shrq $0x3, %rbp // 65: 41 89 6d 40 movl %ebp, 0x40(%r13) // 69: 49 83 45 38 02 addq $0x2, 0x38(%r13) // 6e: 39 e9 cmpl %ebp, %ecx // 70: 0f 8f cb 01 00 00 jg 0x241 <_JIT_ENTRY+0x241> // 76: 48 8d 48 48 leaq 0x48(%rax), %rcx // 7a: 41 0f 10 45 40 movups 0x40(%r13), %xmm0 // 7f: 0f 11 41 40 movups %xmm0, 0x40(%rcx) // 83: 41 0f 10 45 00 movups (%r13), %xmm0 // 88: 41 0f 10 4d 10 movups 0x10(%r13), %xmm1 // 8d: 41 0f 10 55 20 movups 0x20(%r13), %xmm2 // 92: 41 0f 10 5d 30 movups 0x30(%r13), %xmm3 // 97: 0f 11 59 30 movups %xmm3, 0x30(%rcx) // 9b: 0f 11 51 20 movups %xmm2, 0x20(%rcx) // 9f: 0f 11 49 10 movups %xmm1, 0x10(%rcx) // a3: 0f 11 01 movups %xmm0, (%rcx) // a6: 41 8b 4d 40 movl 0x40(%r13), %ecx // aa: 83 f9 02 cmpl $0x2, %ecx // ad: 0f 8c ca 00 00 00 jl 0x17d <_JIT_ENTRY+0x17d> // b3: ba 01 00 00 00 movl $0x1, %edx // b8: 83 f9 09 cmpl $0x9, %ecx // bb: 72 51 jb 0x10e <_JIT_ENTRY+0x10e> // bd: 48 89 c6 movq %rax, %rsi // c0: 4c 29 ee subq %r13, %rsi // c3: 48 83 c6 48 addq $0x48, %rsi // c7: 48 83 fe 20 cmpq $0x20, %rsi // cb: 72 41 jb 0x10e <_JIT_ENTRY+0x10e> // cd: 48 8d 71 ff leaq -0x1(%rcx), %rsi // d1: 48 89 f2 movq %rsi, %rdx // d4: 48 83 e2 fc andq $-0x4, %rdx // d8: 31 ff xorl %edi, %edi // da: 66 0f 1f 44 00 00 nopw (%rax,%rax) // e0: 41 0f 10 44 fd 50 movups 0x50(%r13,%rdi,8), %xmm0 // e6: 41 0f 10 4c fd 60 movups 0x60(%r13,%rdi,8), %xmm1 // ec: 0f 11 84 f8 98 00 00 00 movups %xmm0, 0x98(%rax,%rdi,8) // f4: 0f 11 8c f8 a8 00 00 00 movups %xmm1, 0xa8(%rax,%rdi,8) // fc: 48 83 c7 04 addq $0x4, %rdi // 100: 48 39 fa cmpq %rdi, %rdx // 103: 75 db jne 0xe0 <_JIT_ENTRY+0xe0> // 105: 48 39 d6 cmpq %rdx, %rsi // 108: 74 73 je 0x17d <_JIT_ENTRY+0x17d> // 10a: 48 83 ca 01 orq $0x1, %rdx // 10e: 89 cf movl %ecx, %edi // 110: 29 d7 subl %edx, %edi // 112: 48 89 d6 movq %rdx, %rsi // 115: 83 e7 03 andl $0x3, %edi // 118: 74 1b je 0x135 <_JIT_ENTRY+0x135> // 11a: 48 89 d6 movq %rdx, %rsi // 11d: 0f 1f 00 nopl (%rax) // 120: 4d 8b 44 f5 48 movq 0x48(%r13,%rsi,8), %r8 // 125: 4c 89 84 f0 90 00 00 00 movq %r8, 0x90(%rax,%rsi,8) // 12d: 48 ff c6 incq %rsi // 130: 48 ff cf decq %rdi // 133: 75 eb jne 0x120 <_JIT_ENTRY+0x120> // 135: 48 29 ca subq %rcx, %rdx // 138: 48 83 fa fc cmpq $-0x4, %rdx // 13c: 77 3f ja 0x17d <_JIT_ENTRY+0x17d> // 13e: 66 90 nop // 140: 49 8b 54 f5 48 movq 0x48(%r13,%rsi,8), %rdx // 145: 48 89 94 f0 90 00 00 00 movq %rdx, 0x90(%rax,%rsi,8) // 14d: 49 8b 54 f5 50 movq 0x50(%r13,%rsi,8), %rdx // 152: 48 89 94 f0 98 00 00 00 movq %rdx, 0x98(%rax,%rsi,8) // 15a: 49 8b 54 f5 58 movq 0x58(%r13,%rsi,8), %rdx // 15f: 48 89 94 f0 a0 00 00 00 movq %rdx, 0xa0(%rax,%rsi,8) // 167: 49 8b 54 f5 60 movq 0x60(%r13,%rsi,8), %rdx // 16c: 48 89 94 f0 a8 00 00 00 movq %rdx, 0xa8(%rax,%rsi,8) // 174: 48 83 c6 04 addq $0x4, %rsi // 178: 48 39 f1 cmpq %rsi, %rcx // 17b: 75 c3 jne 0x140 <_JIT_ENTRY+0x140> // 17d: 48 c7 40 50 00 00 00 00 movq $0x0, 0x50(%rax) // 185: 49 83 7d 30 00 cmpq $0x0, 0x30(%r13) // 18a: 0f 85 d1 00 00 00 jne 0x261 <_JIT_ENTRY+0x261> // 190: c6 40 43 fd movb $-0x3, 0x43(%rax) // 194: c6 80 8e 00 00 00 01 movb $0x1, 0x8e(%rax) // 19b: 41 ff 44 24 2c incl 0x2c(%r12) // 1a0: 49 8b 5d 08 movq 0x8(%r13), %rbx // 1a4: 4c 89 e7 movq %r12, %rdi // 1a7: 4c 89 ee movq %r13, %rsi // 1aa: 49 89 c6 movq %rax, %r14 // 1ad: ff 15 00 00 00 00 callq *(%rip) # 0x1b3 <_JIT_ENTRY+0x1b3> // 00000000000001af: R_X86_64_GOTPCRELX _PyThreadState_PopFrame-0x4 // 1b3: 49 89 5c 24 48 movq %rbx, 0x48(%r12) // 1b8: 48 63 43 40 movslq 0x40(%rbx), %rax // 1bc: c7 43 40 ff ff ff ff movl $0xffffffff, 0x40(%rbx) # imm = 0xFFFFFFFF // 1c3: 4c 89 74 c3 48 movq %r14, 0x48(%rbx,%rax,8) // 1c8: 48 8d 2c c3 leaq (%rbx,%rax,8), %rbp // 1cc: 48 83 c5 50 addq $0x50, %rbp // 1d0: 49 89 dd movq %rbx, %r13 // 1d3: 58 popq %rax // 1d4: ff 25 00 00 00 00 jmpq *(%rip) # 0x1da <_JIT_ENTRY+0x1da> // 00000000000001d6: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1da: 58 popq %rax // 1db: ff 25 00 00 00 00 jmpq *(%rip) # 0x1e1 <_JIT_ENTRY+0x1e1> // 00000000000001dd: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1e1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1e8 <_JIT_ENTRY+0x1e8> // 00000000000001e4: R_X86_64_PC32 .L.str.33-0x4 // 1e8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1ef <_JIT_ENTRY+0x1ef> // 00000000000001eb: R_X86_64_PC32 .L.str.1-0x4 // 1ef: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1f6 <_JIT_ENTRY+0x1f6> // 00000000000001f2: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1f6: ba c7 0f 00 00 movl $0xfc7, %edx # imm = 0xFC7 // 1fb: ff 15 00 00 00 00 callq *(%rip) # 0x201 <_JIT_ENTRY+0x201> // 00000000000001fd: R_X86_64_GOTPCRELX __assert_fail-0x4 // 201: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x208 <_JIT_ENTRY+0x208> // 0000000000000204: R_X86_64_PC32 .L.str.108-0x4 // 208: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x20f <_JIT_ENTRY+0x20f> // 000000000000020b: R_X86_64_PC32 .L.str.109-0x4 // 20f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x216 <_JIT_ENTRY+0x216> // 0000000000000212: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 216: ba 4d 00 00 00 movl $0x4d, %edx // 21b: ff 15 00 00 00 00 callq *(%rip) # 0x221 <_JIT_ENTRY+0x221> // 000000000000021d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 221: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x228 <_JIT_ENTRY+0x228> // 0000000000000224: R_X86_64_PC32 .L.str.14-0x4 // 228: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x22f <_JIT_ENTRY+0x22f> // 000000000000022b: R_X86_64_PC32 .L.str.1-0x4 // 22f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x236 <_JIT_ENTRY+0x236> // 0000000000000232: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 236: ba cd 0f 00 00 movl $0xfcd, %edx # imm = 0xFCD // 23b: ff 15 00 00 00 00 callq *(%rip) # 0x241 <_JIT_ENTRY+0x241> // 000000000000023d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 241: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x248 <_JIT_ENTRY+0x248> // 0000000000000244: R_X86_64_PC32 .L.str.167-0x4 // 248: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x24f <_JIT_ENTRY+0x24f> // 000000000000024b: R_X86_64_PC32 .L.str.109-0x4 // 24f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x256 <_JIT_ENTRY+0x256> // 0000000000000252: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_Copy-0x4 // 256: ba 73 00 00 00 movl $0x73, %edx // 25b: ff 15 00 00 00 00 callq *(%rip) # 0x261 <_JIT_ENTRY+0x261> // 000000000000025d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 261: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x268 <_JIT_ENTRY+0x268> // 0000000000000264: R_X86_64_PC32 .L.str.98-0x4 // 268: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x26f <_JIT_ENTRY+0x26f> // 000000000000026b: R_X86_64_PC32 .L.str.1-0x4 // 26f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x276 <_JIT_ENTRY+0x276> // 0000000000000272: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 276: ba d2 0f 00 00 movl $0xfd2, %edx # imm = 0xFD2 // 27b: ff 15 00 00 00 00 callq *(%rip) # 0x281 <_JIT_ENTRY+0x281> // 000000000000027d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 281: const unsigned char code_body[641] = { 0x50, 0x49, 0x8b, 0x7d, 0x10, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xcb, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x0f, 0x84, 0xb5, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xc7, 0x01, 0x00, 0x00, 0x8b, 0x49, 0x48, 0x48, 0x8d, 0x14, 0xcd, 0x48, 0x00, 0x00, 0x00, 0x4c, 0x01, 0xea, 0x48, 0x89, 0xee, 0x48, 0x29, 0xd6, 0x48, 0xc1, 0xee, 0x03, 0x85, 0xf6, 0x0f, 0x85, 0xc7, 0x01, 0x00, 0x00, 0x49, 0x8d, 0x55, 0x48, 0x48, 0x29, 0xd5, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x49, 0x83, 0x45, 0x38, 0x02, 0x39, 0xe9, 0x0f, 0x8f, 0xcb, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x48, 0x48, 0x41, 0x0f, 0x10, 0x45, 0x40, 0x0f, 0x11, 0x41, 0x40, 0x41, 0x0f, 0x10, 0x45, 0x00, 0x41, 0x0f, 0x10, 0x4d, 0x10, 0x41, 0x0f, 0x10, 0x55, 0x20, 0x41, 0x0f, 0x10, 0x5d, 0x30, 0x0f, 0x11, 0x59, 0x30, 0x0f, 0x11, 0x51, 0x20, 0x0f, 0x11, 0x49, 0x10, 0x0f, 0x11, 0x01, 0x41, 0x8b, 0x4d, 0x40, 0x83, 0xf9, 0x02, 0x0f, 0x8c, 0xca, 0x00, 0x00, 0x00, 0xba, 0x01, 0x00, 0x00, 0x00, 0x83, 0xf9, 0x09, 0x72, 0x51, 0x48, 0x89, 0xc6, 0x4c, 0x29, 0xee, 0x48, 0x83, 0xc6, 0x48, 0x48, 0x83, 0xfe, 0x20, 0x72, 0x41, 0x48, 0x8d, 0x71, 0xff, 0x48, 0x89, 0xf2, 0x48, 0x83, 0xe2, 0xfc, 0x31, 0xff, 0x66, 0x0f, 0x1f, 0x44, 0x00, 0x00, 0x41, 0x0f, 0x10, 0x44, 0xfd, 0x50, 0x41, 0x0f, 0x10, 0x4c, 0xfd, 0x60, 0x0f, 0x11, 0x84, 0xf8, 0x98, 0x00, 0x00, 0x00, 0x0f, 0x11, 0x8c, 0xf8, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc7, 0x04, 0x48, 0x39, 0xfa, 0x75, 0xdb, 0x48, 0x39, 0xd6, 0x74, 0x73, 0x48, 0x83, 0xca, 0x01, 0x89, 0xcf, 0x29, 0xd7, 0x48, 0x89, 0xd6, 0x83, 0xe7, 0x03, 0x74, 0x1b, 0x48, 0x89, 0xd6, 0x0f, 0x1f, 0x00, 0x4d, 0x8b, 0x44, 0xf5, 0x48, 0x4c, 0x89, 0x84, 0xf0, 0x90, 0x00, 0x00, 0x00, 0x48, 0xff, 0xc6, 0x48, 0xff, 0xcf, 0x75, 0xeb, 0x48, 0x29, 0xca, 0x48, 0x83, 0xfa, 0xfc, 0x77, 0x3f, 0x66, 0x90, 0x49, 0x8b, 0x54, 0xf5, 0x48, 0x48, 0x89, 0x94, 0xf0, 0x90, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x54, 0xf5, 0x50, 0x48, 0x89, 0x94, 0xf0, 0x98, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x54, 0xf5, 0x58, 0x48, 0x89, 0x94, 0xf0, 0xa0, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x54, 0xf5, 0x60, 0x48, 0x89, 0x94, 0xf0, 0xa8, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc6, 0x04, 0x48, 0x39, 0xf1, 0x75, 0xc3, 0x48, 0xc7, 0x40, 0x50, 0x00, 0x00, 0x00, 0x00, 0x49, 0x83, 0x7d, 0x30, 0x00, 0x0f, 0x85, 0xd1, 0x00, 0x00, 0x00, 0xc6, 0x40, 0x43, 0xfd, 0xc6, 0x80, 0x8e, 0x00, 0x00, 0x00, 0x01, 0x41, 0xff, 0x44, 0x24, 0x2c, 0x49, 0x8b, 0x5d, 0x08, 0x4c, 0x89, 0xe7, 0x4c, 0x89, 0xee, 0x49, 0x89, 0xc6, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x5c, 0x24, 0x48, 0x48, 0x63, 0x43, 0x40, 0xc7, 0x43, 0x40, 0xff, 0xff, 0xff, 0xff, 0x4c, 0x89, 0x74, 0xc3, 0x48, 0x48, 0x8d, 0x2c, 0xc3, 0x48, 0x83, 0xc5, 0x50, 0x49, 0x89, 0xdd, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc7, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcd, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x73, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xd2, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00EMPTY()\x00PyFunction_Check(frame->f_funcobj)\x00frame->frame_obj == NULL\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00src->stacktop >= _PyFrame_GetCode(src)->co_nlocalsplus\x00void _PyFrame_Copy(_PyInterpreterFrame *, _PyInterpreterFrame *)\x00' // 1e4: 00 00 00 00 // 1e8: &PyFunction_Type+0x0 // 1f0: &_Py_MakeCoro+0x0 // 1f8: &PyCode_Type+0x0 // 200: &_PyThreadState_PopFrame+0x0 // 208: CONTINUE // 210: ERROR_TARGET // 218: &__assert_fail+0x0 const unsigned char data_body[544] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x45, 0x4d, 0x50, 0x54, 0x59, 0x28, 0x29, 0x00, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x66, 0x5f, 0x66, 0x75, 0x6e, 0x63, 0x6f, 0x62, 0x6a, 0x29, 0x00, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x73, 0x72, 0x63, 0x2d, 0x3e, 0x73, 0x74, 0x61, 0x63, 0x6b, 0x74, 0x6f, 0x70, 0x20, 0x3e, 0x3d, 0x20, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x73, 0x72, 0x63, 0x29, 0x2d, 0x3e, 0x63, 0x6f, 0x5f, 0x6e, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x73, 0x70, 0x6c, 0x75, 0x73, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x43, 0x6f, 0x70, 0x79, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1e8, (uintptr_t)&PyFunction_Type); patch_64(data + 0x1f0, (uintptr_t)&_Py_MakeCoro); patch_64(data + 0x1f8, (uintptr_t)&PyCode_Type); patch_64(data + 0x200, (uintptr_t)&_PyThreadState_PopFrame); patch_64(data + 0x208, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x210, instruction_starts[instruction->error_target]); patch_64(data + 0x218, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1e4); patch_x86_64_32rx(code + 0x18, (uintptr_t)data + 0x1ec); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x1af, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x1d6, (uintptr_t)data + 0x204); patch_x86_64_32rx(code + 0x1dd, (uintptr_t)data + 0x20c); patch_32r(code + 0x1e4, (uintptr_t)data + 0x92); patch_32r(code + 0x1eb, (uintptr_t)data + -0x4); patch_32r(code + 0x1f2, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1fd, (uintptr_t)data + 0x214); patch_32r(code + 0x204, (uintptr_t)data + 0xce); patch_32r(code + 0x20b, (uintptr_t)data + 0xec); patch_32r(code + 0x212, (uintptr_t)data + 0x132); patch_x86_64_32rx(code + 0x21d, (uintptr_t)data + 0x214); patch_32r(code + 0x224, (uintptr_t)data + 0x8a); patch_32r(code + 0x22b, (uintptr_t)data + -0x4); patch_32r(code + 0x232, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x23d, (uintptr_t)data + 0x214); patch_32r(code + 0x244, (uintptr_t)data + 0x168); patch_32r(code + 0x24b, (uintptr_t)data + 0xec); patch_32r(code + 0x252, (uintptr_t)data + 0x19f); patch_x86_64_32rx(code + 0x25d, (uintptr_t)data + 0x214); patch_32r(code + 0x264, (uintptr_t)data + 0xb5); patch_32r(code + 0x26b, (uintptr_t)data + -0x4); patch_32r(code + 0x272, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x27d, (uintptr_t)data + 0x214); } void emit__SAVE_RETURN_OFFSET( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_SAVE_RETURN_OFFSET.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 7: 66 41 89 45 44 movw %ax, 0x44(%r13) // c: ff 25 00 00 00 00 jmpq *(%rip) # 0x12 <_JIT_ENTRY+0x12> // 000000000000000e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c: const unsigned char code_body[12] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x41, 0x89, 0x45, 0x44, }; // 0: // 0: OPARG const unsigned char data_body[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->oparg); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + -0x4); } void emit__SETUP_ANNOTATIONS( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_SETUP_ANNOTATIONS.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 7d 28 movq 0x28(%r13), %rdi // 5: 48 85 ff testq %rdi, %rdi // 8: 74 5c je 0x66 <_JIT_ENTRY+0x66> // a: be 48 c1 00 00 movl $0xc148, %esi # imm = 0xC148 // f: 48 03 35 00 00 00 00 addq (%rip), %rsi # 0x16 <_JIT_ENTRY+0x16> // 0000000000000012: R_X86_64_REX_GOTPCRELX _PyRuntime-0x4 // 16: 48 89 e2 movq %rsp, %rdx // 19: ff 15 00 00 00 00 callq *(%rip) # 0x1f <_JIT_ENTRY+0x1f> // 000000000000001b: R_X86_64_GOTPCRELX PyMapping_GetOptionalItem-0x4 // 1f: 85 c0 testl %eax, %eax // 21: 78 5f js 0x82 <_JIT_ENTRY+0x82> // 23: 48 8b 1c 24 movq (%rsp), %rbx // 27: 48 85 db testq %rbx, %rbx // 2a: 74 5d je 0x89 <_JIT_ENTRY+0x89> // 2c: 48 8b 03 movq (%rbx), %rax // 2f: 48 85 c0 testq %rax, %rax // 32: 7f 18 jg 0x4c <_JIT_ENTRY+0x4c> // 34: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3b <_JIT_ENTRY+0x3b> // 0000000000000037: R_X86_64_PC32 .L.str.1-0x4 // 3b: be e5 06 00 00 movl $0x6e5, %esi # imm = 0x6E5 // 40: 48 89 da movq %rbx, %rdx // 43: ff 15 00 00 00 00 callq *(%rip) # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 49: 48 8b 03 movq (%rbx), %rax // 4c: 85 c0 testl %eax, %eax // 4e: 78 0f js 0x5f <_JIT_ENTRY+0x5f> // 50: ff 15 00 00 00 00 callq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 56: 48 ff 0b decq (%rbx) // 59: 0f 84 9f 00 00 00 je 0xfe <_JIT_ENTRY+0xfe> // 5f: 58 popq %rax // 60: ff 25 00 00 00 00 jmpq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 66: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_REX_GOTPCRELX PyExc_SystemError-0x4 // 6d: 48 8b 30 movq (%rax), %rsi // 70: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_PC32 .L.str.38-0x4 // 77: 4c 89 e7 movq %r12, %rdi // 7a: 31 c0 xorl %eax, %eax // 7c: ff 15 00 00 00 00 callq *(%rip) # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // 82: 58 popq %rax // 83: ff 25 00 00 00 00 jmpq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 89: ff 15 00 00 00 00 callq *(%rip) # 0x8f <_JIT_ENTRY+0x8f> // 000000000000008b: R_X86_64_GOTPCRELX PyDict_New-0x4 // 8f: 48 89 04 24 movq %rax, (%rsp) // 93: 48 85 c0 testq %rax, %rax // 96: 74 ea je 0x82 <_JIT_ENTRY+0x82> // 98: 49 8b 7d 28 movq 0x28(%r13), %rdi // 9c: be 48 c1 00 00 movl $0xc148, %esi # imm = 0xC148 // a1: 48 03 35 00 00 00 00 addq (%rip), %rsi # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_REX_GOTPCRELX _PyRuntime-0x4 // a8: 48 89 c2 movq %rax, %rdx // ab: ff 15 00 00 00 00 callq *(%rip) # 0xb1 <_JIT_ENTRY+0xb1> // 00000000000000ad: R_X86_64_GOTPCRELX PyObject_SetItem-0x4 // b1: 89 c3 movl %eax, %ebx // b3: 4c 8b 34 24 movq (%rsp), %r14 // b7: 49 8b 06 movq (%r14), %rax // ba: 48 85 c0 testq %rax, %rax // bd: 7f 18 jg 0xd7 <_JIT_ENTRY+0xd7> // bf: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc6 <_JIT_ENTRY+0xc6> // 00000000000000c2: R_X86_64_PC32 .L.str.1-0x4 // c6: be e1 06 00 00 movl $0x6e1, %esi # imm = 0x6E1 // cb: 4c 89 f2 movq %r14, %rdx // ce: ff 15 00 00 00 00 callq *(%rip) # 0xd4 <_JIT_ENTRY+0xd4> // 00000000000000d0: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // d4: 49 8b 06 movq (%r14), %rax // d7: 85 c0 testl %eax, %eax // d9: 78 14 js 0xef <_JIT_ENTRY+0xef> // db: ff 15 00 00 00 00 callq *(%rip) # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // e1: 49 ff 0e decq (%r14) // e4: 75 09 jne 0xef <_JIT_ENTRY+0xef> // e6: 4c 89 f7 movq %r14, %rdi // e9: ff 15 00 00 00 00 callq *(%rip) # 0xef <_JIT_ENTRY+0xef> // 00000000000000eb: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // ef: 85 db testl %ebx, %ebx // f1: 0f 84 68 ff ff ff je 0x5f <_JIT_ENTRY+0x5f> // f7: 58 popq %rax // f8: ff 25 00 00 00 00 jmpq *(%rip) # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // fe: 48 89 df movq %rbx, %rdi // 101: ff 15 00 00 00 00 callq *(%rip) # 0x107 <_JIT_ENTRY+0x107> // 0000000000000103: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 107: 58 popq %rax // 108: ff 25 00 00 00 00 jmpq *(%rip) # 0x10e <_JIT_ENTRY+0x10e> // 000000000000010a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 108: const unsigned char code_body[264] = { 0x50, 0x49, 0x8b, 0x7d, 0x28, 0x48, 0x85, 0xff, 0x74, 0x5c, 0xbe, 0x48, 0xc1, 0x00, 0x00, 0x48, 0x03, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xe2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x5f, 0x48, 0x8b, 0x1c, 0x24, 0x48, 0x85, 0xdb, 0x74, 0x5d, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xe5, 0x06, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0f, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x0f, 0x84, 0x9f, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x74, 0xea, 0x49, 0x8b, 0x7d, 0x28, 0xbe, 0x48, 0xc1, 0x00, 0x00, 0x48, 0x03, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x89, 0xc3, 0x4c, 0x8b, 0x34, 0x24, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xe1, 0x06, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x85, 0xdb, 0x0f, 0x84, 0x68, 0xff, 0xff, 0xff, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00no locals found when setting up annotations\x00' // 6c: 00 00 00 00 // 70: &_PyRuntime+0x0 // 78: &PyMapping_GetOptionalItem+0x0 // 80: &_Py_NegativeRefcount+0x0 // 88: &_Py_DECREF_DecRefTotal+0x0 // 90: CONTINUE // 98: &PyExc_SystemError+0x0 // a0: &_PyErr_Format+0x0 // a8: ERROR_TARGET // b0: &PyDict_New+0x0 // b8: &PyObject_SetItem+0x0 // c0: &_Py_Dealloc+0x0 const unsigned char data_body[200] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x6e, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x65, 0x74, 0x74, 0x69, 0x6e, 0x67, 0x20, 0x75, 0x70, 0x20, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x70, (uintptr_t)&_PyRuntime); patch_64(data + 0x78, (uintptr_t)&PyMapping_GetOptionalItem); patch_64(data + 0x80, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x88, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x90, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x98, (uintptr_t)&PyExc_SystemError); patch_64(data + 0xa0, (uintptr_t)&_PyErr_Format); patch_64(data + 0xa8, instruction_starts[instruction->error_target]); patch_64(data + 0xb0, (uintptr_t)&PyDict_New); patch_64(data + 0xb8, (uintptr_t)&PyObject_SetItem); patch_64(data + 0xc0, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x12, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x1b, (uintptr_t)data + 0x74); patch_32r(code + 0x37, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x45, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0x94); patch_32r(code + 0x73, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x7e, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x8b, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0xa4, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0xad, (uintptr_t)data + 0xb4); patch_32r(code + 0xc2, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xd0, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0xdd, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0xeb, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0xfa, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x103, (uintptr_t)data + 0xbc); } void emit__SET_ADD( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_SET_ADD.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 8b 05 00 00 00 00 movl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 7: f7 d0 notl %eax // 9: 48 8b 5d f8 movq -0x8(%rbp), %rbx // d: c1 e0 03 shll $0x3, %eax // 10: 48 0d 00 00 f8 ff orq $-0x80000, %rax # imm = 0xFFF80000 // 16: 48 8b 7c 05 00 movq (%rbp,%rax), %rdi // 1b: 48 89 de movq %rbx, %rsi // 1e: ff 15 00 00 00 00 callq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX PySet_Add-0x4 // 24: 41 89 c6 movl %eax, %r14d // 27: 48 8b 03 movq (%rbx), %rax // 2a: 48 85 c0 testq %rax, %rax // 2d: 7e 06 jle 0x35 <_JIT_ENTRY+0x35> // 2f: 85 c0 testl %eax, %eax // 31: 79 1e jns 0x51 <_JIT_ENTRY+0x51> // 33: eb 27 jmp 0x5c <_JIT_ENTRY+0x5c> // 35: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_PC32 .L.str.1-0x4 // 3c: be 53 03 00 00 movl $0x353, %esi # imm = 0x353 // 41: 48 89 da movq %rbx, %rdx // 44: ff 15 00 00 00 00 callq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4a: 48 8b 03 movq (%rbx), %rax // 4d: 85 c0 testl %eax, %eax // 4f: 78 0b js 0x5c <_JIT_ENTRY+0x5c> // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 57: 48 ff 0b decq (%rbx) // 5a: 74 0c je 0x68 <_JIT_ENTRY+0x68> // 5c: 45 85 f6 testl %r14d, %r14d // 5f: 74 15 je 0x76 <_JIT_ENTRY+0x76> // 61: 58 popq %rax // 62: ff 25 00 00 00 00 jmpq *(%rip) # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 68: 48 89 df movq %rbx, %rdi // 6b: ff 15 00 00 00 00 callq *(%rip) # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 71: 45 85 f6 testl %r14d, %r14d // 74: 75 eb jne 0x61 <_JIT_ENTRY+0x61> // 76: 48 83 c5 f8 addq $-0x8, %rbp // 7a: 58 popq %rax // 7b: ff 25 00 00 00 00 jmpq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 7b: const unsigned char code_body[123] = { 0x50, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd0, 0x48, 0x8b, 0x5d, 0xf8, 0xc1, 0xe0, 0x03, 0x48, 0x0d, 0x00, 0x00, 0xf8, 0xff, 0x48, 0x8b, 0x7c, 0x05, 0x00, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x53, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0c, 0x45, 0x85, 0xf6, 0x74, 0x15, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x75, 0xeb, 0x48, 0x83, 0xc5, 0xf8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &PySet_Add+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: ERROR_TARGET // 68: &_Py_Dealloc+0x0 const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&PySet_Add); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, instruction_starts[instruction->error_target]); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0x44); patch_32r(code + 0x38, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x64, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x6d, (uintptr_t)data + 0x64); } void emit__SET_FUNCTION_ATTRIBUTE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_SET_FUNCTION_ATTRIBUTE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyFunction_Type-0x4 // 10: 0f 85 98 00 00 00 jne 0xae <_JIT_ENTRY+0xae> // 16: 0f b7 15 00 00 00 00 movzwl (%rip), %edx # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 1d: ff ca decl %edx // 1f: 83 fa 07 cmpl $0x7, %edx // 22: 0f 87 a6 00 00 00 ja 0xce <_JIT_ENTRY+0xce> // 28: 48 8b 4d f0 movq -0x10(%rbp), %rcx // 2c: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x33 <_JIT_ENTRY+0x33> // 000000000000002f: R_X86_64_PC32 .rodata-0x4 // 33: 48 63 14 96 movslq (%rsi,%rdx,4), %rdx // 37: 48 01 f2 addq %rsi, %rdx // 3a: ff e2 jmpq *%rdx // 3c: 48 8b 51 08 movq 0x8(%rcx), %rdx // 40: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 47: 0f 85 d5 00 00 00 jne 0x122 <_JIT_ENTRY+0x122> // 4d: 48 83 78 38 00 cmpq $0x0, 0x38(%rax) // 52: 0f 85 0a 01 00 00 jne 0x162 <_JIT_ENTRY+0x162> // 58: 48 8d 50 38 leaq 0x38(%rax), %rdx // 5c: eb 3e jmp 0x9c <_JIT_ENTRY+0x9c> // 5e: 48 83 78 70 00 cmpq $0x0, 0x70(%rax) // 63: 75 7d jne 0xe2 <_JIT_ENTRY+0xe2> // 65: 48 8d 50 70 leaq 0x70(%rax), %rdx // 69: eb 31 jmp 0x9c <_JIT_ENTRY+0x9c> // 6b: 48 83 78 48 00 cmpq $0x0, 0x48(%rax) // 70: 0f 85 8c 00 00 00 jne 0x102 <_JIT_ENTRY+0x102> // 76: 48 8d 50 48 leaq 0x48(%rax), %rdx // 7a: eb 20 jmp 0x9c <_JIT_ENTRY+0x9c> // 7c: 48 8b 51 08 movq 0x8(%rcx), %rdx // 80: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 87: 0f 85 b5 00 00 00 jne 0x142 <_JIT_ENTRY+0x142> // 8d: 48 83 78 40 00 cmpq $0x0, 0x40(%rax) // 92: 0f 85 ea 00 00 00 jne 0x182 <_JIT_ENTRY+0x182> // 98: 48 8d 50 40 leaq 0x40(%rax), %rdx // 9c: 48 89 0a movq %rcx, (%rdx) // 9f: 48 89 45 f0 movq %rax, -0x10(%rbp) // a3: 48 83 c5 f8 addq $-0x8, %rbp // a7: 58 popq %rax // a8: ff 25 00 00 00 00 jmpq *(%rip) # 0xae <_JIT_ENTRY+0xae> // 00000000000000aa: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ae: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_PC32 .L.str.90-0x4 // b5: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xbc <_JIT_ENTRY+0xbc> // 00000000000000b8: R_X86_64_PC32 .L.str.1-0x4 // bc: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xc3 <_JIT_ENTRY+0xc3> // 00000000000000bf: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // c3: ba a8 0f 00 00 movl $0xfa8, %edx # imm = 0xFA8 // c8: ff 15 00 00 00 00 callq *(%rip) # 0xce <_JIT_ENTRY+0xce> // 00000000000000ca: R_X86_64_GOTPCRELX __assert_fail-0x4 // ce: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd5 <_JIT_ENTRY+0xd5> // 00000000000000d1: R_X86_64_PC32 .L__func__._JIT_ENTRY-0x4 // d5: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xdc <_JIT_ENTRY+0xdc> // 00000000000000d8: R_X86_64_PC32 .L.str.97-0x4 // dc: ff 15 00 00 00 00 callq *(%rip) # 0xe2 <_JIT_ENTRY+0xe2> // 00000000000000de: R_X86_64_GOTPCRELX _Py_FatalErrorFunc-0x4 // e2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_PC32 .L.str.92-0x4 // e9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.1-0x4 // f0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // f7: ba b0 0f 00 00 movl $0xfb0, %edx # imm = 0xFB0 // fc: ff 15 00 00 00 00 callq *(%rip) # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_GOTPCRELX __assert_fail-0x4 // 102: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_PC32 .L.str.91-0x4 // 109: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_PC32 .L.str.1-0x4 // 110: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 117: ba ac 0f 00 00 movl $0xfac, %edx # imm = 0xFAC // 11c: ff 15 00 00 00 00 callq *(%rip) # 0x122 <_JIT_ENTRY+0x122> // 000000000000011e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 122: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_PC32 .L.str.95-0x4 // 129: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x130 <_JIT_ENTRY+0x130> // 000000000000012c: R_X86_64_PC32 .L.str.1-0x4 // 130: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 137: ba b9 0f 00 00 movl $0xfb9, %edx # imm = 0xFB9 // 13c: ff 15 00 00 00 00 callq *(%rip) # 0x142 <_JIT_ENTRY+0x142> // 000000000000013e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 142: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x149 <_JIT_ENTRY+0x149> // 0000000000000145: R_X86_64_PC32 .L.str.93-0x4 // 149: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x150 <_JIT_ENTRY+0x150> // 000000000000014c: R_X86_64_PC32 .L.str.1-0x4 // 150: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x157 <_JIT_ENTRY+0x157> // 0000000000000153: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 157: ba b4 0f 00 00 movl $0xfb4, %edx # imm = 0xFB4 // 15c: ff 15 00 00 00 00 callq *(%rip) # 0x162 <_JIT_ENTRY+0x162> // 000000000000015e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 162: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x169 <_JIT_ENTRY+0x169> // 0000000000000165: R_X86_64_PC32 .L.str.96-0x4 // 169: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x170 <_JIT_ENTRY+0x170> // 000000000000016c: R_X86_64_PC32 .L.str.1-0x4 // 170: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x177 <_JIT_ENTRY+0x177> // 0000000000000173: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 177: ba ba 0f 00 00 movl $0xfba, %edx # imm = 0xFBA // 17c: ff 15 00 00 00 00 callq *(%rip) # 0x182 <_JIT_ENTRY+0x182> // 000000000000017e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 182: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x189 <_JIT_ENTRY+0x189> // 0000000000000185: R_X86_64_PC32 .L.str.94-0x4 // 189: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x190 <_JIT_ENTRY+0x190> // 000000000000018c: R_X86_64_PC32 .L.str.1-0x4 // 190: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x197 <_JIT_ENTRY+0x197> // 0000000000000193: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 197: ba b5 0f 00 00 movl $0xfb5, %edx # imm = 0xFB5 // 19c: ff 15 00 00 00 00 callq *(%rip) # 0x1a2 <_JIT_ENTRY+0x1a2> // 000000000000019e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1a2: const unsigned char code_body[418] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x98, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x15, 0x00, 0x00, 0x00, 0x00, 0xff, 0xca, 0x83, 0xfa, 0x07, 0x0f, 0x87, 0xa6, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xf0, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x63, 0x14, 0x96, 0x48, 0x01, 0xf2, 0xff, 0xe2, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xd5, 0x00, 0x00, 0x00, 0x48, 0x83, 0x78, 0x38, 0x00, 0x0f, 0x85, 0x0a, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x50, 0x38, 0xeb, 0x3e, 0x48, 0x83, 0x78, 0x70, 0x00, 0x75, 0x7d, 0x48, 0x8d, 0x50, 0x70, 0xeb, 0x31, 0x48, 0x83, 0x78, 0x48, 0x00, 0x0f, 0x85, 0x8c, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x50, 0x48, 0xeb, 0x20, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xb5, 0x00, 0x00, 0x00, 0x48, 0x83, 0x78, 0x40, 0x00, 0x0f, 0x85, 0xea, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x50, 0x40, 0x48, 0x89, 0x0a, 0x48, 0x89, 0x45, 0xf0, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xa8, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb0, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xac, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb9, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb4, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xba, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb5, 0x0f, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyFunction_Check(func)\x00func_obj->func_closure == NULL\x00func_obj->func_annotations == NULL\x00PyDict_CheckExact(attr)\x00func_obj->func_kwdefaults == NULL\x00PyTuple_CheckExact(attr)\x00func_obj->func_defaults == NULL\x00_JIT_ENTRY\x00We've reached an unreachable state. Anything is possible.\nThe limits were in our heads all along. Follow your dreams.\nhttps://xkcd.com/2200\x00" // 211: 00 00 00 00 00 00 00 // 218: &PyFunction_Type+0x0 // 220: OPARG // 228: &PyTuple_Type+0x0 // 230: &PyDict_Type+0x0 // 238: CONTINUE // 240: &__assert_fail+0x0 // 248: &_Py_FatalErrorFunc+0x0 const unsigned char data_body[592] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x46, 0x75, 0x6e, 0x63, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x75, 0x6e, 0x63, 0x29, 0x00, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x6f, 0x62, 0x6a, 0x2d, 0x3e, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x63, 0x6c, 0x6f, 0x73, 0x75, 0x72, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x6f, 0x62, 0x6a, 0x2d, 0x3e, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x61, 0x6e, 0x6e, 0x6f, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x63, 0x74, 0x28, 0x61, 0x74, 0x74, 0x72, 0x29, 0x00, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x6f, 0x62, 0x6a, 0x2d, 0x3e, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x6b, 0x77, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x45, 0x78, 0x61, 0x63, 0x74, 0x28, 0x61, 0x74, 0x74, 0x72, 0x29, 0x00, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x6f, 0x62, 0x6a, 0x2d, 0x3e, 0x66, 0x75, 0x6e, 0x63, 0x5f, 0x64, 0x65, 0x66, 0x61, 0x75, 0x6c, 0x74, 0x73, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x00, 0x57, 0x65, 0x27, 0x76, 0x65, 0x20, 0x72, 0x65, 0x61, 0x63, 0x68, 0x65, 0x64, 0x20, 0x61, 0x6e, 0x20, 0x75, 0x6e, 0x72, 0x65, 0x61, 0x63, 0x68, 0x61, 0x62, 0x6c, 0x65, 0x20, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2e, 0x20, 0x41, 0x6e, 0x79, 0x74, 0x68, 0x69, 0x6e, 0x67, 0x20, 0x69, 0x73, 0x20, 0x70, 0x6f, 0x73, 0x73, 0x69, 0x62, 0x6c, 0x65, 0x2e, 0x0a, 0x54, 0x68, 0x65, 0x20, 0x6c, 0x69, 0x6d, 0x69, 0x74, 0x73, 0x20, 0x77, 0x65, 0x72, 0x65, 0x20, 0x69, 0x6e, 0x20, 0x6f, 0x75, 0x72, 0x20, 0x68, 0x65, 0x61, 0x64, 0x73, 0x20, 0x61, 0x6c, 0x6c, 0x20, 0x61, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x20, 0x46, 0x6f, 0x6c, 0x6c, 0x6f, 0x77, 0x20, 0x79, 0x6f, 0x75, 0x72, 0x20, 0x64, 0x72, 0x65, 0x61, 0x6d, 0x73, 0x2e, 0x0a, 0x68, 0x74, 0x74, 0x70, 0x73, 0x3a, 0x2f, 0x2f, 0x78, 0x6b, 0x63, 0x64, 0x2e, 0x63, 0x6f, 0x6d, 0x2f, 0x32, 0x32, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_32r(data + 0x0, (uintptr_t)code + 0x3c); patch_32r(data + 0x4, (uintptr_t)code + 0x80); patch_32r(data + 0x8, (uintptr_t)code + 0xd6); patch_32r(data + 0xc, (uintptr_t)code + 0x6a); patch_32r(data + 0x10, (uintptr_t)code + 0xde); patch_32r(data + 0x14, (uintptr_t)code + 0xe2); patch_32r(data + 0x18, (uintptr_t)code + 0xe6); patch_32r(data + 0x1c, (uintptr_t)code + 0x87); patch_64(data + 0x218, (uintptr_t)&PyFunction_Type); patch_64(data + 0x220, instruction->oparg); patch_64(data + 0x228, (uintptr_t)&PyTuple_Type); patch_64(data + 0x230, (uintptr_t)&PyDict_Type); patch_64(data + 0x238, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x240, (uintptr_t)&__assert_fail); patch_64(data + 0x248, (uintptr_t)&_Py_FatalErrorFunc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x214); patch_32r(code + 0x19, (uintptr_t)data + 0x21c); patch_32r(code + 0x2f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x43, (uintptr_t)data + 0x224); patch_x86_64_32rx(code + 0x83, (uintptr_t)data + 0x22c); patch_x86_64_32rx(code + 0xaa, (uintptr_t)data + 0x234); patch_32r(code + 0xb1, (uintptr_t)data + 0xaa); patch_32r(code + 0xb8, (uintptr_t)data + 0x1c); patch_32r(code + 0xbf, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xca, (uintptr_t)data + 0x23c); patch_32r(code + 0xd1, (uintptr_t)data + 0x176); patch_32r(code + 0xd8, (uintptr_t)data + 0x181); patch_x86_64_32rx(code + 0xde, (uintptr_t)data + 0x244); patch_32r(code + 0xe5, (uintptr_t)data + 0xe0); patch_32r(code + 0xec, (uintptr_t)data + 0x1c); patch_32r(code + 0xf3, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xfe, (uintptr_t)data + 0x23c); patch_32r(code + 0x105, (uintptr_t)data + 0xc1); patch_32r(code + 0x10c, (uintptr_t)data + 0x1c); patch_32r(code + 0x113, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x11e, (uintptr_t)data + 0x23c); patch_32r(code + 0x125, (uintptr_t)data + 0x13d); patch_32r(code + 0x12c, (uintptr_t)data + 0x1c); patch_32r(code + 0x133, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x13e, (uintptr_t)data + 0x23c); patch_32r(code + 0x145, (uintptr_t)data + 0x103); patch_32r(code + 0x14c, (uintptr_t)data + 0x1c); patch_32r(code + 0x153, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x15e, (uintptr_t)data + 0x23c); patch_32r(code + 0x165, (uintptr_t)data + 0x156); patch_32r(code + 0x16c, (uintptr_t)data + 0x1c); patch_32r(code + 0x173, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x17e, (uintptr_t)data + 0x23c); patch_32r(code + 0x185, (uintptr_t)data + 0x11b); patch_32r(code + 0x18c, (uintptr_t)data + 0x1c); patch_32r(code + 0x193, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x19e, (uintptr_t)data + 0x23c); } void emit__SET_IP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_SET_IP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 7: 49 89 45 38 movq %rax, 0x38(%r13) // b: ff 25 00 00 00 00 jmpq *(%rip) # 0x11 <_JIT_ENTRY+0x11> // 000000000000000d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // b: const unsigned char code_body[11] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x45, 0x38, }; // 0: // 0: OPERAND const unsigned char data_body[8] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, instruction->operand); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + -0x4); } void emit__SET_UPDATE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_SET_UPDATE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 8b 05 00 00 00 00 movl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 7: f7 d0 notl %eax // 9: 48 8b 5d f8 movq -0x8(%rbp), %rbx // d: c1 e0 03 shll $0x3, %eax // 10: 48 0d 00 00 f8 ff orq $-0x80000, %rax # imm = 0xFFF80000 // 16: 48 8b 7c 05 00 movq (%rbp,%rax), %rdi // 1b: 48 89 de movq %rbx, %rsi // 1e: ff 15 00 00 00 00 callq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX _PySet_Update-0x4 // 24: 41 89 c6 movl %eax, %r14d // 27: 48 8b 03 movq (%rbx), %rax // 2a: 48 85 c0 testq %rax, %rax // 2d: 7e 06 jle 0x35 <_JIT_ENTRY+0x35> // 2f: 85 c0 testl %eax, %eax // 31: 79 1e jns 0x51 <_JIT_ENTRY+0x51> // 33: eb 27 jmp 0x5c <_JIT_ENTRY+0x5c> // 35: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_PC32 .L.str.1-0x4 // 3c: be b8 06 00 00 movl $0x6b8, %esi # imm = 0x6B8 // 41: 48 89 da movq %rbx, %rdx // 44: ff 15 00 00 00 00 callq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4a: 48 8b 03 movq (%rbx), %rax // 4d: 85 c0 testl %eax, %eax // 4f: 78 0b js 0x5c <_JIT_ENTRY+0x5c> // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 57: 48 ff 0b decq (%rbx) // 5a: 74 10 je 0x6c <_JIT_ENTRY+0x6c> // 5c: 45 85 f6 testl %r14d, %r14d // 5f: 78 19 js 0x7a <_JIT_ENTRY+0x7a> // 61: 48 83 c5 f8 addq $-0x8, %rbp // 65: 58 popq %rax // 66: ff 25 00 00 00 00 jmpq *(%rip) # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6c: 48 89 df movq %rbx, %rdi // 6f: ff 15 00 00 00 00 callq *(%rip) # 0x75 <_JIT_ENTRY+0x75> // 0000000000000071: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 75: 45 85 f6 testl %r14d, %r14d // 78: 79 e7 jns 0x61 <_JIT_ENTRY+0x61> // 7a: 58 popq %rax // 7b: ff 25 00 00 00 00 jmpq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 81: const unsigned char code_body[129] = { 0x50, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf7, 0xd0, 0x48, 0x8b, 0x5d, 0xf8, 0xc1, 0xe0, 0x03, 0x48, 0x0d, 0x00, 0x00, 0xf8, 0xff, 0x48, 0x8b, 0x7c, 0x05, 0x00, 0x48, 0x89, 0xde, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb8, 0x06, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x10, 0x45, 0x85, 0xf6, 0x78, 0x19, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x79, 0xe7, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_PySet_Update+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: CONTINUE // 68: &_Py_Dealloc+0x0 // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_PySet_Update); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0x44); patch_32r(code + 0x38, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x68, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x6c); } void emit__START_EXECUTOR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_START_EXECUTOR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 9c 24 10 01 00 00 movq 0x110(%r12), %rbx // 9: 48 8b 03 movq (%rbx), %rax // c: 48 85 c0 testq %rax, %rax // f: 7e 06 jle 0x17 <_JIT_ENTRY+0x17> // 11: 85 c0 testl %eax, %eax // 13: 79 1e jns 0x33 <_JIT_ENTRY+0x33> // 15: eb 27 jmp 0x3e <_JIT_ENTRY+0x3e> // 17: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1e <_JIT_ENTRY+0x1e> // 000000000000001a: R_X86_64_PC32 .L.str.1-0x4 // 1e: be 51 11 00 00 movl $0x1151, %esi # imm = 0x1151 // 23: 48 89 da movq %rbx, %rdx // 26: ff 15 00 00 00 00 callq *(%rip) # 0x2c <_JIT_ENTRY+0x2c> // 0000000000000028: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 2c: 48 8b 03 movq (%rbx), %rax // 2f: 85 c0 testl %eax, %eax // 31: 78 0b js 0x3e <_JIT_ENTRY+0x3e> // 33: ff 15 00 00 00 00 callq *(%rip) # 0x39 <_JIT_ENTRY+0x39> // 0000000000000035: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 39: 48 ff 0b decq (%rbx) // 3c: 74 20 je 0x5e <_JIT_ENTRY+0x5e> // 3e: 49 c7 84 24 10 01 00 00 00 00 00 00 movq $0x0, 0x110(%r12) // 4a: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 51: 80 78 22 00 cmpb $0x0, 0x22(%rax) // 55: 74 29 je 0x80 <_JIT_ENTRY+0x80> // 57: 58 popq %rax // 58: ff 25 00 00 00 00 jmpq *(%rip) # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5e: 48 89 df movq %rbx, %rdi // 61: ff 15 00 00 00 00 callq *(%rip) # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 67: 49 c7 84 24 10 01 00 00 00 00 00 00 movq $0x0, 0x110(%r12) // 73: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 7a: 80 78 22 00 cmpb $0x0, 0x22(%rax) // 7e: 75 d7 jne 0x57 <_JIT_ENTRY+0x57> // 80: 58 popq %rax // 81: ff 25 00 00 00 00 jmpq *(%rip) # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 87: const unsigned char code_body[135] = { 0x50, 0x49, 0x8b, 0x9c, 0x24, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x51, 0x11, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x20, 0x49, 0xc7, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x78, 0x22, 0x00, 0x74, 0x29, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xc7, 0x84, 0x24, 0x10, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x80, 0x78, 0x22, 0x00, 0x75, 0xd7, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_Py_NegativeRefcount+0x0 // 48: &_Py_DECREF_DecRefTotal+0x0 // 50: OPERAND // 58: CONTINUE // 60: &_Py_Dealloc+0x0 // 68: JUMP_TARGET const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x48, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x50, instruction->operand); patch_64(data + 0x58, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x68, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x1a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x28, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x35, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x63, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x83, (uintptr_t)data + 0x64); } void emit__STORE_ATTR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_ATTR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 fc 00 00 00 jne 0x112 <_JIT_ENTRY+0x112> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 07 01 00 00 je 0x132 <_JIT_ENTRY+0x132> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 1a 01 00 00 je 0x152 <_JIT_ENTRY+0x152> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 2d 01 00 00 je 0x172 <_JIT_ENTRY+0x172> // 45: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4c: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 50: 0f 8e 3c 01 00 00 jle 0x192 <_JIT_ENTRY+0x192> // 56: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 5a: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5e: 48 8b 74 c8 18 movq 0x18(%rax,%rcx,8), %rsi // 63: 48 89 df movq %rbx, %rdi // 66: 4c 89 fa movq %r15, %rdx // 69: ff 15 00 00 00 00 callq *(%rip) # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_GOTPCRELX PyObject_SetAttr-0x4 // 6f: 41 89 c6 movl %eax, %r14d // 72: 49 8b 07 movq (%r15), %rax // 75: 48 85 c0 testq %rax, %rax // 78: 7e 06 jle 0x80 <_JIT_ENTRY+0x80> // 7a: 85 c0 testl %eax, %eax // 7c: 79 1e jns 0x9c <_JIT_ENTRY+0x9c> // 7e: eb 27 jmp 0xa7 <_JIT_ENTRY+0xa7> // 80: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_PC32 .L.str.1-0x4 // 87: be 38 05 00 00 movl $0x538, %esi # imm = 0x538 // 8c: 4c 89 fa movq %r15, %rdx // 8f: ff 15 00 00 00 00 callq *(%rip) # 0x95 <_JIT_ENTRY+0x95> // 0000000000000091: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 95: 49 8b 07 movq (%r15), %rax // 98: 85 c0 testl %eax, %eax // 9a: 78 0b js 0xa7 <_JIT_ENTRY+0xa7> // 9c: ff 15 00 00 00 00 callq *(%rip) # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // a2: 49 ff 0f decq (%r15) // a5: 74 0e je 0xb5 <_JIT_ENTRY+0xb5> // a7: 48 8b 03 movq (%rbx), %rax // aa: 48 85 c0 testq %rax, %rax // ad: 7e 17 jle 0xc6 <_JIT_ENTRY+0xc6> // af: 85 c0 testl %eax, %eax // b1: 79 2f jns 0xe2 <_JIT_ENTRY+0xe2> // b3: eb 38 jmp 0xed <_JIT_ENTRY+0xed> // b5: 4c 89 ff movq %r15, %rdi // b8: ff 15 00 00 00 00 callq *(%rip) # 0xbe <_JIT_ENTRY+0xbe> // 00000000000000ba: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // be: 48 8b 03 movq (%rbx), %rax // c1: 48 85 c0 testq %rax, %rax // c4: 7f e9 jg 0xaf <_JIT_ENTRY+0xaf> // c6: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xcd <_JIT_ENTRY+0xcd> // 00000000000000c9: R_X86_64_PC32 .L.str.1-0x4 // cd: be 39 05 00 00 movl $0x539, %esi # imm = 0x539 // d2: 48 89 da movq %rbx, %rdx // d5: ff 15 00 00 00 00 callq *(%rip) # 0xdb <_JIT_ENTRY+0xdb> // 00000000000000d7: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // db: 48 8b 03 movq (%rbx), %rax // de: 85 c0 testl %eax, %eax // e0: 78 0b js 0xed <_JIT_ENTRY+0xed> // e2: ff 15 00 00 00 00 callq *(%rip) # 0xe8 <_JIT_ENTRY+0xe8> // 00000000000000e4: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // e8: 48 ff 0b decq (%rbx) // eb: 74 0c je 0xf9 <_JIT_ENTRY+0xf9> // ed: 45 85 f6 testl %r14d, %r14d // f0: 74 15 je 0x107 <_JIT_ENTRY+0x107> // f2: 58 popq %rax // f3: ff 25 00 00 00 00 jmpq *(%rip) # 0xf9 <_JIT_ENTRY+0xf9> // 00000000000000f5: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // f9: 48 89 df movq %rbx, %rdi // fc: ff 15 00 00 00 00 callq *(%rip) # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 102: 45 85 f6 testl %r14d, %r14d // 105: 75 eb jne 0xf2 <_JIT_ENTRY+0xf2> // 107: 48 83 c5 f0 addq $-0x10, %rbp // 10b: 58 popq %rax // 10c: ff 25 00 00 00 00 jmpq *(%rip) # 0x112 <_JIT_ENTRY+0x112> // 000000000000010e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 112: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x119 <_JIT_ENTRY+0x119> // 0000000000000115: R_X86_64_PC32 .L.str.108-0x4 // 119: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x120 <_JIT_ENTRY+0x120> // 000000000000011c: R_X86_64_PC32 .L.str.109-0x4 // 120: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x127 <_JIT_ENTRY+0x127> // 0000000000000123: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 127: ba 4d 00 00 00 movl $0x4d, %edx // 12c: ff 15 00 00 00 00 callq *(%rip) # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 132: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x139 <_JIT_ENTRY+0x139> // 0000000000000135: R_X86_64_PC32 .L.str.110-0x4 // 139: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_PC32 .L.str.111-0x4 // 140: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x147 <_JIT_ENTRY+0x147> // 0000000000000143: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 147: ba 99 00 00 00 movl $0x99, %edx // 14c: ff 15 00 00 00 00 callq *(%rip) # 0x152 <_JIT_ENTRY+0x152> // 000000000000014e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 152: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x159 <_JIT_ENTRY+0x159> // 0000000000000155: R_X86_64_PC32 .L.str.115-0x4 // 159: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x160 <_JIT_ENTRY+0x160> // 000000000000015c: R_X86_64_PC32 .L.str.114-0x4 // 160: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x167 <_JIT_ENTRY+0x167> // 0000000000000163: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 167: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 16c: ff 15 00 00 00 00 callq *(%rip) # 0x172 <_JIT_ENTRY+0x172> // 000000000000016e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 172: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x179 <_JIT_ENTRY+0x179> // 0000000000000175: R_X86_64_PC32 .L.str.116-0x4 // 179: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x180 <_JIT_ENTRY+0x180> // 000000000000017c: R_X86_64_PC32 .L.str.114-0x4 // 180: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x187 <_JIT_ENTRY+0x187> // 0000000000000183: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 187: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 18c: ff 15 00 00 00 00 callq *(%rip) # 0x192 <_JIT_ENTRY+0x192> // 000000000000018e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 192: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x199 <_JIT_ENTRY+0x199> // 0000000000000195: R_X86_64_PC32 .L.str.113-0x4 // 199: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a0 <_JIT_ENTRY+0x1a0> // 000000000000019c: R_X86_64_PC32 .L.str.111-0x4 // 1a0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1a7 <_JIT_ENTRY+0x1a7> // 00000000000001a3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 1a7: ba 9b 00 00 00 movl $0x9b, %edx // 1ac: ff 15 00 00 00 00 callq *(%rip) # 0x1b2 <_JIT_ENTRY+0x1b2> // 00000000000001ae: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b2: const unsigned char code_body[434] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xfc, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x07, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x1a, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x2d, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0x3c, 0x01, 0x00, 0x00, 0x4c, 0x8b, 0x7d, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x74, 0xc8, 0x18, 0x48, 0x89, 0xdf, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x38, 0x05, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x39, 0x05, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0c, 0x45, 0x85, 0xf6, 0x74, 0x15, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x75, 0xeb, 0x48, 0x83, 0xc5, 0xf0, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 1f7: 00 // 1f8: &PyCode_Type+0x0 // 200: &PyLong_Type+0x0 // 208: &PyBool_Type+0x0 // 210: OPARG // 218: &PyObject_SetAttr+0x0 // 220: &_Py_NegativeRefcount+0x0 // 228: &_Py_DECREF_DecRefTotal+0x0 // 230: &_Py_Dealloc+0x0 // 238: ERROR_TARGET // 240: CONTINUE // 248: &__assert_fail+0x0 const unsigned char data_body[592] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1f8, (uintptr_t)&PyCode_Type); patch_64(data + 0x200, (uintptr_t)&PyLong_Type); patch_64(data + 0x208, (uintptr_t)&PyBool_Type); patch_64(data + 0x210, instruction->oparg); patch_64(data + 0x218, (uintptr_t)&PyObject_SetAttr); patch_64(data + 0x220, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x228, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x230, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x238, instruction_starts[instruction->error_target]); patch_64(data + 0x240, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x248, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x204); patch_32r(code + 0x48, (uintptr_t)data + 0x20c); patch_x86_64_32rx(code + 0x6b, (uintptr_t)data + 0x214); patch_32r(code + 0x83, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x91, (uintptr_t)data + 0x21c); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0x224); patch_x86_64_32rx(code + 0xba, (uintptr_t)data + 0x22c); patch_32r(code + 0xc9, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xd7, (uintptr_t)data + 0x21c); patch_x86_64_32rx(code + 0xe4, (uintptr_t)data + 0x224); patch_x86_64_32rx(code + 0xf5, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0xfe, (uintptr_t)data + 0x22c); patch_x86_64_32rx(code + 0x10e, (uintptr_t)data + 0x23c); patch_32r(code + 0x115, (uintptr_t)data + 0x3c); patch_32r(code + 0x11c, (uintptr_t)data + 0x5a); patch_32r(code + 0x123, (uintptr_t)data + 0xa0); patch_x86_64_32rx(code + 0x12e, (uintptr_t)data + 0x244); patch_32r(code + 0x135, (uintptr_t)data + 0xd6); patch_32r(code + 0x13c, (uintptr_t)data + 0xe7); patch_32r(code + 0x143, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x14e, (uintptr_t)data + 0x244); patch_32r(code + 0x155, (uintptr_t)data + 0x19c); patch_32r(code + 0x15c, (uintptr_t)data + 0x165); patch_32r(code + 0x163, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x16e, (uintptr_t)data + 0x244); patch_32r(code + 0x175, (uintptr_t)data + 0x1d7); patch_32r(code + 0x17c, (uintptr_t)data + 0x165); patch_32r(code + 0x183, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x18e, (uintptr_t)data + 0x244); patch_32r(code + 0x195, (uintptr_t)data + 0x14d); patch_32r(code + 0x19c, (uintptr_t)data + 0xe7); patch_32r(code + 0x1a3, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x1ae, (uintptr_t)data + 0x244); } void emit__STORE_ATTR_INSTANCE_VALUE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_ATTR_INSTANCE_VALUE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 8b 88 a8 00 00 00 movq 0xa8(%rax), %rcx // 10: f6 c1 10 testb $0x10, %cl // 13: 0f 84 20 01 00 00 je 0x139 <_JIT_ENTRY+0x139> // 19: 48 83 7b e8 00 cmpq $0x0, -0x18(%rbx) // 1e: 0f 85 35 01 00 00 jne 0x159 <_JIT_ENTRY+0x159> // 24: f6 c1 04 testb $0x4, %cl // 27: 0f 84 4c 01 00 00 je 0x179 <_JIT_ENTRY+0x179> // 2d: 48 83 78 20 10 cmpq $0x10, 0x20(%rax) // 32: 0f 85 61 01 00 00 jne 0x199 <_JIT_ENTRY+0x199> // 38: 48 8b 4d f0 movq -0x10(%rbp), %rcx // 3c: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 43: 4c 8b 74 c3 18 movq 0x18(%rbx,%rax,8), %r14 // 48: 48 89 4c c3 18 movq %rcx, 0x18(%rbx,%rax,8) // 4d: 4d 85 f6 testq %r14, %r14 // 50: 74 0e je 0x60 <_JIT_ENTRY+0x60> // 52: 49 8b 06 movq (%r14), %rax // 55: 48 85 c0 testq %rax, %rax // 58: 7e 55 jle 0xaf <_JIT_ENTRY+0xaf> // 5a: 85 c0 testl %eax, %eax // 5c: 79 6d jns 0xcb <_JIT_ENTRY+0xcb> // 5e: eb 76 jmp 0xd6 <_JIT_ENTRY+0xd6> // 60: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x67 <_JIT_ENTRY+0x67> // 0000000000000063: R_X86_64_REX_GOTPCRELX _JIT_OPERAND-0x4 // 67: 66 83 f9 1e cmpw $0x1e, %cx // 6b: 0f 83 48 01 00 00 jae 0x1b9 <_JIT_ENTRY+0x1b9> // 71: 0f b6 4b 11 movzbl 0x11(%rbx), %ecx // 75: 0f b6 53 10 movzbl 0x10(%rbx), %edx // 79: 38 d1 cmpb %dl, %cl // 7b: 0f 83 58 01 00 00 jae 0x1d9 <_JIT_ENTRY+0x1d9> // 81: 3d 00 01 00 00 cmpl $0x100, %eax # imm = 0x100 // 86: 0f 83 6d 01 00 00 jae 0x1f9 <_JIT_ENTRY+0x1f9> // 8c: 48 8d 43 10 leaq 0x10(%rbx), %rax // 90: 48 8d 04 d0 leaq (%rax,%rdx,8), %rax // 94: 0f b6 15 00 00 00 00 movzbl (%rip), %edx # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 9b: 88 54 01 08 movb %dl, 0x8(%rcx,%rax) // 9f: 8d 41 01 leal 0x1(%rcx), %eax // a2: 88 43 11 movb %al, 0x11(%rbx) // a5: 48 8b 03 movq (%rbx), %rax // a8: 48 85 c0 testq %rax, %rax // ab: 7f 31 jg 0xde <_JIT_ENTRY+0xde> // ad: eb 4f jmp 0xfe <_JIT_ENTRY+0xfe> // af: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb6 <_JIT_ENTRY+0xb6> // 00000000000000b2: R_X86_64_PC32 .L.str.1-0x4 // b6: be d8 08 00 00 movl $0x8d8, %esi # imm = 0x8D8 // bb: 4c 89 f2 movq %r14, %rdx // be: ff 15 00 00 00 00 callq *(%rip) # 0xc4 <_JIT_ENTRY+0xc4> // 00000000000000c0: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // c4: 49 8b 06 movq (%r14), %rax // c7: 85 c0 testl %eax, %eax // c9: 78 0b js 0xd6 <_JIT_ENTRY+0xd6> // cb: ff 15 00 00 00 00 callq *(%rip) # 0xd1 <_JIT_ENTRY+0xd1> // 00000000000000cd: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // d1: 49 ff 0e decq (%r14) // d4: 74 17 je 0xed <_JIT_ENTRY+0xed> // d6: 48 8b 03 movq (%rbx), %rax // d9: 48 85 c0 testq %rax, %rax // dc: 7e 20 jle 0xfe <_JIT_ENTRY+0xfe> // de: 48 83 c5 f0 addq $-0x10, %rbp // e2: 85 c0 testl %eax, %eax // e4: 79 38 jns 0x11e <_JIT_ENTRY+0x11e> // e6: 58 popq %rax // e7: ff 25 00 00 00 00 jmpq *(%rip) # 0xed <_JIT_ENTRY+0xed> // 00000000000000e9: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // ed: 4c 89 f7 movq %r14, %rdi // f0: ff 15 00 00 00 00 callq *(%rip) # 0xf6 <_JIT_ENTRY+0xf6> // 00000000000000f2: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // f6: 48 8b 03 movq (%rbx), %rax // f9: 48 85 c0 testq %rax, %rax // fc: 7f e0 jg 0xde <_JIT_ENTRY+0xde> // fe: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x105 <_JIT_ENTRY+0x105> // 0000000000000101: R_X86_64_PC32 .L.str.1-0x4 // 105: be da 08 00 00 movl $0x8da, %esi # imm = 0x8DA // 10a: 48 89 da movq %rbx, %rdx // 10d: ff 15 00 00 00 00 callq *(%rip) # 0x113 <_JIT_ENTRY+0x113> // 000000000000010f: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 113: 48 8b 03 movq (%rbx), %rax // 116: 48 83 c5 f0 addq $-0x10, %rbp // 11a: 85 c0 testl %eax, %eax // 11c: 78 c8 js 0xe6 <_JIT_ENTRY+0xe6> // 11e: ff 15 00 00 00 00 callq *(%rip) # 0x124 <_JIT_ENTRY+0x124> // 0000000000000120: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 124: 48 ff 0b decq (%rbx) // 127: 75 bd jne 0xe6 <_JIT_ENTRY+0xe6> // 129: 48 89 df movq %rbx, %rdi // 12c: ff 15 00 00 00 00 callq *(%rip) # 0x132 <_JIT_ENTRY+0x132> // 000000000000012e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 132: 58 popq %rax // 133: ff 25 00 00 00 00 jmpq *(%rip) # 0x139 <_JIT_ENTRY+0x139> // 0000000000000135: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 139: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_PC32 .L.str.148-0x4 // 140: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x147 <_JIT_ENTRY+0x147> // 0000000000000143: R_X86_64_PC32 .L.str.118-0x4 // 147: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x14e <_JIT_ENTRY+0x14e> // 000000000000014a: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_ManagedDictPointer-0x4 // 14e: ba ac 02 00 00 movl $0x2ac, %edx # imm = 0x2AC // 153: ff 15 00 00 00 00 callq *(%rip) # 0x159 <_JIT_ENTRY+0x159> // 0000000000000155: R_X86_64_GOTPCRELX __assert_fail-0x4 // 159: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x160 <_JIT_ENTRY+0x160> // 000000000000015c: R_X86_64_PC32 .L.str.56-0x4 // 160: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x167 <_JIT_ENTRY+0x167> // 0000000000000163: R_X86_64_PC32 .L.str.1-0x4 // 167: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x16e <_JIT_ENTRY+0x16e> // 000000000000016a: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 16e: ba d0 08 00 00 movl $0x8d0, %edx # imm = 0x8D0 // 173: ff 15 00 00 00 00 callq *(%rip) # 0x179 <_JIT_ENTRY+0x179> // 0000000000000175: R_X86_64_GOTPCRELX __assert_fail-0x4 // 179: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x180 <_JIT_ENTRY+0x180> // 000000000000017c: R_X86_64_PC32 .L.str.147-0x4 // 180: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x187 <_JIT_ENTRY+0x187> // 0000000000000183: R_X86_64_PC32 .L.str.118-0x4 // 187: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x18e <_JIT_ENTRY+0x18e> // 000000000000018a: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // 18e: ba ba 02 00 00 movl $0x2ba, %edx # imm = 0x2BA // 193: ff 15 00 00 00 00 callq *(%rip) # 0x199 <_JIT_ENTRY+0x199> // 0000000000000195: R_X86_64_GOTPCRELX __assert_fail-0x4 // 199: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a0 <_JIT_ENTRY+0x1a0> // 000000000000019c: R_X86_64_PC32 .L.str.149-0x4 // 1a0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1a7 <_JIT_ENTRY+0x1a7> // 00000000000001a3: R_X86_64_PC32 .L.str.118-0x4 // 1a7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ae <_JIT_ENTRY+0x1ae> // 00000000000001aa: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyObject_InlineValues-0x4 // 1ae: ba bc 02 00 00 movl $0x2bc, %edx # imm = 0x2BC // 1b3: ff 15 00 00 00 00 callq *(%rip) # 0x1b9 <_JIT_ENTRY+0x1b9> // 00000000000001b5: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1b9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1c0 <_JIT_ENTRY+0x1c0> // 00000000000001bc: R_X86_64_PC32 .L.str.151-0x4 // 1c0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1c7 <_JIT_ENTRY+0x1c7> // 00000000000001c3: R_X86_64_PC32 .L.str.146-0x4 // 1c7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ce <_JIT_ENTRY+0x1ce> // 00000000000001ca: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyDictValues_AddToInsertionOrder-0x4 // 1ce: ba 20 01 00 00 movl $0x120, %edx # imm = 0x120 // 1d3: ff 15 00 00 00 00 callq *(%rip) # 0x1d9 <_JIT_ENTRY+0x1d9> // 00000000000001d5: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1d9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1e0 <_JIT_ENTRY+0x1e0> // 00000000000001dc: R_X86_64_PC32 .L.str.152-0x4 // 1e0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1e7 <_JIT_ENTRY+0x1e7> // 00000000000001e3: R_X86_64_PC32 .L.str.146-0x4 // 1e7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1ee <_JIT_ENTRY+0x1ee> // 00000000000001ea: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyDictValues_AddToInsertionOrder-0x4 // 1ee: ba 23 01 00 00 movl $0x123, %edx # imm = 0x123 // 1f3: ff 15 00 00 00 00 callq *(%rip) # 0x1f9 <_JIT_ENTRY+0x1f9> // 00000000000001f5: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1f9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x200 <_JIT_ENTRY+0x200> // 00000000000001fc: R_X86_64_PC32 .L.str.153-0x4 // 200: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x207 <_JIT_ENTRY+0x207> // 0000000000000203: R_X86_64_PC32 .L.str.146-0x4 // 207: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x20e <_JIT_ENTRY+0x20e> // 000000000000020a: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyDictValues_AddToInsertionOrder-0x4 // 20e: ba 24 01 00 00 movl $0x124, %edx # imm = 0x124 // 213: ff 15 00 00 00 00 callq *(%rip) # 0x219 <_JIT_ENTRY+0x219> // 0000000000000215: R_X86_64_GOTPCRELX __assert_fail-0x4 // 219: const unsigned char code_body[537] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x88, 0xa8, 0x00, 0x00, 0x00, 0xf6, 0xc1, 0x10, 0x0f, 0x84, 0x20, 0x01, 0x00, 0x00, 0x48, 0x83, 0x7b, 0xe8, 0x00, 0x0f, 0x85, 0x35, 0x01, 0x00, 0x00, 0xf6, 0xc1, 0x04, 0x0f, 0x84, 0x4c, 0x01, 0x00, 0x00, 0x48, 0x83, 0x78, 0x20, 0x10, 0x0f, 0x85, 0x61, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xf0, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x74, 0xc3, 0x18, 0x48, 0x89, 0x4c, 0xc3, 0x18, 0x4d, 0x85, 0xf6, 0x74, 0x0e, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x55, 0x85, 0xc0, 0x79, 0x6d, 0xeb, 0x76, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf9, 0x1e, 0x0f, 0x83, 0x48, 0x01, 0x00, 0x00, 0x0f, 0xb6, 0x4b, 0x11, 0x0f, 0xb6, 0x53, 0x10, 0x38, 0xd1, 0x0f, 0x83, 0x58, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x01, 0x00, 0x00, 0x0f, 0x83, 0x6d, 0x01, 0x00, 0x00, 0x48, 0x8d, 0x43, 0x10, 0x48, 0x8d, 0x04, 0xd0, 0x0f, 0xb6, 0x15, 0x00, 0x00, 0x00, 0x00, 0x88, 0x54, 0x01, 0x08, 0x8d, 0x41, 0x01, 0x88, 0x43, 0x11, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x31, 0xeb, 0x4f, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xd8, 0x08, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x17, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x20, 0x48, 0x83, 0xc5, 0xf0, 0x85, 0xc0, 0x79, 0x38, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe0, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xda, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x83, 0xc5, 0xf0, 0x85, 0xc0, 0x78, 0xc8, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xbd, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xac, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xd0, 0x08, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xba, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbc, 0x02, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x20, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x23, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x24, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00_PyObject_GetManagedDict(owner) == NULL\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_dict.h\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_INLINE_VALUES\x00PyDictValues *_PyObject_InlineValues(PyObject *)\x00Py_TYPE(obj)->tp_flags & Py_TPFLAGS_MANAGED_DICT\x00Py_TYPE(obj)->tp_basicsize == sizeof(PyObject)\x00PyManagedDictPointer *_PyObject_ManagedDictPointer(PyObject *)\x00ix < SHARED_KEYS_MAX_SIZE\x00void _PyDictValues_AddToInsertionOrder(PyDictValues *, Py_ssize_t)\x00size < values->capacity\x00((uint8_t)ix) == ix\x00' // 2cd: 00 00 00 // 2d0: OPERAND // 2d8: &_Py_NegativeRefcount+0x0 // 2e0: &_Py_DECREF_DecRefTotal+0x0 // 2e8: CONTINUE // 2f0: &_Py_Dealloc+0x0 // 2f8: &__assert_fail+0x0 const unsigned char data_body[768] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x47, 0x65, 0x74, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x69, 0x63, 0x74, 0x28, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x64, 0x69, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x49, 0x4e, 0x4c, 0x49, 0x4e, 0x45, 0x5f, 0x56, 0x41, 0x4c, 0x55, 0x45, 0x53, 0x00, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x49, 0x6e, 0x6c, 0x69, 0x6e, 0x65, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x66, 0x6c, 0x61, 0x67, 0x73, 0x20, 0x26, 0x20, 0x50, 0x79, 0x5f, 0x54, 0x50, 0x46, 0x4c, 0x41, 0x47, 0x53, 0x5f, 0x4d, 0x41, 0x4e, 0x41, 0x47, 0x45, 0x44, 0x5f, 0x44, 0x49, 0x43, 0x54, 0x00, 0x50, 0x79, 0x5f, 0x54, 0x59, 0x50, 0x45, 0x28, 0x6f, 0x62, 0x6a, 0x29, 0x2d, 0x3e, 0x74, 0x70, 0x5f, 0x62, 0x61, 0x73, 0x69, 0x63, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3d, 0x3d, 0x20, 0x73, 0x69, 0x7a, 0x65, 0x6f, 0x66, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x29, 0x00, 0x50, 0x79, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x69, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x5f, 0x4d, 0x61, 0x6e, 0x61, 0x67, 0x65, 0x64, 0x44, 0x69, 0x63, 0x74, 0x50, 0x6f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x69, 0x78, 0x20, 0x3c, 0x20, 0x53, 0x48, 0x41, 0x52, 0x45, 0x44, 0x5f, 0x4b, 0x45, 0x59, 0x53, 0x5f, 0x4d, 0x41, 0x58, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x5f, 0x41, 0x64, 0x64, 0x54, 0x6f, 0x49, 0x6e, 0x73, 0x65, 0x72, 0x74, 0x69, 0x6f, 0x6e, 0x4f, 0x72, 0x64, 0x65, 0x72, 0x28, 0x50, 0x79, 0x44, 0x69, 0x63, 0x74, 0x56, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x73, 0x69, 0x7a, 0x65, 0x20, 0x3c, 0x20, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x73, 0x2d, 0x3e, 0x63, 0x61, 0x70, 0x61, 0x63, 0x69, 0x74, 0x79, 0x00, 0x28, 0x28, 0x75, 0x69, 0x6e, 0x74, 0x38, 0x5f, 0x74, 0x29, 0x69, 0x78, 0x29, 0x20, 0x3d, 0x3d, 0x20, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x2d0, instruction->operand); patch_64(data + 0x2d8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x2e0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x2e8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x2f0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x2f8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x3f, (uintptr_t)data + 0x2cc); patch_x86_64_32rx(code + 0x63, (uintptr_t)data + 0x2cc); patch_32r(code + 0x97, (uintptr_t)data + 0x2cc); patch_32r(code + 0xb2, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xc0, (uintptr_t)data + 0x2d4); patch_x86_64_32rx(code + 0xcd, (uintptr_t)data + 0x2dc); patch_x86_64_32rx(code + 0xe9, (uintptr_t)data + 0x2e4); patch_x86_64_32rx(code + 0xf2, (uintptr_t)data + 0x2ec); patch_32r(code + 0x101, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x10f, (uintptr_t)data + 0x2d4); patch_x86_64_32rx(code + 0x120, (uintptr_t)data + 0x2dc); patch_x86_64_32rx(code + 0x12e, (uintptr_t)data + 0x2ec); patch_x86_64_32rx(code + 0x135, (uintptr_t)data + 0x2e4); patch_32r(code + 0x13c, (uintptr_t)data + 0x1a1); patch_32r(code + 0x143, (uintptr_t)data + 0xb2); patch_32r(code + 0x14a, (uintptr_t)data + 0x201); patch_x86_64_32rx(code + 0x155, (uintptr_t)data + 0x2f4); patch_32r(code + 0x15c, (uintptr_t)data + 0x8a); patch_32r(code + 0x163, (uintptr_t)data + -0x4); patch_32r(code + 0x16a, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x175, (uintptr_t)data + 0x2f4); patch_32r(code + 0x17c, (uintptr_t)data + 0x13e); patch_32r(code + 0x183, (uintptr_t)data + 0xb2); patch_32r(code + 0x18a, (uintptr_t)data + 0x170); patch_x86_64_32rx(code + 0x195, (uintptr_t)data + 0x2f4); patch_32r(code + 0x19c, (uintptr_t)data + 0x1d2); patch_32r(code + 0x1a3, (uintptr_t)data + 0xb2); patch_32r(code + 0x1aa, (uintptr_t)data + 0x170); patch_x86_64_32rx(code + 0x1b5, (uintptr_t)data + 0x2f4); patch_32r(code + 0x1bc, (uintptr_t)data + 0x240); patch_32r(code + 0x1c3, (uintptr_t)data + 0xf9); patch_32r(code + 0x1ca, (uintptr_t)data + 0x25a); patch_x86_64_32rx(code + 0x1d5, (uintptr_t)data + 0x2f4); patch_32r(code + 0x1dc, (uintptr_t)data + 0x29d); patch_32r(code + 0x1e3, (uintptr_t)data + 0xf9); patch_32r(code + 0x1ea, (uintptr_t)data + 0x25a); patch_x86_64_32rx(code + 0x1f5, (uintptr_t)data + 0x2f4); patch_32r(code + 0x1fc, (uintptr_t)data + 0x2b5); patch_32r(code + 0x203, (uintptr_t)data + 0xf9); patch_32r(code + 0x20a, (uintptr_t)data + 0x25a); patch_x86_64_32rx(code + 0x215, (uintptr_t)data + 0x2f4); } void emit__STORE_ATTR_SLOT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_ATTR_SLOT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f0 movq -0x10(%rbp), %rax // 5: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 9: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_GOTPCREL _JIT_OPERAND-0x4 // 10: 4c 8b 34 0b movq (%rbx,%rcx), %r14 // 14: 48 89 04 0b movq %rax, (%rbx,%rcx) // 18: 4d 85 f6 testq %r14, %r14 // 1b: 74 35 je 0x52 <_JIT_ENTRY+0x52> // 1d: 49 8b 06 movq (%r14), %rax // 20: 48 85 c0 testq %rax, %rax // 23: 7e 06 jle 0x2b <_JIT_ENTRY+0x2b> // 25: 85 c0 testl %eax, %eax // 27: 79 1e jns 0x47 <_JIT_ENTRY+0x47> // 29: eb 27 jmp 0x52 <_JIT_ENTRY+0x52> // 2b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_PC32 .L.str.114-0x4 // 32: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 37: 4c 89 f2 movq %r14, %rdx // 3a: ff 15 00 00 00 00 callq *(%rip) # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 40: 49 8b 06 movq (%r14), %rax // 43: 85 c0 testl %eax, %eax // 45: 78 0b js 0x52 <_JIT_ENTRY+0x52> // 47: ff 15 00 00 00 00 callq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 4d: 49 ff 0e decq (%r14) // 50: 74 17 je 0x69 <_JIT_ENTRY+0x69> // 52: 48 8b 03 movq (%rbx), %rax // 55: 48 85 c0 testq %rax, %rax // 58: 7e 20 jle 0x7a <_JIT_ENTRY+0x7a> // 5a: 48 83 c5 f0 addq $-0x10, %rbp // 5e: 85 c0 testl %eax, %eax // 60: 79 38 jns 0x9a <_JIT_ENTRY+0x9a> // 62: 58 popq %rax // 63: ff 25 00 00 00 00 jmpq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 69: 4c 89 f7 movq %r14, %rdi // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 72: 48 8b 03 movq (%rbx), %rax // 75: 48 85 c0 testq %rax, %rax // 78: 7f e0 jg 0x5a <_JIT_ENTRY+0x5a> // 7a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_PC32 .L.str.1-0x4 // 81: be ec 08 00 00 movl $0x8ec, %esi # imm = 0x8EC // 86: 48 89 da movq %rbx, %rdx // 89: ff 15 00 00 00 00 callq *(%rip) # 0x8f <_JIT_ENTRY+0x8f> // 000000000000008b: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 8f: 48 8b 03 movq (%rbx), %rax // 92: 48 83 c5 f0 addq $-0x10, %rbp // 96: 85 c0 testl %eax, %eax // 98: 78 c8 js 0x62 <_JIT_ENTRY+0x62> // 9a: ff 15 00 00 00 00 callq *(%rip) # 0xa0 <_JIT_ENTRY+0xa0> // 000000000000009c: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // a0: 48 ff 0b decq (%rbx) // a3: 75 bd jne 0x62 <_JIT_ENTRY+0x62> // a5: 48 89 df movq %rbx, %rdi // a8: ff 15 00 00 00 00 callq *(%rip) # 0xae <_JIT_ENTRY+0xae> // 00000000000000aa: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // ae: 58 popq %rax // af: ff 25 00 00 00 00 jmpq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // af: const unsigned char code_body[175] = { 0x50, 0x48, 0x8b, 0x45, 0xf0, 0x48, 0x8b, 0x5d, 0xf8, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x34, 0x0b, 0x48, 0x89, 0x04, 0x0b, 0x4d, 0x85, 0xf6, 0x74, 0x35, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x17, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x20, 0x48, 0x83, 0xc5, 0xf0, 0x85, 0xc0, 0x79, 0x38, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe0, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xec, 0x08, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x83, 0xc5, 0xf0, 0x85, 0xc0, 0x78, 0xc8, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xbd, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // 77: 00 // 78: OPERAND // 80: &_Py_NegativeRefcount+0x0 // 88: &_Py_DECREF_DecRefTotal+0x0 // 90: CONTINUE // 98: &_Py_Dealloc+0x0 const unsigned char data_body[160] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x78, instruction->operand); patch_64(data + 0x80, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x88, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x90, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x98, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0xc, (uintptr_t)data + 0x74); patch_32r(code + 0x2e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0x65, (uintptr_t)data + 0x8c); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x94); patch_32r(code + 0x7d, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x8b, (uintptr_t)data + 0x7c); patch_x86_64_32rx(code + 0x9c, (uintptr_t)data + 0x84); patch_x86_64_32rx(code + 0xaa, (uintptr_t)data + 0x94); } void emit__STORE_DEREF( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_DEREF.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 83 c5 f8 addq $-0x8, %rbp // 9: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 10: 49 8b 4c cd 48 movq 0x48(%r13,%rcx,8), %rcx // 15: 48 8b 59 10 movq 0x10(%rcx), %rbx // 19: 48 89 41 10 movq %rax, 0x10(%rcx) // 1d: 48 85 db testq %rbx, %rbx // 20: 74 0c je 0x2e <_JIT_ENTRY+0x2e> // 22: 48 8b 03 movq (%rbx), %rax // 25: 48 85 c0 testq %rax, %rax // 28: 7e 0b jle 0x35 <_JIT_ENTRY+0x35> // 2a: 85 c0 testl %eax, %eax // 2c: 79 23 jns 0x51 <_JIT_ENTRY+0x51> // 2e: 58 popq %rax // 2f: ff 25 00 00 00 00 jmpq *(%rip) # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 35: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_PC32 .L.str.114-0x4 // 3c: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 41: 48 89 da movq %rbx, %rdx // 44: ff 15 00 00 00 00 callq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4a: 48 8b 03 movq (%rbx), %rax // 4d: 85 c0 testl %eax, %eax // 4f: 78 dd js 0x2e <_JIT_ENTRY+0x2e> // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 57: 48 ff 0b decq (%rbx) // 5a: 75 d2 jne 0x2e <_JIT_ENTRY+0x2e> // 5c: 48 89 df movq %rbx, %rdi // 5f: ff 15 00 00 00 00 callq *(%rip) # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 65: 58 popq %rax // 66: ff 25 00 00 00 00 jmpq *(%rip) # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 66: const unsigned char code_body[102] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x4c, 0xcd, 0x48, 0x48, 0x8b, 0x59, 0x10, 0x48, 0x89, 0x41, 0x10, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // 37: 00 // 38: OPARG // 40: CONTINUE // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 const unsigned char data_body[96] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x38, instruction->oparg); patch_64(data + 0x40, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0xc, (uintptr_t)data + 0x34); patch_x86_64_32rx(code + 0x31, (uintptr_t)data + 0x3c); patch_32r(code + 0x38, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x61, (uintptr_t)data + 0x54); } void emit__STORE_FAST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 45 f8 movq -0x8(%rbp), %rax // 5: 48 83 c5 f8 addq $-0x8, %rbp // 9: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 10: 49 8b 5c cd 48 movq 0x48(%r13,%rcx,8), %rbx // 15: 49 89 44 cd 48 movq %rax, 0x48(%r13,%rcx,8) // 1a: 48 85 db testq %rbx, %rbx // 1d: 74 0c je 0x2b <_JIT_ENTRY+0x2b> // 1f: 48 8b 03 movq (%rbx), %rax // 22: 48 85 c0 testq %rax, %rax // 25: 7e 0b jle 0x32 <_JIT_ENTRY+0x32> // 27: 85 c0 testl %eax, %eax // 29: 79 23 jns 0x4e <_JIT_ENTRY+0x4e> // 2b: 58 popq %rax // 2c: ff 25 00 00 00 00 jmpq *(%rip) # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 32: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x39 <_JIT_ENTRY+0x39> // 0000000000000035: R_X86_64_PC32 .L.str.114-0x4 // 39: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 3e: 48 89 da movq %rbx, %rdx // 41: ff 15 00 00 00 00 callq *(%rip) # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 47: 48 8b 03 movq (%rbx), %rax // 4a: 85 c0 testl %eax, %eax // 4c: 78 dd js 0x2b <_JIT_ENTRY+0x2b> // 4e: ff 15 00 00 00 00 callq *(%rip) # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 54: 48 ff 0b decq (%rbx) // 57: 75 d2 jne 0x2b <_JIT_ENTRY+0x2b> // 59: 48 89 df movq %rbx, %rdi // 5c: ff 15 00 00 00 00 callq *(%rip) # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 62: 58 popq %rax // 63: ff 25 00 00 00 00 jmpq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 63: const unsigned char code_body[99] = { 0x50, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x5c, 0xcd, 0x48, 0x49, 0x89, 0x44, 0xcd, 0x48, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // 37: 00 // 38: OPARG // 40: CONTINUE // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 const unsigned char data_body[96] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x38, instruction->oparg); patch_64(data + 0x40, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0xc, (uintptr_t)data + 0x34); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x3c); patch_32r(code + 0x35, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x43, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x5e, (uintptr_t)data + 0x54); } void emit__STORE_FAST_0( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_0.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 85 c0 testw %ax, %ax // b: 75 5f jne 0x6c <_JIT_ENTRY+0x6c> // d: 48 8b 45 f8 movq -0x8(%rbp), %rax // 11: 48 83 c5 f8 addq $-0x8, %rbp // 15: 49 8b 5d 48 movq 0x48(%r13), %rbx // 19: 49 89 45 48 movq %rax, 0x48(%r13) // 1d: 48 85 db testq %rbx, %rbx // 20: 74 0c je 0x2e <_JIT_ENTRY+0x2e> // 22: 48 8b 03 movq (%rbx), %rax // 25: 48 85 c0 testq %rax, %rax // 28: 7e 0b jle 0x35 <_JIT_ENTRY+0x35> // 2a: 85 c0 testl %eax, %eax // 2c: 79 23 jns 0x51 <_JIT_ENTRY+0x51> // 2e: 58 popq %rax // 2f: ff 25 00 00 00 00 jmpq *(%rip) # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 35: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_PC32 .L.str.114-0x4 // 3c: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 41: 48 89 da movq %rbx, %rdx // 44: ff 15 00 00 00 00 callq *(%rip) # 0x4a <_JIT_ENTRY+0x4a> // 0000000000000046: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4a: 48 8b 03 movq (%rbx), %rax // 4d: 85 c0 testl %eax, %eax // 4f: 78 dd js 0x2e <_JIT_ENTRY+0x2e> // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 57: 48 ff 0b decq (%rbx) // 5a: 75 d2 jne 0x2e <_JIT_ENTRY+0x2e> // 5c: 48 89 df movq %rbx, %rdi // 5f: ff 15 00 00 00 00 callq *(%rip) # 0x65 <_JIT_ENTRY+0x65> // 0000000000000061: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 65: 58 popq %rax // 66: ff 25 00 00 00 00 jmpq *(%rip) # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_PC32 .L.str.3-0x4 // 73: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_PC32 .L.str.1-0x4 // 7a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 81: ba b7 00 00 00 movl $0xb7, %edx // 86: ff 15 00 00 00 00 callq *(%rip) # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_GOTPCRELX __assert_fail-0x4 // 8c: const unsigned char code_body[140] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x75, 0x5f, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x5d, 0x48, 0x49, 0x89, 0x45, 0x48, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xb7, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x31, (uintptr_t)data + 0xe4); patch_32r(code + 0x38, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x46, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x61, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x68, (uintptr_t)data + 0xe4); patch_32r(code + 0x6f, (uintptr_t)data + 0x8a); patch_32r(code + 0x76, (uintptr_t)data + -0x4); patch_32r(code + 0x7d, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x88, (uintptr_t)data + 0x104); } void emit__STORE_FAST_1( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_1.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 01 cmpw $0x1, %ax // c: 75 5f jne 0x6d <_JIT_ENTRY+0x6d> // e: 48 8b 45 f8 movq -0x8(%rbp), %rax // 12: 48 83 c5 f8 addq $-0x8, %rbp // 16: 49 8b 5d 50 movq 0x50(%r13), %rbx // 1a: 49 89 45 50 movq %rax, 0x50(%r13) // 1e: 48 85 db testq %rbx, %rbx // 21: 74 0c je 0x2f <_JIT_ENTRY+0x2f> // 23: 48 8b 03 movq (%rbx), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 0b jle 0x36 <_JIT_ENTRY+0x36> // 2b: 85 c0 testl %eax, %eax // 2d: 79 23 jns 0x52 <_JIT_ENTRY+0x52> // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.114-0x4 // 3d: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 42: 48 89 da movq %rbx, %rdx // 45: ff 15 00 00 00 00 callq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4b: 48 8b 03 movq (%rbx), %rax // 4e: 85 c0 testl %eax, %eax // 50: 78 dd js 0x2f <_JIT_ENTRY+0x2f> // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 58: 48 ff 0b decq (%rbx) // 5b: 75 d2 jne 0x2f <_JIT_ENTRY+0x2f> // 5d: 48 89 df movq %rbx, %rdi // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 66: 58 popq %rax // 67: ff 25 00 00 00 00 jmpq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L.str.3-0x4 // 74: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 82: ba c1 00 00 00 movl $0xc1, %edx // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX __assert_fail-0x4 // 8d: const unsigned char code_body[141] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x75, 0x5f, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x5d, 0x50, 0x49, 0x89, 0x45, 0x50, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xc1, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xe4); patch_32r(code + 0x39, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0xe4); patch_32r(code + 0x70, (uintptr_t)data + 0x8a); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_32r(code + 0x7e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x104); } void emit__STORE_FAST_2( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_2.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 02 cmpw $0x2, %ax // c: 75 5f jne 0x6d <_JIT_ENTRY+0x6d> // e: 48 8b 45 f8 movq -0x8(%rbp), %rax // 12: 48 83 c5 f8 addq $-0x8, %rbp // 16: 49 8b 5d 58 movq 0x58(%r13), %rbx // 1a: 49 89 45 58 movq %rax, 0x58(%r13) // 1e: 48 85 db testq %rbx, %rbx // 21: 74 0c je 0x2f <_JIT_ENTRY+0x2f> // 23: 48 8b 03 movq (%rbx), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 0b jle 0x36 <_JIT_ENTRY+0x36> // 2b: 85 c0 testl %eax, %eax // 2d: 79 23 jns 0x52 <_JIT_ENTRY+0x52> // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.114-0x4 // 3d: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 42: 48 89 da movq %rbx, %rdx // 45: ff 15 00 00 00 00 callq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4b: 48 8b 03 movq (%rbx), %rax // 4e: 85 c0 testl %eax, %eax // 50: 78 dd js 0x2f <_JIT_ENTRY+0x2f> // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 58: 48 ff 0b decq (%rbx) // 5b: 75 d2 jne 0x2f <_JIT_ENTRY+0x2f> // 5d: 48 89 df movq %rbx, %rdi // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 66: 58 popq %rax // 67: ff 25 00 00 00 00 jmpq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L.str.3-0x4 // 74: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 82: ba cb 00 00 00 movl $0xcb, %edx // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX __assert_fail-0x4 // 8d: const unsigned char code_body[141] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x02, 0x75, 0x5f, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x5d, 0x58, 0x49, 0x89, 0x45, 0x58, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcb, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xe4); patch_32r(code + 0x39, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0xe4); patch_32r(code + 0x70, (uintptr_t)data + 0x8a); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_32r(code + 0x7e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x104); } void emit__STORE_FAST_3( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_3.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 03 cmpw $0x3, %ax // c: 75 5f jne 0x6d <_JIT_ENTRY+0x6d> // e: 48 8b 45 f8 movq -0x8(%rbp), %rax // 12: 48 83 c5 f8 addq $-0x8, %rbp // 16: 49 8b 5d 60 movq 0x60(%r13), %rbx // 1a: 49 89 45 60 movq %rax, 0x60(%r13) // 1e: 48 85 db testq %rbx, %rbx // 21: 74 0c je 0x2f <_JIT_ENTRY+0x2f> // 23: 48 8b 03 movq (%rbx), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 0b jle 0x36 <_JIT_ENTRY+0x36> // 2b: 85 c0 testl %eax, %eax // 2d: 79 23 jns 0x52 <_JIT_ENTRY+0x52> // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.114-0x4 // 3d: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 42: 48 89 da movq %rbx, %rdx // 45: ff 15 00 00 00 00 callq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4b: 48 8b 03 movq (%rbx), %rax // 4e: 85 c0 testl %eax, %eax // 50: 78 dd js 0x2f <_JIT_ENTRY+0x2f> // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 58: 48 ff 0b decq (%rbx) // 5b: 75 d2 jne 0x2f <_JIT_ENTRY+0x2f> // 5d: 48 89 df movq %rbx, %rdi // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 66: 58 popq %rax // 67: ff 25 00 00 00 00 jmpq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L.str.3-0x4 // 74: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 82: ba d5 00 00 00 movl $0xd5, %edx // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX __assert_fail-0x4 // 8d: const unsigned char code_body[141] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x03, 0x75, 0x5f, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x5d, 0x60, 0x49, 0x89, 0x45, 0x60, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xd5, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xe4); patch_32r(code + 0x39, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0xe4); patch_32r(code + 0x70, (uintptr_t)data + 0x8a); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_32r(code + 0x7e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x104); } void emit__STORE_FAST_4( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_4.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 04 cmpw $0x4, %ax // c: 75 5f jne 0x6d <_JIT_ENTRY+0x6d> // e: 48 8b 45 f8 movq -0x8(%rbp), %rax // 12: 48 83 c5 f8 addq $-0x8, %rbp // 16: 49 8b 5d 68 movq 0x68(%r13), %rbx // 1a: 49 89 45 68 movq %rax, 0x68(%r13) // 1e: 48 85 db testq %rbx, %rbx // 21: 74 0c je 0x2f <_JIT_ENTRY+0x2f> // 23: 48 8b 03 movq (%rbx), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 0b jle 0x36 <_JIT_ENTRY+0x36> // 2b: 85 c0 testl %eax, %eax // 2d: 79 23 jns 0x52 <_JIT_ENTRY+0x52> // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.114-0x4 // 3d: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 42: 48 89 da movq %rbx, %rdx // 45: ff 15 00 00 00 00 callq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4b: 48 8b 03 movq (%rbx), %rax // 4e: 85 c0 testl %eax, %eax // 50: 78 dd js 0x2f <_JIT_ENTRY+0x2f> // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 58: 48 ff 0b decq (%rbx) // 5b: 75 d2 jne 0x2f <_JIT_ENTRY+0x2f> // 5d: 48 89 df movq %rbx, %rdi // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 66: 58 popq %rax // 67: ff 25 00 00 00 00 jmpq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L.str.3-0x4 // 74: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 82: ba df 00 00 00 movl $0xdf, %edx // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX __assert_fail-0x4 // 8d: const unsigned char code_body[141] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x04, 0x75, 0x5f, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x5d, 0x68, 0x49, 0x89, 0x45, 0x68, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xdf, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xe4); patch_32r(code + 0x39, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0xe4); patch_32r(code + 0x70, (uintptr_t)data + 0x8a); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_32r(code + 0x7e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x104); } void emit__STORE_FAST_5( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_5.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 05 cmpw $0x5, %ax // c: 75 5f jne 0x6d <_JIT_ENTRY+0x6d> // e: 48 8b 45 f8 movq -0x8(%rbp), %rax // 12: 48 83 c5 f8 addq $-0x8, %rbp // 16: 49 8b 5d 70 movq 0x70(%r13), %rbx // 1a: 49 89 45 70 movq %rax, 0x70(%r13) // 1e: 48 85 db testq %rbx, %rbx // 21: 74 0c je 0x2f <_JIT_ENTRY+0x2f> // 23: 48 8b 03 movq (%rbx), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 0b jle 0x36 <_JIT_ENTRY+0x36> // 2b: 85 c0 testl %eax, %eax // 2d: 79 23 jns 0x52 <_JIT_ENTRY+0x52> // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.114-0x4 // 3d: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 42: 48 89 da movq %rbx, %rdx // 45: ff 15 00 00 00 00 callq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4b: 48 8b 03 movq (%rbx), %rax // 4e: 85 c0 testl %eax, %eax // 50: 78 dd js 0x2f <_JIT_ENTRY+0x2f> // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 58: 48 ff 0b decq (%rbx) // 5b: 75 d2 jne 0x2f <_JIT_ENTRY+0x2f> // 5d: 48 89 df movq %rbx, %rdi // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 66: 58 popq %rax // 67: ff 25 00 00 00 00 jmpq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L.str.3-0x4 // 74: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 82: ba e9 00 00 00 movl $0xe9, %edx // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX __assert_fail-0x4 // 8d: const unsigned char code_body[141] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x05, 0x75, 0x5f, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x5d, 0x70, 0x49, 0x89, 0x45, 0x70, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xe9, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xe4); patch_32r(code + 0x39, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0xe4); patch_32r(code + 0x70, (uintptr_t)data + 0x8a); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_32r(code + 0x7e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x104); } void emit__STORE_FAST_6( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_6.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 06 cmpw $0x6, %ax // c: 75 5f jne 0x6d <_JIT_ENTRY+0x6d> // e: 48 8b 45 f8 movq -0x8(%rbp), %rax // 12: 48 83 c5 f8 addq $-0x8, %rbp // 16: 49 8b 5d 78 movq 0x78(%r13), %rbx // 1a: 49 89 45 78 movq %rax, 0x78(%r13) // 1e: 48 85 db testq %rbx, %rbx // 21: 74 0c je 0x2f <_JIT_ENTRY+0x2f> // 23: 48 8b 03 movq (%rbx), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 0b jle 0x36 <_JIT_ENTRY+0x36> // 2b: 85 c0 testl %eax, %eax // 2d: 79 23 jns 0x52 <_JIT_ENTRY+0x52> // 2f: 58 popq %rax // 30: ff 25 00 00 00 00 jmpq *(%rip) # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.114-0x4 // 3d: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 42: 48 89 da movq %rbx, %rdx // 45: ff 15 00 00 00 00 callq *(%rip) # 0x4b <_JIT_ENTRY+0x4b> // 0000000000000047: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4b: 48 8b 03 movq (%rbx), %rax // 4e: 85 c0 testl %eax, %eax // 50: 78 dd js 0x2f <_JIT_ENTRY+0x2f> // 52: ff 15 00 00 00 00 callq *(%rip) # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 58: 48 ff 0b decq (%rbx) // 5b: 75 d2 jne 0x2f <_JIT_ENTRY+0x2f> // 5d: 48 89 df movq %rbx, %rdi // 60: ff 15 00 00 00 00 callq *(%rip) # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 66: 58 popq %rax // 67: ff 25 00 00 00 00 jmpq *(%rip) # 0x6d <_JIT_ENTRY+0x6d> // 0000000000000069: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x74 <_JIT_ENTRY+0x74> // 0000000000000070: R_X86_64_PC32 .L.str.3-0x4 // 74: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_PC32 .L.str.1-0x4 // 7b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x82 <_JIT_ENTRY+0x82> // 000000000000007e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 82: ba f3 00 00 00 movl $0xf3, %edx // 87: ff 15 00 00 00 00 callq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX __assert_fail-0x4 // 8d: const unsigned char code_body[141] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x06, 0x75, 0x5f, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x5d, 0x78, 0x49, 0x89, 0x45, 0x78, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xf3, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0xe4); patch_32r(code + 0x39, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x69, (uintptr_t)data + 0xe4); patch_32r(code + 0x70, (uintptr_t)data + 0x8a); patch_32r(code + 0x77, (uintptr_t)data + -0x4); patch_32r(code + 0x7e, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x104); } void emit__STORE_FAST_7( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_FAST_7.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 07 cmpw $0x7, %ax // c: 75 65 jne 0x73 <_JIT_ENTRY+0x73> // e: 48 8b 45 f8 movq -0x8(%rbp), %rax // 12: 48 83 c5 f8 addq $-0x8, %rbp // 16: 49 8b 9d 80 00 00 00 movq 0x80(%r13), %rbx // 1d: 49 89 85 80 00 00 00 movq %rax, 0x80(%r13) // 24: 48 85 db testq %rbx, %rbx // 27: 74 0c je 0x35 <_JIT_ENTRY+0x35> // 29: 48 8b 03 movq (%rbx), %rax // 2c: 48 85 c0 testq %rax, %rax // 2f: 7e 0b jle 0x3c <_JIT_ENTRY+0x3c> // 31: 85 c0 testl %eax, %eax // 33: 79 23 jns 0x58 <_JIT_ENTRY+0x58> // 35: 58 popq %rax // 36: ff 25 00 00 00 00 jmpq *(%rip) # 0x3c <_JIT_ENTRY+0x3c> // 0000000000000038: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 3c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_PC32 .L.str.114-0x4 // 43: be 10 04 00 00 movl $0x410, %esi # imm = 0x410 // 48: 48 89 da movq %rbx, %rdx // 4b: ff 15 00 00 00 00 callq *(%rip) # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 51: 48 8b 03 movq (%rbx), %rax // 54: 85 c0 testl %eax, %eax // 56: 78 dd js 0x35 <_JIT_ENTRY+0x35> // 58: ff 15 00 00 00 00 callq *(%rip) # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5e: 48 ff 0b decq (%rbx) // 61: 75 d2 jne 0x35 <_JIT_ENTRY+0x35> // 63: 48 89 df movq %rbx, %rdi // 66: ff 15 00 00 00 00 callq *(%rip) # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 6c: 58 popq %rax // 6d: ff 25 00 00 00 00 jmpq *(%rip) # 0x73 <_JIT_ENTRY+0x73> // 000000000000006f: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 73: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_PC32 .L.str.3-0x4 // 7a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_PC32 .L.str.1-0x4 // 81: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x88 <_JIT_ENTRY+0x88> // 0000000000000084: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 88: ba fd 00 00 00 movl $0xfd, %edx // 8d: ff 15 00 00 00 00 callq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 93: const unsigned char code_body[147] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x07, 0x75, 0x65, 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x83, 0xc5, 0xf8, 0x49, 0x8b, 0x9d, 0x80, 0x00, 0x00, 0x00, 0x49, 0x89, 0x85, 0x80, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x74, 0x0c, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x79, 0x23, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x10, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xdd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xd2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xfd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == CURRENT_OPARG()\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00' // de: 00 00 // e0: OPARG // e8: CONTINUE // f0: &_Py_NegativeRefcount+0x0 // f8: &_Py_DECREF_DecRefTotal+0x0 // 100: &_Py_Dealloc+0x0 // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x43, 0x55, 0x52, 0x52, 0x45, 0x4e, 0x54, 0x5f, 0x4f, 0x50, 0x41, 0x52, 0x47, 0x28, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xe0, instruction->oparg); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xf8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x100, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x38, (uintptr_t)data + 0xe4); patch_32r(code + 0x3f, (uintptr_t)data + 0xa3); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x68, (uintptr_t)data + 0xfc); patch_x86_64_32rx(code + 0x6f, (uintptr_t)data + 0xe4); patch_32r(code + 0x76, (uintptr_t)data + 0x8a); patch_32r(code + 0x7d, (uintptr_t)data + -0x4); patch_32r(code + 0x84, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0x104); } void emit__STORE_GLOBAL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_GLOBAL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 b3 00 00 00 jne 0xc9 <_JIT_ENTRY+0xc9> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 be 00 00 00 je 0xe9 <_JIT_ENTRY+0xe9> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 d1 00 00 00 je 0x109 <_JIT_ENTRY+0x109> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 e4 00 00 00 je 0x129 <_JIT_ENTRY+0x129> // 45: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4c: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 50: 0f 8e f3 00 00 00 jle 0x149 <_JIT_ENTRY+0x149> // 56: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5a: 48 8b 74 c8 18 movq 0x18(%rax,%rcx,8), %rsi // 5f: 49 8b 7d 18 movq 0x18(%r13), %rdi // 63: 48 89 da movq %rbx, %rdx // 66: ff 15 00 00 00 00 callq *(%rip) # 0x6c <_JIT_ENTRY+0x6c> // 0000000000000068: R_X86_64_GOTPCRELX PyDict_SetItem-0x4 // 6c: 41 89 c6 movl %eax, %r14d // 6f: 48 8b 03 movq (%rbx), %rax // 72: 48 85 c0 testq %rax, %rax // 75: 7e 06 jle 0x7d <_JIT_ENTRY+0x7d> // 77: 85 c0 testl %eax, %eax // 79: 79 1e jns 0x99 <_JIT_ENTRY+0x99> // 7b: eb 27 jmp 0xa4 <_JIT_ENTRY+0xa4> // 7d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x84 <_JIT_ENTRY+0x84> // 0000000000000080: R_X86_64_PC32 .L.str.1-0x4 // 84: be 51 05 00 00 movl $0x551, %esi # imm = 0x551 // 89: 48 89 da movq %rbx, %rdx // 8c: ff 15 00 00 00 00 callq *(%rip) # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 92: 48 8b 03 movq (%rbx), %rax // 95: 85 c0 testl %eax, %eax // 97: 78 0b js 0xa4 <_JIT_ENTRY+0xa4> // 99: ff 15 00 00 00 00 callq *(%rip) # 0x9f <_JIT_ENTRY+0x9f> // 000000000000009b: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 9f: 48 ff 0b decq (%rbx) // a2: 74 0c je 0xb0 <_JIT_ENTRY+0xb0> // a4: 45 85 f6 testl %r14d, %r14d // a7: 74 15 je 0xbe <_JIT_ENTRY+0xbe> // a9: 58 popq %rax // aa: ff 25 00 00 00 00 jmpq *(%rip) # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // b0: 48 89 df movq %rbx, %rdi // b3: ff 15 00 00 00 00 callq *(%rip) # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // b9: 45 85 f6 testl %r14d, %r14d // bc: 75 eb jne 0xa9 <_JIT_ENTRY+0xa9> // be: 48 83 c5 f8 addq $-0x8, %rbp // c2: 58 popq %rax // c3: ff 25 00 00 00 00 jmpq *(%rip) # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // c9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L.str.108-0x4 // d0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd7 <_JIT_ENTRY+0xd7> // 00000000000000d3: R_X86_64_PC32 .L.str.109-0x4 // d7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xde <_JIT_ENTRY+0xde> // 00000000000000da: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // de: ba 4d 00 00 00 movl $0x4d, %edx // e3: ff 15 00 00 00 00 callq *(%rip) # 0xe9 <_JIT_ENTRY+0xe9> // 00000000000000e5: R_X86_64_GOTPCRELX __assert_fail-0x4 // e9: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_PC32 .L.str.110-0x4 // f0: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xf7 <_JIT_ENTRY+0xf7> // 00000000000000f3: R_X86_64_PC32 .L.str.111-0x4 // f7: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xfe <_JIT_ENTRY+0xfe> // 00000000000000fa: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // fe: ba 99 00 00 00 movl $0x99, %edx // 103: ff 15 00 00 00 00 callq *(%rip) # 0x109 <_JIT_ENTRY+0x109> // 0000000000000105: R_X86_64_GOTPCRELX __assert_fail-0x4 // 109: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_PC32 .L.str.115-0x4 // 110: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x117 <_JIT_ENTRY+0x117> // 0000000000000113: R_X86_64_PC32 .L.str.114-0x4 // 117: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x11e <_JIT_ENTRY+0x11e> // 000000000000011a: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 11e: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 123: ff 15 00 00 00 00 callq *(%rip) # 0x129 <_JIT_ENTRY+0x129> // 0000000000000125: R_X86_64_GOTPCRELX __assert_fail-0x4 // 129: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x130 <_JIT_ENTRY+0x130> // 000000000000012c: R_X86_64_PC32 .L.str.116-0x4 // 130: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x137 <_JIT_ENTRY+0x137> // 0000000000000133: R_X86_64_PC32 .L.str.114-0x4 // 137: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x13e <_JIT_ENTRY+0x13e> // 000000000000013a: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 13e: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 143: ff 15 00 00 00 00 callq *(%rip) # 0x149 <_JIT_ENTRY+0x149> // 0000000000000145: R_X86_64_GOTPCRELX __assert_fail-0x4 // 149: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x150 <_JIT_ENTRY+0x150> // 000000000000014c: R_X86_64_PC32 .L.str.113-0x4 // 150: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x157 <_JIT_ENTRY+0x157> // 0000000000000153: R_X86_64_PC32 .L.str.111-0x4 // 157: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x15e <_JIT_ENTRY+0x15e> // 000000000000015a: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 15e: ba 9b 00 00 00 movl $0x9b, %edx // 163: ff 15 00 00 00 00 callq *(%rip) # 0x169 <_JIT_ENTRY+0x169> // 0000000000000165: R_X86_64_GOTPCRELX __assert_fail-0x4 // 169: const unsigned char code_body[361] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xb3, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xbe, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xd1, 0x00, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0xe4, 0x00, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0xf3, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x74, 0xc8, 0x18, 0x49, 0x8b, 0x7d, 0x18, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x51, 0x05, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0c, 0x45, 0x85, 0xf6, 0x74, 0x15, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x75, 0xeb, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 1f7: 00 // 1f8: &PyCode_Type+0x0 // 200: &PyLong_Type+0x0 // 208: &PyBool_Type+0x0 // 210: OPARG // 218: &PyDict_SetItem+0x0 // 220: &_Py_NegativeRefcount+0x0 // 228: &_Py_DECREF_DecRefTotal+0x0 // 230: ERROR_TARGET // 238: &_Py_Dealloc+0x0 // 240: CONTINUE // 248: &__assert_fail+0x0 const unsigned char data_body[592] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1f8, (uintptr_t)&PyCode_Type); patch_64(data + 0x200, (uintptr_t)&PyLong_Type); patch_64(data + 0x208, (uintptr_t)&PyBool_Type); patch_64(data + 0x210, instruction->oparg); patch_64(data + 0x218, (uintptr_t)&PyDict_SetItem); patch_64(data + 0x220, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x228, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x230, instruction_starts[instruction->error_target]); patch_64(data + 0x238, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x240, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x248, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x1f4); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x1fc); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x204); patch_32r(code + 0x48, (uintptr_t)data + 0x20c); patch_x86_64_32rx(code + 0x68, (uintptr_t)data + 0x214); patch_32r(code + 0x80, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x8e, (uintptr_t)data + 0x21c); patch_x86_64_32rx(code + 0x9b, (uintptr_t)data + 0x224); patch_x86_64_32rx(code + 0xac, (uintptr_t)data + 0x22c); patch_x86_64_32rx(code + 0xb5, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0xc5, (uintptr_t)data + 0x23c); patch_32r(code + 0xcc, (uintptr_t)data + 0x3c); patch_32r(code + 0xd3, (uintptr_t)data + 0x5a); patch_32r(code + 0xda, (uintptr_t)data + 0xa0); patch_x86_64_32rx(code + 0xe5, (uintptr_t)data + 0x244); patch_32r(code + 0xec, (uintptr_t)data + 0xd6); patch_32r(code + 0xf3, (uintptr_t)data + 0xe7); patch_32r(code + 0xfa, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x105, (uintptr_t)data + 0x244); patch_32r(code + 0x10c, (uintptr_t)data + 0x19c); patch_32r(code + 0x113, (uintptr_t)data + 0x165); patch_32r(code + 0x11a, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x125, (uintptr_t)data + 0x244); patch_32r(code + 0x12c, (uintptr_t)data + 0x1d7); patch_32r(code + 0x133, (uintptr_t)data + 0x165); patch_32r(code + 0x13a, (uintptr_t)data + 0x1b8); patch_x86_64_32rx(code + 0x145, (uintptr_t)data + 0x244); patch_32r(code + 0x14c, (uintptr_t)data + 0x14d); patch_32r(code + 0x153, (uintptr_t)data + 0xe7); patch_32r(code + 0x15a, (uintptr_t)data + 0x123); patch_x86_64_32rx(code + 0x165, (uintptr_t)data + 0x244); } void emit__STORE_NAME( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_NAME.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 45 00 movq (%r13), %rax // 5: 48 8b 48 08 movq 0x8(%rax), %rcx // 9: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 10: 0f 85 47 01 00 00 jne 0x15d <_JIT_ENTRY+0x15d> // 16: 48 8b 40 20 movq 0x20(%rax), %rax // 1a: 48 8b 48 08 movq 0x8(%rax), %rcx // 1e: f6 81 ab 00 00 00 04 testb $0x4, 0xab(%rcx) // 25: 0f 84 52 01 00 00 je 0x17d <_JIT_ENTRY+0x17d> // 2b: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: 0f 84 65 01 00 00 je 0x19d <_JIT_ENTRY+0x19d> // 38: 48 3b 0d 00 00 00 00 cmpq (%rip), %rcx # 0x3f <_JIT_ENTRY+0x3f> // 000000000000003b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // 3f: 0f 84 78 01 00 00 je 0x1bd <_JIT_ENTRY+0x1bd> // 45: 0f b7 0d 00 00 00 00 movzwl (%rip), %ecx # 0x4c <_JIT_ENTRY+0x4c> // 0000000000000048: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 4c: 48 39 48 10 cmpq %rcx, 0x10(%rax) // 50: 0f 8e 87 01 00 00 jle 0x1dd <_JIT_ENTRY+0x1dd> // 56: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5a: 48 8b 4c c8 18 movq 0x18(%rax,%rcx,8), %rcx // 5f: 49 8b 7d 28 movq 0x28(%r13), %rdi // 63: 48 85 ff testq %rdi, %rdi // 66: 74 5f je 0xc7 <_JIT_ENTRY+0xc7> // 68: 48 8b 47 08 movq 0x8(%rdi), %rax // 6c: 48 89 ce movq %rcx, %rsi // 6f: 48 89 da movq %rbx, %rdx // 72: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 79: 74 7b je 0xf6 <_JIT_ENTRY+0xf6> // 7b: ff 15 00 00 00 00 callq *(%rip) # 0x81 <_JIT_ENTRY+0x81> // 000000000000007d: R_X86_64_GOTPCRELX PyObject_SetItem-0x4 // 81: 41 89 c6 movl %eax, %r14d // 84: 48 8b 03 movq (%rbx), %rax // 87: 48 85 c0 testq %rax, %rax // 8a: 7f 18 jg 0xa4 <_JIT_ENTRY+0xa4> // 8c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_PC32 .L.str.1-0x4 // 93: be b3 04 00 00 movl $0x4b3, %esi # imm = 0x4B3 // 98: 48 89 da movq %rbx, %rdx // 9b: ff 15 00 00 00 00 callq *(%rip) # 0xa1 <_JIT_ENTRY+0xa1> // 000000000000009d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // a1: 48 8b 03 movq (%rbx), %rax // a4: 85 c0 testl %eax, %eax // a6: 78 0f js 0xb7 <_JIT_ENTRY+0xb7> // a8: ff 15 00 00 00 00 callq *(%rip) # 0xae <_JIT_ENTRY+0xae> // 00000000000000aa: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ae: 48 ff 0b decq (%rbx) // b1: 0f 84 89 00 00 00 je 0x140 <_JIT_ENTRY+0x140> // b7: 45 85 f6 testl %r14d, %r14d // ba: 0f 84 92 00 00 00 je 0x152 <_JIT_ENTRY+0x152> // c0: 58 popq %rax // c1: ff 25 00 00 00 00 jmpq *(%rip) # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // c7: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0xce <_JIT_ENTRY+0xce> // 00000000000000ca: R_X86_64_REX_GOTPCRELX PyExc_SystemError-0x4 // ce: 48 8b 30 movq (%rax), %rsi // d1: 48 8d 15 00 00 00 00 leaq (%rip), %rdx # 0xd8 <_JIT_ENTRY+0xd8> // 00000000000000d4: R_X86_64_PC32 .L.str.22-0x4 // d8: 4c 89 e7 movq %r12, %rdi // db: 31 c0 xorl %eax, %eax // dd: ff 15 00 00 00 00 callq *(%rip) # 0xe3 <_JIT_ENTRY+0xe3> // 00000000000000df: R_X86_64_GOTPCRELX _PyErr_Format-0x4 // e3: 48 8b 03 movq (%rbx), %rax // e6: 48 85 c0 testq %rax, %rax // e9: 7e 1e jle 0x109 <_JIT_ENTRY+0x109> // eb: 85 c0 testl %eax, %eax // ed: 79 36 jns 0x125 <_JIT_ENTRY+0x125> // ef: 58 popq %rax // f0: ff 25 00 00 00 00 jmpq *(%rip) # 0xf6 <_JIT_ENTRY+0xf6> // 00000000000000f2: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // f6: ff 15 00 00 00 00 callq *(%rip) # 0xfc <_JIT_ENTRY+0xfc> // 00000000000000f8: R_X86_64_GOTPCRELX PyDict_SetItem-0x4 // fc: 41 89 c6 movl %eax, %r14d // ff: 48 8b 03 movq (%rbx), %rax // 102: 48 85 c0 testq %rax, %rax // 105: 7f 9d jg 0xa4 <_JIT_ENTRY+0xa4> // 107: eb 83 jmp 0x8c <_JIT_ENTRY+0x8c> // 109: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x110 <_JIT_ENTRY+0x110> // 000000000000010c: R_X86_64_PC32 .L.str.1-0x4 // 110: be ac 04 00 00 movl $0x4ac, %esi # imm = 0x4AC // 115: 48 89 da movq %rbx, %rdx // 118: ff 15 00 00 00 00 callq *(%rip) # 0x11e <_JIT_ENTRY+0x11e> // 000000000000011a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 11e: 48 8b 03 movq (%rbx), %rax // 121: 85 c0 testl %eax, %eax // 123: 78 ca js 0xef <_JIT_ENTRY+0xef> // 125: ff 15 00 00 00 00 callq *(%rip) # 0x12b <_JIT_ENTRY+0x12b> // 0000000000000127: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 12b: 48 ff 0b decq (%rbx) // 12e: 75 bf jne 0xef <_JIT_ENTRY+0xef> // 130: 48 89 df movq %rbx, %rdi // 133: ff 15 00 00 00 00 callq *(%rip) # 0x139 <_JIT_ENTRY+0x139> // 0000000000000135: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 139: 58 popq %rax // 13a: ff 25 00 00 00 00 jmpq *(%rip) # 0x140 <_JIT_ENTRY+0x140> // 000000000000013c: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 140: 48 89 df movq %rbx, %rdi // 143: ff 15 00 00 00 00 callq *(%rip) # 0x149 <_JIT_ENTRY+0x149> // 0000000000000145: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 149: 45 85 f6 testl %r14d, %r14d // 14c: 0f 85 6e ff ff ff jne 0xc0 <_JIT_ENTRY+0xc0> // 152: 48 83 c5 f8 addq $-0x8, %rbp // 156: 58 popq %rax // 157: ff 25 00 00 00 00 jmpq *(%rip) # 0x15d <_JIT_ENTRY+0x15d> // 0000000000000159: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 15d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x164 <_JIT_ENTRY+0x164> // 0000000000000160: R_X86_64_PC32 .L.str.108-0x4 // 164: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x16b <_JIT_ENTRY+0x16b> // 0000000000000167: R_X86_64_PC32 .L.str.109-0x4 // 16b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x172 <_JIT_ENTRY+0x172> // 000000000000016e: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 172: ba 4d 00 00 00 movl $0x4d, %edx // 177: ff 15 00 00 00 00 callq *(%rip) # 0x17d <_JIT_ENTRY+0x17d> // 0000000000000179: R_X86_64_GOTPCRELX __assert_fail-0x4 // 17d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x184 <_JIT_ENTRY+0x184> // 0000000000000180: R_X86_64_PC32 .L.str.110-0x4 // 184: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x18b <_JIT_ENTRY+0x18b> // 0000000000000187: R_X86_64_PC32 .L.str.111-0x4 // 18b: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x192 <_JIT_ENTRY+0x192> // 000000000000018e: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 192: ba 99 00 00 00 movl $0x99, %edx // 197: ff 15 00 00 00 00 callq *(%rip) # 0x19d <_JIT_ENTRY+0x19d> // 0000000000000199: R_X86_64_GOTPCRELX __assert_fail-0x4 // 19d: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a4 <_JIT_ENTRY+0x1a4> // 00000000000001a0: R_X86_64_PC32 .L.str.115-0x4 // 1a4: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1ab <_JIT_ENTRY+0x1ab> // 00000000000001a7: R_X86_64_PC32 .L.str.114-0x4 // 1ab: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1b2 <_JIT_ENTRY+0x1b2> // 00000000000001ae: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1b2: ba 59 01 00 00 movl $0x159, %edx # imm = 0x159 // 1b7: ff 15 00 00 00 00 callq *(%rip) # 0x1bd <_JIT_ENTRY+0x1bd> // 00000000000001b9: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1bd: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1c4 <_JIT_ENTRY+0x1c4> // 00000000000001c0: R_X86_64_PC32 .L.str.116-0x4 // 1c4: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1cb <_JIT_ENTRY+0x1cb> // 00000000000001c7: R_X86_64_PC32 .L.str.114-0x4 // 1cb: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1d2 <_JIT_ENTRY+0x1d2> // 00000000000001ce: R_X86_64_PC32 .L__PRETTY_FUNCTION__.Py_SIZE-0x4 // 1d2: ba 5a 01 00 00 movl $0x15a, %edx # imm = 0x15A // 1d7: ff 15 00 00 00 00 callq *(%rip) # 0x1dd <_JIT_ENTRY+0x1dd> // 00000000000001d9: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1dd: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1e4 <_JIT_ENTRY+0x1e4> // 00000000000001e0: R_X86_64_PC32 .L.str.113-0x4 // 1e4: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1eb <_JIT_ENTRY+0x1eb> // 00000000000001e7: R_X86_64_PC32 .L.str.111-0x4 // 1eb: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1f2 <_JIT_ENTRY+0x1f2> // 00000000000001ee: R_X86_64_PC32 .L__PRETTY_FUNCTION__.GETITEM-0x4 // 1f2: ba 9b 00 00 00 movl $0x9b, %edx // 1f7: ff 15 00 00 00 00 callq *(%rip) # 0x1fd <_JIT_ENTRY+0x1fd> // 00000000000001f9: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1fd: const unsigned char code_body[509] = { 0x50, 0x49, 0x8b, 0x45, 0x00, 0x48, 0x8b, 0x48, 0x08, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x47, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x40, 0x20, 0x48, 0x8b, 0x48, 0x08, 0xf6, 0x81, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0x52, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x65, 0x01, 0x00, 0x00, 0x48, 0x3b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x84, 0x78, 0x01, 0x00, 0x00, 0x0f, 0xb7, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0x48, 0x10, 0x0f, 0x8e, 0x87, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x4c, 0xc8, 0x18, 0x49, 0x8b, 0x7d, 0x28, 0x48, 0x85, 0xff, 0x74, 0x5f, 0x48, 0x8b, 0x47, 0x08, 0x48, 0x89, 0xce, 0x48, 0x89, 0xda, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x7b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb3, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0f, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x0f, 0x84, 0x89, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x0f, 0x84, 0x92, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x30, 0x48, 0x8d, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xe7, 0x31, 0xc0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x1e, 0x85, 0xc0, 0x79, 0x36, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x9d, 0xeb, 0x83, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xac, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0xca, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xbf, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x0f, 0x85, 0x6e, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc5, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x99, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x59, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5a, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x9b, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00no locals found when storing %R\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00PyTuple_Check(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Python/ceval_macros.h\x00PyObject *GETITEM(PyObject *, Py_ssize_t)\x00i < PyTuple_GET_SIZE(v)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/object.h\x00ob->ob_type != &PyLong_Type\x00Py_ssize_t Py_SIZE(PyObject *)\x00ob->ob_type != &PyBool_Type\x00' // 217: 00 // 218: &PyCode_Type+0x0 // 220: &PyLong_Type+0x0 // 228: &PyBool_Type+0x0 // 230: OPARG // 238: &PyDict_Type+0x0 // 240: &PyObject_SetItem+0x0 // 248: &_Py_NegativeRefcount+0x0 // 250: &_Py_DECREF_DecRefTotal+0x0 // 258: ERROR_TARGET // 260: &PyExc_SystemError+0x0 // 268: &_PyErr_Format+0x0 // 270: &PyDict_SetItem+0x0 // 278: &_Py_Dealloc+0x0 // 280: CONTINUE // 288: &__assert_fail+0x0 const unsigned char data_body[656] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x6e, 0x6f, 0x20, 0x6c, 0x6f, 0x63, 0x61, 0x6c, 0x73, 0x20, 0x66, 0x6f, 0x75, 0x6e, 0x64, 0x20, 0x77, 0x68, 0x65, 0x6e, 0x20, 0x73, 0x74, 0x6f, 0x72, 0x69, 0x6e, 0x67, 0x20, 0x25, 0x52, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x63, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x6d, 0x61, 0x63, 0x72, 0x6f, 0x73, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x47, 0x45, 0x54, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x29, 0x00, 0x69, 0x20, 0x3c, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x62, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x74, 0x79, 0x70, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x26, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x54, 0x79, 0x70, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x218, (uintptr_t)&PyCode_Type); patch_64(data + 0x220, (uintptr_t)&PyLong_Type); patch_64(data + 0x228, (uintptr_t)&PyBool_Type); patch_64(data + 0x230, instruction->oparg); patch_64(data + 0x238, (uintptr_t)&PyDict_Type); patch_64(data + 0x240, (uintptr_t)&PyObject_SetItem); patch_64(data + 0x248, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x250, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x258, instruction_starts[instruction->error_target]); patch_64(data + 0x260, (uintptr_t)&PyExc_SystemError); patch_64(data + 0x268, (uintptr_t)&_PyErr_Format); patch_64(data + 0x270, (uintptr_t)&PyDict_SetItem); patch_64(data + 0x278, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x280, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x288, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x214); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x21c); patch_x86_64_32rx(code + 0x3b, (uintptr_t)data + 0x224); patch_32r(code + 0x48, (uintptr_t)data + 0x22c); patch_x86_64_32rx(code + 0x75, (uintptr_t)data + 0x234); patch_x86_64_32rx(code + 0x7d, (uintptr_t)data + 0x23c); patch_32r(code + 0x8f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x9d, (uintptr_t)data + 0x244); patch_x86_64_32rx(code + 0xaa, (uintptr_t)data + 0x24c); patch_x86_64_32rx(code + 0xc3, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0xca, (uintptr_t)data + 0x25c); patch_32r(code + 0xd4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xdf, (uintptr_t)data + 0x264); patch_x86_64_32rx(code + 0xf2, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0xf8, (uintptr_t)data + 0x26c); patch_32r(code + 0x10c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x11a, (uintptr_t)data + 0x244); patch_x86_64_32rx(code + 0x127, (uintptr_t)data + 0x24c); patch_x86_64_32rx(code + 0x135, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x13c, (uintptr_t)data + 0x254); patch_x86_64_32rx(code + 0x145, (uintptr_t)data + 0x274); patch_x86_64_32rx(code + 0x159, (uintptr_t)data + 0x27c); patch_32r(code + 0x160, (uintptr_t)data + 0x5c); patch_32r(code + 0x167, (uintptr_t)data + 0x7a); patch_32r(code + 0x16e, (uintptr_t)data + 0xc0); patch_x86_64_32rx(code + 0x179, (uintptr_t)data + 0x284); patch_32r(code + 0x180, (uintptr_t)data + 0xf6); patch_32r(code + 0x187, (uintptr_t)data + 0x107); patch_32r(code + 0x18e, (uintptr_t)data + 0x143); patch_x86_64_32rx(code + 0x199, (uintptr_t)data + 0x284); patch_32r(code + 0x1a0, (uintptr_t)data + 0x1bc); patch_32r(code + 0x1a7, (uintptr_t)data + 0x185); patch_32r(code + 0x1ae, (uintptr_t)data + 0x1d8); patch_x86_64_32rx(code + 0x1b9, (uintptr_t)data + 0x284); patch_32r(code + 0x1c0, (uintptr_t)data + 0x1f7); patch_32r(code + 0x1c7, (uintptr_t)data + 0x185); patch_32r(code + 0x1ce, (uintptr_t)data + 0x1d8); patch_x86_64_32rx(code + 0x1d9, (uintptr_t)data + 0x284); patch_32r(code + 0x1e0, (uintptr_t)data + 0x16d); patch_32r(code + 0x1e7, (uintptr_t)data + 0x107); patch_32r(code + 0x1ee, (uintptr_t)data + 0x143); patch_x86_64_32rx(code + 0x1f9, (uintptr_t)data + 0x284); } void emit__STORE_SLICE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_SLICE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 75 f8 movq -0x8(%rbp), %rsi // 5: 48 8b 7d f0 movq -0x10(%rbp), %rdi // 9: 4c 8b 75 e0 movq -0x20(%rbp), %r14 // d: 48 8b 5d e8 movq -0x18(%rbp), %rbx // 11: ff 15 00 00 00 00 callq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _PyBuildSlice_ConsumeRefs-0x4 // 17: 48 85 c0 testq %rax, %rax // 1a: 74 2a je 0x46 <_JIT_ENTRY+0x46> // 1c: 49 89 c7 movq %rax, %r15 // 1f: 4c 89 2c 24 movq %r13, (%rsp) // 23: 4d 89 e5 movq %r12, %r13 // 26: 48 89 df movq %rbx, %rdi // 29: 48 89 c6 movq %rax, %rsi // 2c: 4c 89 f2 movq %r14, %rdx // 2f: ff 15 00 00 00 00 callq *(%rip) # 0x35 <_JIT_ENTRY+0x35> // 0000000000000031: R_X86_64_GOTPCRELX PyObject_SetItem-0x4 // 35: 41 89 c4 movl %eax, %r12d // 38: 49 8b 07 movq (%r15), %rax // 3b: 48 85 c0 testq %rax, %rax // 3e: 7e 14 jle 0x54 <_JIT_ENTRY+0x54> // 40: 85 c0 testl %eax, %eax // 42: 79 2c jns 0x70 <_JIT_ENTRY+0x70> // 44: eb 35 jmp 0x7b <_JIT_ENTRY+0x7b> // 46: 49 8b 06 movq (%r14), %rax // 49: 48 85 c0 testq %rax, %rax // 4c: 7e 3b jle 0x89 <_JIT_ENTRY+0x89> // 4e: 85 c0 testl %eax, %eax // 50: 79 53 jns 0xa5 <_JIT_ENTRY+0xa5> // 52: eb 60 jmp 0xb4 <_JIT_ENTRY+0xb4> // 54: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_PC32 .L.str.1-0x4 // 5b: be b2 02 00 00 movl $0x2b2, %esi # imm = 0x2B2 // 60: 4c 89 fa movq %r15, %rdx // 63: ff 15 00 00 00 00 callq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 69: 49 8b 07 movq (%r15), %rax // 6c: 85 c0 testl %eax, %eax // 6e: 78 0b js 0x7b <_JIT_ENTRY+0x7b> // 70: ff 15 00 00 00 00 callq *(%rip) # 0x76 <_JIT_ENTRY+0x76> // 0000000000000072: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 76: 49 ff 0f decq (%r15) // 79: 74 54 je 0xcf <_JIT_ENTRY+0xcf> // 7b: 49 8b 06 movq (%r14), %rax // 7e: 48 85 c0 testq %rax, %rax // 81: 7e 5d jle 0xe0 <_JIT_ENTRY+0xe0> // 83: 85 c0 testl %eax, %eax // 85: 79 75 jns 0xfc <_JIT_ENTRY+0xfc> // 87: eb 7e jmp 0x107 <_JIT_ENTRY+0x107> // 89: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x90 <_JIT_ENTRY+0x90> // 000000000000008c: R_X86_64_PC32 .L.str.1-0x4 // 90: be b4 02 00 00 movl $0x2b4, %esi # imm = 0x2B4 // 95: 4c 89 f2 movq %r14, %rdx // 98: ff 15 00 00 00 00 callq *(%rip) # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 9e: 49 8b 06 movq (%r14), %rax // a1: 85 c0 testl %eax, %eax // a3: 78 0f js 0xb4 <_JIT_ENTRY+0xb4> // a5: ff 15 00 00 00 00 callq *(%rip) # 0xab <_JIT_ENTRY+0xab> // 00000000000000a7: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // ab: 49 ff 0e decq (%r14) // ae: 0f 84 cf 00 00 00 je 0x183 <_JIT_ENTRY+0x183> // b4: 48 8b 03 movq (%rbx), %rax // b7: 48 85 c0 testq %rax, %rax // ba: 0f 8e d8 00 00 00 jle 0x198 <_JIT_ENTRY+0x198> // c0: 85 c0 testl %eax, %eax // c2: 0f 89 f0 00 00 00 jns 0x1b8 <_JIT_ENTRY+0x1b8> // c8: 58 popq %rax // c9: ff 25 00 00 00 00 jmpq *(%rip) # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // cf: 4c 89 ff movq %r15, %rdi // d2: ff 15 00 00 00 00 callq *(%rip) # 0xd8 <_JIT_ENTRY+0xd8> // 00000000000000d4: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // d8: 49 8b 06 movq (%r14), %rax // db: 48 85 c0 testq %rax, %rax // de: 7f a3 jg 0x83 <_JIT_ENTRY+0x83> // e0: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe7 <_JIT_ENTRY+0xe7> // 00000000000000e3: R_X86_64_PC32 .L.str.1-0x4 // e7: be b4 02 00 00 movl $0x2b4, %esi # imm = 0x2B4 // ec: 4c 89 f2 movq %r14, %rdx // ef: ff 15 00 00 00 00 callq *(%rip) # 0xf5 <_JIT_ENTRY+0xf5> // 00000000000000f1: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // f5: 49 8b 06 movq (%r14), %rax // f8: 85 c0 testl %eax, %eax // fa: 78 0b js 0x107 <_JIT_ENTRY+0x107> // fc: ff 15 00 00 00 00 callq *(%rip) # 0x102 <_JIT_ENTRY+0x102> // 00000000000000fe: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 102: 49 ff 0e decq (%r14) // 105: 74 0e je 0x115 <_JIT_ENTRY+0x115> // 107: 48 8b 03 movq (%rbx), %rax // 10a: 48 85 c0 testq %rax, %rax // 10d: 7e 17 jle 0x126 <_JIT_ENTRY+0x126> // 10f: 85 c0 testl %eax, %eax // 111: 79 2f jns 0x142 <_JIT_ENTRY+0x142> // 113: eb 38 jmp 0x14d <_JIT_ENTRY+0x14d> // 115: 4c 89 f7 movq %r14, %rdi // 118: ff 15 00 00 00 00 callq *(%rip) # 0x11e <_JIT_ENTRY+0x11e> // 000000000000011a: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 11e: 48 8b 03 movq (%rbx), %rax // 121: 48 85 c0 testq %rax, %rax // 124: 7f e9 jg 0x10f <_JIT_ENTRY+0x10f> // 126: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12d <_JIT_ENTRY+0x12d> // 0000000000000129: R_X86_64_PC32 .L.str.1-0x4 // 12d: be b5 02 00 00 movl $0x2b5, %esi # imm = 0x2B5 // 132: 48 89 da movq %rbx, %rdx // 135: ff 15 00 00 00 00 callq *(%rip) # 0x13b <_JIT_ENTRY+0x13b> // 0000000000000137: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 13b: 48 8b 03 movq (%rbx), %rax // 13e: 85 c0 testl %eax, %eax // 140: 78 0b js 0x14d <_JIT_ENTRY+0x14d> // 142: ff 15 00 00 00 00 callq *(%rip) # 0x148 <_JIT_ENTRY+0x148> // 0000000000000144: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 148: 48 ff 0b decq (%rbx) // 14b: 74 1b je 0x168 <_JIT_ENTRY+0x168> // 14d: 45 85 e4 testl %r12d, %r12d // 150: 4d 89 ec movq %r13, %r12 // 153: 4c 8b 2c 24 movq (%rsp), %r13 // 157: 0f 85 6b ff ff ff jne 0xc8 <_JIT_ENTRY+0xc8> // 15d: 48 83 c5 e0 addq $-0x20, %rbp // 161: 58 popq %rax // 162: ff 25 00 00 00 00 jmpq *(%rip) # 0x168 <_JIT_ENTRY+0x168> // 0000000000000164: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 168: 48 89 df movq %rbx, %rdi // 16b: ff 15 00 00 00 00 callq *(%rip) # 0x171 <_JIT_ENTRY+0x171> // 000000000000016d: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 171: 45 85 e4 testl %r12d, %r12d // 174: 4d 89 ec movq %r13, %r12 // 177: 4c 8b 2c 24 movq (%rsp), %r13 // 17b: 0f 85 47 ff ff ff jne 0xc8 <_JIT_ENTRY+0xc8> // 181: eb da jmp 0x15d <_JIT_ENTRY+0x15d> // 183: 4c 89 f7 movq %r14, %rdi // 186: ff 15 00 00 00 00 callq *(%rip) # 0x18c <_JIT_ENTRY+0x18c> // 0000000000000188: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 18c: 48 8b 03 movq (%rbx), %rax // 18f: 48 85 c0 testq %rax, %rax // 192: 0f 8f 28 ff ff ff jg 0xc0 <_JIT_ENTRY+0xc0> // 198: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x19f <_JIT_ENTRY+0x19f> // 000000000000019b: R_X86_64_PC32 .L.str.1-0x4 // 19f: be b5 02 00 00 movl $0x2b5, %esi # imm = 0x2B5 // 1a4: 48 89 da movq %rbx, %rdx // 1a7: ff 15 00 00 00 00 callq *(%rip) # 0x1ad <_JIT_ENTRY+0x1ad> // 00000000000001a9: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 1ad: 48 8b 03 movq (%rbx), %rax // 1b0: 85 c0 testl %eax, %eax // 1b2: 0f 88 10 ff ff ff js 0xc8 <_JIT_ENTRY+0xc8> // 1b8: ff 15 00 00 00 00 callq *(%rip) # 0x1be <_JIT_ENTRY+0x1be> // 00000000000001ba: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 1be: 48 ff 0b decq (%rbx) // 1c1: 0f 85 01 ff ff ff jne 0xc8 <_JIT_ENTRY+0xc8> // 1c7: 48 89 df movq %rbx, %rdi // 1ca: ff 15 00 00 00 00 callq *(%rip) # 0x1d0 <_JIT_ENTRY+0x1d0> // 00000000000001cc: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 1d0: 58 popq %rax // 1d1: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d7 <_JIT_ENTRY+0x1d7> // 00000000000001d3: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 1d7: const unsigned char code_body[471] = { 0x50, 0x48, 0x8b, 0x75, 0xf8, 0x48, 0x8b, 0x7d, 0xf0, 0x4c, 0x8b, 0x75, 0xe0, 0x48, 0x8b, 0x5d, 0xe8, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x2a, 0x49, 0x89, 0xc7, 0x4c, 0x89, 0x2c, 0x24, 0x4d, 0x89, 0xe5, 0x48, 0x89, 0xdf, 0x48, 0x89, 0xc6, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc4, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x14, 0x85, 0xc0, 0x79, 0x2c, 0xeb, 0x35, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x3b, 0x85, 0xc0, 0x79, 0x53, 0xeb, 0x60, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb2, 0x02, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x54, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x5d, 0x85, 0xc0, 0x79, 0x75, 0xeb, 0x7e, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb4, 0x02, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0f, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x0f, 0x84, 0xcf, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x0f, 0x8e, 0xd8, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x0f, 0x89, 0xf0, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7f, 0xa3, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb4, 0x02, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb5, 0x02, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x1b, 0x45, 0x85, 0xe4, 0x4d, 0x89, 0xec, 0x4c, 0x8b, 0x2c, 0x24, 0x0f, 0x85, 0x6b, 0xff, 0xff, 0xff, 0x48, 0x83, 0xc5, 0xe0, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x4d, 0x89, 0xec, 0x4c, 0x8b, 0x2c, 0x24, 0x0f, 0x85, 0x47, 0xff, 0xff, 0xff, 0xeb, 0xda, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x0f, 0x8f, 0x28, 0xff, 0xff, 0xff, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xb5, 0x02, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x0f, 0x88, 0x10, 0xff, 0xff, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x0f, 0x85, 0x01, 0xff, 0xff, 0xff, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &_PyBuildSlice_ConsumeRefs+0x0 // 48: &PyObject_SetItem+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: ERROR_TARGET // 68: &_Py_Dealloc+0x0 // 70: CONTINUE const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&_PyBuildSlice_ConsumeRefs); patch_64(data + 0x48, (uintptr_t)&PyObject_SetItem); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, instruction_starts[instruction->error_target]); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, (uintptr_t)code + sizeof(code_body)); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x31, (uintptr_t)data + 0x44); patch_32r(code + 0x57, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x65, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x72, (uintptr_t)data + 0x54); patch_32r(code + 0x8c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x9a, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xa7, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0xcb, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xd4, (uintptr_t)data + 0x64); patch_32r(code + 0xe3, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xf1, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xfe, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x11a, (uintptr_t)data + 0x64); patch_32r(code + 0x129, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x137, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x144, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x164, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x16d, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x188, (uintptr_t)data + 0x64); patch_32r(code + 0x19b, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x1a9, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x1ba, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x1cc, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x1d3, (uintptr_t)data + 0x5c); } void emit__STORE_SUBSCR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_SUBSCR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 89 24 24 movq %r12, (%rsp) // 5: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 9: 4c 8b 75 e8 movq -0x18(%rbp), %r14 // d: 4c 8b 7d f0 movq -0x10(%rbp), %r15 // 11: 4c 89 ff movq %r15, %rdi // 14: 48 89 de movq %rbx, %rsi // 17: 4c 89 f2 movq %r14, %rdx // 1a: ff 15 00 00 00 00 callq *(%rip) # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_GOTPCRELX PyObject_SetItem-0x4 // 20: 41 89 c4 movl %eax, %r12d // 23: 49 8b 06 movq (%r14), %rax // 26: 48 85 c0 testq %rax, %rax // 29: 7e 06 jle 0x31 <_JIT_ENTRY+0x31> // 2b: 85 c0 testl %eax, %eax // 2d: 79 1e jns 0x4d <_JIT_ENTRY+0x4d> // 2f: eb 27 jmp 0x58 <_JIT_ENTRY+0x58> // 31: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_PC32 .L.str.1-0x4 // 38: be 62 03 00 00 movl $0x362, %esi # imm = 0x362 // 3d: 4c 89 f2 movq %r14, %rdx // 40: ff 15 00 00 00 00 callq *(%rip) # 0x46 <_JIT_ENTRY+0x46> // 0000000000000042: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 46: 49 8b 06 movq (%r14), %rax // 49: 85 c0 testl %eax, %eax // 4b: 78 0b js 0x58 <_JIT_ENTRY+0x58> // 4d: ff 15 00 00 00 00 callq *(%rip) # 0x53 <_JIT_ENTRY+0x53> // 000000000000004f: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 53: 49 ff 0e decq (%r14) // 56: 74 0e je 0x66 <_JIT_ENTRY+0x66> // 58: 49 8b 07 movq (%r15), %rax // 5b: 48 85 c0 testq %rax, %rax // 5e: 7e 17 jle 0x77 <_JIT_ENTRY+0x77> // 60: 85 c0 testl %eax, %eax // 62: 79 2f jns 0x93 <_JIT_ENTRY+0x93> // 64: eb 38 jmp 0x9e <_JIT_ENTRY+0x9e> // 66: 4c 89 f7 movq %r14, %rdi // 69: ff 15 00 00 00 00 callq *(%rip) # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 6f: 49 8b 07 movq (%r15), %rax // 72: 48 85 c0 testq %rax, %rax // 75: 7f e9 jg 0x60 <_JIT_ENTRY+0x60> // 77: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_PC32 .L.str.1-0x4 // 7e: be 63 03 00 00 movl $0x363, %esi # imm = 0x363 // 83: 4c 89 fa movq %r15, %rdx // 86: ff 15 00 00 00 00 callq *(%rip) # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 8c: 49 8b 07 movq (%r15), %rax // 8f: 85 c0 testl %eax, %eax // 91: 78 0b js 0x9e <_JIT_ENTRY+0x9e> // 93: ff 15 00 00 00 00 callq *(%rip) # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 99: 49 ff 0f decq (%r15) // 9c: 74 0e je 0xac <_JIT_ENTRY+0xac> // 9e: 48 8b 03 movq (%rbx), %rax // a1: 48 85 c0 testq %rax, %rax // a4: 7e 17 jle 0xbd <_JIT_ENTRY+0xbd> // a6: 85 c0 testl %eax, %eax // a8: 79 2f jns 0xd9 <_JIT_ENTRY+0xd9> // aa: eb 38 jmp 0xe4 <_JIT_ENTRY+0xe4> // ac: 4c 89 ff movq %r15, %rdi // af: ff 15 00 00 00 00 callq *(%rip) # 0xb5 <_JIT_ENTRY+0xb5> // 00000000000000b1: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // b5: 48 8b 03 movq (%rbx), %rax // b8: 48 85 c0 testq %rax, %rax // bb: 7f e9 jg 0xa6 <_JIT_ENTRY+0xa6> // bd: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc4 <_JIT_ENTRY+0xc4> // 00000000000000c0: R_X86_64_PC32 .L.str.1-0x4 // c4: be 64 03 00 00 movl $0x364, %esi # imm = 0x364 // c9: 48 89 da movq %rbx, %rdx // cc: ff 15 00 00 00 00 callq *(%rip) # 0xd2 <_JIT_ENTRY+0xd2> // 00000000000000ce: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // d2: 48 8b 03 movq (%rbx), %rax // d5: 85 c0 testl %eax, %eax // d7: 78 0b js 0xe4 <_JIT_ENTRY+0xe4> // d9: ff 15 00 00 00 00 callq *(%rip) # 0xdf <_JIT_ENTRY+0xdf> // 00000000000000db: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // df: 48 ff 0b decq (%rbx) // e2: 74 10 je 0xf4 <_JIT_ENTRY+0xf4> // e4: 45 85 e4 testl %r12d, %r12d // e7: 74 19 je 0x102 <_JIT_ENTRY+0x102> // e9: 4c 8b 24 24 movq (%rsp), %r12 // ed: 58 popq %rax // ee: ff 25 00 00 00 00 jmpq *(%rip) # 0xf4 <_JIT_ENTRY+0xf4> // 00000000000000f0: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // f4: 48 89 df movq %rbx, %rdi // f7: ff 15 00 00 00 00 callq *(%rip) # 0xfd <_JIT_ENTRY+0xfd> // 00000000000000f9: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // fd: 45 85 e4 testl %r12d, %r12d // 100: 75 e7 jne 0xe9 <_JIT_ENTRY+0xe9> // 102: 48 83 c5 e8 addq $-0x18, %rbp // 106: 4c 8b 24 24 movq (%rsp), %r12 // 10a: 58 popq %rax // 10b: ff 25 00 00 00 00 jmpq *(%rip) # 0x111 <_JIT_ENTRY+0x111> // 000000000000010d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 10b: const unsigned char code_body[267] = { 0x50, 0x4c, 0x89, 0x24, 0x24, 0x48, 0x8b, 0x5d, 0xf8, 0x4c, 0x8b, 0x75, 0xe8, 0x4c, 0x8b, 0x7d, 0xf0, 0x4c, 0x89, 0xff, 0x48, 0x89, 0xde, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc4, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x62, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x0e, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x63, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x74, 0x0e, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x17, 0x85, 0xc0, 0x79, 0x2f, 0xeb, 0x38, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe9, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x64, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x10, 0x45, 0x85, 0xe4, 0x74, 0x19, 0x4c, 0x8b, 0x24, 0x24, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xe4, 0x75, 0xe7, 0x48, 0x83, 0xc5, 0xe8, 0x4c, 0x8b, 0x24, 0x24, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyObject_SetItem+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_Dealloc+0x0 // 60: ERROR_TARGET const unsigned char data_body[104] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyObject_SetItem); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x60, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0x3c); patch_32r(code + 0x34, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x42, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x4f, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x6b, (uintptr_t)data + 0x54); patch_32r(code + 0x7a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x88, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x95, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xb1, (uintptr_t)data + 0x54); patch_32r(code + 0xc0, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xce, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0xdb, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0xf0, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0xf9, (uintptr_t)data + 0x54); } void emit__STORE_SUBSCR_DICT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_SUBSCR_DICT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyDict_Type-0x4 // 10: 74 07 je 0x19 <_JIT_ENTRY+0x19> // 12: 58 popq %rax // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: 48 8b 55 e8 movq -0x18(%rbp), %rdx // 1d: 48 8b 75 f8 movq -0x8(%rbp), %rsi // 21: 48 89 df movq %rbx, %rdi // 24: ff 15 00 00 00 00 callq *(%rip) # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_GOTPCRELX _PyDict_SetItem_Take2-0x4 // 2a: 41 89 c6 movl %eax, %r14d // 2d: 48 8b 03 movq (%rbx), %rax // 30: 48 85 c0 testq %rax, %rax // 33: 7e 06 jle 0x3b <_JIT_ENTRY+0x3b> // 35: 85 c0 testl %eax, %eax // 37: 79 1e jns 0x57 <_JIT_ENTRY+0x57> // 39: eb 27 jmp 0x62 <_JIT_ENTRY+0x62> // 3b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x42 <_JIT_ENTRY+0x42> // 000000000000003e: R_X86_64_PC32 .L.str.1-0x4 // 42: be 9c 03 00 00 movl $0x39c, %esi # imm = 0x39C // 47: 48 89 da movq %rbx, %rdx // 4a: ff 15 00 00 00 00 callq *(%rip) # 0x50 <_JIT_ENTRY+0x50> // 000000000000004c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 50: 48 8b 03 movq (%rbx), %rax // 53: 85 c0 testl %eax, %eax // 55: 78 0b js 0x62 <_JIT_ENTRY+0x62> // 57: ff 15 00 00 00 00 callq *(%rip) # 0x5d <_JIT_ENTRY+0x5d> // 0000000000000059: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5d: 48 ff 0b decq (%rbx) // 60: 74 0c je 0x6e <_JIT_ENTRY+0x6e> // 62: 45 85 f6 testl %r14d, %r14d // 65: 74 15 je 0x7c <_JIT_ENTRY+0x7c> // 67: 58 popq %rax // 68: ff 25 00 00 00 00 jmpq *(%rip) # 0x6e <_JIT_ENTRY+0x6e> // 000000000000006a: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 6e: 48 89 df movq %rbx, %rdi // 71: ff 15 00 00 00 00 callq *(%rip) # 0x77 <_JIT_ENTRY+0x77> // 0000000000000073: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 77: 45 85 f6 testl %r14d, %r14d // 7a: 75 eb jne 0x67 <_JIT_ENTRY+0x67> // 7c: 48 83 c5 e8 addq $-0x18, %rbp // 80: 58 popq %rax // 81: ff 25 00 00 00 00 jmpq *(%rip) # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 81: const unsigned char code_body[129] = { 0x50, 0x48, 0x8b, 0x5d, 0xf0, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x55, 0xe8, 0x48, 0x8b, 0x75, 0xf8, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x9c, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0c, 0x45, 0x85, 0xf6, 0x74, 0x15, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x75, 0xeb, 0x48, 0x83, 0xc5, 0xe8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyDict_Type+0x0 // 48: JUMP_TARGET // 50: &_PyDict_SetItem_Take2+0x0 // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: ERROR_TARGET // 70: &_Py_Dealloc+0x0 const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyDict_Type); patch_64(data + 0x48, instruction_starts[instruction->jump_target]); patch_64(data + 0x50, (uintptr_t)&_PyDict_SetItem_Take2); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, instruction_starts[instruction->error_target]); patch_64(data + 0x70, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x26, (uintptr_t)data + 0x4c); patch_32r(code + 0x3e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4c, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x59, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x6a, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x73, (uintptr_t)data + 0x6c); } void emit__STORE_SUBSCR_LIST_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_STORE_SUBSCR_LIST_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 49 8b 46 08 movq 0x8(%r14), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 10: 0f 85 f9 00 00 00 jne 0x10f <_JIT_ENTRY+0x10f> // 16: 48 8b 5d f0 movq -0x10(%rbp), %rbx // 1a: 48 8b 43 08 movq 0x8(%rbx), %rax // 1e: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_REX_GOTPCRELX PyList_Type-0x4 // 25: 0f 85 e4 00 00 00 jne 0x10f <_JIT_ENTRY+0x10f> // 2b: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 32: f6 80 ab 00 00 00 01 testb $0x1, 0xab(%rax) // 39: 0f 84 23 01 00 00 je 0x162 <_JIT_ENTRY+0x162> // 3f: 49 83 7e 10 09 cmpq $0x9, 0x10(%r14) // 44: 0f 83 c5 00 00 00 jae 0x10f <_JIT_ENTRY+0x10f> // 4a: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_REX_GOTPCRELX PyList_Type-0x4 // 51: f6 80 ab 00 00 00 02 testb $0x2, 0xab(%rax) // 58: 0f 84 24 01 00 00 je 0x182 <_JIT_ENTRY+0x182> // 5e: 41 8b 46 18 movl 0x18(%r14), %eax // 62: 48 39 43 10 cmpq %rax, 0x10(%rbx) // 66: 0f 8e a3 00 00 00 jle 0x10f <_JIT_ENTRY+0x10f> // 6c: 48 39 43 20 cmpq %rax, 0x20(%rbx) // 70: 0f 8e 2c 01 00 00 jle 0x1a2 <_JIT_ENTRY+0x1a2> // 76: 48 8b 4d e8 movq -0x18(%rbp), %rcx // 7a: 48 8b 53 18 movq 0x18(%rbx), %rdx // 7e: 4c 8b 3c c2 movq (%rdx,%rax,8), %r15 // 82: 48 89 0c c2 movq %rcx, (%rdx,%rax,8) // 86: 4d 85 ff testq %r15, %r15 // 89: 0f 84 33 01 00 00 je 0x1c2 <_JIT_ENTRY+0x1c2> // 8f: 49 8b 07 movq (%r15), %rax // 92: 48 85 c0 testq %rax, %rax // 95: 7f 18 jg 0xaf <_JIT_ENTRY+0xaf> // 97: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x9e <_JIT_ENTRY+0x9e> // 000000000000009a: R_X86_64_PC32 .L.str.1-0x4 // 9e: be 88 03 00 00 movl $0x388, %esi # imm = 0x388 // a3: 4c 89 fa movq %r15, %rdx // a6: ff 15 00 00 00 00 callq *(%rip) # 0xac <_JIT_ENTRY+0xac> // 00000000000000a8: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // ac: 49 8b 07 movq (%r15), %rax // af: 85 c0 testl %eax, %eax // b1: 78 14 js 0xc7 <_JIT_ENTRY+0xc7> // b3: ff 15 00 00 00 00 callq *(%rip) # 0xb9 <_JIT_ENTRY+0xb9> // 00000000000000b5: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // b9: 49 ff 0f decq (%r15) // bc: 75 09 jne 0xc7 <_JIT_ENTRY+0xc7> // be: 4c 89 ff movq %r15, %rdi // c1: ff 15 00 00 00 00 callq *(%rip) # 0xc7 <_JIT_ENTRY+0xc7> // 00000000000000c3: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // c7: 41 f6 46 03 80 testb $-0x80, 0x3(%r14) // cc: 75 51 jne 0x11f <_JIT_ENTRY+0x11f> // ce: ff 15 00 00 00 00 callq *(%rip) # 0xd4 <_JIT_ENTRY+0xd4> // 00000000000000d0: R_X86_64_GOTPCRELX PyInterpreterState_Get-0x4 // d4: 48 ff 88 a0 38 00 00 decq 0x38a0(%rax) // db: 49 8b 06 movq (%r14), %rax // de: 48 89 c1 movq %rax, %rcx // e1: 48 ff c9 decq %rcx // e4: 49 89 0e movq %rcx, (%r14) // e7: 74 2d je 0x116 <_JIT_ENTRY+0x116> // e9: 48 83 f8 01 cmpq $0x1, %rax // ed: 7f 30 jg 0x11f <_JIT_ENTRY+0x11f> // ef: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xf6 <_JIT_ENTRY+0xf6> // 00000000000000f2: R_X86_64_PC32 .L.str.117-0x4 // f6: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xfd <_JIT_ENTRY+0xfd> // 00000000000000f9: R_X86_64_PC32 .L.str.118-0x4 // fd: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x104 <_JIT_ENTRY+0x104> // 0000000000000100: R_X86_64_PC32 .L__PRETTY_FUNCTION__._Py_DECREF_SPECIALIZED-0x4 // 104: ba bd 00 00 00 movl $0xbd, %edx // 109: ff 15 00 00 00 00 callq *(%rip) # 0x10f <_JIT_ENTRY+0x10f> // 000000000000010b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 10f: 58 popq %rax // 110: ff 25 00 00 00 00 jmpq *(%rip) # 0x116 <_JIT_ENTRY+0x116> // 0000000000000112: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 116: 4c 89 f7 movq %r14, %rdi // 119: ff 15 00 00 00 00 callq *(%rip) # 0x11f <_JIT_ENTRY+0x11f> // 000000000000011b: R_X86_64_GOTPCRELX PyObject_Free-0x4 // 11f: 48 8b 03 movq (%rbx), %rax // 122: 48 85 c0 testq %rax, %rax // 125: 7f 18 jg 0x13f <_JIT_ENTRY+0x13f> // 127: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12e <_JIT_ENTRY+0x12e> // 000000000000012a: R_X86_64_PC32 .L.str.1-0x4 // 12e: be 8a 03 00 00 movl $0x38a, %esi # imm = 0x38A // 133: 48 89 da movq %rbx, %rdx // 136: ff 15 00 00 00 00 callq *(%rip) # 0x13c <_JIT_ENTRY+0x13c> // 0000000000000138: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 13c: 48 8b 03 movq (%rbx), %rax // 13f: 48 83 c5 e8 addq $-0x18, %rbp // 143: 85 c0 testl %eax, %eax // 145: 78 14 js 0x15b <_JIT_ENTRY+0x15b> // 147: ff 15 00 00 00 00 callq *(%rip) # 0x14d <_JIT_ENTRY+0x14d> // 0000000000000149: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 14d: 48 ff 0b decq (%rbx) // 150: 75 09 jne 0x15b <_JIT_ENTRY+0x15b> // 152: 48 89 df movq %rbx, %rdi // 155: ff 15 00 00 00 00 callq *(%rip) # 0x15b <_JIT_ENTRY+0x15b> // 0000000000000157: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 15b: 58 popq %rax // 15c: ff 25 00 00 00 00 jmpq *(%rip) # 0x162 <_JIT_ENTRY+0x162> // 000000000000015e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 162: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x169 <_JIT_ENTRY+0x169> // 0000000000000165: R_X86_64_PC32 .L.str.120-0x4 // 169: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x170 <_JIT_ENTRY+0x170> // 000000000000016c: R_X86_64_PC32 .L.str.121-0x4 // 170: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x177 <_JIT_ENTRY+0x177> // 0000000000000173: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyLong_IsNonNegativeCompact-0x4 // 177: ba cc 00 00 00 movl $0xcc, %edx // 17c: ff 15 00 00 00 00 callq *(%rip) # 0x182 <_JIT_ENTRY+0x182> // 000000000000017e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 182: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x189 <_JIT_ENTRY+0x189> // 0000000000000185: R_X86_64_PC32 .L.str.122-0x4 // 189: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x190 <_JIT_ENTRY+0x190> // 000000000000018c: R_X86_64_PC32 .L.str.123-0x4 // 190: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x197 <_JIT_ENTRY+0x197> // 0000000000000193: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyList_GET_SIZE-0x4 // 197: ba 1f 00 00 00 movl $0x1f, %edx // 19c: ff 15 00 00 00 00 callq *(%rip) # 0x1a2 <_JIT_ENTRY+0x1a2> // 000000000000019e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1a2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1a9 <_JIT_ENTRY+0x1a9> // 00000000000001a5: R_X86_64_PC32 .L.str.141-0x4 // 1a9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1b0 <_JIT_ENTRY+0x1b0> // 00000000000001ac: R_X86_64_PC32 .L.str.123-0x4 // 1b0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1b7 <_JIT_ENTRY+0x1b7> // 00000000000001b3: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyList_SET_ITEM-0x4 // 1b7: ba 2e 00 00 00 movl $0x2e, %edx // 1bc: ff 15 00 00 00 00 callq *(%rip) # 0x1c2 <_JIT_ENTRY+0x1c2> // 00000000000001be: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1c2: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x1c9 <_JIT_ENTRY+0x1c9> // 00000000000001c5: R_X86_64_PC32 .L.str.11-0x4 // 1c9: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x1d0 <_JIT_ENTRY+0x1d0> // 00000000000001cc: R_X86_64_PC32 .L.str.1-0x4 // 1d0: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x1d7 <_JIT_ENTRY+0x1d7> // 00000000000001d3: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 1d7: ba 87 03 00 00 movl $0x387, %edx # imm = 0x387 // 1dc: ff 15 00 00 00 00 callq *(%rip) # 0x1e2 <_JIT_ENTRY+0x1e2> // 00000000000001de: R_X86_64_GOTPCRELX __assert_fail-0x4 // 1e2: const unsigned char code_body[482] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x49, 0x8b, 0x46, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xf9, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf0, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0xe4, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x84, 0x23, 0x01, 0x00, 0x00, 0x49, 0x83, 0x7e, 0x10, 0x09, 0x0f, 0x83, 0xc5, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x84, 0x24, 0x01, 0x00, 0x00, 0x41, 0x8b, 0x46, 0x18, 0x48, 0x39, 0x43, 0x10, 0x0f, 0x8e, 0xa3, 0x00, 0x00, 0x00, 0x48, 0x39, 0x43, 0x20, 0x0f, 0x8e, 0x2c, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x4d, 0xe8, 0x48, 0x8b, 0x53, 0x18, 0x4c, 0x8b, 0x3c, 0xc2, 0x48, 0x89, 0x0c, 0xc2, 0x4d, 0x85, 0xff, 0x0f, 0x84, 0x33, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x88, 0x03, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0xf6, 0x46, 0x03, 0x80, 0x75, 0x51, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x88, 0xa0, 0x38, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x89, 0xc1, 0x48, 0xff, 0xc9, 0x49, 0x89, 0x0e, 0x74, 0x2d, 0x48, 0x83, 0xf8, 0x01, 0x7f, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xbd, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x8a, 0x03, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x83, 0xc5, 0xe8, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xcc, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1f, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x2e, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x87, 0x03, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00old_value != NULL\x00op->ob_refcnt > 0\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_object.h\x00void _Py_DECREF_SPECIALIZED(PyObject *, const destructor)\x00PyLong_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_long.h\x00int _PyLong_IsNonNegativeCompact(const PyLongObject *)\x00PyList_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/listobject.h\x00Py_ssize_t PyList_GET_SIZE(PyObject *)\x00void PyList_SET_ITEM(PyObject *, Py_ssize_t, PyObject *)\x00index < list->allocated\x00' // 28c: 00 00 00 00 // 290: &PyLong_Type+0x0 // 298: &PyList_Type+0x0 // 2a0: &_Py_NegativeRefcount+0x0 // 2a8: &_Py_DECREF_DecRefTotal+0x0 // 2b0: &_Py_Dealloc+0x0 // 2b8: &PyInterpreterState_Get+0x0 // 2c0: &__assert_fail+0x0 // 2c8: JUMP_TARGET // 2d0: &PyObject_Free+0x0 // 2d8: CONTINUE const unsigned char data_body[736] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x6c, 0x64, 0x5f, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x20, 0x21, 0x3d, 0x20, 0x4e, 0x55, 0x4c, 0x4c, 0x00, 0x6f, 0x70, 0x2d, 0x3e, 0x6f, 0x62, 0x5f, 0x72, 0x65, 0x66, 0x63, 0x6e, 0x74, 0x20, 0x3e, 0x20, 0x30, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x5f, 0x50, 0x79, 0x5f, 0x44, 0x45, 0x43, 0x52, 0x45, 0x46, 0x5f, 0x53, 0x50, 0x45, 0x43, 0x49, 0x41, 0x4c, 0x49, 0x5a, 0x45, 0x44, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x64, 0x65, 0x73, 0x74, 0x72, 0x75, 0x63, 0x74, 0x6f, 0x72, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x6c, 0x6f, 0x6e, 0x67, 0x2e, 0x68, 0x00, 0x69, 0x6e, 0x74, 0x20, 0x5f, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x49, 0x73, 0x4e, 0x6f, 0x6e, 0x4e, 0x65, 0x67, 0x61, 0x74, 0x69, 0x76, 0x65, 0x43, 0x6f, 0x6d, 0x70, 0x61, 0x63, 0x74, 0x28, 0x63, 0x6f, 0x6e, 0x73, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x76, 0x6f, 0x69, 0x64, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x53, 0x45, 0x54, 0x5f, 0x49, 0x54, 0x45, 0x4d, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x69, 0x6e, 0x64, 0x65, 0x78, 0x20, 0x3c, 0x20, 0x6c, 0x69, 0x73, 0x74, 0x2d, 0x3e, 0x61, 0x6c, 0x6c, 0x6f, 0x63, 0x61, 0x74, 0x65, 0x64, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x290, (uintptr_t)&PyLong_Type); patch_64(data + 0x298, (uintptr_t)&PyList_Type); patch_64(data + 0x2a0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x2a8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x2b0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x2b8, (uintptr_t)&PyInterpreterState_Get); patch_64(data + 0x2c0, (uintptr_t)&__assert_fail); patch_64(data + 0x2c8, instruction_starts[instruction->jump_target]); patch_64(data + 0x2d0, (uintptr_t)&PyObject_Free); patch_64(data + 0x2d8, (uintptr_t)code + sizeof(code_body)); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0x294); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0x28c); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x294); patch_32r(code + 0x9a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xa8, (uintptr_t)data + 0x29c); patch_x86_64_32rx(code + 0xb5, (uintptr_t)data + 0x2a4); patch_x86_64_32rx(code + 0xc3, (uintptr_t)data + 0x2ac); patch_x86_64_32rx(code + 0xd0, (uintptr_t)data + 0x2b4); patch_32r(code + 0xf2, (uintptr_t)data + 0x9c); patch_32r(code + 0xf9, (uintptr_t)data + 0xae); patch_32r(code + 0x100, (uintptr_t)data + 0xf5); patch_x86_64_32rx(code + 0x10b, (uintptr_t)data + 0x2bc); patch_x86_64_32rx(code + 0x112, (uintptr_t)data + 0x2c4); patch_x86_64_32rx(code + 0x11b, (uintptr_t)data + 0x2cc); patch_32r(code + 0x12a, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x138, (uintptr_t)data + 0x29c); patch_x86_64_32rx(code + 0x149, (uintptr_t)data + 0x2a4); patch_x86_64_32rx(code + 0x157, (uintptr_t)data + 0x2ac); patch_x86_64_32rx(code + 0x15e, (uintptr_t)data + 0x2d4); patch_32r(code + 0x165, (uintptr_t)data + 0x12f); patch_32r(code + 0x16c, (uintptr_t)data + 0x140); patch_32r(code + 0x173, (uintptr_t)data + 0x185); patch_x86_64_32rx(code + 0x17e, (uintptr_t)data + 0x2bc); patch_32r(code + 0x185, (uintptr_t)data + 0x1bc); patch_32r(code + 0x18c, (uintptr_t)data + 0x1cd); patch_32r(code + 0x193, (uintptr_t)data + 0x210); patch_x86_64_32rx(code + 0x19e, (uintptr_t)data + 0x2bc); patch_32r(code + 0x1a5, (uintptr_t)data + 0x270); patch_32r(code + 0x1ac, (uintptr_t)data + 0x1cd); patch_32r(code + 0x1b3, (uintptr_t)data + 0x237); patch_x86_64_32rx(code + 0x1be, (uintptr_t)data + 0x2bc); patch_32r(code + 0x1c5, (uintptr_t)data + 0x8a); patch_32r(code + 0x1cc, (uintptr_t)data + -0x4); patch_32r(code + 0x1d3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x1de, (uintptr_t)data + 0x2bc); } void emit__SWAP( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_SWAP.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 7: 66 83 f8 01 cmpw $0x1, %ax // b: 76 24 jbe 0x31 <_JIT_ENTRY+0x31> // d: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x14 <_JIT_ENTRY+0x14> // 0000000000000010: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 14: c1 e0 03 shll $0x3, %eax // 17: 48 89 e9 movq %rbp, %rcx // 1a: 48 29 c1 subq %rax, %rcx // 1d: 48 8b 01 movq (%rcx), %rax // 20: 48 8b 55 f8 movq -0x8(%rbp), %rdx // 24: 48 89 11 movq %rdx, (%rcx) // 27: 48 89 45 f8 movq %rax, -0x8(%rbp) // 2b: ff 25 00 00 00 00 jmpq *(%rip) # 0x31 <_JIT_ENTRY+0x31> // 000000000000002d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 31: 50 pushq %rax // 32: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x39 <_JIT_ENTRY+0x39> // 0000000000000035: R_X86_64_PC32 .L.str.102-0x4 // 39: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_PC32 .L.str.1-0x4 // 40: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x47 <_JIT_ENTRY+0x47> // 0000000000000043: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 47: ba 48 10 00 00 movl $0x1048, %edx # imm = 0x1048 // 4c: ff 15 00 00 00 00 callq *(%rip) # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_GOTPCRELX __assert_fail-0x4 // 52: const unsigned char code_body[82] = { 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x76, 0x24, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0xc1, 0xe0, 0x03, 0x48, 0x89, 0xe9, 0x48, 0x29, 0xc1, 0x48, 0x8b, 0x01, 0x48, 0x8b, 0x55, 0xf8, 0x48, 0x89, 0x11, 0x48, 0x89, 0x45, 0xf8, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x48, 0x10, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg >= 2\x00' // 99: 00 00 00 00 00 00 00 // a0: OPARG // a8: CONTINUE // b0: &__assert_fail+0x0 const unsigned char data_body[184] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3e, 0x3d, 0x20, 0x32, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa0, instruction->oparg); patch_64(data + 0xa8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xb0, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0x9c); patch_32r(code + 0x10, (uintptr_t)data + 0x9c); patch_x86_64_32rx(code + 0x2d, (uintptr_t)data + 0xa4); patch_32r(code + 0x35, (uintptr_t)data + 0x8a); patch_32r(code + 0x3c, (uintptr_t)data + -0x4); patch_32r(code + 0x43, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0xac); } void emit__TIER2_RESUME_CHECK( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_TIER2_RESUME_CHECK.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 49 8b 44 24 18 movq 0x18(%r12), %rax // 6: 84 c0 testb %al, %al // 8: 74 07 je 0x11 <_JIT_ENTRY+0x11> // a: 58 popq %rax // b: ff 25 00 00 00 00 jmpq *(%rip) # 0x11 <_JIT_ENTRY+0x11> // 000000000000000d: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 11: 41 83 7c 24 3c 00 cmpl $0x0, 0x3c(%r12) // 17: 75 1a jne 0x33 <_JIT_ENTRY+0x33> // 19: 49 8b 4d 00 movq (%r13), %rcx // 1d: 48 8b 51 08 movq 0x8(%rcx), %rdx // 21: 48 3b 15 00 00 00 00 cmpq (%rip), %rdx # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_REX_GOTPCRELX PyCode_Type-0x4 // 28: 75 10 jne 0x3a <_JIT_ENTRY+0x3a> // 2a: 48 3b 81 a8 00 00 00 cmpq 0xa8(%rcx), %rax // 31: 75 27 jne 0x5a <_JIT_ENTRY+0x5a> // 33: 58 popq %rax // 34: ff 25 00 00 00 00 jmpq *(%rip) # 0x3a <_JIT_ENTRY+0x3a> // 0000000000000036: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 3a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_PC32 .L.str.108-0x4 // 41: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x48 <_JIT_ENTRY+0x48> // 0000000000000044: R_X86_64_PC32 .L.str.109-0x4 // 48: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetCode-0x4 // 4f: ba 4d 00 00 00 movl $0x4d, %edx // 54: ff 15 00 00 00 00 callq *(%rip) # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_GOTPCRELX __assert_fail-0x4 // 5a: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_PC32 .L.str.107-0x4 // 61: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x68 <_JIT_ENTRY+0x68> // 0000000000000064: R_X86_64_PC32 .L.str.1-0x4 // 68: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 6f: ba 88 11 00 00 movl $0x1188, %edx # imm = 0x1188 // 74: ff 15 00 00 00 00 callq *(%rip) # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_GOTPCRELX __assert_fail-0x4 // 7a: const unsigned char code_body[122] = { 0x50, 0x49, 0x8b, 0x44, 0x24, 0x18, 0x84, 0xc0, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x83, 0x7c, 0x24, 0x3c, 0x00, 0x75, 0x1a, 0x49, 0x8b, 0x4d, 0x00, 0x48, 0x8b, 0x51, 0x08, 0x48, 0x3b, 0x15, 0x00, 0x00, 0x00, 0x00, 0x75, 0x10, 0x48, 0x3b, 0x81, 0xa8, 0x00, 0x00, 0x00, 0x75, 0x27, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x4d, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x88, 0x11, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00tstate->tracing || eval_breaker == FT_ATOMIC_LOAD_UINTPTR_ACQUIRE(_PyFrame_GetCode(frame)->_co_instrumentation_version)\x00PyCode_Check(f->f_executable)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00PyCodeObject *_PyFrame_GetCode(_PyInterpreterFrame *)\x00' // 1a0: // 1a0: JUMP_TARGET // 1a8: &PyCode_Type+0x0 // 1b0: CONTINUE // 1b8: &__assert_fail+0x0 const unsigned char data_body[448] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x74, 0x73, 0x74, 0x61, 0x74, 0x65, 0x2d, 0x3e, 0x74, 0x72, 0x61, 0x63, 0x69, 0x6e, 0x67, 0x20, 0x7c, 0x7c, 0x20, 0x65, 0x76, 0x61, 0x6c, 0x5f, 0x62, 0x72, 0x65, 0x61, 0x6b, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x54, 0x5f, 0x41, 0x54, 0x4f, 0x4d, 0x49, 0x43, 0x5f, 0x4c, 0x4f, 0x41, 0x44, 0x5f, 0x55, 0x49, 0x4e, 0x54, 0x50, 0x54, 0x52, 0x5f, 0x41, 0x43, 0x51, 0x55, 0x49, 0x52, 0x45, 0x28, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x29, 0x2d, 0x3e, 0x5f, 0x63, 0x6f, 0x5f, 0x69, 0x6e, 0x73, 0x74, 0x72, 0x75, 0x6d, 0x65, 0x6e, 0x74, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x5f, 0x76, 0x65, 0x72, 0x73, 0x69, 0x6f, 0x6e, 0x29, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x66, 0x2d, 0x3e, 0x66, 0x5f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x61, 0x62, 0x6c, 0x65, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x43, 0x6f, 0x64, 0x65, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x43, 0x6f, 0x64, 0x65, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x1a0, instruction_starts[instruction->jump_target]); patch_64(data + 0x1a8, (uintptr_t)&PyCode_Type); patch_64(data + 0x1b0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x1b8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xd, (uintptr_t)data + 0x19c); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0x1a4); patch_x86_64_32rx(code + 0x36, (uintptr_t)data + 0x1ac); patch_32r(code + 0x3d, (uintptr_t)data + 0x102); patch_32r(code + 0x44, (uintptr_t)data + 0x120); patch_32r(code + 0x4b, (uintptr_t)data + 0x166); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0x1b4); patch_32r(code + 0x5d, (uintptr_t)data + 0x8a); patch_32r(code + 0x64, (uintptr_t)data + -0x4); patch_32r(code + 0x6b, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0x1b4); } void emit__TO_BOOL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_TO_BOOL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 89 df movq %rbx, %rdi // 8: ff 15 00 00 00 00 callq *(%rip) # 0xe <_JIT_ENTRY+0xe> // 000000000000000a: R_X86_64_GOTPCRELX PyObject_IsTrue-0x4 // e: 41 89 c6 movl %eax, %r14d // 11: 48 8b 03 movq (%rbx), %rax // 14: 48 85 c0 testq %rax, %rax // 17: 7e 06 jle 0x1f <_JIT_ENTRY+0x1f> // 19: 85 c0 testl %eax, %eax // 1b: 79 1e jns 0x3b <_JIT_ENTRY+0x3b> // 1d: eb 27 jmp 0x46 <_JIT_ENTRY+0x46> // 1f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_PC32 .L.str.1-0x4 // 26: be 42 01 00 00 movl $0x142, %esi # imm = 0x142 // 2b: 48 89 da movq %rbx, %rdx // 2e: ff 15 00 00 00 00 callq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 34: 48 8b 03 movq (%rbx), %rax // 37: 85 c0 testl %eax, %eax // 39: 78 0b js 0x46 <_JIT_ENTRY+0x46> // 3b: ff 15 00 00 00 00 callq *(%rip) # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 41: 48 ff 0b decq (%rbx) // 44: 74 2b je 0x71 <_JIT_ENTRY+0x71> // 46: 45 85 f6 testl %r14d, %r14d // 49: 78 34 js 0x7f <_JIT_ENTRY+0x7f> // 4b: 75 12 jne 0x5f <_JIT_ENTRY+0x5f> // 4d: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x54 <_JIT_ENTRY+0x54> // 0000000000000050: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 54: 48 89 45 f8 movq %rax, -0x8(%rbp) // 58: 58 popq %rax // 59: ff 25 00 00 00 00 jmpq *(%rip) # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 5f: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x66 <_JIT_ENTRY+0x66> // 0000000000000062: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 66: 48 89 45 f8 movq %rax, -0x8(%rbp) // 6a: 58 popq %rax // 6b: ff 25 00 00 00 00 jmpq *(%rip) # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 71: 48 89 df movq %rbx, %rdi // 74: ff 15 00 00 00 00 callq *(%rip) # 0x7a <_JIT_ENTRY+0x7a> // 0000000000000076: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 7a: 45 85 f6 testl %r14d, %r14d // 7d: 79 cc jns 0x4b <_JIT_ENTRY+0x4b> // 7f: 58 popq %rax // 80: ff 25 00 00 00 00 jmpq *(%rip) # 0x86 <_JIT_ENTRY+0x86> // 0000000000000082: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 86: const unsigned char code_body[134] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc6, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x42, 0x01, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x2b, 0x45, 0x85, 0xf6, 0x78, 0x34, 0x75, 0x12, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xf6, 0x79, 0xcc, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyObject_IsTrue+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: &_Py_FalseStruct+0x0 // 60: CONTINUE // 68: &_Py_TrueStruct+0x0 // 70: &_Py_Dealloc+0x0 // 78: ERROR_TARGET const unsigned char data_body[128] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyObject_IsTrue); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0x70, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x78, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xa, (uintptr_t)data + 0x3c); patch_32r(code + 0x22, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x50, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x5b, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x62, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x6d, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x76, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x82, (uintptr_t)data + 0x74); } void emit__TO_BOOL_BOOL( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_TO_BOOL_BOOL.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 8b 40 08 movq 0x8(%rax), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // f: 74 06 je 0x17 <_JIT_ENTRY+0x17> // 11: ff 25 00 00 00 00 jmpq *(%rip) # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 17: ff 25 00 00 00 00 jmpq *(%rip) # 0x1d <_JIT_ENTRY+0x1d> // 0000000000000019: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 17: const unsigned char code_body[23] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x8b, 0x40, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: // 0: &PyBool_Type+0x0 // 8: JUMP_TARGET const unsigned char data_body[16] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&PyBool_Type); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0x4); } void emit__TO_BOOL_INT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_TO_BOOL_INT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyLong_Type-0x4 // 10: 74 07 je 0x19 <_JIT_ENTRY+0x19> // 12: 58 popq %rax // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: 8b 4b 10 movl 0x10(%rbx), %ecx // 1c: 83 e1 03 andl $0x3, %ecx // 1f: 48 8b 03 movq (%rbx), %rax // 22: 83 f9 01 cmpl $0x1, %ecx // 25: 75 16 jne 0x3d <_JIT_ENTRY+0x3d> // 27: 85 c0 testl %eax, %eax // 29: 79 59 jns 0x84 <_JIT_ENTRY+0x84> // 2b: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 32: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 36: 58 popq %rax // 37: ff 25 00 00 00 00 jmpq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 3d: 48 85 c0 testq %rax, %rax // 40: 7f 18 jg 0x5a <_JIT_ENTRY+0x5a> // 42: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x49 <_JIT_ENTRY+0x49> // 0000000000000045: R_X86_64_PC32 .L.str.1-0x4 // 49: be 62 01 00 00 movl $0x162, %esi # imm = 0x162 // 4e: 48 89 da movq %rbx, %rdx // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 57: 48 8b 03 movq (%rbx), %rax // 5a: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x61 <_JIT_ENTRY+0x61> // 000000000000005d: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 61: 85 c0 testl %eax, %eax // 63: 78 cd js 0x32 <_JIT_ENTRY+0x32> // 65: ff 15 00 00 00 00 callq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 6b: 48 ff 0b decq (%rbx) // 6e: 75 c2 jne 0x32 <_JIT_ENTRY+0x32> // 70: 48 89 df movq %rbx, %rdi // 73: ff 15 00 00 00 00 callq *(%rip) # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 79: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 7d: 58 popq %rax // 7e: ff 25 00 00 00 00 jmpq *(%rip) # 0x84 <_JIT_ENTRY+0x84> // 0000000000000080: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 84: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x8b <_JIT_ENTRY+0x8b> // 0000000000000087: R_X86_64_PC32 .L.str.6-0x4 // 8b: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x92 <_JIT_ENTRY+0x92> // 000000000000008e: R_X86_64_PC32 .L.str.1-0x4 // 92: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x99 <_JIT_ENTRY+0x99> // 0000000000000095: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 99: ba 5e 01 00 00 movl $0x15e, %edx # imm = 0x15E // 9e: ff 15 00 00 00 00 callq *(%rip) # 0xa4 <_JIT_ENTRY+0xa4> // 00000000000000a0: R_X86_64_GOTPCRELX __assert_fail-0x4 // a4: const unsigned char code_body[164] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x4b, 0x10, 0x83, 0xe1, 0x03, 0x48, 0x8b, 0x03, 0x83, 0xf9, 0x01, 0x75, 0x16, 0x85, 0xc0, 0x79, 0x59, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x62, 0x01, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0xcd, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0xc2, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x5e, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00_Py_IsImmortal(value)\x00' // a4: 00 00 00 00 // a8: &PyLong_Type+0x0 // b0: JUMP_TARGET // b8: &_Py_FalseStruct+0x0 // c0: CONTINUE // c8: &_Py_NegativeRefcount+0x0 // d0: &_Py_TrueStruct+0x0 // d8: &_Py_DECREF_DecRefTotal+0x0 // e0: &_Py_Dealloc+0x0 // e8: &__assert_fail+0x0 const unsigned char data_body[240] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x49, 0x73, 0x49, 0x6d, 0x6d, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, (uintptr_t)&PyLong_Type); patch_64(data + 0xb0, instruction_starts[instruction->jump_target]); patch_64(data + 0xb8, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0xc0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xd0, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0xd8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xe0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xe8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x2e, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0xbc); patch_32r(code + 0x45, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x5d, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x75, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x80, (uintptr_t)data + 0xbc); patch_32r(code + 0x87, (uintptr_t)data + 0x8a); patch_32r(code + 0x8e, (uintptr_t)data + -0x4); patch_32r(code + 0x95, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xa0, (uintptr_t)data + 0xe4); } void emit__TO_BOOL_LIST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_TO_BOOL_LIST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyList_Type-0x4 // 10: 74 07 je 0x19 <_JIT_ENTRY+0x19> // 12: 58 popq %rax // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: 48 8b 03 movq (%rbx), %rax // 1c: 4c 8b 73 10 movq 0x10(%rbx), %r14 // 20: 48 85 c0 testq %rax, %rax // 23: 7e 06 jle 0x2b <_JIT_ENTRY+0x2b> // 25: 85 c0 testl %eax, %eax // 27: 79 1e jns 0x47 <_JIT_ENTRY+0x47> // 29: eb 27 jmp 0x52 <_JIT_ENTRY+0x52> // 2b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x32 <_JIT_ENTRY+0x32> // 000000000000002e: R_X86_64_PC32 .L.str.1-0x4 // 32: be 73 01 00 00 movl $0x173, %esi # imm = 0x173 // 37: 48 89 da movq %rbx, %rdx // 3a: ff 15 00 00 00 00 callq *(%rip) # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 40: 48 8b 03 movq (%rbx), %rax // 43: 85 c0 testl %eax, %eax // 45: 78 0b js 0x52 <_JIT_ENTRY+0x52> // 47: ff 15 00 00 00 00 callq *(%rip) # 0x4d <_JIT_ENTRY+0x4d> // 0000000000000049: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 4d: 48 ff 0b decq (%rbx) // 50: 74 17 je 0x69 <_JIT_ENTRY+0x69> // 52: 4d 85 f6 testq %r14, %r14 // 55: 75 20 jne 0x77 <_JIT_ENTRY+0x77> // 57: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 5e: 48 89 45 f8 movq %rax, -0x8(%rbp) // 62: 58 popq %rax // 63: ff 25 00 00 00 00 jmpq *(%rip) # 0x69 <_JIT_ENTRY+0x69> // 0000000000000065: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 69: 48 89 df movq %rbx, %rdi // 6c: ff 15 00 00 00 00 callq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 72: 4d 85 f6 testq %r14, %r14 // 75: 74 e0 je 0x57 <_JIT_ENTRY+0x57> // 77: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 7e: 48 89 45 f8 movq %rax, -0x8(%rbp) // 82: 58 popq %rax // 83: ff 25 00 00 00 00 jmpq *(%rip) # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 83: const unsigned char code_body[131] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8b, 0x73, 0x10, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x73, 0x01, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x17, 0x4d, 0x85, 0xf6, 0x75, 0x20, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4d, 0x85, 0xf6, 0x74, 0xe0, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0x58, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyList_Type+0x0 // 48: JUMP_TARGET // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: &_Py_FalseStruct+0x0 // 68: CONTINUE // 70: &_Py_Dealloc+0x0 // 78: &_Py_TrueStruct+0x0 const unsigned char data_body[128] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyList_Type); patch_64(data + 0x48, instruction_starts[instruction->jump_target]); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0x68, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x70, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x78, (uintptr_t)&_Py_TrueStruct); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0x44); patch_32r(code + 0x2e, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x3c, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x49, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x65, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x6c); patch_x86_64_32rx(code + 0x7a, (uintptr_t)data + 0x74); } void emit__TO_BOOL_NONE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_TO_BOOL_NONE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 45 f8 movq -0x8(%rbp), %rax // 4: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xb <_JIT_ENTRY+0xb> // 0000000000000007: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // b: 74 06 je 0x13 <_JIT_ENTRY+0x13> // d: ff 25 00 00 00 00 jmpq *(%rip) # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 13: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x1a <_JIT_ENTRY+0x1a> // 0000000000000016: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 1a: 48 89 45 f8 movq %rax, -0x8(%rbp) // 1e: ff 25 00 00 00 00 jmpq *(%rip) # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 1e: const unsigned char code_body[30] = { 0x48, 0x8b, 0x45, 0xf8, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x06, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, }; // 0: // 0: &_Py_NoneStruct+0x0 // 8: JUMP_TARGET // 10: &_Py_FalseStruct+0x0 const unsigned char data_body[24] = { 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x0, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0x8, instruction_starts[instruction->jump_target]); patch_64(data + 0x10, (uintptr_t)&_Py_FalseStruct); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x7, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0x4); patch_x86_64_32rx(code + 0x16, (uintptr_t)data + 0xc); } void emit__TO_BOOL_STR( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_TO_BOOL_STR.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 5: 48 8b 43 08 movq 0x8(%rbx), %rax // 9: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x10 <_JIT_ENTRY+0x10> // 000000000000000c: R_X86_64_REX_GOTPCRELX PyUnicode_Type-0x4 // 10: 74 07 je 0x19 <_JIT_ENTRY+0x19> // 12: 58 popq %rax // 13: ff 25 00 00 00 00 jmpq *(%rip) # 0x19 <_JIT_ENTRY+0x19> // 0000000000000015: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 19: b8 a0 ba 00 00 movl $0xbaa0, %eax # imm = 0xBAA0 // 1e: 48 03 05 00 00 00 00 addq (%rip), %rax # 0x25 <_JIT_ENTRY+0x25> // 0000000000000021: R_X86_64_REX_GOTPCRELX _PyRuntime-0x4 // 25: 48 39 c3 cmpq %rax, %rbx // 28: 74 48 je 0x72 <_JIT_ENTRY+0x72> // 2a: 48 83 7b 10 00 cmpq $0x0, 0x10(%rbx) // 2f: 74 77 je 0xa8 <_JIT_ENTRY+0xa8> // 31: 48 8b 03 movq (%rbx), %rax // 34: 48 85 c0 testq %rax, %rax // 37: 7f 18 jg 0x51 <_JIT_ENTRY+0x51> // 39: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_PC32 .L.str.1-0x4 // 40: be 96 01 00 00 movl $0x196, %esi # imm = 0x196 // 45: 48 89 da movq %rbx, %rdx // 48: ff 15 00 00 00 00 callq *(%rip) # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4e: 48 8b 03 movq (%rbx), %rax // 51: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x58 <_JIT_ENTRY+0x58> // 0000000000000054: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 58: 85 c0 testl %eax, %eax // 5a: 78 0b js 0x67 <_JIT_ENTRY+0x67> // 5c: ff 15 00 00 00 00 callq *(%rip) # 0x62 <_JIT_ENTRY+0x62> // 000000000000005e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 62: 48 ff 0b decq (%rbx) // 65: 74 2d je 0x94 <_JIT_ENTRY+0x94> // 67: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 6b: 58 popq %rax // 6c: ff 25 00 00 00 00 jmpq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 72: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x79 <_JIT_ENTRY+0x79> // 0000000000000075: R_X86_64_REX_GOTPCRELX _PyRuntime-0x4 // 79: f6 80 a3 ba 00 00 80 testb $-0x80, 0xbaa3(%rax) // 80: 74 46 je 0xc8 <_JIT_ENTRY+0xc8> // 82: 4c 8b 35 00 00 00 00 movq (%rip), %r14 # 0x89 <_JIT_ENTRY+0x89> // 0000000000000085: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 89: 4c 89 75 f8 movq %r14, -0x8(%rbp) // 8d: 58 popq %rax // 8e: ff 25 00 00 00 00 jmpq *(%rip) # 0x94 <_JIT_ENTRY+0x94> // 0000000000000090: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 94: 48 89 df movq %rbx, %rdi // 97: ff 15 00 00 00 00 callq *(%rip) # 0x9d <_JIT_ENTRY+0x9d> // 0000000000000099: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 9d: 4c 89 75 f8 movq %r14, -0x8(%rbp) // a1: 58 popq %rax // a2: ff 25 00 00 00 00 jmpq *(%rip) # 0xa8 <_JIT_ENTRY+0xa8> // 00000000000000a4: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // a8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xaf <_JIT_ENTRY+0xaf> // 00000000000000ab: R_X86_64_PC32 .L.str.7-0x4 // af: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xb6 <_JIT_ENTRY+0xb6> // 00000000000000b2: R_X86_64_PC32 .L.str.1-0x4 // b6: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xbd <_JIT_ENTRY+0xbd> // 00000000000000b9: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // bd: ba 95 01 00 00 movl $0x195, %edx # imm = 0x195 // c2: ff 15 00 00 00 00 callq *(%rip) # 0xc8 <_JIT_ENTRY+0xc8> // 00000000000000c4: R_X86_64_GOTPCRELX __assert_fail-0x4 // c8: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xcf <_JIT_ENTRY+0xcf> // 00000000000000cb: R_X86_64_PC32 .L.str.6-0x4 // cf: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xd6 <_JIT_ENTRY+0xd6> // 00000000000000d2: R_X86_64_PC32 .L.str.1-0x4 // d6: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xdd <_JIT_ENTRY+0xdd> // 00000000000000d9: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // dd: ba 91 01 00 00 movl $0x191, %edx # imm = 0x191 // e2: ff 15 00 00 00 00 callq *(%rip) # 0xe8 <_JIT_ENTRY+0xe8> // 00000000000000e4: R_X86_64_GOTPCRELX __assert_fail-0x4 // e8: const unsigned char code_body[232] = { 0x50, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x74, 0x07, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0xb8, 0xa0, 0xba, 0x00, 0x00, 0x48, 0x03, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0xc3, 0x74, 0x48, 0x48, 0x83, 0x7b, 0x10, 0x00, 0x74, 0x77, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0x18, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x96, 0x01, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x2d, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xa3, 0xba, 0x00, 0x00, 0x80, 0x74, 0x46, 0x4c, 0x8b, 0x35, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x75, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x95, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x91, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00_Py_IsImmortal(value)\x00Py_SIZE(value)\x00' // b3: 00 00 00 00 00 // b8: &PyUnicode_Type+0x0 // c0: JUMP_TARGET // c8: &_PyRuntime+0x0 // d0: &_Py_NegativeRefcount+0x0 // d8: &_Py_TrueStruct+0x0 // e0: &_Py_DECREF_DecRefTotal+0x0 // e8: CONTINUE // f0: &_Py_FalseStruct+0x0 // f8: &_Py_Dealloc+0x0 // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x49, 0x73, 0x49, 0x6d, 0x6d, 0x6f, 0x72, 0x74, 0x61, 0x6c, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x00, 0x50, 0x79, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xb8, (uintptr_t)&PyUnicode_Type); patch_64(data + 0xc0, instruction_starts[instruction->jump_target]); patch_64(data + 0xc8, (uintptr_t)&_PyRuntime); patch_64(data + 0xd0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xd8, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0xe0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xe8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf0, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0xf8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xc, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x15, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x21, (uintptr_t)data + 0xc4); patch_32r(code + 0x3c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4a, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x54, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x5e, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x75, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x85, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0x90, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0x99, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0xa4, (uintptr_t)data + 0xe4); patch_32r(code + 0xab, (uintptr_t)data + 0xa0); patch_32r(code + 0xb2, (uintptr_t)data + -0x4); patch_32r(code + 0xb9, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xc4, (uintptr_t)data + 0xfc); patch_32r(code + 0xcb, (uintptr_t)data + 0x8a); patch_32r(code + 0xd2, (uintptr_t)data + -0x4); patch_32r(code + 0xd9, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xe4, (uintptr_t)data + 0xfc); } void emit__UNARY_INVERT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNARY_INVERT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 4c 89 f7 movq %r14, %rdi // 8: ff 15 00 00 00 00 callq *(%rip) # 0xe <_JIT_ENTRY+0xe> // 000000000000000a: R_X86_64_GOTPCRELX PyNumber_Invert-0x4 // e: 48 89 c3 movq %rax, %rbx // 11: 49 8b 06 movq (%r14), %rax // 14: 48 85 c0 testq %rax, %rax // 17: 7e 06 jle 0x1f <_JIT_ENTRY+0x1f> // 19: 85 c0 testl %eax, %eax // 1b: 79 1e jns 0x3b <_JIT_ENTRY+0x3b> // 1d: eb 27 jmp 0x46 <_JIT_ENTRY+0x46> // 1f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_PC32 .L.str.1-0x4 // 26: be ac 01 00 00 movl $0x1ac, %esi # imm = 0x1AC // 2b: 4c 89 f2 movq %r14, %rdx // 2e: ff 15 00 00 00 00 callq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 34: 49 8b 06 movq (%r14), %rax // 37: 85 c0 testl %eax, %eax // 39: 78 0b js 0x46 <_JIT_ENTRY+0x46> // 3b: ff 15 00 00 00 00 callq *(%rip) # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 41: 49 ff 0e decq (%r14) // 44: 74 10 je 0x56 <_JIT_ENTRY+0x56> // 46: 48 85 db testq %rbx, %rbx // 49: 74 19 je 0x64 <_JIT_ENTRY+0x64> // 4b: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 4f: 58 popq %rax // 50: ff 25 00 00 00 00 jmpq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 56: 4c 89 f7 movq %r14, %rdi // 59: ff 15 00 00 00 00 callq *(%rip) # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 5f: 48 85 db testq %rbx, %rbx // 62: 75 e7 jne 0x4b <_JIT_ENTRY+0x4b> // 64: 58 popq %rax // 65: ff 25 00 00 00 00 jmpq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 6b: const unsigned char code_body[107] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xac, 0x01, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x10, 0x48, 0x85, 0xdb, 0x74, 0x19, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe7, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyNumber_Invert+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: CONTINUE // 60: &_Py_Dealloc+0x0 // 68: ERROR_TARGET const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyNumber_Invert); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x68, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xa, (uintptr_t)data + 0x3c); patch_32r(code + 0x22, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x5b, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0x64); } void emit__UNARY_NEGATIVE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNARY_NEGATIVE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // 5: 4c 89 f7 movq %r14, %rdi // 8: ff 15 00 00 00 00 callq *(%rip) # 0xe <_JIT_ENTRY+0xe> // 000000000000000a: R_X86_64_GOTPCRELX PyNumber_Negative-0x4 // e: 48 89 c3 movq %rax, %rbx // 11: 49 8b 06 movq (%r14), %rax // 14: 48 85 c0 testq %rax, %rax // 17: 7e 06 jle 0x1f <_JIT_ENTRY+0x1f> // 19: 85 c0 testl %eax, %eax // 1b: 79 1e jns 0x3b <_JIT_ENTRY+0x3b> // 1d: eb 27 jmp 0x46 <_JIT_ENTRY+0x46> // 1f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x26 <_JIT_ENTRY+0x26> // 0000000000000022: R_X86_64_PC32 .L.str.1-0x4 // 26: be 2d 01 00 00 movl $0x12d, %esi # imm = 0x12D // 2b: 4c 89 f2 movq %r14, %rdx // 2e: ff 15 00 00 00 00 callq *(%rip) # 0x34 <_JIT_ENTRY+0x34> // 0000000000000030: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 34: 49 8b 06 movq (%r14), %rax // 37: 85 c0 testl %eax, %eax // 39: 78 0b js 0x46 <_JIT_ENTRY+0x46> // 3b: ff 15 00 00 00 00 callq *(%rip) # 0x41 <_JIT_ENTRY+0x41> // 000000000000003d: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 41: 49 ff 0e decq (%r14) // 44: 74 10 je 0x56 <_JIT_ENTRY+0x56> // 46: 48 85 db testq %rbx, %rbx // 49: 74 19 je 0x64 <_JIT_ENTRY+0x64> // 4b: 48 89 5d f8 movq %rbx, -0x8(%rbp) // 4f: 58 popq %rax // 50: ff 25 00 00 00 00 jmpq *(%rip) # 0x56 <_JIT_ENTRY+0x56> // 0000000000000052: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 56: 4c 89 f7 movq %r14, %rdi // 59: ff 15 00 00 00 00 callq *(%rip) # 0x5f <_JIT_ENTRY+0x5f> // 000000000000005b: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 5f: 48 85 db testq %rbx, %rbx // 62: 75 e7 jne 0x4b <_JIT_ENTRY+0x4b> // 64: 58 popq %rax // 65: ff 25 00 00 00 00 jmpq *(%rip) # 0x6b <_JIT_ENTRY+0x6b> // 0000000000000067: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 6b: const unsigned char code_body[107] = { 0x50, 0x4c, 0x8b, 0x75, 0xf8, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x2d, 0x01, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x10, 0x48, 0x85, 0xdb, 0x74, 0x19, 0x48, 0x89, 0x5d, 0xf8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xdb, 0x75, 0xe7, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: &PyNumber_Negative+0x0 // 48: &_Py_NegativeRefcount+0x0 // 50: &_Py_DECREF_DecRefTotal+0x0 // 58: CONTINUE // 60: &_Py_Dealloc+0x0 // 68: ERROR_TARGET const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)&PyNumber_Negative); patch_64(data + 0x48, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x50, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x58, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x60, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x68, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xa, (uintptr_t)data + 0x3c); patch_32r(code + 0x22, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x30, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x3d, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x52, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x5b, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x67, (uintptr_t)data + 0x64); } void emit__UNARY_NOT( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNARY_NOT.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 8b 4d f8 movq -0x8(%rbp), %rcx // 4: 48 8b 41 08 movq 0x8(%rcx), %rax // 8: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0xf <_JIT_ENTRY+0xf> // 000000000000000b: R_X86_64_REX_GOTPCRELX PyBool_Type-0x4 // f: 75 1d jne 0x2e <_JIT_ENTRY+0x2e> // 11: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x18 <_JIT_ENTRY+0x18> // 0000000000000014: R_X86_64_REX_GOTPCRELX _Py_FalseStruct-0x4 // 18: 48 39 c1 cmpq %rax, %rcx // 1b: 75 07 jne 0x24 <_JIT_ENTRY+0x24> // 1d: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x24 <_JIT_ENTRY+0x24> // 0000000000000020: R_X86_64_REX_GOTPCRELX _Py_TrueStruct-0x4 // 24: 48 89 45 f8 movq %rax, -0x8(%rbp) // 28: ff 25 00 00 00 00 jmpq *(%rip) # 0x2e <_JIT_ENTRY+0x2e> // 000000000000002a: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 2e: 50 pushq %rax // 2f: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x36 <_JIT_ENTRY+0x36> // 0000000000000032: R_X86_64_PC32 .L.str.5-0x4 // 36: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_PC32 .L.str.1-0x4 // 3d: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x44 <_JIT_ENTRY+0x44> // 0000000000000040: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 44: ba 37 01 00 00 movl $0x137, %edx # imm = 0x137 // 49: ff 15 00 00 00 00 callq *(%rip) # 0x4f <_JIT_ENTRY+0x4f> // 000000000000004b: R_X86_64_GOTPCRELX __assert_fail-0x4 // 4f: const unsigned char code_body[79] = { 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x1d, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0xc1, 0x75, 0x07, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x45, 0xf8, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x50, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x37, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00PyBool_Check(value)\x00' // a2: 00 00 00 00 00 00 // a8: &PyBool_Type+0x0 // b0: &_Py_FalseStruct+0x0 // b8: &_Py_TrueStruct+0x0 // c0: CONTINUE // c8: &__assert_fail+0x0 const unsigned char data_body[208] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x50, 0x79, 0x42, 0x6f, 0x6f, 0x6c, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x61, 0x6c, 0x75, 0x65, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xa8, (uintptr_t)&PyBool_Type); patch_64(data + 0xb0, (uintptr_t)&_Py_FalseStruct); patch_64(data + 0xb8, (uintptr_t)&_Py_TrueStruct); patch_64(data + 0xc0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xc8, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xb, (uintptr_t)data + 0xa4); patch_x86_64_32rx(code + 0x14, (uintptr_t)data + 0xac); patch_x86_64_32rx(code + 0x20, (uintptr_t)data + 0xb4); patch_x86_64_32rx(code + 0x2a, (uintptr_t)data + 0xbc); patch_32r(code + 0x32, (uintptr_t)data + 0x8a); patch_32r(code + 0x39, (uintptr_t)data + -0x4); patch_32r(code + 0x40, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x4b, (uintptr_t)data + 0xc4); } void emit__UNPACK_EX( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNPACK_EX.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 8b 05 00 00 00 00 movl (%rip), %eax # 0x7 <_JIT_ENTRY+0x7> // 0000000000000003: R_X86_64_GOTPCRELX _JIT_OPARG-0x4 // 7: 48 8b 5d f8 movq -0x8(%rbp), %rbx // b: 0f b6 d0 movzbl %al, %edx // e: 0f b6 cc movzbl %ah, %ecx // 11: 8d 04 11 leal (%rcx,%rdx), %eax // 14: 4c 8d 74 c5 00 leaq (%rbp,%rax,8), %r14 // 19: 4c 89 e7 movq %r12, %rdi // 1c: 48 89 de movq %rbx, %rsi // 1f: 4d 89 f0 movq %r14, %r8 // 22: ff 15 00 00 00 00 callq *(%rip) # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_GOTPCRELX _PyEval_UnpackIterable-0x4 // 28: 41 89 c7 movl %eax, %r15d // 2b: 48 8b 03 movq (%rbx), %rax // 2e: 48 85 c0 testq %rax, %rax // 31: 7e 06 jle 0x39 <_JIT_ENTRY+0x39> // 33: 85 c0 testl %eax, %eax // 35: 79 1e jns 0x55 <_JIT_ENTRY+0x55> // 37: eb 27 jmp 0x60 <_JIT_ENTRY+0x60> // 39: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x40 <_JIT_ENTRY+0x40> // 000000000000003c: R_X86_64_PC32 .L.str.1-0x4 // 40: be 2a 05 00 00 movl $0x52a, %esi # imm = 0x52A // 45: 48 89 da movq %rbx, %rdx // 48: ff 15 00 00 00 00 callq *(%rip) # 0x4e <_JIT_ENTRY+0x4e> // 000000000000004a: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 4e: 48 8b 03 movq (%rbx), %rax // 51: 85 c0 testl %eax, %eax // 53: 78 0b js 0x60 <_JIT_ENTRY+0x60> // 55: ff 15 00 00 00 00 callq *(%rip) # 0x5b <_JIT_ENTRY+0x5b> // 0000000000000057: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5b: 48 ff 0b decq (%rbx) // 5e: 74 0f je 0x6f <_JIT_ENTRY+0x6f> // 60: 45 85 ff testl %r15d, %r15d // 63: 74 18 je 0x7d <_JIT_ENTRY+0x7d> // 65: 4c 89 f5 movq %r14, %rbp // 68: 58 popq %rax // 69: ff 25 00 00 00 00 jmpq *(%rip) # 0x6f <_JIT_ENTRY+0x6f> // 000000000000006b: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 6f: 48 89 df movq %rbx, %rdi // 72: ff 15 00 00 00 00 callq *(%rip) # 0x78 <_JIT_ENTRY+0x78> // 0000000000000074: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 78: 45 85 ff testl %r15d, %r15d // 7b: 75 e8 jne 0x65 <_JIT_ENTRY+0x65> // 7d: 58 popq %rax // 7e: ff 25 00 00 00 00 jmpq *(%rip) # 0x84 <_JIT_ENTRY+0x84> // 0000000000000080: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 84: const unsigned char code_body[132] = { 0x50, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x0f, 0xb6, 0xd0, 0x0f, 0xb6, 0xcc, 0x8d, 0x04, 0x11, 0x4c, 0x8d, 0x74, 0xc5, 0x00, 0x4c, 0x89, 0xe7, 0x48, 0x89, 0xde, 0x4d, 0x89, 0xf0, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc7, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x2a, 0x05, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x0f, 0x45, 0x85, 0xff, 0x74, 0x18, 0x4c, 0x89, 0xf5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xff, 0x75, 0xe8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_PyEval_UnpackIterable+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: CONTINUE // 68: &_Py_Dealloc+0x0 // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_PyEval_UnpackIterable); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x3, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0x44); patch_32r(code + 0x3c, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4a, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x57, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x6b, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x74, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x80, (uintptr_t)data + 0x6c); } void emit__UNPACK_SEQUENCE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNPACK_SEQUENCE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 0f b7 15 00 00 00 00 movzwl (%rip), %edx # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 8: 4c 8b 75 f8 movq -0x8(%rbp), %r14 // c: 48 8d 1c d5 f8 ff ff ff leaq -0x8(,%rdx,8), %rbx // 14: 48 01 eb addq %rbp, %rbx // 17: 4c 89 e7 movq %r12, %rdi // 1a: 4c 89 f6 movq %r14, %rsi // 1d: b9 ff ff ff ff movl $0xffffffff, %ecx # imm = 0xFFFFFFFF // 22: 49 89 d8 movq %rbx, %r8 // 25: ff 15 00 00 00 00 callq *(%rip) # 0x2b <_JIT_ENTRY+0x2b> // 0000000000000027: R_X86_64_GOTPCRELX _PyEval_UnpackIterable-0x4 // 2b: 41 89 c7 movl %eax, %r15d // 2e: 49 8b 06 movq (%r14), %rax // 31: 48 85 c0 testq %rax, %rax // 34: 7e 06 jle 0x3c <_JIT_ENTRY+0x3c> // 36: 85 c0 testl %eax, %eax // 38: 79 1e jns 0x58 <_JIT_ENTRY+0x58> // 3a: eb 27 jmp 0x63 <_JIT_ENTRY+0x63> // 3c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x43 <_JIT_ENTRY+0x43> // 000000000000003f: R_X86_64_PC32 .L.str.1-0x4 // 43: be d4 04 00 00 movl $0x4d4, %esi # imm = 0x4D4 // 48: 4c 89 f2 movq %r14, %rdx // 4b: ff 15 00 00 00 00 callq *(%rip) # 0x51 <_JIT_ENTRY+0x51> // 000000000000004d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 51: 49 8b 06 movq (%r14), %rax // 54: 85 c0 testl %eax, %eax // 56: 78 0b js 0x63 <_JIT_ENTRY+0x63> // 58: ff 15 00 00 00 00 callq *(%rip) # 0x5e <_JIT_ENTRY+0x5e> // 000000000000005a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 5e: 49 ff 0e decq (%r14) // 61: 74 0f je 0x72 <_JIT_ENTRY+0x72> // 63: 45 85 ff testl %r15d, %r15d // 66: 74 18 je 0x80 <_JIT_ENTRY+0x80> // 68: 48 89 dd movq %rbx, %rbp // 6b: 58 popq %rax // 6c: ff 25 00 00 00 00 jmpq *(%rip) # 0x72 <_JIT_ENTRY+0x72> // 000000000000006e: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 72: 4c 89 f7 movq %r14, %rdi // 75: ff 15 00 00 00 00 callq *(%rip) # 0x7b <_JIT_ENTRY+0x7b> // 0000000000000077: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 7b: 45 85 ff testl %r15d, %r15d // 7e: 75 e8 jne 0x68 <_JIT_ENTRY+0x68> // 80: 58 popq %rax // 81: ff 25 00 00 00 00 jmpq *(%rip) # 0x87 <_JIT_ENTRY+0x87> // 0000000000000083: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 87: const unsigned char code_body[135] = { 0x50, 0x0f, 0xb7, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x75, 0xf8, 0x48, 0x8d, 0x1c, 0xd5, 0xf8, 0xff, 0xff, 0xff, 0x48, 0x01, 0xeb, 0x4c, 0x89, 0xe7, 0x4c, 0x89, 0xf6, 0xb9, 0xff, 0xff, 0xff, 0xff, 0x49, 0x89, 0xd8, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0xc7, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x27, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xd4, 0x04, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x74, 0x0f, 0x45, 0x85, 0xff, 0x74, 0x18, 0x48, 0x89, 0xdd, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x45, 0x85, 0xff, 0x75, 0xe8, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00' // 40: // 40: OPARG // 48: &_PyEval_UnpackIterable+0x0 // 50: &_Py_NegativeRefcount+0x0 // 58: &_Py_DECREF_DecRefTotal+0x0 // 60: CONTINUE // 68: &_Py_Dealloc+0x0 // 70: ERROR_TARGET const unsigned char data_body[120] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, instruction->oparg); patch_64(data + 0x48, (uintptr_t)&_PyEval_UnpackIterable); patch_64(data + 0x50, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x58, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x60, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x70, instruction_starts[instruction->error_target]); memcpy(code, code_body, sizeof(code_body)); patch_32r(code + 0x4, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x27, (uintptr_t)data + 0x44); patch_32r(code + 0x3f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x4d, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x5a, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x6e, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x77, (uintptr_t)data + 0x64); patch_x86_64_32rx(code + 0x83, (uintptr_t)data + 0x6c); } void emit__UNPACK_SEQUENCE_LIST( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNPACK_SEQUENCE_LIST.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 48 8b 4d f8 movq -0x8(%rbp), %rcx // 8: 48 8b 41 08 movq 0x8(%rcx), %rax // c: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x13 <_JIT_ENTRY+0x13> // 000000000000000f: R_X86_64_REX_GOTPCRELX PyList_Type-0x4 // 13: 0f 85 80 00 00 00 jne 0x99 <_JIT_ENTRY+0x99> // 19: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_REX_GOTPCRELX PyList_Type-0x4 // 20: f6 80 ab 00 00 00 02 testb $0x2, 0xab(%rax) // 27: 0f 84 e9 00 00 00 je 0x116 <_JIT_ENTRY+0x116> // 2d: 48 8b 51 10 movq 0x10(%rcx), %rdx // 31: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x38 <_JIT_ENTRY+0x38> // 0000000000000034: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 38: 48 39 c2 cmpq %rax, %rdx // 3b: 75 5c jne 0x99 <_JIT_ENTRY+0x99> // 3d: 48 89 14 24 movq %rdx, (%rsp) // 41: 48 89 4c 24 08 movq %rcx, 0x8(%rsp) // 46: 4c 89 64 24 10 movq %r12, 0x10(%rsp) // 4b: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 52: 66 85 c0 testw %ax, %ax // 55: 74 4c je 0xa3 <_JIT_ENTRY+0xa3> // 57: 4c 8d 7d f8 leaq -0x8(%rbp), %r15 // 5b: 48 8b 44 24 08 movq 0x8(%rsp), %rax // 60: 4c 8b 70 18 movq 0x18(%rax), %r14 // 64: 48 8b 04 24 movq (%rsp), %rax // 68: 48 8d 58 01 leaq 0x1(%rax), %rbx // 6c: eb 12 jmp 0x80 <_JIT_ENTRY+0x80> // 6e: 66 90 nop // 70: 4d 89 27 movq %r12, (%r15) // 73: 49 83 c7 08 addq $0x8, %r15 // 77: 48 ff cb decq %rbx // 7a: 48 83 fb 01 cmpq $0x1, %rbx // 7e: 76 23 jbe 0xa3 <_JIT_ENTRY+0xa3> // 80: 4d 8b 64 de f0 movq -0x10(%r14,%rbx,8), %r12 // 85: 41 8b 04 24 movl (%r12), %eax // 89: ff c0 incl %eax // 8b: 74 e3 je 0x70 <_JIT_ENTRY+0x70> // 8d: 41 89 04 24 movl %eax, (%r12) // 91: ff 15 00 00 00 00 callq *(%rip) # 0x97 <_JIT_ENTRY+0x97> // 0000000000000093: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 97: eb d7 jmp 0x70 <_JIT_ENTRY+0x70> // 99: 48 83 c4 18 addq $0x18, %rsp // 9d: ff 25 00 00 00 00 jmpq *(%rip) # 0xa3 <_JIT_ENTRY+0xa3> // 000000000000009f: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // a3: 48 8b 5c 24 08 movq 0x8(%rsp), %rbx // a8: 48 8b 03 movq (%rbx), %rax // ab: 48 85 c0 testq %rax, %rax // ae: 7e 0b jle 0xbb <_JIT_ENTRY+0xbb> // b0: 85 c0 testl %eax, %eax // b2: 4c 8b 64 24 10 movq 0x10(%rsp), %r12 // b7: 78 2e js 0xe7 <_JIT_ENTRY+0xe7> // b9: eb 21 jmp 0xdc <_JIT_ENTRY+0xdc> // bb: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc2 <_JIT_ENTRY+0xc2> // 00000000000000be: R_X86_64_PC32 .L.str.1-0x4 // c2: be 1e 05 00 00 movl $0x51e, %esi # imm = 0x51E // c7: 48 89 da movq %rbx, %rdx // ca: ff 15 00 00 00 00 callq *(%rip) # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // d0: 48 8b 03 movq (%rbx), %rax // d3: 85 c0 testl %eax, %eax // d5: 4c 8b 64 24 10 movq 0x10(%rsp), %r12 // da: 78 0b js 0xe7 <_JIT_ENTRY+0xe7> // dc: ff 15 00 00 00 00 callq *(%rip) # 0xe2 <_JIT_ENTRY+0xe2> // 00000000000000de: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // e2: 48 ff 0b decq (%rbx) // e5: 74 13 je 0xfa <_JIT_ENTRY+0xfa> // e7: 48 8b 04 24 movq (%rsp), %rax // eb: 48 8d 6c c5 f8 leaq -0x8(%rbp,%rax,8), %rbp // f0: 48 83 c4 18 addq $0x18, %rsp // f4: ff 25 00 00 00 00 jmpq *(%rip) # 0xfa <_JIT_ENTRY+0xfa> // 00000000000000f6: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // fa: 48 89 df movq %rbx, %rdi // fd: ff 15 00 00 00 00 callq *(%rip) # 0x103 <_JIT_ENTRY+0x103> // 00000000000000ff: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 103: 48 8b 04 24 movq (%rsp), %rax // 107: 48 8d 6c c5 f8 leaq -0x8(%rbp,%rax,8), %rbp // 10c: 48 83 c4 18 addq $0x18, %rsp // 110: ff 25 00 00 00 00 jmpq *(%rip) # 0x116 <_JIT_ENTRY+0x116> // 0000000000000112: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 116: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x11d <_JIT_ENTRY+0x11d> // 0000000000000119: R_X86_64_PC32 .L.str.122-0x4 // 11d: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x124 <_JIT_ENTRY+0x124> // 0000000000000120: R_X86_64_PC32 .L.str.123-0x4 // 124: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x12b <_JIT_ENTRY+0x12b> // 0000000000000127: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyList_GET_SIZE-0x4 // 12b: ba 1f 00 00 00 movl $0x1f, %edx // 130: ff 15 00 00 00 00 callq *(%rip) # 0x136 <_JIT_ENTRY+0x136> // 0000000000000132: R_X86_64_GOTPCRELX __assert_fail-0x4 // 136: const unsigned char code_body[310] = { 0x48, 0x83, 0xec, 0x18, 0x48, 0x8b, 0x4d, 0xf8, 0x48, 0x8b, 0x41, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x85, 0x80, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x02, 0x0f, 0x84, 0xe9, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x51, 0x10, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0xc2, 0x75, 0x5c, 0x48, 0x89, 0x14, 0x24, 0x48, 0x89, 0x4c, 0x24, 0x08, 0x4c, 0x89, 0x64, 0x24, 0x10, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x74, 0x4c, 0x4c, 0x8d, 0x7d, 0xf8, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x4c, 0x8b, 0x70, 0x18, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x8d, 0x58, 0x01, 0xeb, 0x12, 0x66, 0x90, 0x4d, 0x89, 0x27, 0x49, 0x83, 0xc7, 0x08, 0x48, 0xff, 0xcb, 0x48, 0x83, 0xfb, 0x01, 0x76, 0x23, 0x4d, 0x8b, 0x64, 0xde, 0xf0, 0x41, 0x8b, 0x04, 0x24, 0xff, 0xc0, 0x74, 0xe3, 0x41, 0x89, 0x04, 0x24, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xd7, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5c, 0x24, 0x08, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x0b, 0x85, 0xc0, 0x4c, 0x8b, 0x64, 0x24, 0x10, 0x78, 0x2e, 0xeb, 0x21, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x1e, 0x05, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x4c, 0x8b, 0x64, 0x24, 0x10, 0x78, 0x0b, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x74, 0x13, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x8d, 0x6c, 0xc5, 0xf8, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x04, 0x24, 0x48, 0x8d, 0x6c, 0xc5, 0xf8, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x1f, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyList_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/listobject.h\x00Py_ssize_t PyList_GET_SIZE(PyObject *)\x00' // bb: 00 00 00 00 00 // c0: &PyList_Type+0x0 // c8: OPARG // d0: &_Py_INCREF_IncRefTotal+0x0 // d8: JUMP_TARGET // e0: &_Py_NegativeRefcount+0x0 // e8: &_Py_DECREF_DecRefTotal+0x0 // f0: CONTINUE // f8: &_Py_Dealloc+0x0 // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x6c, 0x69, 0x73, 0x74, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x4c, 0x69, 0x73, 0x74, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc0, (uintptr_t)&PyList_Type); patch_64(data + 0xc8, instruction->oparg); patch_64(data + 0xd0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xd8, instruction_starts[instruction->jump_target]); patch_64(data + 0xe0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xe8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xf0, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0xf8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0xf, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0xbc); patch_32r(code + 0x34, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x93, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x9f, (uintptr_t)data + 0xd4); patch_32r(code + 0xbe, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xcc, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0xde, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0xf6, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0xff, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0x112, (uintptr_t)data + 0xec); patch_32r(code + 0x119, (uintptr_t)data + 0x3c); patch_32r(code + 0x120, (uintptr_t)data + 0x4d); patch_32r(code + 0x127, (uintptr_t)data + 0x90); patch_x86_64_32rx(code + 0x132, (uintptr_t)data + 0xfc); } void emit__UNPACK_SEQUENCE_TUPLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNPACK_SEQUENCE_TUPLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 18 subq $0x18, %rsp // 4: 4c 89 e1 movq %r12, %rcx // 7: 4c 8b 65 f8 movq -0x8(%rbp), %r12 // b: 49 8b 44 24 08 movq 0x8(%r12), %rax // 10: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x17 <_JIT_ENTRY+0x17> // 0000000000000013: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 17: 75 7c jne 0x95 <_JIT_ENTRY+0x95> // 19: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x20 <_JIT_ENTRY+0x20> // 000000000000001c: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 20: f6 80 ab 00 00 00 04 testb $0x4, 0xab(%rax) // 27: 0f 84 cf 00 00 00 je 0xfc <_JIT_ENTRY+0xfc> // 2d: 49 8b 54 24 10 movq 0x10(%r12), %rdx // 32: 0f b7 05 00 00 00 00 movzwl (%rip), %eax # 0x39 <_JIT_ENTRY+0x39> // 0000000000000035: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 39: 48 39 c2 cmpq %rax, %rdx // 3c: 75 57 jne 0x95 <_JIT_ENTRY+0x95> // 3e: 48 89 54 24 08 movq %rdx, 0x8(%rsp) // 43: 4c 89 6c 24 10 movq %r13, 0x10(%rsp) // 48: 49 89 cd movq %rcx, %r13 // 4b: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x52 <_JIT_ENTRY+0x52> // 000000000000004e: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 52: 66 85 c0 testw %ax, %ax // 55: 74 4b je 0xa2 <_JIT_ENTRY+0xa2> // 57: 4c 8d 7d f8 leaq -0x8(%rbp), %r15 // 5b: 48 8b 44 24 08 movq 0x8(%rsp), %rax // 60: 4c 8d 70 01 leaq 0x1(%rax), %r14 // 64: eb 1a jmp 0x80 <_JIT_ENTRY+0x80> // 66: 66 2e 0f 1f 84 00 00 00 00 00 nopw %cs:(%rax,%rax) // 70: 49 89 1f movq %rbx, (%r15) // 73: 49 83 c7 08 addq $0x8, %r15 // 77: 49 ff ce decq %r14 // 7a: 49 83 fe 01 cmpq $0x1, %r14 // 7e: 76 22 jbe 0xa2 <_JIT_ENTRY+0xa2> // 80: 4b 8b 5c f4 08 movq 0x8(%r12,%r14,8), %rbx // 85: 8b 03 movl (%rbx), %eax // 87: ff c0 incl %eax // 89: 74 e5 je 0x70 <_JIT_ENTRY+0x70> // 8b: 89 03 movl %eax, (%rbx) // 8d: ff 15 00 00 00 00 callq *(%rip) # 0x93 <_JIT_ENTRY+0x93> // 000000000000008f: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 93: eb db jmp 0x70 <_JIT_ENTRY+0x70> // 95: 49 89 cc movq %rcx, %r12 // 98: 48 83 c4 18 addq $0x18, %rsp // 9c: ff 25 00 00 00 00 jmpq *(%rip) # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // a2: 49 8b 04 24 movq (%r12), %rax // a6: 48 85 c0 testq %rax, %rax // a9: 7f 19 jg 0xc4 <_JIT_ENTRY+0xc4> // ab: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xb2 <_JIT_ENTRY+0xb2> // 00000000000000ae: R_X86_64_PC32 .L.str.1-0x4 // b2: be 06 05 00 00 movl $0x506, %esi # imm = 0x506 // b7: 4c 89 e2 movq %r12, %rdx // ba: ff 15 00 00 00 00 callq *(%rip) # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // c0: 49 8b 04 24 movq (%r12), %rax // c4: 85 c0 testl %eax, %eax // c6: 4c 89 eb movq %r13, %rbx // c9: 4c 8b 6c 24 10 movq 0x10(%rsp), %r13 // ce: 78 15 js 0xe5 <_JIT_ENTRY+0xe5> // d0: ff 15 00 00 00 00 callq *(%rip) # 0xd6 <_JIT_ENTRY+0xd6> // 00000000000000d2: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // d6: 49 ff 0c 24 decq (%r12) // da: 75 09 jne 0xe5 <_JIT_ENTRY+0xe5> // dc: 4c 89 e7 movq %r12, %rdi // df: ff 15 00 00 00 00 callq *(%rip) # 0xe5 <_JIT_ENTRY+0xe5> // 00000000000000e1: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // e5: 48 8b 44 24 08 movq 0x8(%rsp), %rax // ea: 48 8d 6c c5 f8 leaq -0x8(%rbp,%rax,8), %rbp // ef: 49 89 dc movq %rbx, %r12 // f2: 48 83 c4 18 addq $0x18, %rsp // f6: ff 25 00 00 00 00 jmpq *(%rip) # 0xfc <_JIT_ENTRY+0xfc> // 00000000000000f8: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // fc: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x103 <_JIT_ENTRY+0x103> // 00000000000000ff: R_X86_64_PC32 .L.str.132-0x4 // 103: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x10a <_JIT_ENTRY+0x10a> // 0000000000000106: R_X86_64_PC32 .L.str.133-0x4 // 10a: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x111 <_JIT_ENTRY+0x111> // 000000000000010d: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyTuple_GET_SIZE-0x4 // 111: ba 16 00 00 00 movl $0x16, %edx // 116: ff 15 00 00 00 00 callq *(%rip) # 0x11c <_JIT_ENTRY+0x11c> // 0000000000000118: R_X86_64_GOTPCRELX __assert_fail-0x4 // 11c: const unsigned char code_body[284] = { 0x48, 0x83, 0xec, 0x18, 0x4c, 0x89, 0xe1, 0x4c, 0x8b, 0x65, 0xf8, 0x49, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x7c, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xcf, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x54, 0x24, 0x10, 0x0f, 0xb7, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x39, 0xc2, 0x75, 0x57, 0x48, 0x89, 0x54, 0x24, 0x08, 0x4c, 0x89, 0x6c, 0x24, 0x10, 0x49, 0x89, 0xcd, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x74, 0x4b, 0x4c, 0x8d, 0x7d, 0xf8, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x4c, 0x8d, 0x70, 0x01, 0xeb, 0x1a, 0x66, 0x2e, 0x0f, 0x1f, 0x84, 0x00, 0x00, 0x00, 0x00, 0x00, 0x49, 0x89, 0x1f, 0x49, 0x83, 0xc7, 0x08, 0x49, 0xff, 0xce, 0x49, 0x83, 0xfe, 0x01, 0x76, 0x22, 0x4b, 0x8b, 0x5c, 0xf4, 0x08, 0x8b, 0x03, 0xff, 0xc0, 0x74, 0xe5, 0x89, 0x03, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0xeb, 0xdb, 0x49, 0x89, 0xcc, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x04, 0x24, 0x48, 0x85, 0xc0, 0x7f, 0x19, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x06, 0x05, 0x00, 0x00, 0x4c, 0x89, 0xe2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x04, 0x24, 0x85, 0xc0, 0x4c, 0x89, 0xeb, 0x4c, 0x8b, 0x6c, 0x24, 0x10, 0x78, 0x15, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0c, 0x24, 0x75, 0x09, 0x4c, 0x89, 0xe7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x44, 0x24, 0x08, 0x48, 0x8d, 0x6c, 0xc5, 0xf8, 0x49, 0x89, 0xdc, 0x48, 0x83, 0xc4, 0x18, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x16, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00PyTuple_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/tupleobject.h\x00Py_ssize_t PyTuple_GET_SIZE(PyObject *)\x00' // be: 00 00 // c0: &PyTuple_Type+0x0 // c8: OPARG // d0: &_Py_INCREF_IncRefTotal+0x0 // d8: JUMP_TARGET // e0: &_Py_NegativeRefcount+0x0 // e8: &_Py_DECREF_DecRefTotal+0x0 // f0: &_Py_Dealloc+0x0 // f8: CONTINUE // 100: &__assert_fail+0x0 const unsigned char data_body[264] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc0, (uintptr_t)&PyTuple_Type); patch_64(data + 0xc8, instruction->oparg); patch_64(data + 0xd0, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0xd8, instruction_starts[instruction->jump_target]); patch_64(data + 0xe0, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xe8, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xf0, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xf8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x100, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x13, (uintptr_t)data + 0xbc); patch_x86_64_32rx(code + 0x1c, (uintptr_t)data + 0xbc); patch_32r(code + 0x35, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x4e, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x8f, (uintptr_t)data + 0xcc); patch_x86_64_32rx(code + 0x9e, (uintptr_t)data + 0xd4); patch_32r(code + 0xae, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xbc, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0xd2, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0xe1, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0xf8, (uintptr_t)data + 0xf4); patch_32r(code + 0xff, (uintptr_t)data + 0x3c); patch_32r(code + 0x106, (uintptr_t)data + 0x4e); patch_32r(code + 0x10d, (uintptr_t)data + 0x92); patch_x86_64_32rx(code + 0x118, (uintptr_t)data + 0xfc); } void emit__UNPACK_SEQUENCE_TWO_TUPLE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_UNPACK_SEQUENCE_TWO_TUPLE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x8 <_JIT_ENTRY+0x8> // 0000000000000004: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 8: 66 83 f8 02 cmpw $0x2, %ax // c: 0f 85 cf 00 00 00 jne 0xe1 <_JIT_ENTRY+0xe1> // 12: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 16: 48 8b 43 08 movq 0x8(%rbx), %rax // 1a: 48 3b 05 00 00 00 00 cmpq (%rip), %rax # 0x21 <_JIT_ENTRY+0x21> // 000000000000001d: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 21: 75 63 jne 0x86 <_JIT_ENTRY+0x86> // 23: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x2a <_JIT_ENTRY+0x2a> // 0000000000000026: R_X86_64_REX_GOTPCRELX PyTuple_Type-0x4 // 2a: 48 8b 80 a8 00 00 00 movq 0xa8(%rax), %rax // 31: a9 00 00 00 04 testl $0x4000000, %eax # imm = 0x4000000 // 36: 0f 84 c5 00 00 00 je 0x101 <_JIT_ENTRY+0x101> // 3c: 48 83 7b 10 02 cmpq $0x2, 0x10(%rbx) // 41: 75 43 jne 0x86 <_JIT_ENTRY+0x86> // 43: 4c 8b 73 18 movq 0x18(%rbx), %r14 // 47: 41 8b 0e movl (%r14), %ecx // 4a: ff c1 incl %ecx // 4c: 74 14 je 0x62 <_JIT_ENTRY+0x62> // 4e: 41 89 0e movl %ecx, (%r14) // 51: ff 15 00 00 00 00 callq *(%rip) # 0x57 <_JIT_ENTRY+0x57> // 0000000000000053: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 57: 48 8b 43 08 movq 0x8(%rbx), %rax // 5b: 48 8b 80 a8 00 00 00 movq 0xa8(%rax), %rax // 62: a9 00 00 00 04 testl $0x4000000, %eax # imm = 0x4000000 // 67: 0f 84 b4 00 00 00 je 0x121 <_JIT_ENTRY+0x121> // 6d: 4c 8b 7b 20 movq 0x20(%rbx), %r15 // 71: 41 8b 07 movl (%r15), %eax // 74: ff c0 incl %eax // 76: 75 15 jne 0x8d <_JIT_ENTRY+0x8d> // 78: 48 8b 03 movq (%rbx), %rax // 7b: 48 85 c0 testq %rax, %rax // 7e: 7e 1e jle 0x9e <_JIT_ENTRY+0x9e> // 80: 85 c0 testl %eax, %eax // 82: 79 36 jns 0xba <_JIT_ENTRY+0xba> // 84: eb 48 jmp 0xce <_JIT_ENTRY+0xce> // 86: 58 popq %rax // 87: ff 25 00 00 00 00 jmpq *(%rip) # 0x8d <_JIT_ENTRY+0x8d> // 0000000000000089: R_X86_64_GOTPCRELX _JIT_JUMP_TARGET-0x4 // 8d: 41 89 07 movl %eax, (%r15) // 90: ff 15 00 00 00 00 callq *(%rip) # 0x96 <_JIT_ENTRY+0x96> // 0000000000000092: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 96: 48 8b 03 movq (%rbx), %rax // 99: 48 85 c0 testq %rax, %rax // 9c: 7f e2 jg 0x80 <_JIT_ENTRY+0x80> // 9e: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa5 <_JIT_ENTRY+0xa5> // 00000000000000a1: R_X86_64_PC32 .L.str.1-0x4 // a5: be ec 04 00 00 movl $0x4ec, %esi # imm = 0x4EC // aa: 48 89 da movq %rbx, %rdx // ad: ff 15 00 00 00 00 callq *(%rip) # 0xb3 <_JIT_ENTRY+0xb3> // 00000000000000af: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // b3: 48 8b 03 movq (%rbx), %rax // b6: 85 c0 testl %eax, %eax // b8: 78 14 js 0xce <_JIT_ENTRY+0xce> // ba: ff 15 00 00 00 00 callq *(%rip) # 0xc0 <_JIT_ENTRY+0xc0> // 00000000000000bc: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // c0: 48 ff 0b decq (%rbx) // c3: 75 09 jne 0xce <_JIT_ENTRY+0xce> // c5: 48 89 df movq %rbx, %rdi // c8: ff 15 00 00 00 00 callq *(%rip) # 0xce <_JIT_ENTRY+0xce> // 00000000000000ca: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // ce: 4c 89 7d f8 movq %r15, -0x8(%rbp) // d2: 4c 89 75 00 movq %r14, (%rbp) // d6: 48 83 c5 08 addq $0x8, %rbp // da: 58 popq %rax // db: ff 25 00 00 00 00 jmpq *(%rip) # 0xe1 <_JIT_ENTRY+0xe1> // 00000000000000dd: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // e1: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xe8 <_JIT_ENTRY+0xe8> // 00000000000000e4: R_X86_64_PC32 .L.str.25-0x4 // e8: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xef <_JIT_ENTRY+0xef> // 00000000000000eb: R_X86_64_PC32 .L.str.1-0x4 // ef: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xf6 <_JIT_ENTRY+0xf6> // 00000000000000f2: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // f6: ba e0 04 00 00 movl $0x4e0, %edx # imm = 0x4E0 // fb: ff 15 00 00 00 00 callq *(%rip) # 0x101 <_JIT_ENTRY+0x101> // 00000000000000fd: R_X86_64_GOTPCRELX __assert_fail-0x4 // 101: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x108 <_JIT_ENTRY+0x108> // 0000000000000104: R_X86_64_PC32 .L.str.132-0x4 // 108: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x10f <_JIT_ENTRY+0x10f> // 000000000000010b: R_X86_64_PC32 .L.str.133-0x4 // 10f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x116 <_JIT_ENTRY+0x116> // 0000000000000112: R_X86_64_PC32 .L__PRETTY_FUNCTION__.PyTuple_GET_SIZE-0x4 // 116: ba 16 00 00 00 movl $0x16, %edx // 11b: ff 15 00 00 00 00 callq *(%rip) # 0x121 <_JIT_ENTRY+0x121> // 000000000000011d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 121: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x128 <_JIT_ENTRY+0x128> // 0000000000000124: R_X86_64_PC32 .L.str.26-0x4 // 128: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x12f <_JIT_ENTRY+0x12f> // 000000000000012b: R_X86_64_PC32 .L.str.1-0x4 // 12f: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x136 <_JIT_ENTRY+0x136> // 0000000000000132: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 136: ba eb 04 00 00 movl $0x4eb, %edx # imm = 0x4EB // 13b: ff 15 00 00 00 00 callq *(%rip) # 0x141 <_JIT_ENTRY+0x141> // 000000000000013d: R_X86_64_GOTPCRELX __assert_fail-0x4 // 141: const unsigned char code_body[321] = { 0x50, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x02, 0x0f, 0x85, 0xcf, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x3b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x75, 0x63, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x80, 0xa8, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xc5, 0x00, 0x00, 0x00, 0x48, 0x83, 0x7b, 0x10, 0x02, 0x75, 0x43, 0x4c, 0x8b, 0x73, 0x18, 0x41, 0x8b, 0x0e, 0xff, 0xc1, 0x74, 0x14, 0x41, 0x89, 0x0e, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x43, 0x08, 0x48, 0x8b, 0x80, 0xa8, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x04, 0x0f, 0x84, 0xb4, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x7b, 0x20, 0x41, 0x8b, 0x07, 0xff, 0xc0, 0x75, 0x15, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7e, 0x1e, 0x85, 0xc0, 0x79, 0x36, 0xeb, 0x48, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x41, 0x89, 0x07, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x48, 0x85, 0xc0, 0x7f, 0xe2, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0xec, 0x04, 0x00, 0x00, 0x48, 0x89, 0xda, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x03, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0xff, 0x0b, 0x75, 0x09, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x89, 0x7d, 0xf8, 0x4c, 0x89, 0x75, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xe0, 0x04, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x16, 0x00, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0xeb, 0x04, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == 2\x00PyTuple_Check(seq)\x00PyTuple_Check(op)\x00/builddir/build/BUILD/Python-3.13.0b1/Include/cpython/tupleobject.h\x00Py_ssize_t PyTuple_GET_SIZE(PyObject *)\x00' // 12a: 00 00 00 00 00 00 // 130: OPARG // 138: &PyTuple_Type+0x0 // 140: &_Py_INCREF_IncRefTotal+0x0 // 148: JUMP_TARGET // 150: &_Py_NegativeRefcount+0x0 // 158: &_Py_DECREF_DecRefTotal+0x0 // 160: &_Py_Dealloc+0x0 // 168: CONTINUE // 170: &__assert_fail+0x0 const unsigned char data_body[376] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x32, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x73, 0x65, 0x71, 0x29, 0x00, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6f, 0x70, 0x29, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x63, 0x70, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x74, 0x75, 0x70, 0x6c, 0x65, 0x6f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x2e, 0x68, 0x00, 0x50, 0x79, 0x5f, 0x73, 0x73, 0x69, 0x7a, 0x65, 0x5f, 0x74, 0x20, 0x50, 0x79, 0x54, 0x75, 0x70, 0x6c, 0x65, 0x5f, 0x47, 0x45, 0x54, 0x5f, 0x53, 0x49, 0x5a, 0x45, 0x28, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x130, instruction->oparg); patch_64(data + 0x138, (uintptr_t)&PyTuple_Type); patch_64(data + 0x140, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x148, instruction_starts[instruction->jump_target]); patch_64(data + 0x150, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x158, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x160, (uintptr_t)&_Py_Dealloc); patch_64(data + 0x168, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x170, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x4, (uintptr_t)data + 0x12c); patch_x86_64_32rx(code + 0x1d, (uintptr_t)data + 0x134); patch_x86_64_32rx(code + 0x26, (uintptr_t)data + 0x134); patch_x86_64_32rx(code + 0x53, (uintptr_t)data + 0x13c); patch_x86_64_32rx(code + 0x89, (uintptr_t)data + 0x144); patch_x86_64_32rx(code + 0x92, (uintptr_t)data + 0x13c); patch_32r(code + 0xa1, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0xaf, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0xbc, (uintptr_t)data + 0x154); patch_x86_64_32rx(code + 0xca, (uintptr_t)data + 0x15c); patch_x86_64_32rx(code + 0xdd, (uintptr_t)data + 0x164); patch_32r(code + 0xe4, (uintptr_t)data + 0x8a); patch_32r(code + 0xeb, (uintptr_t)data + -0x4); patch_32r(code + 0xf2, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xfd, (uintptr_t)data + 0x16c); patch_32r(code + 0x104, (uintptr_t)data + 0xa8); patch_32r(code + 0x10b, (uintptr_t)data + 0xba); patch_32r(code + 0x112, (uintptr_t)data + 0xfe); patch_x86_64_32rx(code + 0x11d, (uintptr_t)data + 0x16c); patch_32r(code + 0x124, (uintptr_t)data + 0x95); patch_32r(code + 0x12b, (uintptr_t)data + -0x4); patch_32r(code + 0x132, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x13d, (uintptr_t)data + 0x16c); } void emit__WITH_EXCEPT_START( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_WITH_EXCEPT_START.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 48 83 ec 38 subq $0x38, %rsp // 4: 4c 89 64 24 08 movq %r12, 0x8(%rsp) // 9: 4c 89 2c 24 movq %r13, (%rsp) // d: 48 8b 5d f8 movq -0x8(%rbp), %rbx // 11: 48 85 db testq %rbx, %rbx // 14: 0f 84 e9 00 00 00 je 0x103 <_JIT_ENTRY+0x103> // 1a: 4c 8b 73 08 movq 0x8(%rbx), %r14 // 1e: 41 f6 86 ab 00 00 00 40 testb $0x40, 0xab(%r14) // 26: 0f 84 d7 00 00 00 je 0x103 <_JIT_ENTRY+0x103> // 2c: 4c 8b 6d e0 movq -0x20(%rbp), %r13 // 30: 4c 8b 65 e8 movq -0x18(%rbp), %r12 // 34: 48 89 df movq %rbx, %rdi // 37: ff 15 00 00 00 00 callq *(%rip) # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCRELX PyException_GetTraceback-0x4 // 3d: 48 85 c0 testq %rax, %rax // 40: 74 11 je 0x53 <_JIT_ENTRY+0x53> // 42: 49 89 c7 movq %rax, %r15 // 45: 48 8b 00 movq (%rax), %rax // 48: 48 85 c0 testq %rax, %rax // 4b: 7e 0f jle 0x5c <_JIT_ENTRY+0x5c> // 4d: 85 c0 testl %eax, %eax // 4f: 79 27 jns 0x78 <_JIT_ENTRY+0x78> // 51: eb 39 jmp 0x8c <_JIT_ENTRY+0x8c> // 53: 4c 8b 3d 00 00 00 00 movq (%rip), %r15 # 0x5a <_JIT_ENTRY+0x5a> // 0000000000000056: R_X86_64_REX_GOTPCRELX _Py_NoneStruct-0x4 // 5a: eb 30 jmp 0x8c <_JIT_ENTRY+0x8c> // 5c: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x63 <_JIT_ENTRY+0x63> // 000000000000005f: R_X86_64_PC32 .L.str.1-0x4 // 63: be 34 0b 00 00 movl $0xb34, %esi # imm = 0xB34 // 68: 4c 89 fa movq %r15, %rdx // 6b: ff 15 00 00 00 00 callq *(%rip) # 0x71 <_JIT_ENTRY+0x71> // 000000000000006d: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 71: 49 8b 07 movq (%r15), %rax // 74: 85 c0 testl %eax, %eax // 76: 78 14 js 0x8c <_JIT_ENTRY+0x8c> // 78: ff 15 00 00 00 00 callq *(%rip) # 0x7e <_JIT_ENTRY+0x7e> // 000000000000007a: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 7e: 49 ff 0f decq (%r15) // 81: 75 09 jne 0x8c <_JIT_ENTRY+0x8c> // 83: 4c 89 ff movq %r15, %rdi // 86: ff 15 00 00 00 00 callq *(%rip) # 0x8c <_JIT_ENTRY+0x8c> // 0000000000000088: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 8c: 49 8b 44 24 08 movq 0x8(%r12), %rax // 91: f6 80 ab 00 00 00 01 testb $0x1, 0xab(%rax) // 98: 0f 84 85 00 00 00 je 0x123 <_JIT_ENTRY+0x123> // 9e: 48 c7 44 24 10 00 00 00 00 movq $0x0, 0x10(%rsp) // a7: 48 8d 74 24 18 leaq 0x18(%rsp), %rsi // ac: 4c 89 74 24 18 movq %r14, 0x18(%rsp) // b1: 48 89 5c 24 20 movq %rbx, 0x20(%rsp) // b6: 4c 89 7c 24 28 movq %r15, 0x28(%rsp) // bb: 48 ba 03 00 00 00 00 00 00 80 movabsq $-0x7ffffffffffffffd, %rdx # imm = 0x8000000000000003 // c5: 4c 89 ef movq %r13, %rdi // c8: 31 c9 xorl %ecx, %ecx // ca: ff 15 00 00 00 00 callq *(%rip) # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_GOTPCRELX PyObject_Vectorcall-0x4 // d0: 48 85 c0 testq %rax, %rax // d3: 74 1b je 0xf0 <_JIT_ENTRY+0xf0> // d5: 48 89 45 00 movq %rax, (%rbp) // d9: 48 83 c5 08 addq $0x8, %rbp // dd: 4c 8b 2c 24 movq (%rsp), %r13 // e1: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // e6: 48 83 c4 38 addq $0x38, %rsp // ea: ff 25 00 00 00 00 jmpq *(%rip) # 0xf0 <_JIT_ENTRY+0xf0> // 00000000000000ec: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // f0: 4c 8b 2c 24 movq (%rsp), %r13 // f4: 4c 8b 64 24 08 movq 0x8(%rsp), %r12 // f9: 48 83 c4 38 addq $0x38, %rsp // fd: ff 25 00 00 00 00 jmpq *(%rip) # 0x103 <_JIT_ENTRY+0x103> // 00000000000000ff: R_X86_64_GOTPCRELX _JIT_ERROR_TARGET-0x4 // 103: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x10a <_JIT_ENTRY+0x10a> // 0000000000000106: R_X86_64_PC32 .L.str.74-0x4 // 10a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x111 <_JIT_ENTRY+0x111> // 000000000000010d: R_X86_64_PC32 .L.str.1-0x4 // 111: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x118 <_JIT_ENTRY+0x118> // 0000000000000114: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 118: ba 2d 0b 00 00 movl $0xb2d, %edx # imm = 0xB2D // 11d: ff 15 00 00 00 00 callq *(%rip) # 0x123 <_JIT_ENTRY+0x123> // 000000000000011f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 123: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x12a <_JIT_ENTRY+0x12a> // 0000000000000126: R_X86_64_PC32 .L.str.75-0x4 // 12a: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0x131 <_JIT_ENTRY+0x131> // 000000000000012d: R_X86_64_PC32 .L.str.1-0x4 // 131: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0x138 <_JIT_ENTRY+0x138> // 0000000000000134: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // 138: ba 36 0b 00 00 movl $0xb36, %edx # imm = 0xB36 // 13d: ff 15 00 00 00 00 callq *(%rip) # 0x143 <_JIT_ENTRY+0x143> // 000000000000013f: R_X86_64_GOTPCRELX __assert_fail-0x4 // 143: const unsigned char code_body[323] = { 0x48, 0x83, 0xec, 0x38, 0x4c, 0x89, 0x64, 0x24, 0x08, 0x4c, 0x89, 0x2c, 0x24, 0x48, 0x8b, 0x5d, 0xf8, 0x48, 0x85, 0xdb, 0x0f, 0x84, 0xe9, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x73, 0x08, 0x41, 0xf6, 0x86, 0xab, 0x00, 0x00, 0x00, 0x40, 0x0f, 0x84, 0xd7, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x6d, 0xe0, 0x4c, 0x8b, 0x65, 0xe8, 0x48, 0x89, 0xdf, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x11, 0x49, 0x89, 0xc7, 0x48, 0x8b, 0x00, 0x48, 0x85, 0xc0, 0x7e, 0x0f, 0x85, 0xc0, 0x79, 0x27, 0xeb, 0x39, 0x4c, 0x8b, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xeb, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x34, 0x0b, 0x00, 0x00, 0x4c, 0x89, 0xfa, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x07, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0f, 0x75, 0x09, 0x4c, 0x89, 0xff, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x44, 0x24, 0x08, 0xf6, 0x80, 0xab, 0x00, 0x00, 0x00, 0x01, 0x0f, 0x84, 0x85, 0x00, 0x00, 0x00, 0x48, 0xc7, 0x44, 0x24, 0x10, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x74, 0x24, 0x18, 0x4c, 0x89, 0x74, 0x24, 0x18, 0x48, 0x89, 0x5c, 0x24, 0x20, 0x4c, 0x89, 0x7c, 0x24, 0x28, 0x48, 0xba, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x4c, 0x89, 0xef, 0x31, 0xc9, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x85, 0xc0, 0x74, 0x1b, 0x48, 0x89, 0x45, 0x00, 0x48, 0x83, 0xc5, 0x08, 0x4c, 0x8b, 0x2c, 0x24, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x4c, 0x8b, 0x2c, 0x24, 0x4c, 0x8b, 0x64, 0x24, 0x08, 0x48, 0x83, 0xc4, 0x38, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x2d, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x36, 0x0b, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00val && PyExceptionInstance_Check(val)\x00PyLong_Check(lasti)\x00' // c8: // c8: &PyException_GetTraceback+0x0 // d0: &_Py_NoneStruct+0x0 // d8: &_Py_NegativeRefcount+0x0 // e0: &_Py_DECREF_DecRefTotal+0x0 // e8: &_Py_Dealloc+0x0 // f0: &PyObject_Vectorcall+0x0 // f8: CONTINUE // 100: ERROR_TARGET // 108: &__assert_fail+0x0 const unsigned char data_body[272] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x76, 0x61, 0x6c, 0x20, 0x26, 0x26, 0x20, 0x50, 0x79, 0x45, 0x78, 0x63, 0x65, 0x70, 0x74, 0x69, 0x6f, 0x6e, 0x49, 0x6e, 0x73, 0x74, 0x61, 0x6e, 0x63, 0x65, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x76, 0x61, 0x6c, 0x29, 0x00, 0x50, 0x79, 0x4c, 0x6f, 0x6e, 0x67, 0x5f, 0x43, 0x68, 0x65, 0x63, 0x6b, 0x28, 0x6c, 0x61, 0x73, 0x74, 0x69, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0xc8, (uintptr_t)&PyException_GetTraceback); patch_64(data + 0xd0, (uintptr_t)&_Py_NoneStruct); patch_64(data + 0xd8, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0xe0, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0xe8, (uintptr_t)&_Py_Dealloc); patch_64(data + 0xf0, (uintptr_t)&PyObject_Vectorcall); patch_64(data + 0xf8, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x100, instruction_starts[instruction->error_target]); patch_64(data + 0x108, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x39, (uintptr_t)data + 0xc4); patch_x86_64_32rx(code + 0x56, (uintptr_t)data + 0xcc); patch_32r(code + 0x5f, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x6d, (uintptr_t)data + 0xd4); patch_x86_64_32rx(code + 0x7a, (uintptr_t)data + 0xdc); patch_x86_64_32rx(code + 0x88, (uintptr_t)data + 0xe4); patch_x86_64_32rx(code + 0xcc, (uintptr_t)data + 0xec); patch_x86_64_32rx(code + 0xec, (uintptr_t)data + 0xf4); patch_x86_64_32rx(code + 0xff, (uintptr_t)data + 0xfc); patch_32r(code + 0x106, (uintptr_t)data + 0x8a); patch_32r(code + 0x10d, (uintptr_t)data + -0x4); patch_32r(code + 0x114, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x11f, (uintptr_t)data + 0x104); patch_32r(code + 0x126, (uintptr_t)data + 0xb0); patch_32r(code + 0x12d, (uintptr_t)data + -0x4); patch_32r(code + 0x134, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x13f, (uintptr_t)data + 0x104); } void emit__YIELD_VALUE( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/_YIELD_VALUE.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_JIT_ENTRY>: // 0: 50 pushq %rax // 1: 48 8b 4d f8 movq -0x8(%rbp), %rcx // 5: 49 83 45 38 02 addq $0x2, 0x38(%r13) // a: 41 80 7d 46 01 cmpb $0x1, 0x46(%r13) // f: 0f 85 86 00 00 00 jne 0x9b <_JIT_ENTRY+0x9b> // 15: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x1c <_JIT_ENTRY+0x1c> // 0000000000000018: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 1c: 66 85 c0 testw %ax, %ax // 1f: 74 11 je 0x32 <_JIT_ENTRY+0x32> // 21: 48 8b 05 00 00 00 00 movq (%rip), %rax # 0x28 <_JIT_ENTRY+0x28> // 0000000000000024: R_X86_64_REX_GOTPCRELX _JIT_OPARG-0x4 // 28: 66 83 f8 01 cmpw $0x1, %ax // 2c: 0f 85 89 00 00 00 jne 0xbb <_JIT_ENTRY+0xbb> // 32: 48 83 c5 f8 addq $-0x8, %rbp // 36: 0f b6 05 00 00 00 00 movzbl (%rip), %eax # 0x3d <_JIT_ENTRY+0x3d> // 0000000000000039: R_X86_64_GOTPCREL _JIT_OPARG-0x4 // 3d: 04 fe addb $-0x2, %al // 3f: 41 88 45 fb movb %al, -0x5(%r13) // 43: 4c 29 ed subq %r13, %rbp // 46: 48 83 c5 b8 addq $-0x48, %rbp // 4a: 48 c1 ed 03 shrq $0x3, %rbp // 4e: 41 89 6d 40 movl %ebp, 0x40(%r13) // 52: 49 8b 45 e8 movq -0x18(%r13), %rax // 56: 49 89 44 24 78 movq %rax, 0x78(%r12) // 5b: 49 c7 45 e8 00 00 00 00 movq $0x0, -0x18(%r13) // 63: 41 ff 44 24 2c incl 0x2c(%r12) // 68: 49 8b 45 08 movq 0x8(%r13), %rax // 6c: 49 89 44 24 48 movq %rax, 0x48(%r12) // 71: 49 c7 45 08 00 00 00 00 movq $0x0, 0x8(%r13) // 79: 48 63 50 40 movslq 0x40(%rax), %rdx // 7d: c7 40 40 ff ff ff ff movl $0xffffffff, 0x40(%rax) # imm = 0xFFFFFFFF // 84: 48 89 4c d0 48 movq %rcx, 0x48(%rax,%rdx,8) // 89: 48 8d 2c d0 leaq (%rax,%rdx,8), %rbp // 8d: 48 83 c5 50 addq $0x50, %rbp // 91: 49 89 c5 movq %rax, %r13 // 94: 58 popq %rax // 95: ff 25 00 00 00 00 jmpq *(%rip) # 0x9b <_JIT_ENTRY+0x9b> // 0000000000000097: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 9b: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xa2 <_JIT_ENTRY+0xa2> // 000000000000009e: R_X86_64_PC32 .L.str.142-0x4 // a2: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xa9 <_JIT_ENTRY+0xa9> // 00000000000000a5: R_X86_64_PC32 .L.str.109-0x4 // a9: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xb0 <_JIT_ENTRY+0xb0> // 00000000000000ac: R_X86_64_PC32 .L__PRETTY_FUNCTION__._PyFrame_GetGenerator-0x4 // b0: ba 39 01 00 00 movl $0x139, %edx # imm = 0x139 // b5: ff 15 00 00 00 00 callq *(%rip) # 0xbb <_JIT_ENTRY+0xbb> // 00000000000000b7: R_X86_64_GOTPCRELX __assert_fail-0x4 // bb: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0xc2 <_JIT_ENTRY+0xc2> // 00000000000000be: R_X86_64_PC32 .L.str.20-0x4 // c2: 48 8d 35 00 00 00 00 leaq (%rip), %rsi # 0xc9 <_JIT_ENTRY+0xc9> // 00000000000000c5: R_X86_64_PC32 .L.str.1-0x4 // c9: 48 8d 0d 00 00 00 00 leaq (%rip), %rcx # 0xd0 <_JIT_ENTRY+0xd0> // 00000000000000cc: R_X86_64_PC32 .L__PRETTY_FUNCTION__._JIT_ENTRY-0x4 // d0: ba 67 04 00 00 movl $0x467, %edx # imm = 0x467 // d5: ff 15 00 00 00 00 callq *(%rip) # 0xdb <_JIT_ENTRY+0xdb> // 00000000000000d7: R_X86_64_GOTPCRELX __assert_fail-0x4 // db: const unsigned char code_body[219] = { 0x50, 0x48, 0x8b, 0x4d, 0xf8, 0x49, 0x83, 0x45, 0x38, 0x02, 0x41, 0x80, 0x7d, 0x46, 0x01, 0x0f, 0x85, 0x86, 0x00, 0x00, 0x00, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x85, 0xc0, 0x74, 0x11, 0x48, 0x8b, 0x05, 0x00, 0x00, 0x00, 0x00, 0x66, 0x83, 0xf8, 0x01, 0x0f, 0x85, 0x89, 0x00, 0x00, 0x00, 0x48, 0x83, 0xc5, 0xf8, 0x0f, 0xb6, 0x05, 0x00, 0x00, 0x00, 0x00, 0x04, 0xfe, 0x41, 0x88, 0x45, 0xfb, 0x4c, 0x29, 0xed, 0x48, 0x83, 0xc5, 0xb8, 0x48, 0xc1, 0xed, 0x03, 0x41, 0x89, 0x6d, 0x40, 0x49, 0x8b, 0x45, 0xe8, 0x49, 0x89, 0x44, 0x24, 0x78, 0x49, 0xc7, 0x45, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x41, 0xff, 0x44, 0x24, 0x2c, 0x49, 0x8b, 0x45, 0x08, 0x49, 0x89, 0x44, 0x24, 0x48, 0x49, 0xc7, 0x45, 0x08, 0x00, 0x00, 0x00, 0x00, 0x48, 0x63, 0x50, 0x40, 0xc7, 0x40, 0x40, 0xff, 0xff, 0xff, 0xff, 0x48, 0x89, 0x4c, 0xd0, 0x48, 0x48, 0x8d, 0x2c, 0xd0, 0x48, 0x83, 0xc5, 0x50, 0x49, 0x89, 0xc5, 0x58, 0xff, 0x25, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x39, 0x01, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x35, 0x00, 0x00, 0x00, 0x00, 0x48, 0x8d, 0x0d, 0x00, 0x00, 0x00, 0x00, 0xba, 0x67, 0x04, 0x00, 0x00, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Python/executor_cases.c.h\x00_Py_CODEUNIT *_JIT_ENTRY(_PyInterpreterFrame *, PyObject **, PyThreadState *)\x00oparg == 0 || oparg == 1\x00/builddir/build/BUILD/Python-3.13.0b1/Include/internal/pycore_frame.h\x00frame->owner == FRAME_OWNED_BY_GENERATOR\x00PyGenObject *_PyFrame_GetGenerator(_PyInterpreterFrame *)\x00' // 150: // 150: OPARG // 158: CONTINUE // 160: &__assert_fail+0x0 const unsigned char data_body[360] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2f, 0x65, 0x78, 0x65, 0x63, 0x75, 0x74, 0x6f, 0x72, 0x5f, 0x63, 0x61, 0x73, 0x65, 0x73, 0x2e, 0x63, 0x2e, 0x68, 0x00, 0x5f, 0x50, 0x79, 0x5f, 0x43, 0x4f, 0x44, 0x45, 0x55, 0x4e, 0x49, 0x54, 0x20, 0x2a, 0x5f, 0x4a, 0x49, 0x54, 0x5f, 0x45, 0x4e, 0x54, 0x52, 0x59, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x2a, 0x2c, 0x20, 0x50, 0x79, 0x54, 0x68, 0x72, 0x65, 0x61, 0x64, 0x53, 0x74, 0x61, 0x74, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x30, 0x20, 0x7c, 0x7c, 0x20, 0x6f, 0x70, 0x61, 0x72, 0x67, 0x20, 0x3d, 0x3d, 0x20, 0x31, 0x00, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x49, 0x6e, 0x63, 0x6c, 0x75, 0x64, 0x65, 0x2f, 0x69, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x61, 0x6c, 0x2f, 0x70, 0x79, 0x63, 0x6f, 0x72, 0x65, 0x5f, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2e, 0x68, 0x00, 0x66, 0x72, 0x61, 0x6d, 0x65, 0x2d, 0x3e, 0x6f, 0x77, 0x6e, 0x65, 0x72, 0x20, 0x3d, 0x3d, 0x20, 0x46, 0x52, 0x41, 0x4d, 0x45, 0x5f, 0x4f, 0x57, 0x4e, 0x45, 0x44, 0x5f, 0x42, 0x59, 0x5f, 0x47, 0x45, 0x4e, 0x45, 0x52, 0x41, 0x54, 0x4f, 0x52, 0x00, 0x50, 0x79, 0x47, 0x65, 0x6e, 0x4f, 0x62, 0x6a, 0x65, 0x63, 0x74, 0x20, 0x2a, 0x5f, 0x50, 0x79, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x5f, 0x47, 0x65, 0x74, 0x47, 0x65, 0x6e, 0x65, 0x72, 0x61, 0x74, 0x6f, 0x72, 0x28, 0x5f, 0x50, 0x79, 0x49, 0x6e, 0x74, 0x65, 0x72, 0x70, 0x72, 0x65, 0x74, 0x65, 0x72, 0x46, 0x72, 0x61, 0x6d, 0x65, 0x20, 0x2a, 0x29, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x150, instruction->oparg); patch_64(data + 0x158, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x160, (uintptr_t)&__assert_fail); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x18, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x24, (uintptr_t)data + 0x14c); patch_32r(code + 0x39, (uintptr_t)data + 0x14c); patch_x86_64_32rx(code + 0x97, (uintptr_t)data + 0x154); patch_32r(code + 0x9e, (uintptr_t)data + 0xe9); patch_32r(code + 0xa5, (uintptr_t)data + 0xa3); patch_32r(code + 0xac, (uintptr_t)data + 0x112); patch_x86_64_32rx(code + 0xb7, (uintptr_t)data + 0x15c); patch_32r(code + 0xbe, (uintptr_t)data + 0x8a); patch_32r(code + 0xc5, (uintptr_t)data + -0x4); patch_32r(code + 0xcc, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0xd7, (uintptr_t)data + 0x15c); } void emit_trampoline( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]) { // // /tmp/tmpzps3eoy9/trampoline.o: file format elf64-x86-64 // // Disassembly of section .text: // // 0000000000000000 <_ENTRY>: // 0: 55 pushq %rbp // 1: 41 57 pushq %r15 // 3: 41 56 pushq %r14 // 5: 41 55 pushq %r13 // 7: 41 54 pushq %r12 // 9: 53 pushq %rbx // a: 50 pushq %rax // b: 48 89 d3 movq %rdx, %rbx // e: 48 89 f5 movq %rsi, %rbp // 11: 49 89 fd movq %rdi, %r13 // 14: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x1b <_ENTRY+0x1b> // 0000000000000017: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 1b: 8b 01 movl (%rcx), %eax // 1d: ff c0 incl %eax // 1f: 74 08 je 0x29 <_ENTRY+0x29> // 21: 89 01 movl %eax, (%rcx) // 23: ff 15 00 00 00 00 callq *(%rip) # 0x29 <_ENTRY+0x29> // 0000000000000025: R_X86_64_GOTPCRELX _Py_INCREF_IncRefTotal-0x4 // 29: 48 89 1c 24 movq %rbx, (%rsp) // 2d: 49 89 dc movq %rbx, %r12 // 30: ff 15 00 00 00 00 callq *(%rip) # 0x36 <_ENTRY+0x36> // 0000000000000032: R_X86_64_GOTPCRELX _JIT_CONTINUE-0x4 // 36: 48 89 c3 movq %rax, %rbx // 39: 48 8b 04 24 movq (%rsp), %rax // 3d: 4c 8b b0 10 01 00 00 movq 0x110(%rax), %r14 // 44: 48 8b 0d 00 00 00 00 movq (%rip), %rcx # 0x4b <_ENTRY+0x4b> // 0000000000000047: R_X86_64_REX_GOTPCRELX _JIT_EXECUTOR-0x4 // 4b: 48 89 88 10 01 00 00 movq %rcx, 0x110(%rax) // 52: 49 8b 06 movq (%r14), %rax // 55: 48 85 c0 testq %rax, %rax // 58: 7e 06 jle 0x60 <_ENTRY+0x60> // 5a: 85 c0 testl %eax, %eax // 5c: 79 1e jns 0x7c <_ENTRY+0x7c> // 5e: eb 30 jmp 0x90 <_ENTRY+0x90> // 60: 48 8d 3d 00 00 00 00 leaq (%rip), %rdi # 0x67 <_ENTRY+0x67> // 0000000000000063: R_X86_64_PC32 .L.str-0x4 // 67: be 17 00 00 00 movl $0x17, %esi // 6c: 4c 89 f2 movq %r14, %rdx // 6f: ff 15 00 00 00 00 callq *(%rip) # 0x75 <_ENTRY+0x75> // 0000000000000071: R_X86_64_GOTPCRELX _Py_NegativeRefcount-0x4 // 75: 49 8b 06 movq (%r14), %rax // 78: 85 c0 testl %eax, %eax // 7a: 78 14 js 0x90 <_ENTRY+0x90> // 7c: ff 15 00 00 00 00 callq *(%rip) # 0x82 <_ENTRY+0x82> // 000000000000007e: R_X86_64_GOTPCRELX _Py_DECREF_DecRefTotal-0x4 // 82: 49 ff 0e decq (%r14) // 85: 75 09 jne 0x90 <_ENTRY+0x90> // 87: 4c 89 f7 movq %r14, %rdi // 8a: ff 15 00 00 00 00 callq *(%rip) # 0x90 <_ENTRY+0x90> // 000000000000008c: R_X86_64_GOTPCRELX _Py_Dealloc-0x4 // 90: 48 89 d8 movq %rbx, %rax // 93: 48 83 c4 08 addq $0x8, %rsp // 97: 5b popq %rbx // 98: 41 5c popq %r12 // 9a: 41 5d popq %r13 // 9c: 41 5e popq %r14 // 9e: 41 5f popq %r15 // a0: 5d popq %rbp // a1: c3 retq // a2: const unsigned char code_body[162] = { 0x55, 0x41, 0x57, 0x41, 0x56, 0x41, 0x55, 0x41, 0x54, 0x53, 0x50, 0x48, 0x89, 0xd3, 0x48, 0x89, 0xf5, 0x49, 0x89, 0xfd, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x8b, 0x01, 0xff, 0xc0, 0x74, 0x08, 0x89, 0x01, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x1c, 0x24, 0x49, 0x89, 0xdc, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xc3, 0x48, 0x8b, 0x04, 0x24, 0x4c, 0x8b, 0xb0, 0x10, 0x01, 0x00, 0x00, 0x48, 0x8b, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0x88, 0x10, 0x01, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x48, 0x85, 0xc0, 0x7e, 0x06, 0x85, 0xc0, 0x79, 0x1e, 0xeb, 0x30, 0x48, 0x8d, 0x3d, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x17, 0x00, 0x00, 0x00, 0x4c, 0x89, 0xf2, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0x8b, 0x06, 0x85, 0xc0, 0x78, 0x14, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x49, 0xff, 0x0e, 0x75, 0x09, 0x4c, 0x89, 0xf7, 0xff, 0x15, 0x00, 0x00, 0x00, 0x00, 0x48, 0x89, 0xd8, 0x48, 0x83, 0xc4, 0x08, 0x5b, 0x41, 0x5c, 0x41, 0x5d, 0x41, 0x5e, 0x41, 0x5f, 0x5d, 0xc3, }; // 0: '/builddir/build/BUILD/Python-3.13.0b1/Tools/jit/trampoline.c\x00' // 3d: 00 00 00 // 40: EXECUTOR // 48: &_Py_INCREF_IncRefTotal+0x0 // 50: CONTINUE // 58: &_Py_NegativeRefcount+0x0 // 60: &_Py_DECREF_DecRefTotal+0x0 // 68: &_Py_Dealloc+0x0 const unsigned char data_body[112] = { 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x64, 0x69, 0x72, 0x2f, 0x62, 0x75, 0x69, 0x6c, 0x64, 0x2f, 0x42, 0x55, 0x49, 0x4c, 0x44, 0x2f, 0x50, 0x79, 0x74, 0x68, 0x6f, 0x6e, 0x2d, 0x33, 0x2e, 0x31, 0x33, 0x2e, 0x30, 0x62, 0x31, 0x2f, 0x54, 0x6f, 0x6f, 0x6c, 0x73, 0x2f, 0x6a, 0x69, 0x74, 0x2f, 0x74, 0x72, 0x61, 0x6d, 0x70, 0x6f, 0x6c, 0x69, 0x6e, 0x65, 0x2e, 0x63, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, }; memcpy(data, data_body, sizeof(data_body)); patch_64(data + 0x40, (uintptr_t)executor); patch_64(data + 0x48, (uintptr_t)&_Py_INCREF_IncRefTotal); patch_64(data + 0x50, (uintptr_t)code + sizeof(code_body)); patch_64(data + 0x58, (uintptr_t)&_Py_NegativeRefcount); patch_64(data + 0x60, (uintptr_t)&_Py_DECREF_DecRefTotal); patch_64(data + 0x68, (uintptr_t)&_Py_Dealloc); memcpy(code, code_body, sizeof(code_body)); patch_x86_64_32rx(code + 0x17, (uintptr_t)data + 0x3c); patch_x86_64_32rx(code + 0x25, (uintptr_t)data + 0x44); patch_x86_64_32rx(code + 0x32, (uintptr_t)data + 0x4c); patch_x86_64_32rx(code + 0x47, (uintptr_t)data + 0x3c); patch_32r(code + 0x63, (uintptr_t)data + -0x4); patch_x86_64_32rx(code + 0x71, (uintptr_t)data + 0x54); patch_x86_64_32rx(code + 0x7e, (uintptr_t)data + 0x5c); patch_x86_64_32rx(code + 0x8c, (uintptr_t)data + 0x64); } typedef struct { void (*emit)( unsigned char *code, unsigned char *data, _PyExecutorObject *executor, const _PyUOpInstruction *instruction, uintptr_t instruction_starts[]); size_t code_size; size_t data_size; } StencilGroup; static const StencilGroup trampoline = {emit_trampoline, 162, 112}; static const StencilGroup stencil_groups[MAX_UOP_ID + 1] = { [_BINARY_OP] = {emit__BINARY_OP, 243, 232}, [_BINARY_OP_ADD_FLOAT] = {emit__BINARY_OP_ADD_FLOAT, 396, 264}, [_BINARY_OP_ADD_INT] = {emit__BINARY_OP_ADD_INT, 193, 200}, [_BINARY_OP_ADD_UNICODE] = {emit__BINARY_OP_ADD_UNICODE, 193, 200}, [_BINARY_OP_MULTIPLY_FLOAT] = {emit__BINARY_OP_MULTIPLY_FLOAT, 396, 264}, [_BINARY_OP_MULTIPLY_INT] = {emit__BINARY_OP_MULTIPLY_INT, 193, 200}, [_BINARY_OP_SUBTRACT_FLOAT] = {emit__BINARY_OP_SUBTRACT_FLOAT, 396, 264}, [_BINARY_OP_SUBTRACT_INT] = {emit__BINARY_OP_SUBTRACT_INT, 193, 200}, [_BINARY_SLICE] = {emit__BINARY_SLICE, 219, 120}, [_BINARY_SUBSCR] = {emit__BINARY_SUBSCR, 188, 112}, [_BINARY_SUBSCR_DICT] = {emit__BINARY_SUBSCR_DICT, 236, 136}, [_BINARY_SUBSCR_LIST_INT] = {emit__BINARY_SUBSCR_LIST_INT, 395, 656}, [_BINARY_SUBSCR_STR_INT] = {emit__BINARY_SUBSCR_STR_INT, 598, 720}, [_BINARY_SUBSCR_TUPLE_INT] = {emit__BINARY_SUBSCR_TUPLE_INT, 392, 656}, [_BUILD_CONST_KEY_MAP] = {emit__BUILD_CONST_KEY_MAP, 513, 416}, [_BUILD_LIST] = {emit__BUILD_LIST, 74, 32}, [_BUILD_MAP] = {emit__BUILD_MAP, 288, 120}, [_BUILD_SLICE] = {emit__BUILD_SLICE, 373, 176}, [_BUILD_STRING] = {emit__BUILD_STRING, 274, 128}, [_BUILD_TUPLE] = {emit__BUILD_TUPLE, 74, 32}, [_CALL_BUILTIN_CLASS] = {emit__CALL_BUILTIN_CLASS, 389, 120}, [_CALL_BUILTIN_FAST] = {emit__CALL_BUILTIN_FAST, 501, 400}, [_CALL_BUILTIN_FAST_WITH_KEYWORDS] = {emit__CALL_BUILTIN_FAST_WITH_KEYWORDS, 501, 400}, [_CALL_BUILTIN_O] = {emit__CALL_BUILTIN_O, 417, 264}, [_CALL_INTRINSIC_1] = {emit__CALL_INTRINSIC_1, 169, 232}, [_CALL_INTRINSIC_2] = {emit__CALL_INTRINSIC_2, 254, 232}, [_CALL_ISINSTANCE] = {emit__CALL_ISINSTANCE, 468, 280}, [_CALL_LEN] = {emit__CALL_LEN, 438, 280}, [_CALL_METHOD_DESCRIPTOR_FAST] = {emit__CALL_METHOD_DESCRIPTOR_FAST, 527, 400}, [_CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS] = {emit__CALL_METHOD_DESCRIPTOR_FAST_WITH_KEYWORDS, 527, 400}, [_CALL_METHOD_DESCRIPTOR_NOARGS] = {emit__CALL_METHOD_DESCRIPTOR_NOARGS, 483, 296}, [_CALL_METHOD_DESCRIPTOR_O] = {emit__CALL_METHOD_DESCRIPTOR_O, 476, 264}, [_CALL_NON_PY_GENERAL] = {emit__CALL_NON_PY_GENERAL, 535, 392}, [_CALL_STR_1] = {emit__CALL_STR_1, 178, 240}, [_CALL_TUPLE_1] = {emit__CALL_TUPLE_1, 178, 240}, [_CALL_TYPE_1] = {emit__CALL_TYPE_1, 200, 232}, [_CHECK_ATTR_CLASS] = {emit__CHECK_ATTR_CLASS, 85, 192}, [_CHECK_ATTR_METHOD_LAZY_DICT] = {emit__CHECK_ATTR_METHOD_LAZY_DICT, 25, 16}, [_CHECK_ATTR_MODULE] = {emit__CHECK_ATTR_MODULE, 86, 200}, [_CHECK_ATTR_WITH_HINT] = {emit__CHECK_ATTR_WITH_HINT, 118, 264}, [_CHECK_CALL_BOUND_METHOD_EXACT_ARGS] = {emit__CHECK_CALL_BOUND_METHOD_EXACT_ARGS, 56, 24}, [_CHECK_EG_MATCH] = {emit__CHECK_EG_MATCH, 503, 256}, [_CHECK_EXC_MATCH] = {emit__CHECK_EXC_MATCH, 271, 256}, [_CHECK_FUNCTION] = {emit__CHECK_FUNCTION, 76, 224}, [_CHECK_FUNCTION_EXACT_ARGS] = {emit__CHECK_FUNCTION_EXACT_ARGS, 86, 40}, [_CHECK_FUNCTION_VERSION] = {emit__CHECK_FUNCTION_VERSION, 61, 40}, [_CHECK_IS_NOT_PY_CALLABLE] = {emit__CHECK_IS_NOT_PY_CALLABLE, 56, 40}, [_CHECK_MANAGED_OBJECT_HAS_VALUES] = {emit__CHECK_MANAGED_OBJECT_HAS_VALUES, 191, 472}, [_CHECK_METHOD_VERSION] = {emit__CHECK_METHOD_VERSION, 84, 40}, [_CHECK_PEP_523] = {emit__CHECK_PEP_523, 21, 8}, [_CHECK_PERIODIC] = {emit__CHECK_PERIODIC, 58, 16}, [_CHECK_STACK_SPACE] = {emit__CHECK_STACK_SPACE, 126, 296}, [_CHECK_STACK_SPACE_OPERAND] = {emit__CHECK_STACK_SPACE_OPERAND, 146, 464}, [_CHECK_VALIDITY] = {emit__CHECK_VALIDITY, 25, 24}, [_CHECK_VALIDITY_AND_SET_IP] = {emit__CHECK_VALIDITY_AND_SET_IP, 36, 32}, [_COLD_EXIT] = {emit__COLD_EXIT, 495, 296}, [_COMPARE_OP] = {emit__COMPARE_OP, 366, 256}, [_COMPARE_OP_FLOAT] = {emit__COMPARE_OP_FLOAT, 369, 344}, [_COMPARE_OP_INT] = {emit__COMPARE_OP_INT, 387, 392}, [_COMPARE_OP_STR] = {emit__COMPARE_OP_STR, 358, 496}, [_CONTAINS_OP] = {emit__CONTAINS_OP, 227, 136}, [_CONTAINS_OP_DICT] = {emit__CONTAINS_OP_DICT, 251, 152}, [_CONTAINS_OP_SET] = {emit__CONTAINS_OP_SET, 260, 160}, [_CONVERT_VALUE] = {emit__CONVERT_VALUE, 179, 248}, [_COPY] = {emit__COPY, 93, 184}, [_COPY_FREE_VARS] = {emit__COPY_FREE_VARS, 341, 432}, [_DELETE_ATTR] = {emit__DELETE_ATTR, 357, 592}, [_DELETE_DEREF] = {emit__DELETE_DEREF, 176, 296}, [_DELETE_FAST] = {emit__DELETE_FAST, 205, 376}, [_DELETE_GLOBAL] = {emit__DELETE_GLOBAL, 322, 552}, [_DELETE_NAME] = {emit__DELETE_NAME, 354, 592}, [_DELETE_SUBSCR] = {emit__DELETE_SUBSCR, 178, 104}, [_DEOPT] = {emit__DEOPT, 97, 192}, [_DICT_MERGE] = {emit__DICT_MERGE, 225, 128}, [_DICT_UPDATE] = {emit__DICT_UPDATE, 255, 192}, [_DYNAMIC_EXIT] = {emit__DYNAMIC_EXIT, 359, 304}, [_END_SEND] = {emit__END_SEND, 99, 96}, [_ERROR_POP_N] = {emit__ERROR_POP_N, 123, 200}, [_EXIT_INIT_CHECK] = {emit__EXIT_INIT_CHECK, 189, 416}, [_EXIT_TRACE] = {emit__EXIT_TRACE, 69, 24}, [_EXPAND_METHOD] = {emit__EXPAND_METHOD, 333, 288}, [_FATAL_ERROR] = {emit__FATAL_ERROR, 33, 152}, [_FORMAT_SIMPLE] = {emit__FORMAT_SIMPLE, 128, 120}, [_FORMAT_WITH_SPEC] = {emit__FORMAT_WITH_SPEC, 188, 112}, [_FOR_ITER_GEN_FRAME] = {emit__FOR_ITER_GEN_FRAME, 107, 32}, [_FOR_ITER_TIER_TWO] = {emit__FOR_ITER_TIER_TWO, 135, 192}, [_GET_AITER] = {emit__GET_AITER, 365, 280}, [_GET_ANEXT] = {emit__GET_ANEXT, 327, 280}, [_GET_AWAITABLE] = {emit__GET_AWAITABLE, 327, 200}, [_GET_ITER] = {emit__GET_ITER, 107, 112}, [_GET_LEN] = {emit__GET_LEN, 52, 32}, [_GET_YIELD_FROM_ITER] = {emit__GET_YIELD_FROM_ITER, 225, 384}, [_GUARD_BOTH_FLOAT] = {emit__GUARD_BOTH_FLOAT, 40, 16}, [_GUARD_BOTH_INT] = {emit__GUARD_BOTH_INT, 40, 16}, [_GUARD_BOTH_UNICODE] = {emit__GUARD_BOTH_UNICODE, 40, 16}, [_GUARD_BUILTINS_VERSION] = {emit__GUARD_BUILTINS_VERSION, 84, 216}, [_GUARD_DORV_NO_DICT] = {emit__GUARD_DORV_NO_DICT, 198, 536}, [_GUARD_DORV_VALUES_INST_ATTR_FROM_DICT] = {emit__GUARD_DORV_VALUES_INST_ATTR_FROM_DICT, 149, 440}, [_GUARD_GLOBALS_VERSION] = {emit__GUARD_GLOBALS_VERSION, 84, 216}, [_GUARD_IS_FALSE_POP] = {emit__GUARD_IS_FALSE_POP, 23, 16}, [_GUARD_IS_NONE_POP] = {emit__GUARD_IS_NONE_POP, 99, 112}, [_GUARD_IS_NOT_NONE_POP] = {emit__GUARD_IS_NOT_NONE_POP, 93, 112}, [_GUARD_IS_TRUE_POP] = {emit__GUARD_IS_TRUE_POP, 23, 16}, [_GUARD_KEYS_VERSION] = {emit__GUARD_KEYS_VERSION, 38, 24}, [_GUARD_NOS_FLOAT] = {emit__GUARD_NOS_FLOAT, 23, 16}, [_GUARD_NOS_INT] = {emit__GUARD_NOS_INT, 23, 16}, [_GUARD_NOT_EXHAUSTED_LIST] = {emit__GUARD_NOT_EXHAUSTED_LIST, 210, 496}, [_GUARD_NOT_EXHAUSTED_RANGE] = {emit__GUARD_NOT_EXHAUSTED_RANGE, 69, 208}, [_GUARD_NOT_EXHAUSTED_TUPLE] = {emit__GUARD_NOT_EXHAUSTED_TUPLE, 210, 496}, [_GUARD_TOS_FLOAT] = {emit__GUARD_TOS_FLOAT, 23, 16}, [_GUARD_TOS_INT] = {emit__GUARD_TOS_INT, 23, 16}, [_GUARD_TYPE_VERSION] = {emit__GUARD_TYPE_VERSION, 76, 192}, [_INIT_CALL_BOUND_METHOD_EXACT_ARGS] = {emit__INIT_CALL_BOUND_METHOD_EXACT_ARGS, 195, 104}, [_INIT_CALL_PY_EXACT_ARGS] = {emit__INIT_CALL_PY_EXACT_ARGS, 697, 240}, [_INIT_CALL_PY_EXACT_ARGS_0] = {emit__INIT_CALL_PY_EXACT_ARGS_0, 377, 408}, [_INIT_CALL_PY_EXACT_ARGS_1] = {emit__INIT_CALL_PY_EXACT_ARGS_1, 394, 408}, [_INIT_CALL_PY_EXACT_ARGS_2] = {emit__INIT_CALL_PY_EXACT_ARGS_2, 403, 408}, [_INIT_CALL_PY_EXACT_ARGS_3] = {emit__INIT_CALL_PY_EXACT_ARGS_3, 412, 408}, [_INIT_CALL_PY_EXACT_ARGS_4] = {emit__INIT_CALL_PY_EXACT_ARGS_4, 421, 408}, [_INTERNAL_INCREMENT_OPT_COUNTER] = {emit__INTERNAL_INCREMENT_OPT_COUNTER, 12, 0}, [_IS_NONE] = {emit__IS_NONE, 122, 120}, [_IS_OP] = {emit__IS_OP, 201, 120}, [_ITER_CHECK_LIST] = {emit__ITER_CHECK_LIST, 23, 16}, [_ITER_CHECK_RANGE] = {emit__ITER_CHECK_RANGE, 23, 16}, [_ITER_CHECK_TUPLE] = {emit__ITER_CHECK_TUPLE, 23, 16}, [_ITER_NEXT_LIST] = {emit__ITER_NEXT_LIST, 325, 536}, [_ITER_NEXT_RANGE] = {emit__ITER_NEXT_RANGE, 146, 232}, [_ITER_NEXT_TUPLE] = {emit__ITER_NEXT_TUPLE, 322, 536}, [_JUMP_TO_TOP] = {emit__JUMP_TO_TOP, 6, 8}, [_LIST_APPEND] = {emit__LIST_APPEND, 467, 656}, [_LIST_EXTEND] = {emit__LIST_EXTEND, 342, 320}, [_LOAD_ASSERTION_ERROR] = {emit__LOAD_ASSERTION_ERROR, 34, 16}, [_LOAD_ATTR] = {emit__LOAD_ATTR, 536, 696}, [_LOAD_ATTR_CLASS_0] = {emit__LOAD_ATTR_CLASS_0, 112, 112}, [_LOAD_ATTR_CLASS_1] = {emit__LOAD_ATTR_CLASS_1, 115, 104}, [_LOAD_ATTR_INSTANCE_VALUE_0] = {emit__LOAD_ATTR_INSTANCE_VALUE_0, 271, 400}, [_LOAD_ATTR_INSTANCE_VALUE_1] = {emit__LOAD_ATTR_INSTANCE_VALUE_1, 274, 400}, [_LOAD_ATTR_METHOD_LAZY_DICT] = {emit__LOAD_ATTR_METHOD_LAZY_DICT, 131, 264}, [_LOAD_ATTR_METHOD_NO_DICT] = {emit__LOAD_ATTR_METHOD_NO_DICT, 179, 296}, [_LOAD_ATTR_METHOD_WITH_VALUES] = {emit__LOAD_ATTR_METHOD_WITH_VALUES, 133, 256}, [_LOAD_ATTR_MODULE] = {emit__LOAD_ATTR_MODULE, 265, 296}, [_LOAD_ATTR_NONDESCRIPTOR_NO_DICT] = {emit__LOAD_ATTR_NONDESCRIPTOR_NO_DICT, 211, 264}, [_LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES] = {emit__LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES, 157, 224}, [_LOAD_ATTR_SLOT_0] = {emit__LOAD_ATTR_SLOT_0, 128, 120}, [_LOAD_ATTR_SLOT_1] = {emit__LOAD_ATTR_SLOT_1, 131, 112}, [_LOAD_ATTR_WITH_HINT] = {emit__LOAD_ATTR_WITH_HINT, 543, 784}, [_LOAD_BUILD_CLASS] = {emit__LOAD_BUILD_CLASS, 94, 80}, [_LOAD_CONST] = {emit__LOAD_CONST, 272, 496}, [_LOAD_CONST_INLINE] = {emit__LOAD_CONST_INLINE, 31, 16}, [_LOAD_CONST_INLINE_BORROW] = {emit__LOAD_CONST_INLINE_BORROW, 15, 8}, [_LOAD_CONST_INLINE_BORROW_WITH_NULL] = {emit__LOAD_CONST_INLINE_BORROW_WITH_NULL, 23, 8}, [_LOAD_CONST_INLINE_WITH_NULL] = {emit__LOAD_CONST_INLINE_WITH_NULL, 39, 16}, [_LOAD_DEREF] = {emit__LOAD_DEREF, 123, 216}, [_LOAD_FAST] = {emit__LOAD_FAST, 79, 192}, [_LOAD_FAST_0] = {emit__LOAD_FAST_0, 115, 216}, [_LOAD_FAST_1] = {emit__LOAD_FAST_1, 116, 216}, [_LOAD_FAST_2] = {emit__LOAD_FAST_2, 116, 216}, [_LOAD_FAST_3] = {emit__LOAD_FAST_3, 116, 216}, [_LOAD_FAST_4] = {emit__LOAD_FAST_4, 116, 216}, [_LOAD_FAST_5] = {emit__LOAD_FAST_5, 116, 216}, [_LOAD_FAST_6] = {emit__LOAD_FAST_6, 116, 216}, [_LOAD_FAST_7] = {emit__LOAD_FAST_7, 119, 216}, [_LOAD_FAST_AND_CLEAR] = {emit__LOAD_FAST_AND_CLEAR, 29, 8}, [_LOAD_FAST_CHECK] = {emit__LOAD_FAST_CHECK, 151, 304}, [_LOAD_FROM_DICT_OR_DEREF] = {emit__LOAD_FROM_DICT_OR_DEREF, 428, 520}, [_LOAD_FROM_DICT_OR_GLOBALS] = {emit__LOAD_FROM_DICT_OR_GLOBALS, 466, 648}, [_LOAD_GLOBAL] = {emit__LOAD_GLOBAL, 522, 696}, [_LOAD_GLOBAL_BUILTINS] = {emit__LOAD_GLOBAL_BUILTINS, 179, 216}, [_LOAD_GLOBAL_MODULE] = {emit__LOAD_GLOBAL_MODULE, 179, 216}, [_LOAD_LOCALS] = {emit__LOAD_LOCALS, 72, 56}, [_LOAD_SUPER_ATTR_ATTR] = {emit__LOAD_SUPER_ATTR_ATTR, 565, 704}, [_LOAD_SUPER_ATTR_METHOD] = {emit__LOAD_SUPER_ATTR_METHOD, 687, 704}, [_MAKE_CELL] = {emit__MAKE_CELL, 120, 112}, [_MAKE_FUNCTION] = {emit__MAKE_FUNCTION, 123, 120}, [_MAP_ADD] = {emit__MAP_ADD, 104, 216}, [_MATCH_CLASS] = {emit__MATCH_CLASS, 442, 408}, [_MATCH_KEYS] = {emit__MATCH_KEYS, 45, 24}, [_MATCH_MAPPING] = {emit__MATCH_MAPPING, 53, 24}, [_MATCH_SEQUENCE] = {emit__MATCH_SEQUENCE, 53, 24}, [_NOP] = {emit__NOP, 0, 0}, [_POP_EXCEPT] = {emit__POP_EXCEPT, 106, 96}, [_POP_FRAME] = {emit__POP_FRAME, 186, 336}, [_POP_TOP] = {emit__POP_TOP, 81, 96}, [_POP_TOP_LOAD_CONST_INLINE_BORROW] = {emit__POP_TOP_LOAD_CONST_INLINE_BORROW, 95, 104}, [_PUSH_EXC_INFO] = {emit__PUSH_EXC_INFO, 106, 216}, [_PUSH_FRAME] = {emit__PUSH_FRAME, 113, 200}, [_PUSH_NULL] = {emit__PUSH_NULL, 12, 0}, [_PY_FRAME_GENERAL] = {emit__PY_FRAME_GENERAL, 233, 240}, [_REPLACE_WITH_TRUE] = {emit__REPLACE_WITH_TRUE, 95, 104}, [_RESUME_CHECK] = {emit__RESUME_CHECK, 117, 368}, [_RETURN_GENERATOR] = {emit__RETURN_GENERATOR, 641, 544}, [_SAVE_RETURN_OFFSET] = {emit__SAVE_RETURN_OFFSET, 12, 8}, [_SETUP_ANNOTATIONS] = {emit__SETUP_ANNOTATIONS, 264, 200}, [_SET_ADD] = {emit__SET_ADD, 123, 112}, [_SET_FUNCTION_ATTRIBUTE] = {emit__SET_FUNCTION_ATTRIBUTE, 418, 592}, [_SET_IP] = {emit__SET_IP, 11, 8}, [_SET_UPDATE] = {emit__SET_UPDATE, 129, 120}, [_START_EXECUTOR] = {emit__START_EXECUTOR, 135, 112}, [_STORE_ATTR] = {emit__STORE_ATTR, 434, 592}, [_STORE_ATTR_INSTANCE_VALUE] = {emit__STORE_ATTR_INSTANCE_VALUE, 537, 768}, [_STORE_ATTR_SLOT] = {emit__STORE_ATTR_SLOT, 175, 160}, [_STORE_DEREF] = {emit__STORE_DEREF, 102, 96}, [_STORE_FAST] = {emit__STORE_FAST, 99, 96}, [_STORE_FAST_0] = {emit__STORE_FAST_0, 140, 272}, [_STORE_FAST_1] = {emit__STORE_FAST_1, 141, 272}, [_STORE_FAST_2] = {emit__STORE_FAST_2, 141, 272}, [_STORE_FAST_3] = {emit__STORE_FAST_3, 141, 272}, [_STORE_FAST_4] = {emit__STORE_FAST_4, 141, 272}, [_STORE_FAST_5] = {emit__STORE_FAST_5, 141, 272}, [_STORE_FAST_6] = {emit__STORE_FAST_6, 141, 272}, [_STORE_FAST_7] = {emit__STORE_FAST_7, 147, 272}, [_STORE_GLOBAL] = {emit__STORE_GLOBAL, 361, 592}, [_STORE_NAME] = {emit__STORE_NAME, 509, 656}, [_STORE_SLICE] = {emit__STORE_SLICE, 471, 120}, [_STORE_SUBSCR] = {emit__STORE_SUBSCR, 267, 104}, [_STORE_SUBSCR_DICT] = {emit__STORE_SUBSCR_DICT, 129, 120}, [_STORE_SUBSCR_LIST_INT] = {emit__STORE_SUBSCR_LIST_INT, 482, 736}, [_SWAP] = {emit__SWAP, 82, 184}, [_TIER2_RESUME_CHECK] = {emit__TIER2_RESUME_CHECK, 122, 448}, [_TO_BOOL] = {emit__TO_BOOL, 134, 128}, [_TO_BOOL_BOOL] = {emit__TO_BOOL_BOOL, 23, 16}, [_TO_BOOL_INT] = {emit__TO_BOOL_INT, 164, 240}, [_TO_BOOL_LIST] = {emit__TO_BOOL_LIST, 131, 128}, [_TO_BOOL_NONE] = {emit__TO_BOOL_NONE, 30, 24}, [_TO_BOOL_STR] = {emit__TO_BOOL_STR, 232, 264}, [_UNARY_INVERT] = {emit__UNARY_INVERT, 107, 112}, [_UNARY_NEGATIVE] = {emit__UNARY_NEGATIVE, 107, 112}, [_UNARY_NOT] = {emit__UNARY_NOT, 79, 208}, [_UNPACK_EX] = {emit__UNPACK_EX, 132, 120}, [_UNPACK_SEQUENCE] = {emit__UNPACK_SEQUENCE, 135, 120}, [_UNPACK_SEQUENCE_LIST] = {emit__UNPACK_SEQUENCE_LIST, 310, 264}, [_UNPACK_SEQUENCE_TUPLE] = {emit__UNPACK_SEQUENCE_TUPLE, 284, 264}, [_UNPACK_SEQUENCE_TWO_TUPLE] = {emit__UNPACK_SEQUENCE_TWO_TUPLE, 321, 376}, [_WITH_EXCEPT_START] = {emit__WITH_EXCEPT_START, 323, 272}, [_YIELD_VALUE] = {emit__YIELD_VALUE, 219, 360}, };