Index: src/OFObject.m ================================================================== --- src/OFObject.m +++ src/OFObject.m @@ -24,10 +24,14 @@ #include #ifdef OF_APPLE_RUNTIME # include #endif + +#ifdef HAVE_GETRANDOM +# include +#endif #import "OFObject.h" #import "OFArray.h" #import "OFLocale.h" #import "OFMethodSignature.h" @@ -102,11 +106,11 @@ Class isa; } allocFailedException; uint32_t of_hash_seed; -#ifndef HAVE_ARC4RANDOM +#if !defined(HAVE_ARC4RANDOM) && !defined(HAVE_GETRANDOM) static void initRandom(void) { struct timeval tv; Index: src/forwarding/forwarding-sparc-elf.S ================================================================== --- src/forwarding/forwarding-sparc-elf.S +++ src/forwarding/forwarding-sparc-elf.S @@ -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 Index: src/runtime/lookup-asm/lookup-asm-sparc-elf.S ================================================================== --- src/runtime/lookup-asm/lookup-asm-sparc-elf.S +++ src/runtime/lookup-asm/lookup-asm-sparc-elf.S @@ -68,13 +68,13 @@ mov %g1, %o7 .Ltagged_pointer_\name: #ifdef OF_PIC mov %o7, %g1 - sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %o3 + sethi %hi(_GLOBAL_OFFSET_TABLE_ - 4), %o3 call 0f - or %o3, %lo(_GLOBAL_OFFSET_TABLE_+4), %o3 + or %o3, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %o3 0: add %o7, %o3, %o3 mov %g1, %o7 #endif @@ -123,13 +123,13 @@ ret_nil: #ifdef OF_PIC mov %o7, %g1 - sethi %hi(_GLOBAL_OFFSET_TABLE_-4), %o1 + sethi %hi(_GLOBAL_OFFSET_TABLE_ - 4), %o1 call 0f - add %o1, %lo(_GLOBAL_OFFSET_TABLE_+4), %o1 + add %o1, %lo(_GLOBAL_OFFSET_TABLE_ + 4), %o1 0: add %o7, %o1, %o1 sethi %hi(nil_method), %o0 or %o0, %lo(nil_method), %o0