Upstream-Status: Unknown Signed-off-by: Khem Raj libluajit is having symbols that can't be resolved the reloc cannot accommodate an offset greater than 24 bits. Looking at libluajit with readelf -r, you see a bunch of entries that look like: 000082f0 00003c0a R_PPC_REL24 00000000 sqrt + 0 These should not occur when the code is compiled and linked with -fPIC. It turns out that libluajit *is* compiled and linked with -fPIC, however... There is one assembler file called lj_vm.s which is generated during the build. This file is missing the `@plt' qualifier from external references. This file is generated by a program called buildvm. This in turn uses tables in a file called buildvm_arch.h which is generated by dynasm.lua. Index: LuaJIT-2.0.1/src/host/buildvm.c =================================================================== --- LuaJIT-2.0.1.orig/src/host/buildvm.c 2013-02-19 12:15:00.000000000 -0800 +++ LuaJIT-2.0.1/src/host/buildvm.c 2013-05-14 20:26:05.933444512 -0700 @@ -107,12 +107,14 @@ #endif sprintf(name, "%s%s%s", symprefix, prefix, suffix); p = strchr(name, '@'); +#if 0 if (p) { if (!LJ_64 && (ctx->mode == BUILD_coffasm || ctx->mode == BUILD_peobj)) name[0] = '@'; else *p = '\0'; } +#endif p = (char *)malloc(strlen(name)+1); /* MSVC doesn't like strdup. */ strcpy(p, name); return p; Index: LuaJIT-2.0.1/src/vm_ppcspe.dasc =================================================================== --- LuaJIT-2.0.1.orig/src/vm_ppcspe.dasc 2013-02-19 12:15:00.000000000 -0800 +++ LuaJIT-2.0.1/src/vm_ppcspe.dasc 2013-05-14 20:26:05.937444512 -0700 @@ -1390,7 +1390,7 @@ | checknum CARG2 | evmergehi CARG1, CARG2, CARG2 | checkfail ->fff_fallback - | bl extern func + | bl extern func@plt | evmergelo CRET1, CRET1, CRET2 | b ->fff_restv |.endmacro @@ -1405,7 +1405,7 @@ | checknum CARG1 | evmergehi CARG3, CARG4, CARG4 | checkanyfail ->fff_fallback - | bl extern func + | bl extern func@plt | evmergelo CRET1, CRET1, CRET2 | b ->fff_restv |.endmacro @@ -1437,7 +1437,7 @@ | checknum CARG2 | evmergehi CARG1, CARG2, CARG2 | checkfail ->fff_fallback - | bl extern log + | bl extern log@plt | evmergelo CRET1, CRET1, CRET2 | b ->fff_restv | @@ -1471,7 +1471,7 @@ | checknum CARG1 | checkanyfail ->fff_fallback | efdctsi CARG3, CARG4 - | bl extern ldexp + | bl extern ldexp@plt | evmergelo CRET1, CRET1, CRET2 | b ->fff_restv | @@ -1484,7 +1484,7 @@ | checkfail ->fff_fallback | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) | lwz PC, FRAME_PC(BASE) - | bl extern frexp + | bl extern frexp@plt | lwz TMP1, DISPATCH_GL(tmptv)(DISPATCH) | evmergelo CRET1, CRET1, CRET2 | efdcfsi CRET2, TMP1 @@ -1503,7 +1503,7 @@ | checkfail ->fff_fallback | la CARG3, -8(BASE) | lwz PC, FRAME_PC(BASE) - | bl extern modf + | bl extern modf@plt | evmergelo CRET1, CRET1, CRET2 | la RA, -8(BASE) | evstdd CRET1, 0(BASE) @@ -2399,7 +2399,7 @@ | checknum CARG1 | evmergehi CARG3, CARG4, CARG4 | checkanyfail ->vmeta_arith_vv - | bl extern pow + | bl extern pow@plt | evmergelo CRET2, CRET1, CRET2 | evstddx CRET2, BASE, RA | ins_next