Crash when initializing GMP

Hi, after upgrading to 2380532402c1ccf86bf8992fe6ed52a16234172f (thanks Jan for the patch) on Linux/x86_64 I was running some regression tests on my application, and I noticed a crash tied to GMP. Naturally swipl is built with GMP support, and the issue appears to be twofold:

  • normally the builds use GCC’s PGO
[Cannot print stack while in 6-th garbage collection]

ERROR: Received fatal signal 11 (segv)
Time: Thu Sep  4 16:07:38 2025
Inferences: 321807
Running GC: 6-th garbage collection]
Thread: 1 (main)
C-stack trace labeled "crash":
  [0] save_backtrace() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:337 [0x7ffff7f3a890]
  [1] sigCrashHandler() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:937 [0x7ffff7ecc0f3]
  [2] /home/abramo/eclair/develop/bin/eclair(+0x92cfc2) [0x555555e80fc2]
  [3] __restore_rt() at libc_sigaction.c:? [0x7ffff77b7520]
  [4] mark_variable___LD() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-gc.c:928 [0x7ffff7ee941f]
  [5] mark_term_refs() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-gc.c:1036 [0x7ffff7f13a2b]
  [6] makeMoreStackSpace() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-gc.c:4634 [0x7ffff7e51652]
  [7] decompileBody___LD() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-comp.c:5759 [0x7ffff7e4c01a]
  [8] decompile_body_range___LD() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-comp.c:6386 [0x7ffff7e4c220]
  [9] PL_next_solution___LD() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-vmi.c:2715 [0x7ffff7e2c58f]
  [10] PL_call_predicate() at /home/abramo/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-fli.c:4532 [0x7ffff7f0889f]
  [11] /home/abramo/eclair/develop/bin/eclair(+0x92d1b0) [0x555555e811b0]
  [12] /home/abramo/eclair/develop/bin/eclair(+0x93079a) [0x555555e8479a]
  [13] /home/abramo/eclair/develop/bin/eclair(+0x932b55) [0x555555e86b55]
  [14] /home/abramo/eclair/develop/bin/eclair(+0x93b3ee) [0x555555e8f3ee]
  [15] /home/abramo/eclair/develop/bin/eclair(+0x11931ef) [0x5555566e71ef]
  [16] /home/abramo/eclair/develop/bin/eclair(+0x1192abf) [0x5555566e6abf]
  [17] /home/abramo/eclair/develop/bin/eclair(+0x11937af) [0x5555566e77af]
  [18] /home/abramo/eclair/develop/bin/eclair(+0x11914d2) [0x5555566e54d2]
  [19] /home/abramo/eclair/develop/bin/eclair(+0x11933a4) [0x5555566e73a4]
  [20] /home/abramo/eclair/develop/bin/eclair(+0x1192abf) [0x5555566e6abf]
  [21] /home/abramo/eclair/develop/bin/eclair(+0x11937af) [0x5555566e77af]
  [22] /home/abramo/eclair/develop/bin/eclair(+0xe34b07) [0x555556388b07]
  [23] /home/abramo/eclair/develop/bin/eclair(+0x119f3b1) [0x5555566f33b1]
  [24] /home/abramo/eclair/develop/bin/eclair(+0x93297b) [0x555555e8697b]
  [25] /home/abramo/eclair/develop/bin/eclair(+0xe0773a) [0x55555635b73a]
  [26] /home/abramo/eclair/develop/bin/eclair(+0x11931ef) [0x5555566e71ef]
  [27] /home/abramo/eclair/develop/bin/eclair(+0x1192abf) [0x5555566e6abf]
  [28] /home/abramo/eclair/develop/bin/eclair(+0x11937af) [0x5555566e77af]
  [29] /home/abramo/eclair/develop/bin/eclair(+0xe34b07) [0x555556388b07]
  [30] /home/abramo/eclair/develop/bin/eclair(+0x119f3b1) [0x5555566f33b1]
  [31] /home/abramo/eclair/develop/bin/eclair(+0x93297b) [0x555555e8697b]
  [32] /home/abramo/eclair/develop/bin/eclair(+0xe0773a) [0x55555635b73a]
  [33] /home/abramo/eclair/develop/bin/eclair(+0x11931ef) [0x5555566e71ef]
  [34] /home/abramo/eclair/develop/bin/eclair(+0x1192abf) [0x5555566e6abf]
  [35] /home/abramo/eclair/develop/bin/eclair(+0x11937af) [0x5555566e77af]
  [36] /home/abramo/eclair/develop/bin/eclair(+0xe34b07) [0x555556388b07]
  [37] /home/abramo/eclair/develop/bin/eclair(+0xe3344b) [0x55555638744b]
  [38] /home/abramo/eclair/develop/bin/eclair(+0xdfa6c1) [0x55555634e6c1]
  [39] /home/abramo/eclair/develop/bin/eclair(+0xe10cf9) [0x555556364cf9]
  [40] /home/abramo/eclair/develop/bin/eclair(+0x11931ef) [0x5555566e71ef]
  [41] /home/abramo/eclair/develop/bin/eclair(+0x1192abf) [0x5555566e6abf]
  [42] /home/abramo/eclair/develop/bin/eclair(+0x11937af) [0x5555566e77af]
  [43] /home/abramo/eclair/develop/bin/eclair(+0x1190b51) [0x5555566e4b51]
  [44] /home/abramo/eclair/develop/bin/eclair(+0x11918ff) [0x5555566e58ff]
  [45] /home/abramo/eclair/develop/bin/eclair(+0x11933a4) [0x5555566e73a4]
  [46] /home/abramo/eclair/develop/bin/eclair(+0x1192abf) [0x5555566e6abf]
  [47] /home/abramo/eclair/develop/bin/eclair(+0x11937af) [0x5555566e77af]
  [48] /home/abramo/eclair/develop/bin/eclair(+0x1193986) [0x5555566e7986]
  [49] /home/abramo/eclair/develop/bin/eclair(+0x11606f6) [0x5555566b46f6]
  [50] /home/abramo/eclair/develop/bin/eclair(+0x116005d) [0x5555566b405d]
  [51] /home/abramo/eclair/develop/bin/eclair(+0xdfa407) [0x55555634e407]
  [52] /home/abramo/eclair/develop/bin/eclair(+0xe02efc) [0x555556356efc]
  [53] /home/abramo/eclair/develop/bin/eclair(+0x11931ef) [0x5555566e71ef]
  [54] /home/abramo/eclair/develop/bin/eclair(+0x1192abf) [0x5555566e6abf]
  [55] /home/abramo/eclair/develop/bin/eclair(+0x11937af) [0x5555566e77af]
  [56] /home/abramo/eclair/develop/bin/eclair(+0xe34b07) [0x555556388b07]
  [57] /home/abramo/eclair/develop/bin/eclair(+0x119f3b1) [0x5555566f33b1]
  [58] /home/abramo/eclair/develop/bin/eclair(+0x93297b) [0x555555e8697b]
  [59] /home/abramo/eclair/develop/bin/eclair(+0xdf48cc) [0x5555563488cc]
  [60] /home/abramo/eclair/develop/bin/eclair(+0x92d833) [0x555555e81833]
  [61] __libc_start_call_main() at ./csu/../sysdeps/nptl/libc_start_call_main.h:58 [0x7ffff779ed90]
  [62] call_init() at ./csu/../csu/libc-start.c:128 [0x7ffff779ee40]
  [63] /home/abramo/eclair/develop/bin/eclair(+0x921645) [0x555555e75645]


