aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Pall <mike>2011-03-29 02:23:05 +0200
committerMike Pall <mike>2011-03-29 02:23:05 +0200
commit3bcb48c6a13ad0c1d092f2ea682388dfba663942 (patch)
tree4e8fcda3c7e359703be5d6356f441048d1d83e41
parent71f976b02e36e69731f85a1c2126af16b47b0395 (diff)
downloadluajit-3bcb48c6a13ad0c1d092f2ea682388dfba663942.tar.gz
luajit-3bcb48c6a13ad0c1d092f2ea682388dfba663942.tar.bz2
luajit-3bcb48c6a13ad0c1d092f2ea682388dfba663942.zip
ARM: Add frame unwind info for assembler part.
-rw-r--r--src/buildvm_arm.dasc38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/buildvm_arm.dasc b/src/buildvm_arm.dasc
index 5d5ea37b..37fe7e3b 100644
--- a/src/buildvm_arm.dasc
+++ b/src/buildvm_arm.dasc
@@ -1004,6 +1004,42 @@ static int build_backend(BuildCtx *ctx)
1004/* Emit pseudo frame-info for all assembler functions. */ 1004/* Emit pseudo frame-info for all assembler functions. */
1005static void emit_asm_debug(BuildCtx *ctx) 1005static void emit_asm_debug(BuildCtx *ctx)
1006{ 1006{
1007 UNUSED(ctx); /* NYI */ 1007 int i;
1008 switch (ctx->mode) {
1009 case BUILD_elfasm:
1010 fprintf(ctx->fp, "\t.section .debug_frame,\"\",%%progbits\n");
1011 fprintf(ctx->fp,
1012 ".Lframe0:\n"
1013 "\t.long .LECIE0-.LSCIE0\n"
1014 ".LSCIE0:\n"
1015 "\t.long 0xffffffff\n"
1016 "\t.byte 0x1\n"
1017 "\t.string \"\"\n"
1018 "\t.uleb128 0x1\n"
1019 "\t.sleb128 -4\n"
1020 "\t.byte 0xe\n" /* Return address is in lr. */
1021 "\t.byte 0xc\n\t.uleb128 0xd\n\t.uleb128 0\n" /* def_cfa sp */
1022 "\t.align 2\n"
1023 ".LECIE0:\n\n");
1024 fprintf(ctx->fp,
1025 ".LSFDE0:\n"
1026 "\t.long .LEFDE0-.LASFDE0\n"
1027 ".LASFDE0:\n"
1028 "\t.long .Lframe0\n"
1029 "\t.long .Lbegin\n"
1030 "\t.long %d\n"
1031 "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */
1032 "\t.byte 0x8e\n\t.uleb128 1\n", /* Restore lr. */
1033 (int)ctx->codesz, CFRAME_SIZE);
1034 for (i = 11; i >= 4; i--) /* Restore r4-r11. */
1035 fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+i, 2+(11-i));
1036 fprintf(ctx->fp,
1037 "\t.align 2\n"
1038 ".LEFDE0:\n\n");
1039 /* NYI: emit ARM.exidx. */
1040 break;
1041 default:
1042 break;
1043 }
1008} 1044}
1009 1045