@@ -14,25 +14,36 @@ */ #include "config.h" #include "platform.h" + +#if defined(_CALL_ELF) && _CALL_ELF == 2 +.abiversion 2 +#endif .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 +#if defined(_CALL_ELF) && _CALL_ELF == 2 +\name: + addis %r2, %r12, .TOC.-\name@ha + addi %r2, %r2, .TOC.-\name@l +.localentry \name, .-\name +#else .section .opd, "aw", @progbits \name: .p2align 3 .quad .Lbegin_\name .quad .TOC.@tocbase .quad 0 -.text +.section .text +#endif .Lbegin_\name: cmpdi %r3, 0 beq- .LreturnNilMethod andi. %r0, %r3, 1 @@ -87,17 +98,24 @@ .type \name, @function .size \name, .-.Lbegin_\name .endm .macro GENERATE_LOOKUP_SUPER name lookup +#if defined(_CALL_ELF) && _CALL_ELF == 2 +\name: + addis %r2, %r12, .TOC.-\name@ha + addi %r2, %r2, .TOC.-\name@l +.localentry \name, .-\name +#else .section .opd, "aw", @progbits \name: .p2align 3 .quad .Lbegin_\name .quad .TOC.@tocbase .quad 0 -.text +.section .text +#endif .Lbegin_\name: mr %r5, %r3 ld %r3, 0(%r3) cmpdi %r3, 0 beq- .LreturnNilMethod @@ -118,21 +136,28 @@ .LreturnNilMethod: addis %r3, %r2, nilMethod@toc@ha addi %r3, %r3, nilMethod@toc@l blr +#if defined(_CALL_ELF) && _CALL_ELF == 2 +nilMethod: + addis %r2, %r12, .TOC.-nilMethod@ha + addi %r2, %r2, .TOC.-nilMethod@l +.localentry nilMethod, .-nilMethod +#else .section .opd, "aw", @progbits nilMethod: .p2align 3 .quad .Lbegin_nilMethod .quad .TOC.@tocbase .quad 0 -.text +.section .text +#endif .Lbegin_nilMethod: li %r3, 0 blr .type nilMethod, @function .size nilMethod, .-.Lbegin_nilMethod #ifdef OF_LINUX .section .note.GNU-stack, "", @progbits #endif