Index: src/runtime/lookup-asm/lookup-asm-powerpc64-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-powerpc64-elf.S +++ src/runtime/lookup-asm/lookup-asm-powerpc64-elf.S @@ -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 Index: src/runtime/lookup-asm/lookup-asm.S ================================================================== --- src/runtime/lookup-asm/lookup-asm.S +++ src/runtime/lookup-asm/lookup-asm.S @@ -24,13 +24,13 @@ # include "lookup-asm-x86-elf.S" # elif defined(OF_ARM64) # include "lookup-asm-arm64-elf.S" # elif defined(OF_ARM) # include "lookup-asm-arm-elf.S" -# elif defined(OF_POWERPC64) && (!defined(_CALL_ELF) || _CALL_ELF == 1) +# elif defined(OF_POWERPC64) # include "lookup-asm-powerpc64-elf.S" -# elif defined(OF_POWERPC) && (!defined(_CALL_ELF) || _CALL_ELF == 1) +# elif defined(OF_POWERPC) # include "lookup-asm-powerpc-elf.S" # elif defined(OF_MIPS64_N64) # include "lookup-asm-mips64-n64-elf.S" # elif defined(OF_MIPS) # include "lookup-asm-mips-elf.S" Index: src/runtime/private.h ================================================================== --- src/runtime/private.h +++ src/runtime/private.h @@ -357,20 +357,16 @@ objc_error("ObjFWRT @ " __FILE__ ":" OF_STRINGIFY(__LINE__), \ __VA_ARGS__) #if defined(OF_ELF) # if defined(OF_X86_64) || defined(OF_X86) || \ + defined(OF_POWERPC64) || defined(OF_POWERPC) || \ defined(OF_ARM64) || defined(OF_ARM) || \ defined(OF_MIPS64_N64) || defined(OF_MIPS) || \ defined(OF_SPARC64) || defined(OF_SPARC) # define OF_ASM_LOOKUP # endif -# if defined(OF_POWERPC64) || defined(OF_POWERPC) -# if !defined(_CALL_ELF) || _CALL_ELF == 1 -# define OF_ASM_LOOKUP -# endif -# endif #elif defined(OF_MACH_O) # if defined(OF_X86_64) # define OF_ASM_LOOKUP # endif #elif defined(OF_WINDOWS)