PROLOG STACK (without arguments):
ERROR: /usr/bin/g++ process terminated by signal 11

So I tried building the Debug configuration to get more insights, but to my surprise this just crashes, with the following core dump

Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7d9b1af in mp_test_alloc () at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-gmp.c:340
340      AR_BEGIN();
(gdb) bt
#0  0x00007ffff7d9b1af in mp_test_alloc () at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-gmp.c:340
#1  0x00007ffff7d9d9b0 in initGMP () at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-gmp.c:1195
#2  0x00007ffff7e20f0a in PL_action (action=12) at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-fli.c:5676
#3  0x0000555555f082f5 in main (argc=5, argv=0x7fffffffd398) at /root/home/nicola/eclair/eclair/c/main.cc:281

So it seems to be tied to GMP’s initialization. In particular our original code looked like this:

     PL_action(PL_GMP_SET_ALLOC_FUNCTIONS, FALSE);
     if (PL_initialise(prolog_argc, const_cast<char **>(prolog_argv)) == 0) {
       fatal("unable to initialize the Prolog subsystem");
     }

Looking at GMP foreign manual that seems to be correct, but then after trying to move the PL_action call after PL_initialise there was some improvement:


ERROR: /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-incl.h:2515: f_hasSpace: Assertion failed: top>=here
Time: Thu Sep  4 17:24:16 2025
Inferences: 405721
Thread: 1 (main)
C-stack trace labeled "assert_fail":
  [0] save_backtrace() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:335 (discriminator 1) [0x761bcea60ce0]
  [1] __assert_fail() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-assert.c:85 [0x761bce9ab7dc]
  [2] f_hasSpace() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-incl.h:2517 [0x761bce82ecea]
  [3] PL_next_solution___LD() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-vmi.c:1622 (discriminator 1) [0x761bce8487fc]
  [4] PL_call_predicate() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-fli.c:4531 [0x761bcea1ded1]
  [5] /root/home/nicola/eclair/develop/bin/eclair(+0x9b3cac) [0x569ac93d9cac]
  [6] /root/home/nicola/eclair/develop/bin/eclair(+0x9b75a9) [0x569ac93dd5a9]
  [7] /root/home/nicola/eclair/develop/bin/eclair(+0x9b9aed) [0x569ac93dfaed]
  [8] /root/home/nicola/eclair/develop/bin/eclair(+0x9c2328) [0x569ac93e8328]
  [9] /root/home/nicola/eclair/develop/bin/eclair(+0x122ae98) [0x569ac9c50e98]
  [10] /root/home/nicola/eclair/develop/bin/eclair(+0x122a79b) [0x569ac9c5079b]
  [11] /root/home/nicola/eclair/develop/bin/eclair(+0x122b484) [0x569ac9c51484]
  [12] /root/home/nicola/eclair/develop/bin/eclair(+0x1229171) [0x569ac9c4f171]
  [13] /root/home/nicola/eclair/develop/bin/eclair(+0x122b059) [0x569ac9c51059]
  [14] /root/home/nicola/eclair/develop/bin/eclair(+0x122a79b) [0x569ac9c5079b]
  [15] /root/home/nicola/eclair/develop/bin/eclair(+0x122b484) [0x569ac9c51484]
  [16] /root/home/nicola/eclair/develop/bin/eclair(+0xeb8e85) [0x569ac98dee85]
  [17] /root/home/nicola/eclair/develop/bin/eclair(+0x12378f5) [0x569ac9c5d8f5]
  [18] /root/home/nicola/eclair/develop/bin/eclair(+0x9b98e7) [0x569ac93df8e7]
  [19] /root/home/nicola/eclair/develop/bin/eclair(+0xe89a74) [0x569ac98afa74]
  [20] /root/home/nicola/eclair/develop/bin/eclair(+0x122ae98) [0x569ac9c50e98]
  [21] /root/home/nicola/eclair/develop/bin/eclair(+0x122a79b) [0x569ac9c5079b]
  [22] /root/home/nicola/eclair/develop/bin/eclair(+0x122b484) [0x569ac9c51484]
  [23] /root/home/nicola/eclair/develop/bin/eclair(+0xeb8e85) [0x569ac98dee85]
  [24] /root/home/nicola/eclair/develop/bin/eclair(+0x12378f5) [0x569ac9c5d8f5]
  [25] /root/home/nicola/eclair/develop/bin/eclair(+0x9b98e7) [0x569ac93df8e7]
  [26] /root/home/nicola/eclair/develop/bin/eclair(+0xe89a74) [0x569ac98afa74]
  [27] /root/home/nicola/eclair/develop/bin/eclair(+0x122ae98) [0x569ac9c50e98]
  [28] /root/home/nicola/eclair/develop/bin/eclair(+0x122a79b) [0x569ac9c5079b]
  [29] /root/home/nicola/eclair/develop/bin/eclair(+0x122b484) [0x569ac9c51484]
  [30] /root/home/nicola/eclair/develop/bin/eclair(+0xeb8e85) [0x569ac98dee85]
  [31] /root/home/nicola/eclair/develop/bin/eclair(+0xeb7753) [0x569ac98dd753]
  [32] /root/home/nicola/eclair/develop/bin/eclair(+0xe7cd79) [0x569ac98a2d79]
  [33] /root/home/nicola/eclair/develop/bin/eclair(+0xe9342b) [0x569ac98b942b]
  [34] /root/home/nicola/eclair/develop/bin/eclair(+0x122ae98) [0x569ac9c50e98]
  [35] /root/home/nicola/eclair/develop/bin/eclair(+0x122a79b) [0x569ac9c5079b]
  [36] /root/home/nicola/eclair/develop/bin/eclair(+0x122b484) [0x569ac9c51484]
  [37] /root/home/nicola/eclair/develop/bin/eclair(+0x12287d3) [0x569ac9c4e7d3]
  [38] /root/home/nicola/eclair/develop/bin/eclair(+0x12295a2) [0x569ac9c4f5a2]
  [39] /root/home/nicola/eclair/develop/bin/eclair(+0x122b059) [0x569ac9c51059]
  [40] /root/home/nicola/eclair/develop/bin/eclair(+0x122a79b) [0x569ac9c5079b]
  [41] /root/home/nicola/eclair/develop/bin/eclair(+0x122b484) [0x569ac9c51484]
  [42] /root/home/nicola/eclair/develop/bin/eclair(+0x122b698) [0x569ac9c51698]
  [43] /root/home/nicola/eclair/develop/bin/eclair(+0x11f782c) [0x569ac9c1d82c]
  [44] /root/home/nicola/eclair/develop/bin/eclair(+0x11f7163) [0x569ac9c1d163]
  [45] /root/home/nicola/eclair/develop/bin/eclair(+0xe7ca97) [0x569ac98a2a97]
  [46] /root/home/nicola/eclair/develop/bin/eclair(+0xe850ca) [0x569ac98ab0ca]
  [47] /root/home/nicola/eclair/develop/bin/eclair(+0x122ae98) [0x569ac9c50e98]
  [48] /root/home/nicola/eclair/develop/bin/eclair(+0x122a79b) [0x569ac9c5079b]
  [49] /root/home/nicola/eclair/develop/bin/eclair(+0x122b484) [0x569ac9c51484]
  [50] /root/home/nicola/eclair/develop/bin/eclair(+0xeb8e85) [0x569ac98dee85]
  [51] /root/home/nicola/eclair/develop/bin/eclair(+0x12378f5) [0x569ac9c5d8f5]
  [52] /root/home/nicola/eclair/develop/bin/eclair(+0x9b98e7) [0x569ac93df8e7]
  [53] /root/home/nicola/eclair/develop/bin/eclair(+0xe76d3e) [0x569ac989cd3e]
  [54] /root/home/nicola/eclair/develop/bin/eclair(+0x9b43cb) [0x569ac93da3cb]
  [55] __libc_start_call_main() at ./csu/../sysdeps/x86/libc-start.c:74 [0x761bce02a1ca]
  [56] call_init() at ./csu/../csu/libc-start.c:128 [0x761bce02a28b]
  [57] /root/home/nicola/eclair/develop/bin/eclair(+0x9a81d5) [0x569ac93ce1d5]


