aboutsummaryrefslogtreecommitdiff
path: root/src/buildvm_arm.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/buildvm_arm.h')
-rw-r--r--src/buildvm_arm.h24
1 files changed, 21 insertions, 3 deletions
diff --git a/src/buildvm_arm.h b/src/buildvm_arm.h
index 0c2d9f39..bdb0038b 100644
--- a/src/buildvm_arm.h
+++ b/src/buildvm_arm.h
@@ -7332,6 +7332,7 @@ static int build_backend(BuildCtx *ctx)
7332/* Emit pseudo frame-info for all assembler functions. */ 7332/* Emit pseudo frame-info for all assembler functions. */
7333static void emit_asm_debug(BuildCtx *ctx) 7333static void emit_asm_debug(BuildCtx *ctx)
7334{ 7334{
7335 int fcofs = (int)((uint8_t *)ctx->glob[GLOB_vm_ffi_call] - ctx->code);
7335 int i; 7336 int i;
7336 switch (ctx->mode) { 7337 switch (ctx->mode) {
7337 case BUILD_elfasm: 7338 case BUILD_elfasm:
@@ -7357,13 +7358,30 @@ static void emit_asm_debug(BuildCtx *ctx)
7357 "\t.long .Lbegin\n" 7358 "\t.long .Lbegin\n"
7358 "\t.long %d\n" 7359 "\t.long %d\n"
7359 "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */ 7360 "\t.byte 0xe\n\t.uleb128 %d\n" /* def_cfa_offset */
7360 "\t.byte 0x8e\n\t.uleb128 1\n", /* Restore lr. */ 7361 "\t.byte 0x8e\n\t.uleb128 1\n", /* offset lr */
7361 (int)ctx->codesz, CFRAME_SIZE); 7362 fcofs, CFRAME_SIZE);
7362 for (i = 11; i >= 4; i--) /* Restore r4-r11. */ 7363 for (i = 11; i >= 4; i--) /* offset r4-r11 */
7363 fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+i, 2+(11-i)); 7364 fprintf(ctx->fp, "\t.byte %d\n\t.uleb128 %d\n", 0x80+i, 2+(11-i));
7364 fprintf(ctx->fp, 7365 fprintf(ctx->fp,
7365 "\t.align 2\n" 7366 "\t.align 2\n"
7366 ".LEFDE0:\n\n"); 7367 ".LEFDE0:\n\n");
7368#if LJ_HASFFI
7369 fprintf(ctx->fp,
7370 ".LSFDE1:\n"
7371 "\t.long .LEFDE1-.LASFDE1\n"
7372 ".LASFDE1:\n"
7373 "\t.long .Lframe0\n"
7374 "\t.long lj_vm_ffi_call\n"
7375 "\t.long %d\n"
7376 "\t.byte 0xe\n\t.uleb128 16\n" /* def_cfa_offset */
7377 "\t.byte 0x8e\n\t.uleb128 1\n" /* offset lr */
7378 "\t.byte 0x8b\n\t.uleb128 2\n" /* offset r11 */
7379 "\t.byte 0x85\n\t.uleb128 3\n" /* offset r5 */
7380 "\t.byte 0x84\n\t.uleb128 4\n" /* offset r4 */
7381 "\t.byte 0xd\n\t.uleb128 0xb\n" /* def_cfa_register r11 */
7382 "\t.align 2\n"
7383 ".LEFDE1:\n\n", (int)ctx->codesz - fcofs);
7384#endif
7367 break; 7385 break;
7368 default: 7386 default:
7369 break; 7387 break;