Index: src/runtime/lookup-asm/lookup-asm-powerpc-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-powerpc-elf.S +++ src/runtime/lookup-asm/lookup-asm-powerpc-elf.S @@ -49,15 +49,20 @@ #endif lwzx %r5, %r5, %r7 lwzx %r5, %r5, %r8 cmpwi %r5, 0 +#ifdef OF_PIC beq- 0f +#else + beq- \not_found +#endif mr %r3, %r5 blr +#ifdef OF_PIC 0: stwu %r1, -16(%r1) mflr %r0 stw %r0, 20(%r1) stw %r30, 8(%r1) @@ -75,26 +80,37 @@ lwz %r0, 20(%r1) addi %r1, %r1, 16 mtlr %r0 bctr +#endif .Ltagged_pointer_\name: +#ifdef OF_PIC mflr %r7 bl 0f 0: mflr %r6 mtlr %r7 addis %r6, %r6, .Lbiased_got2-0b@ha addi %r6, %r6, .Lbiased_got2-0b@l lwz %r5, .Lgot_objc_tagged_pointer_secret-.Lbiased_got2(%r6) +#else + lis %r5, objc_tagged_pointer_secret@ha + addi %r5, %r5, objc_tagged_pointer_secret@l +#endif lwz %r5, 0(%r5) xor %r5, %r3, %r5 rlwinm %r5, %r5, 1, 0x1C +#ifdef OF_PIC lwz %r6, .Lgot_objc_tagged_pointer_classes-.Lbiased_got2(%r6) +#else + lis %r6, objc_tagged_pointer_classes@ha + addi %r6, %r6, objc_tagged_pointer_classes@l +#endif lwzx %r5, %r6, %r5 lwz %r5, 32(%r5) b .Lmain_\name .type \name, @function @@ -135,10 +151,11 @@ get_pc: mflr %r3 blr +#ifdef OF_PIC .section .got2, "aw" .Lbiased_got2 = .+0x8000 .Lgot_objc_method_not_found: .long objc_method_not_found .Lgot_objc_method_not_found_stret: @@ -145,9 +162,10 @@ .long objc_method_not_found_stret .Lgot_objc_tagged_pointer_secret: .long objc_tagged_pointer_secret .Lgot_objc_tagged_pointer_classes: .long objc_tagged_pointer_classes +#endif #ifdef OF_LINUX .section .note.GNU-stack, "", @progbits #endif