@@ -24,39 +24,47 @@ .section .text of_forward: save %sp, -96, %sp +#ifdef OF_PIC sethi %hi(_GLOBAL_OFFSET_TABLE_ - 4), %l7 call add_pc add %l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7 +#endif mov %i0, %o0 call object_getClass nop sethi %hi(sel_forwardingTargetForSelector_), %o1 or %o1, %lo(sel_forwardingTargetForSelector_), %o1 +#ifdef OF_PIC ld [%l7 + %o1], %o1 +#endif call class_respondsToSelector nop cmp %o0, 0 be 0f mov %i0, %o0 sethi %hi(sel_forwardingTargetForSelector_), %o1 or %o1, %lo(sel_forwardingTargetForSelector_), %o1 +#ifdef OF_PIC ld [%l7 + %o1], %o1 +#endif call objc_msg_lookup nop mov %o0, %l0 mov %i0, %o0 sethi %hi(sel_forwardingTargetForSelector_), %o1 or %o1, %lo(sel_forwardingTargetForSelector_), %o1 +#ifdef OF_PIC ld [%l7 + %o1], %o1 +#endif jmpl %l0, %o7 mov %i1, %o2 cmp %o0, 0 be 0f @@ -77,39 +85,47 @@ .size of_forward, .-of_forward of_forward_stret: save %sp, -96, %sp +#ifdef OF_PIC sethi %hi(_GLOBAL_OFFSET_TABLE_ - 4), %l7 call add_pc add %l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7 +#endif mov %i1, %o0 call object_getClass nop sethi %hi(sel_forwardingTargetForSelector_), %o1 or %o1, %lo(sel_forwardingTargetForSelector_), %o1 +#ifdef OF_PIC ld [%l7 + %o1], %o1 +#endif call class_respondsToSelector nop cmp %o0, 0 be 0f mov %i1, %o0 sethi %hi(sel_forwardingTargetForSelector_), %o1 or %o1, %lo(sel_forwardingTargetForSelector_), %o1 +#ifdef OF_PIC ld [%l7 + %o1], %o1 +#endif call objc_msg_lookup nop mov %o0, %l0 mov %i1, %o0 sethi %hi(sel_forwardingTargetForSelector_), %o1 or %o1, %lo(sel_forwardingTargetForSelector_), %o1 +#ifdef OF_PIC ld [%l7 + %o1], %o1 +#endif jmpl %l0, %o7 mov %i2, %o2 cmp %o0, 0 be 0f @@ -130,24 +146,30 @@ .size of_forward_stret, .-of_forward_stret init: save %sp, -96, %sp +#ifdef OF_PIC sethi %hi(_GLOBAL_OFFSET_TABLE_ - 4), %l7 call add_pc add %l7, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %l7 +#endif sethi %hi(module), %i0 or %i0, %lo(module), %i0 +#ifdef OF_PIC ld [%l7 + %i0], %i0 +#endif call __objc_exec_class restore +#ifdef OF_PIC add_pc: jmp %o7 + 8 add %l7, %o7, %l7 +#endif #ifdef OF_SOLARIS .section .init_array, "aw" #else .section .ctors, "aw", %progbits