Index: src/forwarding/forwarding-x86-elf.S ================================================================== --- src/forwarding/forwarding-x86-elf.S +++ src/forwarding/forwarding-x86-elf.S @@ -27,35 +27,36 @@ pushl %ebx subl $20, %esp call get_eip 0: + addl $_GLOBAL_OFFSET_TABLE_, %ebx movl 8(%ebp), %eax movl %eax, (%esp) - leal object_getClass-0b(%ebx), %eax + movl object_getClass@GOT(%ebx), %eax call *%eax movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax + leal sel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax movl %eax, 4(%esp) - leal class_respondsToSelector-0b(%ebx), %eax + movl class_respondsToSelector@GOT(%ebx), %eax call *%eax testl %eax, %eax jz 1f movl 8(%ebp), %eax movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax + leal sel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax movl %eax, 4(%esp) - leal objc_msg_lookup-0b(%ebx), %eax + movl objc_msg_lookup@GOT(%ebx), %eax call *%eax movl 8(%ebp), %edx movl %edx, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %edx + leal sel_forwardingTargetForSelector_@GOTOFF(%ebx), %edx movl %edx, 4(%esp) movl 12(%ebp), %edx movl %edx, 8(%esp) call *%eax @@ -66,21 +67,21 @@ movl %eax, 8(%ebp) movl %eax, (%esp) movl 12(%ebp), %eax movl %eax, 4(%esp) - leal objc_msg_lookup-0b(%ebx), %eax + movl objc_msg_lookup@GOT(%ebx), %eax call *%eax addl $20, %esp popl %ebx popl %ebp jmp *%eax 1: - leal of_method_not_found-0b(%ebx), %eax + movl of_method_not_found@GOT(%ebx), %eax addl $20, %esp popl %ebx popl %ebp @@ -95,35 +96,36 @@ pushl %ebx subl $20, %esp call get_eip 0: + addl $_GLOBAL_OFFSET_TABLE_, %ebx movl 12(%ebp), %eax movl %eax, (%esp) - leal object_getClass-0b(%ebx), %eax + movl object_getClass@GOT(%ebx), %eax call *%eax movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax + leal sel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax movl %eax, 4(%esp) - leal class_respondsToSelector-0b(%ebx), %eax + movl class_respondsToSelector@GOT(%ebx), %eax call *%eax testl %eax, %eax jz 1f movl 12(%ebp), %eax movl %eax, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %eax + leal sel_forwardingTargetForSelector_@GOTOFF(%ebx), %eax movl %eax, 4(%esp) - leal objc_msg_lookup-0b(%ebx), %eax + movl objc_msg_lookup@GOT(%ebx), %eax call *%eax movl 12(%ebp), %edx movl %edx, (%esp) - leal sel_forwardingTargetForSelector_-0b(%ebx), %edx + leal sel_forwardingTargetForSelector_@GOTOFF(%ebx), %edx movl %edx, 4(%esp) movl 16(%ebp), %edx movl %edx, 8(%esp) call *%eax @@ -134,21 +136,21 @@ movl %eax, 12(%ebp) movl %eax, (%esp) movl 16(%ebp), %eax movl %eax, 4(%esp) - leal objc_msg_lookup_stret-0b(%ebx), %eax + movl objc_msg_lookup_stret@GOT(%ebx), %eax call *%eax addl $20, %esp popl %ebx popl %ebp jmp *%eax 1: - leal of_method_not_found_stret-0b(%ebx), %eax + movl of_method_not_found_stret@GOT(%ebx), %eax addl $20, %esp popl %ebx popl %ebp @@ -163,13 +165,15 @@ pushl %ebx subl $4, %esp call get_eip 0: - leal module-0b(%ebx), %eax + add $_GLOBAL_OFFSET_TABLE_, %ebx + + leal module@GOTOFF(%ebx), %eax movl %eax, (%esp) - leal __objc_exec_class-0b(%ebx), %eax + movl __objc_exec_class@GOT(%ebx), %eax call *%eax addl $4, %esp popl %ebx popl %ebp