diff options
Diffstat (limited to 'src/buildvm_arm.h')
-rw-r--r-- | src/buildvm_arm.h | 24 |
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. */ |
7333 | static void emit_asm_debug(BuildCtx *ctx) | 7333 | static 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; |