You can subscribe to this list here.
| 2002 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(1) |
Oct
(122) |
Nov
(152) |
Dec
(69) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2003 |
Jan
(6) |
Feb
(25) |
Mar
(73) |
Apr
(82) |
May
(24) |
Jun
(25) |
Jul
(10) |
Aug
(11) |
Sep
(10) |
Oct
(54) |
Nov
(203) |
Dec
(182) |
| 2004 |
Jan
(307) |
Feb
(305) |
Mar
(430) |
Apr
(312) |
May
(187) |
Jun
(342) |
Jul
(487) |
Aug
(637) |
Sep
(336) |
Oct
(373) |
Nov
(441) |
Dec
(210) |
| 2005 |
Jan
(385) |
Feb
(480) |
Mar
(636) |
Apr
(544) |
May
(679) |
Jun
(625) |
Jul
(810) |
Aug
(838) |
Sep
(634) |
Oct
(521) |
Nov
(965) |
Dec
(543) |
| 2006 |
Jan
(494) |
Feb
(431) |
Mar
(546) |
Apr
(411) |
May
(406) |
Jun
(322) |
Jul
(256) |
Aug
(401) |
Sep
(345) |
Oct
(542) |
Nov
(308) |
Dec
(481) |
| 2007 |
Jan
(427) |
Feb
(326) |
Mar
(367) |
Apr
(255) |
May
(244) |
Jun
(204) |
Jul
(223) |
Aug
(231) |
Sep
(354) |
Oct
(374) |
Nov
(497) |
Dec
(362) |
| 2008 |
Jan
(322) |
Feb
(482) |
Mar
(658) |
Apr
(422) |
May
(476) |
Jun
(396) |
Jul
(455) |
Aug
(267) |
Sep
(280) |
Oct
(253) |
Nov
(232) |
Dec
(304) |
| 2009 |
Jan
(486) |
Feb
(470) |
Mar
(458) |
Apr
(423) |
May
(696) |
Jun
(461) |
Jul
(551) |
Aug
(575) |
Sep
(134) |
Oct
(110) |
Nov
(157) |
Dec
(102) |
| 2010 |
Jan
(226) |
Feb
(86) |
Mar
(147) |
Apr
(117) |
May
(107) |
Jun
(203) |
Jul
(193) |
Aug
(238) |
Sep
(300) |
Oct
(246) |
Nov
(23) |
Dec
(75) |
| 2011 |
Jan
(133) |
Feb
(195) |
Mar
(315) |
Apr
(200) |
May
(267) |
Jun
(293) |
Jul
(353) |
Aug
(237) |
Sep
(278) |
Oct
(611) |
Nov
(274) |
Dec
(260) |
| 2012 |
Jan
(303) |
Feb
(391) |
Mar
(417) |
Apr
(441) |
May
(488) |
Jun
(655) |
Jul
(590) |
Aug
(610) |
Sep
(526) |
Oct
(478) |
Nov
(359) |
Dec
(372) |
| 2013 |
Jan
(467) |
Feb
(226) |
Mar
(391) |
Apr
(281) |
May
(299) |
Jun
(252) |
Jul
(311) |
Aug
(352) |
Sep
(481) |
Oct
(571) |
Nov
(222) |
Dec
(231) |
| 2014 |
Jan
(185) |
Feb
(329) |
Mar
(245) |
Apr
(238) |
May
(281) |
Jun
(399) |
Jul
(382) |
Aug
(500) |
Sep
(579) |
Oct
(435) |
Nov
(487) |
Dec
(256) |
| 2015 |
Jan
(338) |
Feb
(357) |
Mar
(330) |
Apr
(294) |
May
(191) |
Jun
(108) |
Jul
(142) |
Aug
(261) |
Sep
(190) |
Oct
(54) |
Nov
(83) |
Dec
(22) |
| 2016 |
Jan
(49) |
Feb
(89) |
Mar
(33) |
Apr
(50) |
May
(27) |
Jun
(34) |
Jul
(53) |
Aug
(53) |
Sep
(98) |
Oct
(206) |
Nov
(93) |
Dec
(53) |
| 2017 |
Jan
(65) |
Feb
(82) |
Mar
(102) |
Apr
(86) |
May
(187) |
Jun
(67) |
Jul
(23) |
Aug
(93) |
Sep
(65) |
Oct
(45) |
Nov
(35) |
Dec
(17) |
| 2018 |
Jan
(26) |
Feb
(35) |
Mar
(38) |
Apr
(32) |
May
(8) |
Jun
(43) |
Jul
(27) |
Aug
(30) |
Sep
(43) |
Oct
(42) |
Nov
(38) |
Dec
(67) |
| 2019 |
Jan
(32) |
Feb
(37) |
Mar
(53) |
Apr
(64) |
May
(49) |
Jun
(18) |
Jul
(14) |
Aug
(53) |
Sep
(25) |
Oct
(30) |
Nov
(49) |
Dec
(31) |
| 2020 |
Jan
(87) |
Feb
(45) |
Mar
(37) |
Apr
(51) |
May
(99) |
Jun
(36) |
Jul
(11) |
Aug
(14) |
Sep
(20) |
Oct
(24) |
Nov
(40) |
Dec
(23) |
| 2021 |
Jan
(14) |
Feb
(53) |
Mar
(85) |
Apr
(15) |
May
(19) |
Jun
(3) |
Jul
(14) |
Aug
(1) |
Sep
(57) |
Oct
(73) |
Nov
(56) |
Dec
(22) |
| 2022 |
Jan
(3) |
Feb
(22) |
Mar
(6) |
Apr
(55) |
May
(46) |
Jun
(39) |
Jul
(15) |
Aug
(9) |
Sep
(11) |
Oct
(34) |
Nov
(20) |
Dec
(36) |
| 2023 |
Jan
(79) |
Feb
(41) |
Mar
(99) |
Apr
(169) |
May
(48) |
Jun
(16) |
Jul
(16) |
Aug
(57) |
Sep
(19) |
Oct
|
Nov
|
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
1
|
2
|
3
|
4
|
5
(3) |
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
|
13
|
14
|
15
|
16
(2) |
17
|
18
|
19
|
|
20
|
21
|
22
|
23
|
24
|
25
(1) |
26
|
|
27
|
28
|
29
(1) |
30
|
31
(1) |
|
|
|
From: Julian S. <se...@so...> - 2018-05-31 15:06:52
|
https://sourceware.org/git/gitweb.cgi?p=valgrind.git;h=3217cfbfdfdc763ca16e47dd9724f9ccaa517ad5 commit 3217cfbfdfdc763ca16e47dd9724f9ccaa517ad5 Author: Julian Seward <js...@ac...> Date: Thu May 31 17:03:08 2018 +0200 arm64-linux: VG_(sigframe_destroy): restore int regs, PC and SP from the sigcontext previously presented to the handler. n-i-bz. So as to correctly (well, less incorrectly) simulate handlers that change register state in the sigcontext they are given in the expectation that the change will take effect immediately upon the handler returning. Diff: --- coregrind/m_sigframe/sigframe-arm64-linux.c | 122 +++++++++++++--------------- 1 file changed, 55 insertions(+), 67 deletions(-) diff --git a/coregrind/m_sigframe/sigframe-arm64-linux.c b/coregrind/m_sigframe/sigframe-arm64-linux.c index 420c409..ebe3303 100644 --- a/coregrind/m_sigframe/sigframe-arm64-linux.c +++ b/coregrind/m_sigframe/sigframe-arm64-linux.c @@ -49,11 +49,12 @@ /* This uses the hack of dumping the vex guest state along with both shadows in the frame, and restoring it afterwards from there, - rather than pulling it out of the ucontext. That means that signal - handlers which modify the ucontext and then return, expecting their - modifications to take effect, will have those modifications - ignored. This could be fixed properly with an hour or so more - effort. */ + rather than pulling it out of the ucontext. Then, integer + registers, the SP and the PC are restored from the ucontext. That + means that signal handlers which modify floating point registers or + in general any register state apart from X0-X30, XSP and PC in the + ucontext and then return, expecting their modifications to take + effect, will have those modifications ignored. */ /* This also always does the 'has siginfo' behaviour whether or not it is requested. */ @@ -93,16 +94,16 @@ static void synth_ucontext( ThreadId tid, const vki_siginfo_t *si, uc->uc_sigmask = *set; uc->uc_stack = tst->altstack; -# define SC2(reg) sc->regs[reg] = tst->arch.vex.guest_X##reg - SC2(0); SC2(1); SC2(2); SC2(3); - SC2(4); SC2(5); SC2(6); SC2(7); - SC2(8); SC2(9); SC2(10); SC2(11); - SC2(12); SC2(13); SC2(14); SC2(15); - SC2(16); SC2(17); SC2(18); SC2(19); - SC2(20); SC2(21); SC2(22); SC2(23); - SC2(24); SC2(25); SC2(26); SC2(27); - SC2(28); SC2(29); SC2(30); -# undef SC2 +# define TO_CTX(reg) sc->regs[reg] = tst->arch.vex.guest_X##reg + TO_CTX(0); TO_CTX(1); TO_CTX(2); TO_CTX(3); + TO_CTX(4); TO_CTX(5); TO_CTX(6); TO_CTX(7); + TO_CTX(8); TO_CTX(9); TO_CTX(10); TO_CTX(11); + TO_CTX(12); TO_CTX(13); TO_CTX(14); TO_CTX(15); + TO_CTX(16); TO_CTX(17); TO_CTX(18); TO_CTX(19); + TO_CTX(20); TO_CTX(21); TO_CTX(22); TO_CTX(23); + TO_CTX(24); TO_CTX(25); TO_CTX(26); TO_CTX(27); + TO_CTX(28); TO_CTX(29); TO_CTX(30); +# undef TO_CTX sc->sp = tst->arch.vex.guest_XSP; sc->pc = tst->arch.vex.guest_PC; sc->pstate = 0; /* slack .. could do better */ @@ -219,65 +220,52 @@ void VG_(sigframe_create)( ThreadId tid, /* EXPORTED */ void VG_(sigframe_destroy)( ThreadId tid, Bool isRT ) { - ThreadState *tst; - struct vg_sig_private *priv; - Addr sp; - UInt frame_size; -//ZZ struct vki_sigcontext *mc; - Int sigNo; - Bool has_siginfo = isRT; - vg_assert(VG_(is_valid_tid)(tid)); - tst = VG_(get_ThreadState)(tid); - sp = tst->arch.vex.guest_XSP; - -//ZZ if (has_siginfo) { - struct rt_sigframe *frame = (struct rt_sigframe *)sp; - frame_size = sizeof(*frame); - //mc = &frame->sig.uc.uc_mcontext; - priv = &frame->sig.vp; - vg_assert(priv->magicPI == 0x31415927); - tst->sig_mask = frame->sig.uc.uc_sigmask; -//ZZ } else { -//ZZ struct sigframe *frame = (struct sigframe *)sp; -//ZZ frame_size = sizeof(*frame); -//ZZ mc = &frame->uc.uc_mcontext; -//ZZ priv = &frame->vp; -//ZZ vg_assert(priv->magicPI == 0x31415927); -//ZZ tst->sig_mask = frame->uc.uc_sigmask; -//ZZ //VG_(printf)("Setting signmask to %08x%08x\n", -//ZZ // tst->sig_mask[0],tst->sig_mask[1]); -//ZZ } + + Bool has_siginfo = isRT; + ThreadState* tst = VG_(get_ThreadState)(tid); + Addr sp = tst->arch.vex.guest_XSP; + + struct rt_sigframe* frame = (struct rt_sigframe *)sp; + struct vg_sig_private* priv = &frame->sig.vp; + vg_assert(priv->magicPI == 0x31415927); + + tst->sig_mask = frame->sig.uc.uc_sigmask; tst->tmp_sig_mask = tst->sig_mask; - sigNo = priv->sigNo_private; - -//ZZ //XXX: restore regs -//ZZ # define REST(reg,REG) tst->arch.vex.guest_##REG = mc->arm_##reg; -//ZZ REST(r0,R0); -//ZZ REST(r1,R1); -//ZZ REST(r2,R2); -//ZZ REST(r3,R3); -//ZZ REST(r4,R4); -//ZZ REST(r5,R5); -//ZZ REST(r6,R6); -//ZZ REST(r7,R7); -//ZZ REST(r8,R8); -//ZZ REST(r9,R9); -//ZZ REST(r10,R10); -//ZZ REST(fp,R11); -//ZZ REST(ip,R12); -//ZZ REST(sp,R13); -//ZZ REST(lr,R14); -//ZZ REST(pc,R15T); -//ZZ # undef REST - - /* Uh, the next line makes all the REST() above pointless. */ - tst->arch.vex = priv->vex; + Int sigNo = priv->sigNo_private; + UInt frame_size = sizeof(*frame); + /* Restore the entire machine state from our private copy. This + isn't really right, but we'll now move on to pick up at least + some changes that the signal handler may have made to the + sigcontext. */ + tst->arch.vex = priv->vex; tst->arch.vex_shadow1 = priv->vex_shadow1; tst->arch.vex_shadow2 = priv->vex_shadow2; + if (has_siginfo) { + /* Pick up at least some state changes from the ucontext, just + in case the handler changed it. The shadow values will be + wrong, but hey. This restores the integer registers, the + program counter and stack pointer. FP/Vector regs, and any + condition code, FP status/control bits, etc, are not + restored. */ + struct vki_sigcontext *sc =&frame->sig.uc.uc_mcontext; +# define FROM_CTX(reg) tst->arch.vex.guest_X##reg = sc->regs[reg] + FROM_CTX(0); FROM_CTX(1); FROM_CTX(2); FROM_CTX(3); + FROM_CTX(4); FROM_CTX(5); FROM_CTX(6); FROM_CTX(7); + FROM_CTX(8); FROM_CTX(9); FROM_CTX(10); FROM_CTX(11); + FROM_CTX(12); FROM_CTX(13); FROM_CTX(14); FROM_CTX(15); + FROM_CTX(16); FROM_CTX(17); FROM_CTX(18); FROM_CTX(19); + FROM_CTX(20); FROM_CTX(21); FROM_CTX(22); FROM_CTX(23); + FROM_CTX(24); FROM_CTX(25); FROM_CTX(26); FROM_CTX(27); + FROM_CTX(28); FROM_CTX(29); FROM_CTX(30); +# undef FROM_CTX + tst->arch.vex.guest_XSP = sc->sp; // should we use SET_SP here? + tst->arch.vex.guest_PC = sc->pc; + } + VG_TRACK( die_mem_stack_signal, sp - VG_STACK_REDZONE_SZB, frame_size + VG_STACK_REDZONE_SZB ); |