Upstream-Status: Unknown

Signed-off-by: Khem Raj <raj.khem@gmail.com>

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
