Skip to content

Commit f6e3388

Browse files
JeffBezansonKristofferC
authored andcommitted
export jl_setjmp on windows (#42267)
fix #42245 (cherry picked from commit c5f3487)
1 parent c9f4de0 commit f6e3388

File tree

11 files changed

+42
-4
lines changed

11 files changed

+42
-4
lines changed

cli/jl_exports.h

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,24 +19,36 @@ JL_EXPORTED_DATA_SYMBOLS(XX)
1919
#define XX(name) JL_DLLEXPORT void name(void);
2020
typedef void (anonfunc)(void);
2121
JL_EXPORTED_FUNCS(XX)
22+
#ifdef _OS_WINDOWS_
23+
JL_EXPORTED_FUNCS_WIN(XX)
24+
#endif
2225
#undef XX
2326

2427
// Define holder locations for function addresses as `const void * $(name)_addr = & $(name);`
2528
#define XX(name) JL_HIDDEN anonfunc * name##_addr = (anonfunc*)&name;
2629
JL_EXPORTED_FUNCS(XX)
30+
#ifdef _OS_WINDOWS_
31+
JL_EXPORTED_FUNCS_WIN(XX)
32+
#endif
2733
#undef XX
2834

2935
// Generate lists of function names and addresses
3036
#define XX(name) #name,
3137
static const char *const jl_exported_func_names[] = {
3238
JL_EXPORTED_FUNCS(XX)
39+
#ifdef _OS_WINDOWS_
40+
JL_EXPORTED_FUNCS_WIN(XX)
41+
#endif
3342
NULL
3443
};
3544
#undef XX
3645

3746
#define XX(name) &name##_addr,
3847
static anonfunc **const jl_exported_func_addrs[] = {
3948
JL_EXPORTED_FUNCS(XX)
49+
#ifdef _OS_WINDOWS_
50+
JL_EXPORTED_FUNCS_WIN(XX)
51+
#endif
4052
NULL
4153
};
4254
#undef XX

cli/list_strip_symbols.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,7 @@
44
#include "trampolines/common.h"
55
#define XX(x) --strip-symbol=CNAME(x)
66
JL_EXPORTED_FUNCS(XX)
7+
#ifdef _OS_WINDOWS_
8+
JL_EXPORTED_FUNCS_WIN(XX)
9+
#endif
710
#undef XX

cli/trampolines/common.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#include "../../src/support/platform.h"
2+
13
// Preprocessor annoyances
24
#define CONCAT_(x,y) x##y
35
#define CONCAT(x,y) CONCAT_(x, y)

cli/trampolines/trampolines_aarch64.S

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,4 +12,7 @@ CNAME(name)##: SEP \
1212
.cfi_endproc SEP \
1313

1414
JL_EXPORTED_FUNCS(XX)
15+
#ifdef _OS_WINDOWS_
16+
JL_EXPORTED_FUNCS_WIN(XX)
17+
#endif
1518
#undef XX

cli/trampolines/trampolines_arm.S

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,4 +15,7 @@ CONCAT(.L,CNAMEADDR(name))##: ; \
1515
.cfi_endproc; \
1616

1717
JL_EXPORTED_FUNCS(XX)
18+
#ifdef _OS_WINDOWS_
19+
JL_EXPORTED_FUNCS_WIN(XX)
20+
#endif
1821
#undef XX

cli/trampolines/trampolines_i686.S

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,7 @@ CNAME(name)##:; \
1313
EXPORT(name); \
1414

1515
JL_EXPORTED_FUNCS(XX)
16+
#ifdef _OS_WINDOWS_
17+
JL_EXPORTED_FUNCS_WIN(XX)
18+
#endif
1619
#undef XX

cli/trampolines/trampolines_x86_64.S

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,4 +17,7 @@ SEH_END(); \
1717
EXPORT(name); \
1818

1919
JL_EXPORTED_FUNCS(XX)
20+
#ifdef _OS_WINDOWS_
21+
JL_EXPORTED_FUNCS_WIN(XX)
22+
#endif
2023
#undef XX

src/jl_exported_funcs.inc

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -545,3 +545,5 @@
545545
XX(jl_print_backtrace) \
546546
XX(jl_get_pgcstack) \
547547

548+
#define JL_EXPORTED_FUNCS_WIN(XX) \
549+
XX(jl_setjmp)

src/julia.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1897,10 +1897,10 @@ JL_DLLEXPORT void jl_restore_excstack(size_t state) JL_NOTSAFEPOINT;
18971897

18981898
#if defined(_OS_WINDOWS_)
18991899
#if defined(_COMPILER_GCC_)
1900-
int __attribute__ ((__nothrow__,__returns_twice__)) (jl_setjmp)(jmp_buf _Buf);
1900+
JL_DLLEXPORT int __attribute__ ((__nothrow__,__returns_twice__)) (jl_setjmp)(jmp_buf _Buf);
19011901
__declspec(noreturn) __attribute__ ((__nothrow__)) void (jl_longjmp)(jmp_buf _Buf, int _Value);
19021902
#else
1903-
int (jl_setjmp)(jmp_buf _Buf);
1903+
JL_DLLEXPORT int (jl_setjmp)(jmp_buf _Buf);
19041904
void (jl_longjmp)(jmp_buf _Buf, int _Value);
19051905
#endif
19061906
#define jl_setjmp_f jl_setjmp

test/embedding/embedding-test.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,13 +20,13 @@ end
2020
close(out.in)
2121
close(err.in)
2222
out_task = @async readlines(out)
23-
err = read(err, String)
24-
@test err == "MethodError: no method matching this_function_has_no_methods()\n"
23+
@test readline(err) == "MethodError: no method matching this_function_has_no_methods()"
2524
@test success(p)
2625
lines = fetch(out_task)
2726
@test length(lines) == 10
2827
@test parse(Float64, lines[1]) sqrt(2)
2928
@test lines[8] == "called bar"
3029
@test lines[9] == "calling new bar"
3130
@test lines[10] == " From worker 2:\tTaking over the world..."
31+
@test readline(err) == "exception caught from C"
3232
end

0 commit comments

Comments
 (0)