Skip to content

Commit

Permalink
libjulia_jll: turn LibOSXUnwind_jll into a build dep for Julia 1.6
Browse files Browse the repository at this point in the history
  • Loading branch information
fingolfin committed Jan 28, 2022
1 parent 212099d commit 038f59d
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 2 deletions.
2 changes: 1 addition & 1 deletion L/libjulia/build_tarballs.jl
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
include("common.jl")
jllversion=v"1.7.0"
jllversion=v"1.7.1"
build_julia(ARGS, v"1.6.3"; jllversion)
build_julia(ARGS, v"1.7.0"; jllversion)
build_julia(ARGS, v"1.8.0-DEV"; jllversion)
65 changes: 65 additions & 0 deletions L/libjulia/bundled/julia-1.6-libunwind.patch
Original file line number Diff line number Diff line change
@@ -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 <dbghelp.h>
-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 <libunwind.h>
-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 <libunwind.h>
typedef struct {
ucontext_t ctx;
#if defined(JL_TSAN_ENABLED)
10 changes: 9 additions & 1 deletion L/libjulia/common.jl
Original file line number Diff line number Diff line change
Expand Up @@ -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 <libunwind.h>` 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
Expand Down Expand Up @@ -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"
Expand Down

0 comments on commit 038f59d

Please sign in to comment.