didier@NomadBSD ~/s/b/p/clib> /usr/bin/cc -nodefaultlibs -Dplugin_uuid_EXPORTS -I/usr/local/include/ossp -I/home/didier/swipl-8.2.1/build_debug/packages/clib -I/home/didier/swipl-8.2.1/src/os -I/home/didier/swipl-8.2.1/src -g -fPIC -Wall -D__SWI_PROLOG__ /home/didier/swipl-8.2.1/packages/clib/uuid.c -g -shared -o uuid.so -Wl,-rpath,/usr/local/lib: -lossp-uuid -L/usr/local/lib/
didier@NomadBSD ~/s/b/p/clib> ldd ./uuid.so
./uuid.so:
libossp-uuid.so.16 => /usr/local/lib/libossp-uuid.so.16 (0x800674000)
libc.so.7 => /lib/libc.so.7 (0x80024a000)
didier@NomadBSD ~/s/b/p/clib> gdb /home/didier/swipl-8.2.1/build_debug/src/swipl
GNU gdb (GDB) 9.2 [GDB v9.2 for FreeBSD]
Reading symbols from /home/didier/swipl-8.2.1/build_debug/src/swipl...
(gdb) r "-p" "foreign=:/home/didier/swipl-8.2.1/build_debug/packages/clib:/home/didier/swipl-8.2.1/build_debug/packages/sgml:/home/didier/swipl-8.2.1/build_debug/packages/http" "-f" "none" "--no-packs" "-s" "/home/didier/swipl-8.2.1/packages/pengines/test_pengines.pl" "-g" "test_pengines" "-t" "halt"
Starting program: /home/didier/swipl-8.2.1/build_debug/src/swipl "-p" "foreign=:/home/didier/swipl-8.2.1/build_debug/packages/clib:/home/didier/swipl-8.2.1/build_debug/packages/sgml:/home/didier/swipl-8.2.1/build_debug/packages/http" "-f" "none" "--no-packs" "-s" "/home/didier/swipl-8.2.1/packages/pengines/test_pengines.pl" "-g" "test_pengines" "-t" "halt"
[New LWP 101221 of process 2050]
% PL-Unit: local_pengines
Thread 1 received signal SIGBUS, Bus error.
0x000000080172f656 in uuid_make () from /usr/local/lib/libossp-uuid.so.16
(gdb) b uuid_create
Breakpoint 1 at 0x8004e3464 (2 locations)
(gdb) c
Continuing.
[LWP 101221 of process 2050 exited]
Program terminated with signal SIGBUS, Bus error.
The program no longer exists.
(gdb) r
Starting program: /home/didier/swipl-8.2.1/build_debug/src/swipl "-p" "foreign=:/home/didier/swipl-8.2.1/build_debug/packages/clib:/home/didier/swipl-8.2.1/build_debug/packages/sgml:/home/didier/swipl-8.2.1/build_debug/packages/http" "-f" "none" "--no-packs" "-s" "/home/didier/swipl-8.2.1/packages/pengines/test_pengines.pl" "-g" "test_pengines" "-t" "halt"
[New LWP 101223 of process 2051]
% PL-Unit: local_pengines
Thread 1 hit Breakpoint 1, 0x00000008004e3464 in uuid_create () from /lib/libc.so.7
(gdb) up
#1 0x0000000801726520 in pl_uuid (UUID=476, options=477)
at /home/didier/swipl-8.2.1/packages/clib/uuid.c:139
139 uuid_create(&uuid);
(gdb) finish
Run till exit from #1 0x0000000801726520 in pl_uuid (UUID=476, options=477)
at /home/didier/swipl-8.2.1/packages/clib/uuid.c:139
Thread 1 received signal SIGBUS, Bus error.
0x000000080172f656 in uuid_make () from /usr/local/lib/libossp-uuid.so.16
(gdb)
I'd tried with -nodefaultlibs too. This is the same result.
As you can see, b uuid_create
causes the creation of two breakpoints at different location. One in libossp-uuid and the other in libc.
And when runing, the program stops at libc:uuid_create, the unexpected function with a different parameters count. As the caller expects calling ossp-uuid:uuid_create, it badly cleans up the stack.
As the result, a bus error raises on stack.