Index: configure.ac ================================================================== --- configure.ac +++ configure.ac @@ -394,17 +394,23 @@ ]) AC_ARG_ENABLE(amiga-lib, AS_HELP_STRING([--disable-amiga-lib], [do not build Amiga library])) AS_IF([test x"$supports_amiga_lib" != x"yes"], [enable_amiga_lib="no"]) - -AS_IF([test x"$enable_shared" = x"no" -a x"$enable_amiga_lib" = x"no"], [ - enable_static="yes" +AS_IF([test x"$enable_amiga_lib" != x"no"], [ + AC_SUBST(OBJFW_STATIC_LIB, "libobjfw.a") + AC_SUBST(EXCEPTIONS_A, "exceptions.a") + AC_SUBST(FORWARDING_A, "forwarding.a") + AC_SUBST(INVOCATION_A, "invocation.a") + AC_SUBST(LOOKUP_ASM_AMIGALIB_A, "lookup-asm.amigalib.a") ]) AC_ARG_ENABLE(static, AS_HELP_STRING([--enable-static], [build static library])) -AS_IF([test x"$enable_static" = x"yes" -o x"$enable_amiga_lib" != x"no"], [ +AS_IF([test x"$enable_shared" = x"no" -a x"$enable_amiga_lib" = x"no"], [ + enable_static="yes" +]) +AS_IF([test x"$enable_static" = x"yes"], [ AC_SUBST(OBJFW_STATIC_LIB, "libobjfw.a") AC_SUBST(EXCEPTIONS_A, "exceptions.a") AC_SUBST(FORWARDING_A, "forwarding.a") AC_SUBST(INVOCATION_A, "invocation.a") AC_SUBST(LOOKUP_ASM_A, "lookup-asm.a") Index: extra.mk.in ================================================================== --- extra.mk.in +++ extra.mk.in @@ -37,10 +37,11 @@ LIBOBJFW_DEP = @LIBOBJFW_DEP@ LIBOBJFW_DEP_LVL2 = @LIBOBJFW_DEP_LVL2@ LINKLIB = @LINKLIB@ LOOKUP_ASM_A = @LOOKUP_ASM_A@ LOOKUP_ASM_LIB_A = @LOOKUP_ASM_LIB_A@ +LOOKUP_ASM_AMIGALIB_A = @LOOKUP_ASM_AMIGALIB_A@ MAP_LDFLAGS = @MAP_LDFLAGS@ OFARC = @OFARC@ OFDNS = @OFDNS@ OFHASH = @OFHASH@ OFHTTP = @OFHTTP@ Index: src/runtime/Makefile ================================================================== --- src/runtime/Makefile +++ src/runtime/Makefile @@ -41,12 +41,12 @@ includesubdir = ObjFWRT OBJS_EXTRA = lookup-asm/lookup-asm.a LIB_OBJS_EXTRA = lookup-asm/lookup-asm.lib.a AMIGA_LIB_OBJS_START = amiga-library.amigalib.o -AMIGA_LIB_OBJS_EXTRA = amiga-glue.amigalib.o \ - lookup-asm/lookup-asm.a \ +AMIGA_LIB_OBJS_EXTRA = amiga-glue.amigalib.o \ + lookup-asm/lookup-asm.amigalib.a \ amiga-end.amigalib.o include ../../buildsys.mk ${OBJFWRT_AMIGA_LIB}: inline.h Index: src/runtime/lookup-asm/Makefile ================================================================== --- src/runtime/lookup-asm/Makefile +++ src/runtime/lookup-asm/Makefile @@ -1,10 +1,12 @@ include ../../../extra.mk STATIC_PIC_LIB_NOINST = ${LOOKUP_ASM_LIB_A} +STATIC_AMIGA_LIB_NOINST = ${LOOKUP_ASM_AMIGALIB_A} STATIC_LIB_NOINST = ${LOOKUP_ASM_A} SRCS = lookup-asm.S include ../../../buildsys.mk ASFLAGS += -I../../.. -I../.. +ASFLAGS_lookup-asm.amigalib.o += -DOF_BASEREL 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 @@ -83,30 +83,36 @@ bctr #endif .Ltagged_pointer_\name: -#ifdef OF_PIC +#if defined(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) + lwz %r5, 0(%r5) +#elif defined(OF_BASEREL) + addis %r5, %r13, objc_tagged_pointer_secret@drel@ha + lwz %r5, objc_tagged_pointer_secret@drel@l(%r5) #else lis %r5, objc_tagged_pointer_secret@ha - addi %r5, %r5, objc_tagged_pointer_secret@l + lwz %r5, objc_tagged_pointer_secret@l(%r5) #endif - lwz %r5, 0(%r5) xor %r5, %r3, %r5 rlwinm %r5, %r5, 1, 0x1C -#ifdef OF_PIC +#if defined(OF_PIC) lwz %r6, .Lgot_objc_tagged_pointer_classes-.Lbiased_got2(%r6) +#elif defined(OF_BASEREL) + addis %r6, %r13, objc_tagged_pointer_classes@drel@ha + addi %r6, %r6, objc_tagged_pointer_classes@drel@l #else lis %r6, objc_tagged_pointer_classes@ha addi %r6, %r6, objc_tagged_pointer_classes@l #endif lwzx %r5, %r6, %r5