I have a program uses large numbers of file descriptors (over 1024), and it crashes miserably in __fortify_fail. Turning off FORTIFY_SOURCE/stack-protector results in a plain old segfault.
Reproducing with the attached program (crash-it.scm): Platform is GNU/Linux x86-64, gcc is 4.6.3. You need to set your ulimit over 1024 to trigger the crash (otherwise you'll just get "Too many open files" and rain of "integer expected" from the looping threads)
$ ulimit -n 4096 $ gsi crash-it.scm -e "(go 1500)" *** buffer overflow detected ***: gsi terminated ======= Backtrace: ========= /lib64/libc.so.6(__fortify_fail+0x37)[0x7fb775187dd7] /lib64/libc.so.6(+0xfdbe0)[0x7fb775185be0] /lib64/libc.so.6(+0xffd8e)[0x7fb775187d8e] /usr/local/gambit/current/lib/libgambc.so(___device_select_add_fd+0x55)[0x7fb775d625c5] /usr/local/gambit/current/lib/libgambc.so(+0x227a91)[0x7fb775d62a91] /usr/local/gambit/current/lib/libgambc.so(___device_select+0x104)[0x7fb775d62324] /usr/local/gambit/current/lib/libgambc.so(___os_condvar_select+0x141)[0x7fb775d64d61] /usr/local/gambit/current/lib/libgambc.so(+0x2310a1)[0x7fb775d6c0a1] /usr/local/gambit/current/lib/libgambc.so(___call+0xfa)[0x7fb775d4d2ba] /usr/local/gambit/current/lib/libgambc.so(___setup+0xfc0)[0x7fb775d4f760] /usr/local/gambit/current/lib/libgambc.so(___main+0x2a7)[0x7fb775d4bf57] /usr/local/gambit/current/lib/libgambc.so(___main_char+0xb0)[0x7fb775d59200] /lib64/libc.so.6(__libc_start_main+0xed)[0x7fb7750ac60d] gsi[0x403199]
Build config: ./configure --prefix=/usr/local/gambit --enable-single-host --enable-c-opt --enable-gcc-opts --enable-multiple-versions --enable-shared
To build without fortifications: ./configure CFLAGS="-U_FORTIFY_SOURCE -fno-stack-protector" ... And you'll get a segfault.
-- vyzo