aboutsummaryrefslogtreecommitdiffstats
path: root/dynamic-layers/openembedded-layer/recipes-devtools/luajit/luajit/ppc-fixplt.patch
diff options
context:
space:
mode:
Diffstat (limited to 'dynamic-layers/openembedded-layer/recipes-devtools/luajit/luajit/ppc-fixplt.patch')
-rw-r--r--dynamic-layers/openembedded-layer/recipes-devtools/luajit/luajit/ppc-fixplt.patch105
1 files changed, 105 insertions, 0 deletions
diff --git a/dynamic-layers/openembedded-layer/recipes-devtools/luajit/luajit/ppc-fixplt.patch b/dynamic-layers/openembedded-layer/recipes-devtools/luajit/luajit/ppc-fixplt.patch
new file mode 100644
index 00000000..b9f17f4e
--- /dev/null
+++ b/dynamic-layers/openembedded-layer/recipes-devtools/luajit/luajit/ppc-fixplt.patch
@@ -0,0 +1,105 @@
+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