Date: Sat, 15 Nov 2008 21:19:45 GMT From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 153016 for review Message-ID: <200811152119.mAFLJjtG014618@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=153016 Change 153016 by peter@peter_overcee on 2008/11/15 21:18:58 Turn on userland vs kernel siginfo detection and handling. Affected files ... .. //depot/projects/valgrind/coregrind/m_signals.c#10 edit Differences ... ==== //depot/projects/valgrind/coregrind/m_signals.c#10 (text+ko) ==== @@ -1538,7 +1538,6 @@ deliver_signal(tid, &info, &uc); } -#ifndef VGO_freebsd /* Make a signal pending for a thread, for later delivery. VG_(poll_signals) will arrange for it to be delivered at the right time. @@ -1584,7 +1583,6 @@ restore_all_host_signals(&savedmask); } -#endif /* Returns the next queued signal for thread tid which is in "set". @@ -1775,8 +1773,8 @@ VG_(printf)("si_uid %d\n", info->si_uid); VG_(printf)("si_status %d\n", info->si_status); VG_(printf)("si_addr %p\n", info->si_addr); -VG_(printf)("si_value %d\n", info->si_value); -VG_(printf)("si_band %d\n", info->si_band); +VG_(printf)("si_value %p\n", info->si_value.sival_ptr); +VG_(printf)("si_band %ld\n", info->si_band); #endif #ifdef VGO_linux @@ -1791,9 +1789,13 @@ info->si_code = (Short)info->si_code; #endif -/* QQQ crap! fix this! 4.x is totally busted here! */ -#ifndef VGO_freebsd +#if defined(VGO_linux) || defined(VGO_aix5) if (info->si_code <= VKI_SI_USER) { +#elif defined(VGO_freebsd) + if (info->si_code >= VKI_SI_USER) { +#else +# error Unknown OS +#endif /* If some user-process sent us one of these signals (ie, they're not the result of a faulting instruction), then treat it as an async signal. This is tricky because we could get @@ -1828,7 +1830,7 @@ continue unless we get it. */ VG_(message)(Vg_UserMsg, "Signal %d (%s) appears to have lost its siginfo; I can't go on.", sigNo, signame(sigNo)); -#ifdef VGO_linux +#if defined(VGO_linux) VG_(message)(Vg_UserMsg, " This may be because one of your programs has consumed your"); VG_(message)(Vg_UserMsg, " ration of siginfo structures."); VG_(printf)( @@ -1857,7 +1859,7 @@ /* Since every thread has these signals unblocked, we can't rely on the kernel to route them properly, so we need to queue them manually. */ -#ifdef VKI_SI_TKILL +#if defined(VKI_SI_TKILL) if (info->si_code == VKI_SI_TKILL) queue_signal(tid, info); /* directed to us specifically */ else @@ -1866,7 +1868,6 @@ return; } -#endif if (VG_(clo_trace_signals)) { VG_(message)(Vg_DebugMsg, "signal %d arrived ... si_code=%d, "
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200811152119.mAFLJjtG014618>