PROLOG STACK (without arguments):
  [12] eclair:object_units/5 [PC=-1 in clause 1]
  [11] eclair:objects_units/3 [PC=39 in clause 1]
  [4] eclair:link_program/2 [PC=75 in clause 1]
  [2] system:catch/3 [PC=2 in clause 1]
  [1] eclair:call_prolog/1 [PC=42 in clause 1]
  [0] system:$c_call_prolog/0 [PC=0 in top query clause]


PROLOG STACK (with arguments; may crash if data is corrupted):

ERROR: /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-incl.h:2515: f_hasSpace: Assertion failed: top>=here
Recursive crash; omitting crash report

ERROR: /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-incl.h:2515: f_hasSpace: Assertion failed: top>=here
Recursive crash; omitting crash report
Aborted (core dumped)

but I’m still unsure of what is going on, so any advice for further debugging is welcome. I do wonder if the testing done in CI covers GMP though, since we’ve been using the 9.2.x series with GMP and it has proven to be quite reliable.

Thanks

I thought this could be due to a change in the way Prolog and non-Prolog GMP allocation cooperates, but this change already seems to be part of 9.2.9. The overall idea of this change is that Prolog picks up the GMP allocation functions and sets its own allocation functions. These do the job when inside Prolog arithmetic. Else they call the current functions. This implies that you should set the functions you want before PL_initialise() and do not change them afterwards. I don’t think any PL_action() is still needed. If this is resolved and confirmed, this should be gone.

