Index: src/forwarding/apple-forwarding-i386.S ================================================================== --- src/forwarding/apple-forwarding-i386.S +++ src/forwarding/apple-forwarding-i386.S @@ -13,133 +13,123 @@ * file. */ #include "config.h" -.intel_syntax noprefix - .globl _of_forward .globl _of_forward_stret .section __TEXT, __cstring, cstring_literals -Lstr_forwardingTargetForSelector_: +str_forwardingTargetForSelector_: .asciz "forwardingTargetForSelector:" .section __OBJC, __message_refs, literal_pointers, no_dead_strip -Lsel_forwardingTargetForSelector_: - .long Lstr_forwardingTargetForSelector_ +sel_forwardingTargetForSelector_: + .long str_forwardingTargetForSelector_ .section __OBJC, __image_info .long 0, 0 .section __TEXT, __text, regular, pure_instructions _of_forward: - push ebp - mov ebp, esp + pushl %ebp + movl %esp, %ebp - push ebx - sub esp, 20 + pushl %ebx + subl $20, %esp call get_eip 0: - mov eax, [ebp+8] - mov [esp], eax + movl 8(%ebp), %eax + movl %eax, (%esp) call _object_getClass - mov [esp], eax - .att_syntax /* Next line is broken in Intel syntax */ - movl Lsel_forwardingTargetForSelector_-0b(%ebx), %eax - .intel_syntax noprefix - mov [esp+4], eax + movl %eax, (%esp) + movl sel_forwardingTargetForSelector_-0b(%ebx), %eax + movl %eax, 4(%esp) call _class_respondsToSelector - test eax, eax + testl %eax, %eax jz 0f - mov eax, [ebp+8] - mov [esp], eax - .att_syntax /* Next line is broken in Intel syntax */ - movl Lsel_forwardingTargetForSelector_-0b(%ebx), %eax - .intel_syntax noprefix - mov [esp+4], eax - mov eax, [ebp+12] - mov [esp+8], eax + movl 8(%ebp), %eax + movl %eax, (%esp) + movl sel_forwardingTargetForSelector_-0b(%ebx), %eax + movl %eax, 4(%esp) + movl 12(%ebp), %eax + movl %eax, 8(%esp) call _objc_msgSend - test eax, eax + testl %eax, %eax jz 0f - cmp eax, [ebp+8] + cmpl 8(%ebp), %eax je 0f - mov [ebp+8], eax + movl %eax, 8(%ebp) - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp jmp _objc_msgSend 0: - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp jmp _of_method_not_found _of_forward_stret: - push ebp - mov ebp, esp + pushl %ebp + movl %esp, %ebp - push ebx - sub esp, 20 + pushl %ebx + subl $20, %esp call get_eip 0: - mov eax, [ebp+12] - mov [esp], eax + movl 12(%ebp), %eax + movl %eax, (%esp) call _object_getClass - mov [esp], eax - .att_syntax /* Next line is broken in Intel syntax */ - movl Lsel_forwardingTargetForSelector_-0b(%ebx), %eax - .intel_syntax noprefix - mov [esp+4], eax + movl %eax, (%esp) + movl sel_forwardingTargetForSelector_-0b(%ebx), %eax + movl %eax, 4(%esp) call _class_respondsToSelector - test eax, eax + testl %eax, %eax jz 0f - mov eax, [ebp+12] - mov [esp], eax - .att_syntax /* Next line is broken in Intel syntax */ - movl Lsel_forwardingTargetForSelector_-0b(%ebx), %eax - .intel_syntax noprefix - mov [esp+4], eax - mov eax, [ebp+16] - mov [esp+8], eax + movl 12(%ebp), %eax + movl %eax, (%esp) + movl sel_forwardingTargetForSelector_-0b(%ebx), %eax + movl %eax, 4(%esp) + movl 16(%ebp), %eax + movl %eax, 8(%esp) call _objc_msgSend - test eax, eax + testl %eax, %eax jz 0f - cmp eax, [ebp+12] + cmpl 12(%ebp), %eax je 0f - mov [ebp+12], eax + movl %eax, 12(%ebp) - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp jmp _objc_msgSend_stret 0: - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp jmp _of_method_not_found_stret get_eip: - mov ebx, [esp] + movl (%esp), %ebx ret Index: src/forwarding/apple-forwarding-x86_64.S ================================================================== --- src/forwarding/apple-forwarding-x86_64.S +++ src/forwarding/apple-forwarding-x86_64.S @@ -13,12 +13,10 @@ * file. */ #include "config.h" -.intel_syntax noprefix - .globl _of_forward .globl _of_forward_stret .section __TEXT, __objc_methname, cstring_literals str_forwardingTargetForSelector_: @@ -31,150 +29,150 @@ .section __DATA, __objc_imageinfo, regular, no_dead_strip .long 0, 0 .section __TEXT, __text, regular, pure_instructions _of_forward: - push rbp - mov rbp, rsp + pushq %rbp + movq %rsp, %rbp /* Save all arguments */ - sub rsp, 0xC0 /* 16-byte alignment */ - mov [rbp-0x08], rax - mov [rbp-0x10], rdi - mov [rbp-0x18], rsi - mov [rbp-0x20], rdx - mov [rbp-0x28], rcx - mov [rbp-0x30], r8 - mov [rbp-0x38], r9 - movaps [rbp-0x50], xmm0 - movaps [rbp-0x60], xmm1 - movaps [rbp-0x70], xmm2 - movaps [rbp-0x80], xmm3 - movaps [rbp-0x90], xmm4 - movaps [rbp-0xA0], xmm5 - movaps [rbp-0xB0], xmm6 - movaps [rbp-0xC0], xmm7 + subq $0xC0, %rsp /* 16-byte alignment */ + movq %rax, -0x8(%rbp) + movq %rdi, -0x10(%rbp) + movq %rsi, -0x18(%rbp) + movq %rdx, -0x20(%rbp) + movq %rcx, -0x28(%rbp) + movq %r8, -0x30(%rbp) + movq %r9, -0x38(%rbp) + movaps %xmm0, -0x50(%rbp) + movaps %xmm1, -0x60(%rbp) + movaps %xmm2, -0x70(%rbp) + movaps %xmm3, -0x80(%rbp) + movaps %xmm4, -0x90(%rbp) + movaps %xmm5, -0xA0(%rbp) + movaps %xmm6, -0xB0(%rbp) + movaps %xmm7, -0xC0(%rbp) call _object_getClass - mov rdi, rax - mov rsi, [rip+sel_forwardingTargetForSelector_] + movq %rax, %rdi + movq sel_forwardingTargetForSelector_(%rip), %rsi call _class_respondsToSelector - test rax, rax + testq %rax, %rax jz 0f - mov rdi, [rbp-0x10] - mov rsi, [rip+sel_forwardingTargetForSelector_] - mov rdx, [rbp-0x18] + movq -0x10(%rbp), %rdi + movq sel_forwardingTargetForSelector_(%rip), %rsi + movq -0x18(%rbp), %rdx call _objc_msgSend - test rax, rax + testq %rax, %rax jz 0f - cmp rax, [rbp-0x10] + cmpq -0x10(%rbp), %rax je 0f - mov rdi, rax + movq %rax, %rdi /* Restore all arguments, except %rdi */ - movaps xmm7, [rbp-0xC0] - movaps xmm6, [rbp-0xB0] - movaps xmm5, [rbp-0xA0] - movaps xmm4, [rbp-0x90] - movaps xmm3, [rbp-0x80] - movaps xmm2, [rbp-0x70] - movaps xmm1, [rbp-0x60] - movaps xmm0, [rbp-0x50] - mov r9, [rbp-0x38] - mov r8, [rbp-0x30] - mov rcx, [rbp-0x28] - mov rdx, [rbp-0x20] - mov rsi, [rbp-0x18] - mov rax, [rbp-0x08] - - mov rsp, rbp - pop rbp + movaps -0xC0(%rbp), %xmm7 + movaps -0xB0(%rbp), %xmm6 + movaps -0xA0(%rbp), %xmm5 + movaps -0x90(%rbp), %xmm4 + movaps -0x80(%rbp), %xmm3 + movaps -0x70(%rbp), %xmm2 + movaps -0x60(%rbp), %xmm1 + movaps -0x50(%rbp), %xmm0 + movq -0x38(%rbp), %r9 + movq -0x30(%rbp), %r8 + movq -0x28(%rbp), %rcx + movq -0x20(%rbp), %rdx + movq -0x18(%rbp), %rsi + movq -0x8(%rbp), %rax + + movq %rbp, %rsp + popq %rbp jmp _objc_msgSend 0: - mov rdi, [rbp-0x10] - mov rsi, [rbp-0x18] + movq -0x10(%rbp), %rdi + movq -0x18(%rbp), %rsi - mov rsp, rbp - pop rbp + movq %rbp, %rsp + popq %rbp jmp _of_method_not_found _of_forward_stret: - push rbp - mov rbp, rsp + pushq %rbp + movq %rsp, %rbp /* Save all arguments */ - sub rsp, 0xC0 /* 16-byte alignment */ - mov [rbp-0x08], rax - mov [rbp-0x10], rdi - mov [rbp-0x18], rsi - mov [rbp-0x20], rdx - mov [rbp-0x28], rcx - mov [rbp-0x30], r8 - mov [rbp-0x38], r9 - movaps [rbp-0x50], xmm0 - movaps [rbp-0x60], xmm1 - movaps [rbp-0x70], xmm2 - movaps [rbp-0x80], xmm3 - movaps [rbp-0x90], xmm4 - movaps [rbp-0xA0], xmm5 - movaps [rbp-0xB0], xmm6 - movaps [rbp-0xC0], xmm7 - - mov rdi, rsi + subq $0xC0, %rsp /* 16-byte alignment */ + movq %rax, -0x8(%rbp) + movq %rdi, -0x10(%rbp) + movq %rsi, -0x18(%rbp) + movq %rdx, -0x20(%rbp) + movq %rcx, -0x28(%rbp) + movq %r8, -0x30(%rbp) + movq %r9, -0x38(%rbp) + movaps %xmm0, -0x50(%rbp) + movaps %xmm1, -0x60(%rbp) + movaps %xmm2, -0x70(%rbp) + movaps %xmm3, -0x80(%rbp) + movaps %xmm4, -0x90(%rbp) + movaps %xmm5, -0xA0(%rbp) + movaps %xmm6, -0xB0(%rbp) + movaps %xmm7, -0xC0(%rbp) + + movq %rsi, %rdi call _object_getClass - mov rdi, rax - mov rsi, [rip+sel_forwardingTargetForSelector_] + movq %rax, %rdi + movq sel_forwardingTargetForSelector_(%rip), %rsi call _class_respondsToSelector - test rax, rax + testq %rax, %rax jz 0f - mov rdi, [rbp-0x18] - mov rsi, [rip+sel_forwardingTargetForSelector_] - mov rdx, [rbp-0x20] + movq -0x18(%rbp), %rdi + movq sel_forwardingTargetForSelector_(%rip), %rsi + movq -0x20(%rbp), %rdx call _objc_msgSend - test rax, rax + testq %rax, %rax jz 0f - cmp rax, [rbp-0x18] + cmpq -0x18(%rbp), %rax je 0f - mov rsi, rax + movq %rax, %rsi /* Restore all arguments, except %rsi */ - movaps xmm7, [rbp-0xC0] - movaps xmm6, [rbp-0xB0] - movaps xmm5, [rbp-0xA0] - movaps xmm4, [rbp-0x90] - movaps xmm3, [rbp-0x80] - movaps xmm2, [rbp-0x70] - movaps xmm1, [rbp-0x60] - movaps xmm0, [rbp-0x50] - mov r9, [rbp-0x38] - mov r8, [rbp-0x30] - mov rcx, [rbp-0x28] - mov rdx, [rbp-0x20] - mov rdi, [rbp-0x10] - mov rax, [rbp-0x08] - - mov rsp, rbp - pop rbp + movaps -0xC0(%rbp), %xmm7 + movaps -0xB0(%rbp), %xmm6 + movaps -0xA0(%rbp), %xmm5 + movaps -0x90(%rbp), %xmm4 + movaps -0x80(%rbp), %xmm3 + movaps -0x70(%rbp), %xmm2 + movaps -0x60(%rbp), %xmm1 + movaps -0x50(%rbp), %xmm0 + movq -0x38(%rbp), %r9 + movq -0x30(%rbp), %r8 + movq -0x28(%rbp), %rcx + movq -0x20(%rbp), %rdx + movq -0x10(%rbp), %rdi + movq -0x8(%rbp), %rax + + movq %rbp, %rsp + popq %rbp jmp _objc_msgSend_stret 0: - mov rdi, [rbp-0x10] - mov rsi, [rbp-0x18] - mov rdx, [rbp-0x20] + movq -0x10(%rbp), %rdi + movq -0x18(%rbp), %rsi + movq -0x20(%rbp), %rdx - mov rsp, rbp - pop rbp + movq %rbp, %rsp + popq %rbp jmp _of_method_not_found_stret