Date: Wed, 23 Aug 2017 16:37:07 +0200 From: Tijl Coosemans <tijl@FreeBSD.org> To: freebsd-current@FreeBSD.org Cc: gerald@FreeBSD.org Subject: Segfault in _Unwind_* code called from pthread_exit Message-ID: <20170823163707.096f93ab@kalimero.tijl.coosemans.org>
next in thread | raw e-mail | index | archive | help
Hi, The following program segfaults for me on amd64 when linked like this: cc -o test test.c -lpthread -L/usr/local/lib/gcc5 -lgcc_s -rpath /usr/local/lib/gcc5 -------------------------------- #include <pthread.h> #include <stdio.h> void * thr( void *arg ) { return( NULL ); } int main( void ) { pthread_t thread; for( int i = 1; i < 20; i++ ) { fprintf( stderr, "%d\n", i ); pthread_create( &thread, NULL, thr, NULL ); pthread_join( thread, NULL ); } return( 0 ); } -------------------------------- The backtrace looks like this: Thread 7 received signal SIGSEGV, Segmentation fault. [Switching to LWP 100511 of process 1886] uw_frame_state_for (context=context@entry=0x7fffdfffddc0, fs=fs@entry=0x7fffdfffdb10) at /usr/ports/lang/gcc5/work/gcc-5.4.0/libgcc/unwind-dw2.c:1249 1249 /usr/ports/lang/gcc5/work/gcc-5.4.0/libgcc/unwind-dw2.c: No such file or directory. (gdb) bt #0 uw_frame_state_for (context=context@entry=0x7fffdfffddc0, fs=fs@entry=0x7fffdfffdb10) at /usr/ports/lang/gcc5/work/gcc-5.4.0/libgcc/unwind-dw2.c:1249 #1 0x0000000800a66ecb in _Unwind_ForcedUnwind_Phase2 ( exc=exc@entry=0x800658730, context=context@entry=0x7fffdfffddc0) at /usr/ports/lang/gcc5/work/gcc-5.4.0/libgcc/unwind.inc:155 #2 0x0000000800a67200 in _Unwind_ForcedUnwind (exc=0x800658730, stop=0x8008428b0 <thread_unwind_stop>, stop_argument=0x0) at /usr/ports/lang/gcc5/work/gcc-5.4.0/libgcc/unwind.inc:207 #3 0x0000000800842224 in _Unwind_ForcedUnwind (ex=0x800658730, stop_func=0x8008428b0 <thread_unwind_stop>, stop_arg=0x0) at /usr/src/lib/libthr/thread/thr_exit.c:106 #4 0x000000080084269f in thread_unwind () at /usr/src/lib/libthr/thread/thr_exit.c:172 #5 0x00000008008424d6 in _pthread_exit_mask (status=0x0, mask=0x0) at /usr/src/lib/libthr/thread/thr_exit.c:254 #6 0x0000000800842359 in _pthread_exit (status=0x0) at /usr/src/lib/libthr/thread/thr_exit.c:206 #7 0x000000080082ccb1 in thread_start (curthread=0x800658500) at /usr/src/lib/libthr/thread/thr_create.c:289 #8 0x00007fffdfdfe000 in ?? () Backtrace stopped: Cannot access memory at address 0x7fffdfffe000 It happens with gcc6 as well, but not with base libgcc_s. Can anyone reproduce this? Have there been any changes to stack unwinding recently (last few months)?
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170823163707.096f93ab>