@@ -13,133 +13,123 @@ * file. */ #include "config.h" -.intel_syntax noprefix - -.globl _of_forward -.globl _of_forward_stret +.globl _OFForward +.globl _OFForward_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 - - push ebx - sub esp, 20 - - call get_eip -0: - - mov eax, [ebp+8] - mov [esp], eax - 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 - call _class_respondsToSelector - - test 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 - call _objc_msgSend - - test eax, eax - jz 0f - cmp eax, [ebp+8] - je 0f - - mov [ebp+8], eax - - add esp, 20 - pop ebx - pop ebp - - jmp _objc_msgSend - -0: - add esp, 20 - pop ebx - pop ebp - - jmp _of_method_not_found - -_of_forward_stret: - push ebp - mov ebp, esp - - push ebx - sub esp, 20 - - call get_eip -0: - - mov eax, [ebp+12] - mov [esp], eax - 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 - call _class_respondsToSelector - - test 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 - call _objc_msgSend - - test eax, eax - jz 0f - cmp eax, [ebp+12] - je 0f - - mov [ebp+12], eax - - add esp, 20 - pop ebx - pop ebp - - jmp _objc_msgSend_stret - -0: - add esp, 20 - pop ebx - pop ebp - - jmp _of_method_not_found_stret - -get_eip: - mov ebx, [esp] +_OFForward: + pushl %ebp + movl %esp, %ebp + + pushl %ebx + subl $20, %esp + + call get_eip +0: + + movl 8(%ebp), %eax + movl %eax, (%esp) + call _object_getClass + + movl %eax, (%esp) + movl sel_forwardingTargetForSelector_-0b(%ebx), %eax + movl %eax, 4(%esp) + call _class_respondsToSelector + + testl %eax, %eax + jz 0f + + 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 + + testl %eax, %eax + jz 0f + cmpl 8(%ebp), %eax + je 0f + + movl %eax, 8(%ebp) + + addl $20, %esp + popl %ebx + popl %ebp + + jmp _objc_msgSend + +0: + addl $20, %esp + popl %ebx + popl %ebp + + jmp _OFMethodNotFound + +_OFForward_stret: + pushl %ebp + movl %esp, %ebp + + pushl %ebx + subl $20, %esp + + call get_eip +0: + + movl 12(%ebp), %eax + movl %eax, (%esp) + call _object_getClass + + movl %eax, (%esp) + movl sel_forwardingTargetForSelector_-0b(%ebx), %eax + movl %eax, 4(%esp) + call _class_respondsToSelector + + testl %eax, %eax + jz 0f + + 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 + + testl %eax, %eax + jz 0f + cmpl 12(%ebp), %eax + je 0f + + movl %eax, 12(%ebp) + + addl $20, %esp + popl %ebx + popl %ebp + + jmp _objc_msgSend_stret + +0: + addl $20, %esp + popl %ebx + popl %ebp + + jmp _OFMethodNotFound_stret + +get_eip: + movl (%esp), %ebx ret