Index: src/forwarding/forwarding-x86-elf.S ================================================================== --- src/forwarding/forwarding-x86-elf.S +++ src/forwarding/forwarding-x86-elf.S @@ -15,165 +15,163 @@ #include "config.h" #include "platform.h" -.intel_syntax noprefix - .globl OFForward .globl OFForward_stret .section .text OFForward: - push ebp - mov ebp, esp + pushl %ebp + movl %esp, %ebp - push ebx - sub esp, 20 + pushl %ebx + subl $20, %esp call .LgetEIP - add ebx, offset _GLOBAL_OFFSET_TABLE_ + addl $_GLOBAL_OFFSET_TABLE_, %ebx - mov eax, [ebp + 8] - mov [esp], eax + movl 8(%ebp), %eax + movl %eax, (%esp) call object_getClass@PLT - mov [esp], eax - lea eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF] - mov [esp + 4], eax + movl %eax, (%esp) + leal .Lsel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax + movl %eax, 4(%esp) call class_respondsToSelector@PLT - test eax, eax + testl %eax, %eax jz 0f - mov eax, [ebp + 8] - mov [esp], eax - lea eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF] - mov [esp + 4], eax + movl 8(%ebp), %eax + movl %eax, (%esp) + leal .Lsel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax + movl %eax, 4(%esp) call objc_msg_lookup@PLT - mov edx, [ebp + 8] - mov [esp], edx - lea edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF] - mov [esp + 4], edx - mov edx, [ebp + 12] - mov [esp + 8], edx - call eax - - test eax, eax + movl 8(%ebp), %edx + movl %edx, (%esp) + leal .Lsel_forwardingTargetForSelector_@GOTOFF(%ebx), %edx + movl %edx, 4(%esp) + movl 12(%ebp), %edx + movl %edx, 8(%esp) + call *%eax + + testl %eax, %eax jz 0f - cmp eax, [ebp + 8] + cmpl 8(%ebp), %eax je 0f - mov [ebp + 8], eax - mov [esp], eax - mov eax, [ebp + 12] - mov [esp + 4], eax + movl %eax, 8(%ebp) + movl %eax, (%esp) + movl 12(%ebp), %eax + movl %eax, 4(%esp) call objc_msg_lookup@PLT - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp - jmp eax + jmp *%eax 0: - mov eax, [ebx + OFMethodNotFound@GOT] + movl OFMethodNotFound@GOT(%ebx), %eax - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp - jmp eax + jmp *%eax .type OFForward, %function .size OFForward, .-OFForward OFForward_stret: - push ebp - mov ebp, esp + pushl %ebp + movl %esp, %ebp - push ebx - sub esp, 20 + pushl %ebx + subl $20, %esp call .LgetEIP - add ebx, offset _GLOBAL_OFFSET_TABLE_ + addl $_GLOBAL_OFFSET_TABLE_, %ebx - mov eax, [ebp + 12] - mov [esp], eax + movl 12(%ebp), %eax + movl %eax, (%esp) call object_getClass@PLT - mov [esp], eax - lea eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF] - mov [esp + 4], eax + movl %eax, (%esp) + leal .Lsel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax + movl %eax, 4(%esp) call class_respondsToSelector@PLT - test eax, eax + testl %eax, %eax jz 0f - mov eax, [ebp + 12] - mov [esp], eax - lea eax, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF] - mov [esp + 4], eax + movl 12(%ebp), %eax + movl %eax, (%esp) + leal .Lsel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax + movl %eax, 4(%esp) call objc_msg_lookup@PLT - mov edx, [ebp + 12] - mov [esp], edx - lea edx, [ebx + .Lsel_forwardingTargetForSelector_@GOTOFF] - mov [esp + 4], edx - mov edx, [ebp + 16] - mov [esp + 8], edx - call eax - - test eax, eax + movl 12(%ebp), %edx + movl %edx, (%esp) + leal .Lsel_forwardingTargetForSelector_@GOTOFF(%ebx), %edx + movl %edx, 4(%esp) + movl 16(%ebp), %edx + movl %edx, 8(%esp) + call *%eax + + testl %eax, %eax jz 0f - cmp eax, [ebp + 12] + cmpl 12(%ebp), %eax je 0f - mov [ebp + 12], eax - mov [esp], eax - mov eax, [ebp + 16] - mov [esp + 4], eax + movl %eax, 12(%ebp) + movl %eax, (%esp) + movl 16(%ebp), %eax + movl %eax, 4(%esp) call objc_msg_lookup_stret@PLT - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp - jmp eax + jmp *%eax 0: - mov eax, [ebx + OFMethodNotFound_stret@GOT] + movl OFMethodNotFound_stret@GOT(%ebx), %eax - add esp, 20 - pop ebx - pop ebp + addl $20, %esp + popl %ebx + popl %ebp - jmp eax + jmp *%eax .type OFForward_stret, %function .size OFForward_stret, .-OFForward_stret .Linit: - push ebp - mov ebp, esp + pushl %ebp + movl %esp, %ebp - push ebx - sub esp, 4 + pushl %ebx + subl $4, %esp call .LgetEIP - add ebx, offset _GLOBAL_OFFSET_TABLE_ + addl $_GLOBAL_OFFSET_TABLE_, %ebx - lea eax, [ebx + .Lmodule@GOTOFF] - mov [esp], eax + leal .Lmodule@GOTOFF(%ebx), %eax + movl %eax, (%esp) call __objc_exec_class@PLT - add esp, 4 - pop ebx - pop ebp + addl $4, %esp + popl %ebx + popl %ebp ret .LgetEIP: - mov ebx, [esp] + movl (%esp), %ebx ret #ifdef OF_SOLARIS .section .init_array, "aw" #else Index: src/runtime/lookup-asm/lookup-asm-x86-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-x86-elf.S +++ src/runtime/lookup-asm/lookup-asm-x86-elf.S @@ -15,81 +15,79 @@ #include "config.h" #include "platform.h" -.intel_syntax noprefix - .globl objc_msg_lookup .globl objc_msg_lookup_stret .globl objc_msg_lookup_super .globl objc_msg_lookup_super_stret .section .text .macro GENERATE_LOOKUP name notFound \name: - mov edx, [esp + 4] - test edx, edx + movl 4(%esp), %edx + testl %edx, %edx jz .LreturnNilMethod - test dl, 1 + testb $1, %dl jnz .LtaggedPointer_\name - mov edx, [edx] - mov edx, [edx + 32] + movl (%edx), %edx + movl 32(%edx), %edx .Lmain_\name: - mov eax, [esp + 8] + movl 8(%esp), %eax #ifdef OF_SELUID24 - movzx ecx, byte ptr [eax + 2] - mov edx, [edx + 4 * ecx] + movzbl 2(%eax), %ecx + movl (%edx,%ecx,4), %edx #endif - movzx ecx, byte ptr [eax + 1] - mov edx, [edx + 4 * ecx] - movzx ecx, byte ptr [eax] - mov eax, [edx + 4 * ecx] + movzbl 1(%eax), %ecx + movl (%edx,%ecx,4), %edx + movzbl (%eax), %ecx + movl (%edx,%ecx,4), %eax - test eax, eax + testl %eax, %eax jz 0f ret 0: call .LgetEIP - add eax, offset _GLOBAL_OFFSET_TABLE_ - mov eax, [eax + \notFound@GOT] - jmp eax + addl $_GLOBAL_OFFSET_TABLE_, %eax + movl \notFound@GOT(%eax), %eax + jmp *%eax .LtaggedPointer_\name: call .LgetEIP - add eax, offset _GLOBAL_OFFSET_TABLE_ - - mov ecx, [eax + objc_taggedPointerSecret@GOT] - xor edx, [ecx] - and dl, 0xE - movzx edx, dl - - mov eax, [eax + objc_taggedPointerClasses@GOT] - mov edx, [eax + 2 * edx] - mov edx, [edx + 32] + addl $_GLOBAL_OFFSET_TABLE_, %eax + + movl objc_taggedPointerSecret@GOT(%eax), %ecx + xorl (%ecx), %edx + andb $0xE, %dl + movzbl %dl, %edx + + movl objc_taggedPointerClasses@GOT(%eax), %eax + movl (%eax,%edx,2), %edx + movl 32(%edx), %edx jmp .Lmain_\name .type \name, %function .size \name, .-\name .endm .macro GENERATE_LOOKUP_SUPER name lookup \name: - mov edx, [esp + 4] - mov eax, [edx] - test eax, eax + movl 4(%esp), %edx + movl (%edx), %eax + testl %eax, %eax jz .LreturnNilMethod - mov [esp + 4], eax - mov edx, [edx + 4] - mov edx, [edx + 32] + movl %eax, 4(%esp) + mov 4(%edx), %edx + mov 32(%edx), %edx jmp .Lmain_\lookup .type \name, %function .size \name, .-\name .endm @@ -98,20 +96,20 @@ GENERATE_LOOKUP_SUPER objc_msg_lookup_super objc_msg_lookup GENERATE_LOOKUP_SUPER objc_msg_lookup_super_stret objc_msg_lookup_stret .LreturnNilMethod: call .LgetEIP - add eax, offset _GLOBAL_OFFSET_TABLE_ - lea eax, [eax + .LnilMethod@GOTOFF] + addl $_GLOBAL_OFFSET_TABLE_, %eax + leal .LnilMethod@GOTOFF(%eax), %eax ret .LnilMethod: - xor eax, eax + xorl %eax, %eax ret .LgetEIP: - mov eax, [esp] + movl (%esp), %eax ret #if defined(OF_LINUX) || defined(OF_HAIKU) || defined(OF_HURD) .section .note.GNU-stack, "", %progbits #endif