From 122db7141d292d63cfbe2c7d7a4280cc73194ece Mon Sep 17 00:00:00 2001 From: Xavier Leroy Date: Wed, 5 Aug 2020 11:17:52 +0200 Subject: [PATCH 5/5] Fix type mismatches between definition and declaration (#9830) The C global variable caml_fl_merge and the C function caml_spacetime_my_profinfo (bytecode version) were declared and defined with different types. This is undefined behavior and can cause link-time errors with link-time optimization (LTO). Closes: #9825 --- runtime/major_gc.c | 4 ++-- runtime/spacetime_byt.c | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/runtime/major_gc.c b/runtime/major_gc.c index 5e4f06bce..c8f5a3281 100644 --- a/runtime/major_gc.c +++ b/runtime/major_gc.c @@ -63,7 +63,7 @@ uintnat caml_dependent_size, caml_dependent_allocated; double caml_extra_heap_resources; uintnat caml_fl_wsz_at_phase_change = 0; -extern char *caml_fl_merge; /* Defined in freelist.c. */ +extern value caml_fl_merge; /* Defined in freelist.c. */ static char *markhp, *chunk, *limit; static double p_backlog = 0.0; /* backlog for the gc speedup parameter */ @@ -570,7 +570,7 @@ static void sweep_slice (intnat work) break; case Caml_blue: /* Only the blocks of the free-list are blue. See [freelist.c]. */ - caml_fl_merge = Bp_hp (hp); + caml_fl_merge = (value) Bp_hp (hp); break; default: /* gray or black */ CAMLassert (Color_hd (hd) == Caml_black); diff --git a/runtime/spacetime_byt.c b/runtime/spacetime_byt.c index 2b0bf1dc2..b75fb0980 100644 --- a/runtime/spacetime_byt.c +++ b/runtime/spacetime_byt.c @@ -12,8 +12,12 @@ /* */ /**************************************************************************/ +#define CAML_INTERNALS + #include "caml/fail.h" #include "caml/mlvalues.h" +#include "caml/io.h" +#include "caml/spacetime.h" int caml_ensure_spacetime_dot_o_is_included = 42; @@ -22,7 +26,8 @@ CAMLprim value caml_spacetime_only_works_for_native_code(value foo, ...) caml_failwith("Spacetime profiling only works for native code"); } -uintnat caml_spacetime_my_profinfo (void) +uintnat caml_spacetime_my_profinfo (spacetime_unwind_info_cache * cached, + uintnat wosize) { return 0; } -- 2.28.0.rc2