Index: src/runtime/lookup-asm-amd64-elf.S ================================================================== --- src/runtime/lookup-asm-amd64-elf.S +++ src/runtime/lookup-asm-amd64-elf.S @@ -41,10 +41,14 @@ testq %rax, %rax jz objc_not_found_handler@PLT ret + +ret_nil: + leaq nil_method(%rip), %rax + ret .type objc_msg_lookup, %function .size objc_msg_lookup, .-objc_msg_lookup objc_msg_lookup_super: movq (%rdi), %rax @@ -56,16 +60,12 @@ movq %rdi, %rax jmp lookup .type objc_msg_lookup_super, %function .size objc_msg_lookup_super, .-objc_msg_lookup_super -ret_nil: - leaq nil_method(%rip), %rax - ret - nil_method: movq %rdi, %rax ret #ifdef __linux__ .section .note.GNU-stack, "", %progbits #endif Index: src/runtime/lookup-asm-amd64-macho.S ================================================================== --- src/runtime/lookup-asm-amd64-macho.S +++ src/runtime/lookup-asm-amd64-macho.S @@ -38,16 +38,17 @@ #endif movq (%r8,%rcx,8), %r8 movq (%r8,%rdx,8), %rax testq %rax, %rax - jz forward + jz _objc_not_found_handler ret -forward: - jmp _objc_not_found_handler +ret_nil: + leaq nil_method(%rip), %rax + ret _objc_msg_lookup_super: movq (%rdi), %rax testq %rax, %rax jz ret_nil @@ -55,12 +56,8 @@ movq 8(%rdi), %r8 movq 64(%r8), %r8 movq %rdi, %rax jmp lookup -ret_nil: - leaq nil_method(%rip), %rax - ret - nil_method: movq %rdi, %rax ret Index: src/runtime/lookup-asm-arm-elf.S ================================================================== --- src/runtime/lookup-asm-arm-elf.S +++ src/runtime/lookup-asm-arm-elf.S @@ -40,10 +40,14 @@ cmp r2, #0 beq objc_not_found_handler(PLT) mov r0, r2 bx lr + +ret_nil: + adr r0, nil_method + bx lr .type objc_msg_lookup, %function .size objc_msg_lookup, .-objc_msg_lookup objc_msg_lookup_super: ldr r2, [r0, #0] @@ -55,16 +59,12 @@ b lookup .type objc_msg_lookup_super, %function .size objc_msg_lookup_super, .-objc_msg_lookup_super -ret_nil: - adr r0, nil_method - bx lr - nil_method: mov r0, #0 bx lr #ifdef __linux__ .section .note.GNU-stack, "", %progbits #endif Index: src/runtime/lookup-asm-ppc-elf.S ================================================================== --- src/runtime/lookup-asm-ppc-elf.S +++ src/runtime/lookup-asm-ppc-elf.S @@ -64,27 +64,27 @@ lwz %r5, 4(%r3) lwz %r5, 32(%r5) b lookup -.type objc_msg_lookup_super, %function -.size objc_msg_lookup_super, .-objc_msg_lookup_super ret_nil: mflr %r0 bl get_pc mtlr %r0 .L1: addi %r3, %r3, nil_method-.L1 blr -nil_method: - li %r3, 0 - blr - get_pc: mflr %r3 + blr +.type objc_msg_lookup_super, %function +.size objc_msg_lookup_super, .-objc_msg_lookup_super + +nil_method: + li %r3, 0 blr #ifdef __linux__ .section .note.GNU-stack, "", %progbits #endif Index: src/runtime/lookup-asm-x86-elf.S ================================================================== --- src/runtime/lookup-asm-x86-elf.S +++ src/runtime/lookup-asm-x86-elf.S @@ -42,19 +42,29 @@ testl %eax, %eax jz forward ret -.type objc_msg_lookup, %function -.size objc_msg_lookup, .-objc_msg_lookup + +ret_nil: + call get_eip +.L2: + addl $nil_method-.L2, %eax + ret forward: call get_eip .L1: addl $objc_not_found_handler-.L1, %eax jmp *%eax +get_eip: + movl (%esp), %eax + ret +.type objc_msg_lookup, %function +.size objc_msg_lookup, .-objc_msg_lookup + objc_msg_lookup_super: movl 4(%esp), %edx cmpl $0, (%edx) je ret_nil @@ -62,22 +72,12 @@ movl 32(%edx), %edx jmp lookup .type objc_msg_lookup_super, %function .size objc_msg_lookup_super, .-objc_msg_lookup_super -ret_nil: - call get_eip -.L2: - addl $nil_method-.L2, %eax - ret - nil_method: movl 4(%esp), %eax ret -get_eip: - movl (%esp), %eax - ret - #ifdef __linux__ .section .note.GNU-stack, "", %progbits #endif