diff --git a/.github/workflows/build_mac32.yml b/.github/workflows/build_mac32.yml index 5a6703888..f854a423f 100644 --- a/.github/workflows/build_mac32.yml +++ b/.github/workflows/build_mac32.yml @@ -13,9 +13,6 @@ concurrency: jobs: build: - env: - GHCR_ACCESS_KEY: ${{ secrets.GHCR_ACCESS_KEY }} - if: ${{ env.GHCR_ACCESS_KEY != '' }} runs-on: ubuntu-latest container: image: ghcr.io/classicube/minimal-osxcross:latest diff --git a/src/Logger.c b/src/Logger.c index d74ba3b53..cfa839434 100644 --- a/src/Logger.c +++ b/src/Logger.c @@ -340,21 +340,7 @@ void Logger_Backtrace(cc_string* trace, void* ctx) { String_AppendConst(trace, _NL); } #elif defined CC_BUILD_ANDROID -/* android's bionic libc doesn't provide backtrace (execinfo.h) */ -#include - -static _Unwind_Reason_Code UnwindFrame(struct _Unwind_Context* ctx, void* arg) { - cc_uintptr addr = _Unwind_GetIP(ctx); - if (!addr) return _URC_END_OF_STACK; - - DumpFrame((cc_string*)arg, (void*)addr); - return _URC_NO_REASON; -} - -void Logger_Backtrace(cc_string* trace, void* ctx) { - _Unwind_Backtrace(UnwindFrame, trace); - String_AppendConst(trace, _NL); -} + #define CC_BACKTRACE_UNWIND #elif defined CC_BUILD_DARWIN /* backtrace is only available on macOS since 10.5 */ void Logger_Backtrace(cc_string* trace, void* ctx) { @@ -368,7 +354,8 @@ void Logger_Backtrace(cc_string* trace, void* ctx) { /* Skip frames don't want to include in backtrace */ /* frame 0 = thread_stack_pcs */ /* frame 1 = Logger_Backtrace */ - for (i = 2; i < frames; i++) { + for (i = 2; i < frames; i++) + { DumpFrame(trace, addrs[i]); } String_AppendConst(trace, _NL); @@ -385,17 +372,21 @@ void Logger_Backtrace(cc_string* trace, void* ctx) { } #elif defined CC_BACKTRACE_BUILTIN /* Implemented later at end of the file */ -#elif defined CC_BUILD_POSIX && !defined CC_BUILD_OS2 +#elif defined CC_BUILD_POSIX && defined _GLIBC_ #include void Logger_Backtrace(cc_string* trace, void* ctx) { void* addrs[MAX_BACKTRACE_FRAMES]; int i, frames = backtrace(addrs, MAX_BACKTRACE_FRAMES); - for (i = 0; i < frames; i++) { + for (i = 0; i < frames; i++) + { DumpFrame(trace, addrs[i]); } String_AppendConst(trace, _NL); } +#elif defined CC_BUILD_POSIX +/* musl etc - rely on unwind from GCC instead */ + #define CC_BACKTRACE_UNWIND #else void Logger_Backtrace(cc_string* trace, void* ctx) { } #endif @@ -1298,6 +1289,24 @@ void Logger_FailToStart(const char* raw_msg) { Process_Exit(1); } + +#if defined CC_BACKTRACE_UNWIND +#include + +static _Unwind_Reason_Code UnwindFrame(struct _Unwind_Context* ctx, void* arg) { + cc_uintptr addr = _Unwind_GetIP(ctx); + if (!addr) return _URC_END_OF_STACK; + + DumpFrame((cc_string*)arg, (void*)addr); + return _URC_NO_REASON; +} + +void Logger_Backtrace(cc_string* trace, void* ctx) { + _Unwind_Backtrace(UnwindFrame, trace); + String_AppendConst(trace, _NL); +} +#endif + #if defined CC_BACKTRACE_BUILTIN static CC_NOINLINE void* GetReturnAddress(int level) { /* "... a value of 0 yields the return address of the current function, a value of 1 yields the return address of the caller of the current function" */