There are some further changes around 9.3.3 though. See e.g. 1eaaeae8fdf45f860048abebad77db94d4c187de and some related patches before. You could look into these and possibly revert these to see whether it helps.

I’d first try to get all running in debug mode. The crash in release mode may well be caused by undetected memory corruption. Second, does all run reliably without embedding? It does pass the tests here.

I’d say that reproducing without embedding would be quite hard, so getting an idea of the problem in debug mode is probably the best bet. I’ll examine the GMP-related commits you mentioned, however it could also be the case that two different aspects are at play here: something related to GMP in debug mode and something related to GC in release mode. The two manifestations can of course be completely independent of each other or be related in some way, but at this stage it is hard to tell. I’ll need to do some digging on my side.

We don’t know. Surely debug mode adds a lot of consistency tests. Best, run with -d chk_secure or run ?- prolog_debug(chk_secure). (only works when compiled in debug mode). That makes all a lot slower, but adds a lot of expensive consistency checks.

GC itself is not that likely to be involved. For GC, GMP numbers are just an indirect data type, similar to strings and floats. I.e., a blob of memory guarded on both sides with a guard that holds the exact type and size. The GC crash is most likely the result of memory corruption elsewhere. Note that the GMP numbers on the stacks basically use the same structure as normal GMP numbers, but they use different allocation. Any attempt to modify these numbers will cause trouble.

