From dbd04e77a0044027362f9f63a627f9f3a85274d0 Mon Sep 17 00:00:00 2001 From: Gustavo Serra Scalet Date: Tue, 2 Jun 2015 15:54:46 -0300 Subject: [PATCH] PPC64: Add method for external branch by using @got for PIC --- src/host/buildvm_asm.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/src/host/buildvm_asm.c b/src/host/buildvm_asm.c index 28419c07..0a920c1f 100644 --- a/src/host/buildvm_asm.c +++ b/src/host/buildvm_asm.c @@ -141,11 +141,9 @@ static void emit_asm_wordreloc(BuildCtx *ctx, uint8_t *p, int n, (ins & 1) ? "bcl" : "bc", (ins >> 21) & 31, (ins >> 16) & 31, sym); } else if ((ins >> 26) == 18) { #if LJ_ARCH_PPC64 - const char *suffix = strchr(sym, '@'); - if (suffix && suffix[1] == 'h') { - fprintf(ctx->fp, "\taddis 11, 2, %s\n", sym); - } else if (suffix && suffix[1] == 'l') { - fprintf(ctx->fp, "\tld 12, %s\n", sym); + char *suffix = strchr(sym, '@'); + if (suffix) { + fprintf(ctx->fp, "\tld 12, %s(2)\n", sym); } else #endif fprintf(ctx->fp, "\t%s " TOCPREFIX "%s\n", (ins & 1) ? "bl" : "b", sym); @@ -247,6 +245,7 @@ void emit_asm(BuildCtx *ctx) fprintf(ctx->fp, "\t.file \"buildvm_%s.dasc\"\n", ctx->dasm_arch); #if LJ_ARCH_PPC64 fprintf(ctx->fp, "\t.abiversion 2\n"); + fprintf(ctx->fp, "\t.section\t\t\".toc\",\"aw\"\n"); #endif fprintf(ctx->fp, "\t.text\n"); emit_asm_align(ctx, 4);