[Tarantool-patches] [PATCH luajit 2/6] OSX: Fix build by hardcoding external frame unwinding.

Maksim Kokryashkin max.kokryashkin at gmail.com
Mon Sep 26 18:54:59 MSK 2022


Apparently they can't even get 'grep' right, let alone a keyboard.

(cherry picked from commit d4a554d6ee1507f7313641b26ed09bf1b518fa1f)

MacOS uses BSD grep, which is slightly different from GNU grep.
Because of that, the shell script determining whether external
unwinding is possible doesn't work right.

External unwinding is possible on MacOS, so this patch enables
it by default.

Maxim Kokryashkin:
* added the description for the problem

Needed for tarantool/tarantool#6096
Needed for tarantool/tarantool#7230
---
 .github/workflows/macos-x86_64.yml | 20 +-------------------
 cmake/SetTargetFlags.cmake         | 28 ++++++++++++++++------------
 src/Makefile.original              | 15 ++++++++-------
 3 files changed, 25 insertions(+), 38 deletions(-)

diff --git a/.github/workflows/macos-x86_64.yml b/.github/workflows/macos-x86_64.yml
index 840806e3..dafd1796 100644
--- a/.github/workflows/macos-x86_64.yml
+++ b/.github/workflows/macos-x86_64.yml
@@ -35,7 +35,7 @@ jobs:
       fail-fast: false
       matrix:
         BUILDTYPE: [Debug, Release]
-        GC64: [ON, OFF]
+        GC64: ON
         include:
           - BUILDTYPE: Debug
             CMAKEFLAGS: -DCMAKE_BUILD_TYPE=Debug -DLUA_USE_ASSERT=ON -DLUA_USE_APICHECK=ON
@@ -69,15 +69,6 @@ jobs:
       - name: test
         run: cmake --build . --parallel --target test
 
-  test-tarantool-debug-wo-GC64:
-    name: Tarantool Debug GC64:OFF
-    needs: test-luajit
-    uses: tarantool/tarantool/.github/workflows/luajit-integration.yml at master
-    with:
-      GC64: OFF
-      buildtype: Debug
-      host: macos-11
-      revision: ${{ github.sha }}
   test-tarantool-debug-w-GC64:
     name: Tarantool Debug GC64:ON
     needs: test-luajit
@@ -87,15 +78,6 @@ jobs:
       buildtype: Debug
       host: macos-11
       revision: ${{ github.sha }}
-  test-tarantool-release-wo-GC64:
-    name: Tarantool Release GC64:OFF
-    needs: test-luajit
-    uses: tarantool/tarantool/.github/workflows/luajit-integration.yml at master
-    with:
-      GC64: OFF
-      buildtype: RelWithDebInfo
-      host: macos-11
-      revision: ${{ github.sha }}
   test-tarantool-release-w-GC64:
     name: Tarantool Release GC64:ON
     needs: test-luajit
diff --git a/cmake/SetTargetFlags.cmake b/cmake/SetTargetFlags.cmake
index 36896aff..a5a3407f 100644
--- a/cmake/SetTargetFlags.cmake
+++ b/cmake/SetTargetFlags.cmake
@@ -15,18 +15,22 @@ endif()
 LuaJITTestArch(TESTARCH "${TARGET_C_FLAGS}")
 LuaJITArch(LUAJIT_ARCH "${TESTARCH}")
 