[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-assert.c:81: 
ERROR: /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-wam.c:2862: newChoice___LD: Assertion failed: (ch->mark).saved_bar.as_ptr == NO_MARK_BAR || ((ch->mark).saved_bar.as_ptr >= gBase && (ch->mark).saved_bar.as_ptr <= gTop)
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-init.c:1999: Time: Sun Sep 21 20:06:45 2025
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-init.c:2004: Inferences: 229977
Thread: 1 (main)
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:422: C-stack trace labeled "assert_fail":
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:441:   [0] save_backtrace() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:335 (discriminator 1) [0x7d9512260ce0]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:441:   [1] __assert_fail() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-assert.c:85 [0x7d95121ab7dc]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:441:   [2] newChoice___LD() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-wam.c:2862 (discriminator 13) [0x7d951203cac5]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:441:   [3] PL_next_solution___LD() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-vmi.c:3569 (discriminator 14) [0x7d95120527c9]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:441:   [4] PL_call_predicate() at /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-fli.c:4531 [0x7d951221ded1]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [5] /root/home/nicola/eclair/develop/bin/eclair(+0x9b3cac) [0x6219dac21cac]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [6] /root/home/nicola/eclair/develop/bin/eclair(+0x9b6e4b) [0x6219dac24e4b]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [7] /root/home/nicola/eclair/develop/bin/eclair(+0x9b9ac9) [0x6219dac27ac9]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [8] /root/home/nicola/eclair/develop/bin/eclair(+0x9c231e) [0x6219dac3031e]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [9] /root/home/nicola/eclair/develop/bin/eclair(+0x1223885) [0x6219db491885]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [10] /root/home/nicola/eclair/develop/bin/eclair(+0x1223185) [0x6219db491185]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [11] /root/home/nicola/eclair/develop/bin/eclair(+0x1223e75) [0x6219db491e75]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [12] /root/home/nicola/eclair/develop/bin/eclair(+0x1221b5b) [0x6219db48fb5b]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [13] /root/home/nicola/eclair/develop/bin/eclair(+0x1223a46) [0x6219db491a46]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [14] /root/home/nicola/eclair/develop/bin/eclair(+0x1223185) [0x6219db491185]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [15] /root/home/nicola/eclair/develop/bin/eclair(+0x1223e75) [0x6219db491e75]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [16] /root/home/nicola/eclair/develop/bin/eclair(+0xeb12d5) [0x6219db11f2d5]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [17] /root/home/nicola/eclair/develop/bin/eclair(+0x12302e9) [0x6219db49e2e9]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [18] /root/home/nicola/eclair/develop/bin/eclair(+0x9b98c3) [0x6219dac278c3]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [19] /root/home/nicola/eclair/develop/bin/eclair(+0xe81e66) [0x6219db0efe66]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [20] /root/home/nicola/eclair/develop/bin/eclair(+0x1223885) [0x6219db491885]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [21] /root/home/nicola/eclair/develop/bin/eclair(+0x1223185) [0x6219db491185]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [22] /root/home/nicola/eclair/develop/bin/eclair(+0x1223e75) [0x6219db491e75]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [23] /root/home/nicola/eclair/develop/bin/eclair(+0xeb12d5) [0x6219db11f2d5]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [24] /root/home/nicola/eclair/develop/bin/eclair(+0x12302e9) [0x6219db49e2e9]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [25] /root/home/nicola/eclair/develop/bin/eclair(+0x9b98c3) [0x6219dac278c3]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [26] /root/home/nicola/eclair/develop/bin/eclair(+0xe81e66) [0x6219db0efe66]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [27] /root/home/nicola/eclair/develop/bin/eclair(+0x1223885) [0x6219db491885]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [28] /root/home/nicola/eclair/develop/bin/eclair(+0x1223185) [0x6219db491185]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [29] /root/home/nicola/eclair/develop/bin/eclair(+0x1223e75) [0x6219db491e75]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [30] /root/home/nicola/eclair/develop/bin/eclair(+0xeb12d5) [0x6219db11f2d5]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [31] /root/home/nicola/eclair/develop/bin/eclair(+0xeafb63) [0x6219db11db63]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [32] /root/home/nicola/eclair/develop/bin/eclair(+0xe7516b) [0x6219db0e316b]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [33] /root/home/nicola/eclair/develop/bin/eclair(+0xe8b81d) [0x6219db0f981d]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [34] /root/home/nicola/eclair/develop/bin/eclair(+0x1223885) [0x6219db491885]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [35] /root/home/nicola/eclair/develop/bin/eclair(+0x1223185) [0x6219db491185]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [36] /root/home/nicola/eclair/develop/bin/eclair(+0x1223e75) [0x6219db491e75]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [37] /root/home/nicola/eclair/develop/bin/eclair(+0x12211bd) [0x6219db48f1bd]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [38] /root/home/nicola/eclair/develop/bin/eclair(+0x1221f8c) [0x6219db48ff8c]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [39] /root/home/nicola/eclair/develop/bin/eclair(+0x1223a46) [0x6219db491a46]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [40] /root/home/nicola/eclair/develop/bin/eclair(+0x1223185) [0x6219db491185]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [41] /root/home/nicola/eclair/develop/bin/eclair(+0x1223e75) [0x6219db491e75]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [42] /root/home/nicola/eclair/develop/bin/eclair(+0x1224088) [0x6219db492088]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [43] /root/home/nicola/eclair/develop/bin/eclair(+0x11efff7) [0x6219db45dff7]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [44] /root/home/nicola/eclair/develop/bin/eclair(+0x11ef933) [0x6219db45d933]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [45] /root/home/nicola/eclair/develop/bin/eclair(+0xe74e89) [0x6219db0e2e89]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [46] /root/home/nicola/eclair/develop/bin/eclair(+0xe7d4bc) [0x6219db0eb4bc]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [47] /root/home/nicola/eclair/develop/bin/eclair(+0x1223885) [0x6219db491885]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [48] /root/home/nicola/eclair/develop/bin/eclair(+0x1223185) [0x6219db491185]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [49] /root/home/nicola/eclair/develop/bin/eclair(+0x1223e75) [0x6219db491e75]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [50] /root/home/nicola/eclair/develop/bin/eclair(+0xeb12d5) [0x6219db11f2d5]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [51] /root/home/nicola/eclair/develop/bin/eclair(+0x12302e9) [0x6219db49e2e9]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [52] /root/home/nicola/eclair/develop/bin/eclair(+0x9b98c3) [0x6219dac278c3]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [53] /root/home/nicola/eclair/develop/bin/eclair(+0xe6f19b) [0x6219db0dd19b]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [54] /root/home/nicola/eclair/develop/bin/eclair(+0x9b43cb) [0x6219dac223cb]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:441:   [55] __libc_start_call_main() at ./csu/../sysdeps/x86/libc-start.c:74 [0x7d951182a1ca]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:441:   [56] call_init() at ./csu/../csu/libc-start.c:128 [0x7d951182a28b]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/os/pl-cstack.c:448:   [57] /root/home/nicola/eclair/develop/bin/eclair(+0x9a81d5) [0x6219dac161d5]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-init.c:2040: 

PROLOG STACK (without arguments):
  [20] eclair::=/2 [PC=0 in supervisor]
  [19] eclair:entity__get_parent/2 [PC=16 in clause 3]
  [18] eclair:sav__save_entity_aux/2 [PC=6 in clause 1]
  [17] eclair:sav__save_entity/1 [PC=150 in clause 1]
  [16] eclair:sav__save_decl_aux/3 [PC=61 in clause 1]
  [15] eclair:sav__save_decl/3 [PC=186 in clause 1]
  [14] eclair:sav__save_decl/1 [PC=14 in clause 1]
  [13] eclair:xref__ast__decl/1 [PC=25 in clause 1]
  [12] eclair:parsed_visitor/2 [PC=38 in clause 35]
  [11] eclair:parsed_visitor/1 [PC=8 in clause 1]
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-init.c:2043: 

PROLOG STACK (with arguments; may crash if data is corrupted):
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-assert.c:81: 
ERROR: /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-wam.c:327: open_foreign_frame___LD: Assertion failed: (fr->mark).saved_bar.as_ptr == NO_MARK_BAR || ((fr->mark).saved_bar.as_ptr >= gBase && (fr->mark).saved_bar.as_ptr <= gTop)
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-init.c:1991: Recursive crash; omitting crash report
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-assert.c:81: 
ERROR: /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-wam.c:327: open_foreign_frame___LD: Assertion failed: (fr->mark).saved_bar.as_ptr == NO_MARK_BAR || ((fr->mark).saved_bar.as_ptr >= gBase && (fr->mark).saved_bar.as_ptr <= gTop)
[CHK_SECURE] /root/home/nicola/eclair/develop/deps/build/swipl-2380532402c1ccf86bf8992fe6ed52a16234172f/src/pl-init.c:1991: Recursive crash; omitting crash report
./build.sh: line 1: 200081 Aborted                 (core dumped) ${COMPILER} -std=c++14 ${MAIN_SOURCE} -o ${TEST}

Output with prolog_debug(chk_secure) enabled in debug. It looks like a stack corruption caused by unbounded recursion?

No. What makes you think so? It first prints the C stack, then the Prolog stack without inspecting the arguments (as this is safer) and finally the Prolog stack with arguments. The latter crashes again on what is apparently an invalid value for saved_bar in a choicepoint.

Now, this apparently happens in :=/2. Is that a foreign predicate defined by you?

The debugging gets a bit nasty. The typical scenario is to see whether checkStacks(NULL) finds this and then call this function in more and more places to figure out what is introducing this (trying to do some binary search). If checkStacks(NULL) does not find this, it should be extended.

The root cause can be anything. Sometimes also an invalid assert(), though in this case it looks as if the assert is correct.

P.s. The saved_bar is part of the frozen global stack, which is used for non-backtrackable global variables bound to a value that lives on the stack as well as to make exception balls survive the backtracking during exception handling.