From a468414748da8fc96e2b14fb298d2bbc2d772a05 Mon Sep 17 00:00:00 2001 From: Mike Pall Date: Tue, 19 Jul 2022 12:53:34 +0200 Subject: [PATCH] ARM64: Allow building with unwinding disabled. (cherry-picked from commit 5677985dc1f19cf0a67112f4365c7fb79237fa16) Prior to this patch, the LuaJIT build with the `-DLUAJIT_NO_UNWIND=1` option enabled failed because of linker relocation errors related to dwarf-specific code. This patch disables emission of the `.eh_frame` section for builds without unwinding to solve the issue. The `LUAJIT_NO_UNWIND` build option is added to CMakeLists.txt. This patch adds this build flavor to our exotic builds workflow. Maxim Kokryashkin: * added the description for the problem Part of tarantool/tarantool#9145 --- CMakeLists.txt | 5 +++++ src/vm_arm64.dasc | 2 ++ 2 files changed, 7 insertions(+) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7ef10f2f6f..7f5e2afb6a 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -202,6 +202,11 @@ if(LUAJIT_DISABLE_UNWIND_JIT) AppendFlags(TARGET_C_FLAGS -DLUAJIT_DISABLE_UNWIND_JIT) endif() +option(LUAJIT_NO_UNWIND "Disable external unwinding.") +if(LUAJIT_NO_UNWIND) + AppendFlags(TARGET_C_FLAGS -DLUAJIT_NO_UNWIND) +endif() + # Disable memory profiler. option(LUAJIT_DISABLE_MEMPROF "LuaJIT memory profiler support" OFF) if(LUAJIT_DISABLE_MEMPROF) diff --git a/src/vm_arm64.dasc b/src/vm_arm64.dasc index 0a12b5b781..1cf1ea519e 100644 --- a/src/vm_arm64.dasc +++ b/src/vm_arm64.dasc @@ -3915,6 +3915,7 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.align 3\n" ".LEFDE1:\n\n", (int)ctx->codesz - fcofs); #endif +#if !LJ_NO_UNWIND fprintf(ctx->fp, "\t.section .eh_frame,\"a\",%%progbits\n"); fprintf(ctx->fp, ".Lframe1:\n" @@ -3982,6 +3983,7 @@ static void emit_asm_debug(BuildCtx *ctx) "\t.byte 0x94\n\t.uleb128 4\n" /* offset x20 */ "\t.align 3\n" ".LEFDE3:\n\n", (int)ctx->codesz - fcofs); +#endif #endif break; #if !LJ_NO_UNWIND