diff --git a/L/libjulia/bundled/julia-1.6-libunwind.patch b/L/libjulia/bundled/julia-1.6-libunwind.patch new file mode 100644 index 00000000000..a274b8b01f4 --- /dev/null +++ b/L/libjulia/bundled/julia-1.6-libunwind.patch @@ -0,0 +1,65 @@ +diff --git a/src/julia_internal.h b/src/julia_internal.h +index 0b76696791..f6bd2f1f3f 100644 +--- a/src/julia_internal.h ++++ b/src/julia_internal.h +@@ -893,48 +893,7 @@ typedef struct { + + // Might be called from unmanaged thread + uint64_t jl_getUnwindInfo(uint64_t dwBase); +-#ifdef _OS_WINDOWS_ +-#include +-JL_DLLEXPORT EXCEPTION_DISPOSITION __julia_personality( +- PEXCEPTION_RECORD ExceptionRecord, void *EstablisherFrame, PCONTEXT ContextRecord, void *DispatcherContext); +-extern HANDLE hMainThread; +-typedef CONTEXT bt_context_t; +-#if defined(_CPU_X86_64_) +-typedef CONTEXT bt_cursor_t; +-#else +-typedef struct { +- STACKFRAME64 stackframe; +- CONTEXT context; +-} bt_cursor_t; +-#endif +-extern jl_mutex_t jl_in_stackwalk; +-#elif !defined(JL_DISABLE_LIBUNWIND) +-// This gives unwind only local unwinding options ==> faster code +-# define UNW_LOCAL_ONLY +-# include +-typedef unw_context_t bt_context_t; +-typedef unw_cursor_t bt_cursor_t; +-# if (!defined(SYSTEM_LIBUNWIND) || UNW_VERSION_MAJOR > 1 || \ +- (UNW_VERSION_MAJOR == 1 && UNW_VERSION_MINOR != 0 && UNW_VERSION_MINOR != 1)) +-// Enable our memory manager only for libunwind with our patch or +-// on a newer release +-# define JL_UNW_HAS_FORMAT_IP 1 +-# endif +-#else +-// Unwinding is disabled +-typedef int bt_context_t; +-typedef int bt_cursor_t; +-#endif +-size_t rec_backtrace(jl_bt_element_t *bt_data, size_t maxsize, int skip) JL_NOTSAFEPOINT; +-// Record backtrace from a signal handler. `ctx` is the context of the code +-// which was asynchronously interrupted. +-size_t rec_backtrace_ctx(jl_bt_element_t *bt_data, size_t maxsize, bt_context_t *ctx, +- jl_gcframe_t *pgcstack) JL_NOTSAFEPOINT; +-#ifdef LIBOSXUNWIND +-size_t rec_backtrace_ctx_dwarf(jl_bt_element_t *bt_data, size_t maxsize, bt_context_t *ctx, jl_gcframe_t *pgcstack) JL_NOTSAFEPOINT; +-#endif + JL_DLLEXPORT jl_value_t *jl_get_backtrace(void); +-void jl_critical_error(int sig, bt_context_t *context); + JL_DLLEXPORT void jl_raise_debugger(void); + int jl_getFunctionInfo(jl_frame_t **frames, uintptr_t pointer, int skipC, int noInline) JL_NOTSAFEPOINT; + JL_DLLEXPORT void jl_gdblookup(void* ip) JL_NOTSAFEPOINT; +diff --git a/src/julia_threads.h b/src/julia_threads.h +index f42984130f..8a8411f822 100644 +--- a/src/julia_threads.h ++++ b/src/julia_threads.h +@@ -67,7 +67,6 @@ typedef struct { + #endif + #if defined(JL_HAVE_UCONTEXT) || defined(JL_HAVE_UNW_CONTEXT) + #define UNW_LOCAL_ONLY +-#include + typedef struct { + ucontext_t ctx; + #if defined(JL_TSAN_ENABLED) diff --git a/L/libjulia/common.jl b/L/libjulia/common.jl index 8b148a5f86b..e62ecefd4cf 100644 --- a/L/libjulia/common.jl +++ b/L/libjulia/common.jl @@ -268,6 +268,14 @@ function build_julia(ARGS, version::VersionNumber; jllversion=version) # environment results in a segfault. make USE_CROSS_FLISP=1 NO_GIT=1 LDFLAGS="${LDFLAGS}" CFLAGS="${CFLAGS}" CXXFLAGS="${CXXFLAGS}" -j${nproc} VERBOSE=1 ${MAKE_TARGET} DSYMUTIL=true + # HACK to avoid runtime dependency on LibOSXUnwind_jll with Julia 1.6: it + # disables the `#include ` statements in two header files, + # and all code directly depending on them; luckily all of that is internal + # and should not affect external code using the Julia kernel "API" + if [[ "${version}" == 1.6.* ]]; then + atomic_patch -p1 $WORKSPACE/srcdir/julia-1.6-libunwind.patch + fi + # 'manually' install libraries and headers mkdir -p ${libdir} mkdir -p ${includedir}/julia @@ -314,7 +322,7 @@ function build_julia(ARGS, version::VersionNumber; jllversion=version) if version < v"1.5.1" push!(dependencies, Dependency("LibOSXUnwind_jll", compat="0.0.5")) elseif version < v"1.7" - push!(dependencies, Dependency("LibOSXUnwind_jll", compat="0.0.6")) + push!(dependencies, BuildDependency("LibOSXUnwind_jll", compat="0.0.6")) end if version < v"1.6"