-string(FIND ${TARGET_C_FLAGS} "LJ_NO_UNWIND 1" UNWIND_POS)
-if(UNWIND_POS EQUAL -1)
-  execute_process(
-    COMMAND bash -c "exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | ${CMAKE_C_COMPILER} -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o"
-    WORKING_DIRECTORY ${LUAJIT_SOURCE_DIR}
-    OUTPUT_VARIABLE TESTUNWIND
-    RESULT_VARIABLE TESTUNWIND_RC
-  )
-  if(TESTUNWIND_RC EQUAL 0)
-    string(FIND "${TESTUNWIND}" "E" UNW_TEST_POS)
-    if(NOT UNW_TEST_POS EQUAL -1)
-      AppendFlags(TARGET_C_FLAGS -DLUAJIT_UNWIND_EXTERNAL)
+if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
+  AppendFlags(TARGET_C_FLAGS -DLUAJIT_UNWIND_EXTERNAL)
+else()
+  string(FIND ${TARGET_C_FLAGS} "LJ_NO_UNWIND 1" UNWIND_POS)
+  if(UNWIND_POS EQUAL -1)
+    execute_process(
+      COMMAND bash -c "exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | ${CMAKE_C_COMPILER} -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o"
+      WORKING_DIRECTORY ${LUAJIT_SOURCE_DIR}
+      OUTPUT_VARIABLE TESTUNWIND
+      RESULT_VARIABLE TESTUNWIND_RC
+    )
+    if(TESTUNWIND_RC EQUAL 0)
+      string(FIND "${TESTUNWIND}" "E" UNW_TEST_POS)
+      if(NOT UNW_TEST_POS EQUAL -1)
+        AppendFlags(TARGET_C_FLAGS -DLUAJIT_UNWIND_EXTERNAL)
+      endif()
     endif()
   endif()
 endif()
diff --git a/src/Makefile.original b/src/Makefile.original
index c9609700..d1373b40 100644
--- a/src/Makefile.original
+++ b/src/Makefile.original
@@ -320,18 +320,12 @@ else
 ifeq (,$(shell $(TARGET_CC) -o /dev/null -c -x c /dev/null -fno-stack-protector 2>/dev/null || echo 1))
   TARGET_XCFLAGS+= -fno-stack-protector
 endif
-ifeq (,$(findstring LJ_NO_UNWIND 1,$(TARGET_TESTARCH)))
-  # Find out whether the target toolchain always generates unwind tables.
-  TARGET_TESTUNWIND=$(shell exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | $(TARGET_CC) -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o)
-  ifneq (,$(findstring E,$(TARGET_TESTUNWIND)))
-    TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL
-  endif
-endif
 ifeq (Darwin,$(TARGET_SYS))
   ifeq (,$(MACOSX_DEPLOYMENT_TARGET))
     export MACOSX_DEPLOYMENT_TARGET=10.4
   endif
   TARGET_STRIP+= -x
+  TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL
   TARGET_XSHLDFLAGS= -dynamiclib -single_module -undefined dynamic_lookup -fPIC
   TARGET_DYNXLDOPTS=
   TARGET_XSHLDFLAGS+= -install_name $(TARGET_DYLIBPATH) -compatibility_version $(MAJVER).$(MINVER) -current_version $(MAJVER).$(MINVER).$(RELVER)
@@ -345,6 +339,13 @@ ifeq (iOS,$(TARGET_SYS))
     TARGET_XCFLAGS+= -fno-omit-frame-pointer
   endif
 else
+  ifeq (,$(findstring LJ_NO_UNWIND 1,$(TARGET_TESTARCH)))
+    # Find out whether the target toolchain always generates unwind tables.
+    TARGET_TESTUNWIND=$(shell exec 2>/dev/null; echo 'extern void b(void);int a(void){b();return 0;}' | $(TARGET_CC) -c -x c - -o tmpunwind.o && grep -qa -e eh_frame -e __unwind_info tmpunwind.o && echo E; rm -f tmpunwind.o)
+    ifneq (,$(findstring E,$(TARGET_TESTUNWIND)))
+      TARGET_XCFLAGS+= -DLUAJIT_UNWIND_EXTERNAL
+    endif
+  endif
   ifneq (SunOS,$(TARGET_SYS))
     ifneq (PS3,$(TARGET_SYS))
       TARGET_XLDFLAGS+= -Wl,-E
-- 
2.32.1 (Apple Git-133)



More information about the Tarantool-patches mailing list