aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/host/buildvm.c6
-rw-r--r--src/vm_ppc.dasc4
-rw-r--r--src/vm_ppcspe.dasc14
3 files changed, 15 insertions, 9 deletions
diff --git a/src/host/buildvm.c b/src/host/buildvm.c
index ef5f7fb9..ce892006 100644
--- a/src/host/buildvm.c
+++ b/src/host/buildvm.c
@@ -108,10 +108,16 @@ static const char *sym_decorate(BuildCtx *ctx,
108 sprintf(name, "%s%s%s", symprefix, prefix, suffix); 108 sprintf(name, "%s%s%s", symprefix, prefix, suffix);
109 p = strchr(name, '@'); 109 p = strchr(name, '@');
110 if (p) { 110 if (p) {
111#if LJ_TARGET_X86ORX64
111 if (!LJ_64 && (ctx->mode == BUILD_coffasm || ctx->mode == BUILD_peobj)) 112 if (!LJ_64 && (ctx->mode == BUILD_coffasm || ctx->mode == BUILD_peobj))
112 name[0] = '@'; 113 name[0] = '@';
113 else 114 else
114 *p = '\0'; 115 *p = '\0';
116#elif (LJ_TARGET_PPC || LJ_TARGET_PPCSPE) && !LJ_TARGET_CONSOLE
117 /* Keep @plt. */
118#else
119 *p = '\0';
120#endif
115 } 121 }
116 p = (char *)malloc(strlen(name)+1); /* MSVC doesn't like strdup. */ 122 p = (char *)malloc(strlen(name)+1); /* MSVC doesn't like strdup. */
117 strcpy(p, name); 123 strcpy(p, name);
diff --git a/src/vm_ppc.dasc b/src/vm_ppc.dasc
index 6bceff9c..a7707ccc 100644
--- a/src/vm_ppc.dasc
+++ b/src/vm_ppc.dasc
@@ -49,7 +49,7 @@
49|// Convenience macros for TOC handling. 49|// Convenience macros for TOC handling.
50|.if TOC 50|.if TOC
51|// Linker needs a TOC patch area for every external call relocation. 51|// Linker needs a TOC patch area for every external call relocation.
52|.macro blex, target; bl extern target; nop; .endmacro 52|.macro blex, target; bl extern target@plt; nop; .endmacro
53|.macro .toc, a, b; a, b; .endmacro 53|.macro .toc, a, b; a, b; .endmacro
54|.if P64 54|.if P64
55|.define TOC_OFS, 8 55|.define TOC_OFS, 8
@@ -59,7 +59,7 @@
59|.define ENV_OFS, 8 59|.define ENV_OFS, 8
60|.endif 60|.endif
61|.else // No TOC. 61|.else // No TOC.
62|.macro blex, target; bl extern target; .endmacro 62|.macro blex, target; bl extern target@plt; .endmacro
63|.macro .toc, a, b; .endmacro 63|.macro .toc, a, b; .endmacro
64|.endif 64|.endif
65|.macro .tocenv, a, b; .if TOCENV; a, b; .endif; .endmacro 65|.macro .tocenv, a, b; .if TOCENV; a, b; .endif; .endmacro
diff --git a/src/vm_ppcspe.dasc b/src/vm_ppcspe.dasc
index b443f1b3..50139612 100644
--- a/src/vm_ppcspe.dasc
+++ b/src/vm_ppcspe.dasc
@@ -1390,7 +1390,7 @@ static void build_subroutines(BuildCtx *ctx)
1390 | checknum CARG2 1390 | checknum CARG2
1391 | evmergehi CARG1, CARG2, CARG2 1391 | evmergehi CARG1, CARG2, CARG2
1392 | checkfail ->fff_fallback 1392 | checkfail ->fff_fallback
1393 | bl extern func 1393 | bl extern func@plt
1394 | evmergelo CRET1, CRET1, CRET2 1394 | evmergelo CRET1, CRET1, CRET2
1395 | b ->fff_restv 1395 | b ->fff_restv
1396 |.endmacro 1396 |.endmacro
@@ -1405,7 +1405,7 @@ static void build_subroutines(BuildCtx *ctx)
1405 | checknum CARG1 1405 | checknum CARG1
1406 | evmergehi CARG3, CARG4, CARG4 1406 | evmergehi CARG3, CARG4, CARG4
1407 | checkanyfail ->fff_fallback 1407 | checkanyfail ->fff_fallback
1408 | bl extern func 1408 | bl extern func@plt
1409 | evmergelo CRET1, CRET1, CRET2 1409 | evmergelo CRET1, CRET1, CRET2
1410 | b ->fff_restv 1410 | b ->fff_restv
1411 |.endmacro 1411 |.endmacro
@@ -1437,7 +1437,7 @@ static void build_subroutines(BuildCtx *ctx)
1437 | checknum CARG2 1437 | checknum CARG2
1438 | evmergehi CARG1, CARG2, CARG2 1438 | evmergehi CARG1, CARG2, CARG2
1439 | checkfail ->fff_fallback 1439 | checkfail ->fff_fallback
1440 | bl extern log 1440 | bl extern log@plt
1441 | evmergelo CRET1, CRET1, CRET2 1441 | evmergelo CRET1, CRET1, CRET2
1442 | b ->fff_restv 1442 | b ->fff_restv
1443 | 1443 |
@@ -1465,7 +1465,7 @@ static void build_subroutines(BuildCtx *ctx)
1465 | checknum CARG1 1465 | checknum CARG1
1466 | checkanyfail ->fff_fallback 1466 | checkanyfail ->fff_fallback
1467 | efdctsi CARG3, CARG4 1467 | efdctsi CARG3, CARG4
1468 | bl extern ldexp 1468 | bl extern ldexp@plt
1469 | evmergelo CRET1, CRET1, CRET2 1469 | evmergelo CRET1, CRET1, CRET2
1470 | b ->fff_restv 1470 | b ->fff_restv
1471 | 1471 |
@@ -1478,7 +1478,7 @@ static void build_subroutines(BuildCtx *ctx)
1478 | checkfail ->fff_fallback 1478 | checkfail ->fff_fallback
1479 | la CARG3, DISPATCH_GL(tmptv)(DISPATCH) 1479 | la CARG3, DISPATCH_GL(tmptv)(DISPATCH)
1480 | lwz PC, FRAME_PC(BASE) 1480 | lwz PC, FRAME_PC(BASE)
1481 | bl extern frexp 1481 | bl extern frexp@plt
1482 | lwz TMP1, DISPATCH_GL(tmptv)(DISPATCH) 1482 | lwz TMP1, DISPATCH_GL(tmptv)(DISPATCH)
1483 | evmergelo CRET1, CRET1, CRET2 1483 | evmergelo CRET1, CRET1, CRET2
1484 | efdcfsi CRET2, TMP1 1484 | efdcfsi CRET2, TMP1
@@ -1497,7 +1497,7 @@ static void build_subroutines(BuildCtx *ctx)
1497 | checkfail ->fff_fallback 1497 | checkfail ->fff_fallback
1498 | la CARG3, -8(BASE) 1498 | la CARG3, -8(BASE)
1499 | lwz PC, FRAME_PC(BASE) 1499 | lwz PC, FRAME_PC(BASE)
1500 | bl extern modf 1500 | bl extern modf@plt
1501 | evmergelo CRET1, CRET1, CRET2 1501 | evmergelo CRET1, CRET1, CRET2
1502 | la RA, -8(BASE) 1502 | la RA, -8(BASE)
1503 | evstdd CRET1, 0(BASE) 1503 | evstdd CRET1, 0(BASE)
@@ -2393,7 +2393,7 @@ static void build_ins(BuildCtx *ctx, BCOp op, int defop)
2393 | checknum CARG1 2393 | checknum CARG1
2394 | evmergehi CARG3, CARG4, CARG4 2394 | evmergehi CARG3, CARG4, CARG4
2395 | checkanyfail ->vmeta_arith_vv 2395 | checkanyfail ->vmeta_arith_vv
2396 | bl extern pow 2396 | bl extern pow@plt
2397 | evmergelo CRET2, CRET1, CRET2 2397 | evmergelo CRET2, CRET1, CRET2
2398 | evstddx CRET2, BASE, RA 2398 | evstddx CRET2, BASE, RA
2399 | ins_next 2399 | ins_next