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
(14) |
|
2
|
3
(6) |
4
(9) |
5
(23) |
6
(6) |
7
(10) |
8
(2) |
|
9
(1) |
10
(5) |
11
(2) |
12
(5) |
13
(2) |
14
(2) |
15
(4) |
|
16
(3) |
17
(22) |
18
(21) |
19
(15) |
20
(24) |
21
(5) |
22
(5) |
|
23
(14) |
24
(2) |
25
(2) |
26
(1) |
27
|
28
|
29
(1) |
|
30
|
31
|
|
|
|
|
|
|
From: <sv...@va...> - 2016-10-19 21:58:42
|
Author: iraisr
Date: Wed Oct 19 22:58:35 2016
New Revision: 16081
Log:
Add another incompatibility between illumos and Solaris kernels.
n-i-bz
Modified:
trunk/README.solaris
Modified: trunk/README.solaris
==============================================================================
--- trunk/README.solaris (original)
+++ trunk/README.solaris Wed Oct 19 22:58:35 2016
@@ -52,6 +52,8 @@
syscalls [3]
- posix_spawn() functionality is backed up by true spawn() syscall on Solaris 12
whereas illumos and Solaris 11 leverage vfork()
+- illumos and older Solaris use utimesys() syscall whereas newer Solaris
+ uses utimensat()
[1] http://docs.oracle.com/cd/E26502_01/html/E28556/gkzlf.html#gkzip
[2] https://www.illumos.org/issues/521
|
|
From: <sv...@va...> - 2016-10-19 17:49:13
|
Author: petarj
Date: Wed Oct 19 18:49:06 2016
New Revision: 16080
Log:
mips: fix coredump creation in Valgrind
Coredumps created for MIPS are not valid today. Update the list of
registers that have to be saved, and use the structure defined in
kernel.
Patch by Aleksandar Rikalo.
It fixes BZ#351692.
Modified:
trunk/coregrind/m_coredump/coredump-elf.c
trunk/include/vki/vki-mips32-linux.h
trunk/include/vki/vki-mips64-linux.h
Modified: trunk/coregrind/m_coredump/coredump-elf.c
==============================================================================
--- trunk/coregrind/m_coredump/coredump-elf.c (original)
+++ trunk/coregrind/m_coredump/coredump-elf.c Wed Oct 19 18:49:06 2016
@@ -226,7 +226,11 @@
/*OUT*/struct vki_elf_prstatus *prs,
const vki_siginfo_t *si)
{
+#if defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+ vki_elf_greg_t *regs;
+#else
struct vki_user_regs_struct *regs;
+#endif
const ThreadArchState* arch = &tst->arch;
VG_(memset)(prs, 0, sizeof(*prs));
@@ -245,6 +249,8 @@
#if defined(VGP_s390x_linux)
/* prs->pr_reg has struct type. Need to take address. */
regs = (struct vki_user_regs_struct *)&(prs->pr_reg);
+#elif defined(VGP_mips32_linux) || defined(VGP_mips64_linux)
+ regs = (vki_elf_greg_t *)prs->pr_reg;
#else
regs = (struct vki_user_regs_struct *)prs->pr_reg;
vg_assert(sizeof(*regs) == sizeof(prs->pr_reg));
@@ -389,24 +395,27 @@
regs->orig_gpr2 = arch->vex.guest_r2;
#elif defined(VGP_mips32_linux)
-# define DO(n) regs->MIPS_r##n = arch->vex.guest_r##n
- DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
- DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
- DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
- DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
-# undef DO
- regs->MIPS_hi = arch->vex.guest_HI;
- regs->MIPS_lo = arch->vex.guest_LO;
-
+# define DO(n) regs[VKI_MIPS32_EF_R##n] = arch->vex.guest_r##n
+ DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7); DO(8);
+ DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15); DO(16);
+ DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23); DO(24);
+ DO(25); DO(28); DO(29); DO(30); DO(31);
+# undef DO
+ regs[VKI_MIPS32_EF_LO] = arch->vex.guest_LO;
+ regs[VKI_MIPS32_EF_HI] = arch->vex.guest_HI;
+ regs[VKI_MIPS32_EF_CP0_STATUS] = arch->vex.guest_CP0_status;
+ regs[VKI_MIPS32_EF_CP0_EPC] = arch->vex.guest_PC;
#elif defined(VGP_mips64_linux)
-# define DO(n) regs->MIPS_r##n = arch->vex.guest_r##n
- DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
- DO(8); DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15);
- DO(16); DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23);
- DO(24); DO(25); DO(26); DO(27); DO(28); DO(29); DO(30); DO(31);
-# undef DO
- regs->MIPS_hi = arch->vex.guest_HI;
- regs->MIPS_lo = arch->vex.guest_LO;
+# define DO(n) regs[VKI_MIPS64_EF_R##n] = arch->vex.guest_r##n
+ DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7); DO(8);
+ DO(9); DO(10); DO(11); DO(12); DO(13); DO(14); DO(15); DO(16);
+ DO(17); DO(18); DO(19); DO(20); DO(21); DO(22); DO(23); DO(24);
+ DO(25); DO(28); DO(29); DO(30); DO(31);
+# undef DO
+ regs[VKI_MIPS64_EF_LO] = arch->vex.guest_LO;
+ regs[VKI_MIPS64_EF_HI] = arch->vex.guest_HI;
+ regs[VKI_MIPS64_EF_CP0_STATUS] = arch->vex.guest_CP0_status;
+ regs[VKI_MIPS64_EF_CP0_EPC] = arch->vex.guest_PC;
#elif defined(VGP_tilegx_linux)
# define DO(n) regs->regs[n] = arch->vex.guest_r##n
DO(0); DO(1); DO(2); DO(3); DO(4); DO(5); DO(6); DO(7);
Modified: trunk/include/vki/vki-mips32-linux.h
==============================================================================
--- trunk/include/vki/vki-mips32-linux.h (original)
+++ trunk/include/vki/vki-mips32-linux.h Wed Oct 19 18:49:06 2016
@@ -815,56 +815,60 @@
#endif
} __attribute__ ((aligned (8)));
-
-#define vki_user_regs_struct vki_pt_regs
-
-#define MIPS_lo lo
-#define MIPS_hi hi
-//#define MIPS_pc regs[32]
-#define MIPS_r31 regs[31]
-#define MIPS_r30 regs[30]
-#define MIPS_r29 regs[29]
-#define MIPS_r28 regs[28]
-#define MIPS_r27 regs[27]
-#define MIPS_r26 regs[26]
-#define MIPS_r25 regs[25]
-#define MIPS_r24 regs[24]
-#define MIPS_r23 regs[23]
-#define MIPS_r22 regs[22]
-#define MIPS_r21 regs[21]
-#define MIPS_r20 regs[20]
-#define MIPS_r19 regs[19]
-#define MIPS_r18 regs[18]
-#define MIPS_r17 regs[17]
-#define MIPS_r16 regs[16]
-#define MIPS_r15 regs[15]
-#define MIPS_r14 regs[14]
-#define MIPS_r13 regs[13]
-#define MIPS_r12 regs[12]
-#define MIPS_r11 regs[11]
-#define MIPS_r10 regs[10]
-#define MIPS_r9 regs[9]
-#define MIPS_r8 regs[8]
-#define MIPS_r7 regs[7]
-#define MIPS_r6 regs[6]
-#define MIPS_r5 regs[5]
-#define MIPS_r4 regs[4]
-#define MIPS_r3 regs[3]
-#define MIPS_r2 regs[2]
-#define MIPS_r1 regs[1]
-#define MIPS_r0 regs[0]
-
#define VKI_PTRACE_GETREGS 12
#define VKI_PTRACE_SETREGS 13
#define VKI_PTRACE_GETFPREGS 14
#define VKI_PTRACE_SETFPREGS 15
//----------------------------------------------------------------------
-// From linux-2.6.35.5/include/asm-mips/elf.h
+// From linux-4.5/arch/mips/include/uapi/asm/reg.h
+//----------------------------------------------------------------------
+#define VKI_MIPS32_EF_R0 6
+#define VKI_MIPS32_EF_R1 7
+#define VKI_MIPS32_EF_R2 8
+#define VKI_MIPS32_EF_R3 9
+#define VKI_MIPS32_EF_R4 10
+#define VKI_MIPS32_EF_R5 11
+#define VKI_MIPS32_EF_R6 12
+#define VKI_MIPS32_EF_R7 13
+#define VKI_MIPS32_EF_R8 14
+#define VKI_MIPS32_EF_R9 15
+#define VKI_MIPS32_EF_R10 16
+#define VKI_MIPS32_EF_R11 17
+#define VKI_MIPS32_EF_R12 18
+#define VKI_MIPS32_EF_R13 19
+#define VKI_MIPS32_EF_R14 20
+#define VKI_MIPS32_EF_R15 21
+#define VKI_MIPS32_EF_R16 22
+#define VKI_MIPS32_EF_R17 23
+#define VKI_MIPS32_EF_R18 24
+#define VKI_MIPS32_EF_R19 25
+#define VKI_MIPS32_EF_R20 26
+#define VKI_MIPS32_EF_R21 27
+#define VKI_MIPS32_EF_R22 28
+#define VKI_MIPS32_EF_R23 29
+#define VKI_MIPS32_EF_R24 30
+#define VKI_MIPS32_EF_R25 31
+#define VKI_MIPS32_EF_R26 32
+#define VKI_MIPS32_EF_R27 33
+#define VKI_MIPS32_EF_R28 34
+#define VKI_MIPS32_EF_R29 35
+#define VKI_MIPS32_EF_R30 36
+#define VKI_MIPS32_EF_R31 37
+#define VKI_MIPS32_EF_LO 38
+#define VKI_MIPS32_EF_HI 39
+#define VKI_MIPS32_EF_CP0_EPC 40
+#define VKI_MIPS32_EF_CP0_BADVADDR 41
+#define VKI_MIPS32_EF_CP0_STATUS 42
+#define VKI_MIPS32_EF_CP0_CAUSE 43
+#define VKI_MIPS32_EF_UNUSED0 44
+
+//----------------------------------------------------------------------
+// From linux-4.5/arch/mips/include/asm/elf.h
//----------------------------------------------------------------------
typedef unsigned long vki_elf_greg_t;
-#define VKI_ELF_NGREG (sizeof (struct vki_user_regs_struct) / sizeof(vki_elf_greg_t))
-#define VKI_ELF_NFPREG 33 /* includes fpscr */
+#define VKI_ELF_NGREG 45
+#define VKI_ELF_NFPREG 33 /* includes fpscr */
typedef vki_elf_greg_t vki_elf_gregset_t[VKI_ELF_NGREG];
Modified: trunk/include/vki/vki-mips64-linux.h
==============================================================================
--- trunk/include/vki/vki-mips64-linux.h (original)
+++ trunk/include/vki/vki-mips64-linux.h Wed Oct 19 18:49:06 2016
@@ -841,43 +841,48 @@
#endif
} __attribute__ ((aligned (8)));
+//----------------------------------------------------------------------
+// From linux-4.5/arch/mips/include/uapi/asm/reg.h
+//----------------------------------------------------------------------
-#define vki_user_regs_struct vki_pt_regs
-
-#define MIPS_lo lo
-#define MIPS_hi hi
-#define MIPS_r31 regs[31]
-#define MIPS_r30 regs[30]
-#define MIPS_r29 regs[29]
-#define MIPS_r28 regs[28]
-#define MIPS_r27 regs[27]
-#define MIPS_r26 regs[26]
-#define MIPS_r25 regs[25]
-#define MIPS_r24 regs[24]
-#define MIPS_r23 regs[23]
-#define MIPS_r22 regs[22]
-#define MIPS_r21 regs[21]
-#define MIPS_r20 regs[20]
-#define MIPS_r19 regs[19]
-#define MIPS_r18 regs[18]
-#define MIPS_r17 regs[17]
-#define MIPS_r16 regs[16]
-#define MIPS_r15 regs[15]
-#define MIPS_r14 regs[14]
-#define MIPS_r13 regs[13]
-#define MIPS_r12 regs[12]
-#define MIPS_r11 regs[11]
-#define MIPS_r10 regs[10]
-#define MIPS_r9 regs[9]
-#define MIPS_r8 regs[8]
-#define MIPS_r7 regs[7]
-#define MIPS_r6 regs[6]
-#define MIPS_r5 regs[5]
-#define MIPS_r4 regs[4]
-#define MIPS_r3 regs[3]
-#define MIPS_r2 regs[2]
-#define MIPS_r1 regs[1]
-#define MIPS_r0 regs[0]
+#define VKI_MIPS64_EF_R0 0
+#define VKI_MIPS64_EF_R1 1
+#define VKI_MIPS64_EF_R2 2
+#define VKI_MIPS64_EF_R3 3
+#define VKI_MIPS64_EF_R4 4
+#define VKI_MIPS64_EF_R5 5
+#define VKI_MIPS64_EF_R6 6
+#define VKI_MIPS64_EF_R7 7
+#define VKI_MIPS64_EF_R8 8
+#define VKI_MIPS64_EF_R9 9
+#define VKI_MIPS64_EF_R10 10
+#define VKI_MIPS64_EF_R11 11
+#define VKI_MIPS64_EF_R12 12
+#define VKI_MIPS64_EF_R13 13
+#define VKI_MIPS64_EF_R14 14
+#define VKI_MIPS64_EF_R15 15
+#define VKI_MIPS64_EF_R16 16
+#define VKI_MIPS64_EF_R17 17
+#define VKI_MIPS64_EF_R18 18
+#define VKI_MIPS64_EF_R19 19
+#define VKI_MIPS64_EF_R20 20
+#define VKI_MIPS64_EF_R21 21
+#define VKI_MIPS64_EF_R22 22
+#define VKI_MIPS64_EF_R23 23
+#define VKI_MIPS64_EF_R24 24
+#define VKI_MIPS64_EF_R25 25
+#define VKI_MIPS64_EF_R26 26
+#define VKI_MIPS64_EF_R27 27
+#define VKI_MIPS64_EF_R28 28
+#define VKI_MIPS64_EF_R29 29
+#define VKI_MIPS64_EF_R30 30
+#define VKI_MIPS64_EF_R31 31
+#define VKI_MIPS64_EF_LO 32
+#define VKI_MIPS64_EF_HI 33
+#define VKI_MIPS64_EF_CP0_EPC 34
+#define VKI_MIPS64_EF_CP0_BADVADDR 35
+#define VKI_MIPS64_EF_CP0_STATUS 36
+#define VKI_MIPS64_EF_CP0_CAUSE 37
//----------------------------------------------------------------------
// From linux-2.6.35.9/include/asm-i386/ptrace.h
|
|
From: <sv...@va...> - 2016-10-19 17:23:31
|
Author: carll
Date: Wed Oct 19 18:23:19 2016
New Revision: 16079
Log:
Update memcheck/tests/ppc64/power_ISA2_05.vgtest
The option --workaround-gcc296-bugs=yes has been depricated and
replaced with the option --ignore-range-below-sp=1024-1
Updated the vgtest file with this change.
No associated bugzilla.
Modified:
trunk/memcheck/tests/ppc64/power_ISA2_05.vgtest
Modified: trunk/memcheck/tests/ppc64/power_ISA2_05.vgtest
==============================================================================
--- trunk/memcheck/tests/ppc64/power_ISA2_05.vgtest (original)
+++ trunk/memcheck/tests/ppc64/power_ISA2_05.vgtest Wed Oct 19 18:23:19 2016
@@ -1,2 +1,3 @@
prog: power_ISA2_05
-vgopts: --workaround-gcc296-bugs=yes
+## depricated option --workaround-gcc296-bugs=yes
+vgopts: --ignore-range-below-sp=1024-1
|
|
From: Julian S. <js...@ac...> - 2016-10-19 16:58:27
|
Committed, but only for the #-16 case; not for any offset. I am leery about allowing this to be done for more case than absolutely necessary since it makes the instructions nonrestartable after a fault. J > It seems newer versions of libgcc[0] have started using assembly like this: > > strd ip, lr, [sp, #-16]! > > Since VEX only checks for #-8, this is causing lots of complaints about > invalid writes below the stack pointer. |
|
From: <sv...@va...> - 2016-10-19 16:57:17
|
Author: sewardj
Date: Wed Oct 19 17:57:11 2016
New Revision: 3276
Log:
Allow early writeback of SP base register in "strd rD, [sp, #-16]" so
as to avoid Memcheck complaining about writes below SP. Previously
this was allowed only for the #-8 case. n-i-bz.
Modified:
trunk/priv/guest_arm_toIR.c
Modified: trunk/priv/guest_arm_toIR.c
==============================================================================
--- trunk/priv/guest_arm_toIR.c (original)
+++ trunk/priv/guest_arm_toIR.c Wed Oct 19 17:57:11 2016
@@ -17431,15 +17431,17 @@
ignore alignment issues for the time being. */
/* For almost all cases, we do the writeback after the transfers.
- However, that leaves the stack "uncovered" in this case:
+ However, that leaves the stack "uncovered" in cases like:
strd rD, [sp, #-8]
+ strd rD, [sp, #-16]
In which case, do the writeback to SP now, instead of later.
This is bad in that it makes the insn non-restartable if the
accesses fault, but at least keeps Memcheck happy. */
Bool writeback_already_done = False;
if (bS == 1 /*store*/ && summary == (2 | 16)
&& rN == 13 && rN != rD && rN != rD+1
- && bU == 0/*minus*/ && imm8 == 8) {
+ && bU == 0/*minus*/
+ && (imm8 == 8 || imm8 == 16)) {
putIRegA( rN, mkexpr(eaT), condT, Ijk_Boring );
writeback_already_done = True;
}
@@ -21521,15 +21523,17 @@
IRTemp transAddr = bP == 1 ? postAddr : preAddr;
/* For almost all cases, we do the writeback after the transfers.
- However, that leaves the stack "uncovered" in this case:
+ However, that leaves the stack "uncovered" in cases like:
strd rD, [sp, #-8]
+ strd rD, [sp, #-16]
In which case, do the writeback to SP now, instead of later.
This is bad in that it makes the insn non-restartable if the
accesses fault, but at least keeps Memcheck happy. */
Bool writeback_already_done = False;
if (bL == 0/*store*/ && bW == 1/*wb*/
&& rN == 13 && rN != rT && rN != rT2
- && bU == 0/*minus*/ && (imm8 << 2) == 8) {
+ && bU == 0/*minus*/
+ && ((imm8 << 2) == 8 || (imm8 << 2) == 16)) {
putIRegT(rN, mkexpr(postAddr), condT);
writeback_already_done = True;
}
|
|
From: Julian S. <js...@ac...> - 2016-10-19 16:45:05
|
This was fixed in VEX r3206, generalised for any shift amount from 0 to 31 inclusive. J > When using GCC 5.2 I am seeing this assembly generated in some cases: > > add.w reg, sp, reg, lsl #4 > > The current limit is 3 though, so it was causing it to be caught as an unhandled instruction. > > Patch attached to bump the number from 3 to 4. |
|
From: Julian S. <js...@ac...> - 2016-10-19 16:38:46
|
This was committed as r15737. Thanks for the patch. J On 19/11/15 17:35, Michael Daniels wrote: > Hello, > > The inline assembly in do_cmpxchg8b() clobbers rbx, but it is not in the clobber list > (likely just a spelling mistake, as rdx is in there twice). This was causing problems > for me when running this test on our platform. > > Simple patch attached. |
|
From: <sv...@va...> - 2016-10-19 16:13:36
|
Author: sewardj
Date: Wed Oct 19 17:13:29 2016
New Revision: 16078
Log:
"You need libc6-dbg" help message could be more helpful. Fixes #359645.
Patch from Sami Liedes (sam...@ik...)
Modified:
trunk/coregrind/m_redir.c
Modified: trunk/coregrind/m_redir.c
==============================================================================
--- trunk/coregrind/m_redir.c (original)
+++ trunk/coregrind/m_redir.c Wed Oct 19 17:13:29 2016
@@ -1297,6 +1297,10 @@
"",
" On Debian, Ubuntu: libc6-dbg",
" On SuSE, openSuSE, Fedora, RHEL: glibc-debuginfo",
+ "",
+ "Note that if you are debugging a 32 bit process on a",
+ "64 bit system, you will need a corresponding 32 bit debuginfo",
+ "package (e.g. libc6-dbg:i386).",
NULL
};
|
|
From: <sv...@va...> - 2016-10-19 16:08:35
|
Author: sewardj
Date: Wed Oct 19 17:08:25 2016
New Revision: 16077
Log:
Add support for Linux perf-events ioctls. Fixes #368419.
Patch from Keno Fischer (ke...@ju...).
Modified:
trunk/coregrind/m_syswrap/syswrap-linux.c
trunk/include/vki/vki-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-linux.c Wed Oct 19 17:08:25 2016
@@ -5640,6 +5640,10 @@
case VKI_FIONCLEX:
case VKI_TIOCNOTTY:
+ /* linux perf_event ioctls */
+ case VKI_PERF_EVENT_IOC_ENABLE:
+ case VKI_PERF_EVENT_IOC_DISABLE:
+
/* linux/soundcard interface (ALSA) */
case VKI_SNDRV_PCM_IOCTL_HW_FREE:
case VKI_SNDRV_PCM_IOCTL_HWSYNC:
@@ -8496,6 +8500,25 @@
break;
}
+ case VKI_PERF_EVENT_IOC_RESET:
+ case VKI_PERF_EVENT_IOC_REFRESH:
+ case VKI_PERF_EVENT_IOC_SET_OUTPUT:
+ case VKI_PERF_EVENT_IOC_SET_BPF:
+ /* These take scalar arguments, so already handled above */
+ break;
+
+ case VKI_PERF_EVENT_IOC_PERIOD:
+ PRE_MEM_READ("ioctl(VKI_PERF_EVENT_IOC_PERIOD)", (Addr)ARG3, sizeof(__vki_u64));
+ break;
+
+ case VKI_PERF_EVENT_IOC_SET_FILTER:
+ PRE_MEM_RASCIIZ("ioctl(VKI_PERF_EVENT_IOC_SET_FILTER).filter", ARG3);
+ break;
+
+ case VKI_PERF_EVENT_IOC_ID:
+ PRE_MEM_WRITE("ioctl(VKI_PERF_EVENT_IOC_ID)", (Addr)ARG3, sizeof(__vki_u64));
+ break;
+
default:
/* EVIOC* are variable length and return size written on success */
switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
@@ -10388,6 +10411,20 @@
case VKI_TIOCSSERIAL:
break;
+ case VKI_PERF_EVENT_IOC_ENABLE:
+ case VKI_PERF_EVENT_IOC_DISABLE:
+ case VKI_PERF_EVENT_IOC_REFRESH:
+ case VKI_PERF_EVENT_IOC_RESET:
+ case VKI_PERF_EVENT_IOC_PERIOD:
+ case VKI_PERF_EVENT_IOC_SET_OUTPUT:
+ case VKI_PERF_EVENT_IOC_SET_FILTER:
+ case VKI_PERF_EVENT_IOC_SET_BPF:
+ break;
+
+ case VKI_PERF_EVENT_IOC_ID:
+ POST_MEM_WRITE((Addr)ARG3, sizeof(__vki_u64));
+ break;
+
default:
/* EVIOC* are variable length and return size written on success */
switch (ARG2 & ~(_VKI_IOC_SIZEMASK << _VKI_IOC_SIZESHIFT)) {
Modified: trunk/include/vki/vki-linux.h
==============================================================================
--- trunk/include/vki/vki-linux.h (original)
+++ trunk/include/vki/vki-linux.h Wed Oct 19 17:08:25 2016
@@ -2946,6 +2946,16 @@
};
};
+#define VKI_PERF_EVENT_IOC_ENABLE _VKI_IO ('$', 0)
+#define VKI_PERF_EVENT_IOC_DISABLE _VKI_IO ('$', 1)
+#define VKI_PERF_EVENT_IOC_REFRESH _VKI_IO ('$', 2)
+#define VKI_PERF_EVENT_IOC_RESET _VKI_IO ('$', 3)
+#define VKI_PERF_EVENT_IOC_PERIOD _VKI_IOW('$', 4, __vki_u64)
+#define VKI_PERF_EVENT_IOC_SET_OUTPUT _VKI_IO ('$', 5)
+#define VKI_PERF_EVENT_IOC_SET_FILTER _VKI_IOW('$', 6, char *)
+#define VKI_PERF_EVENT_IOC_ID _VKI_IOR('$', 7, __vki_u64 *)
+#define VKI_PERF_EVENT_IOC_SET_BPF _VKI_IOW('$', 8, __vki_u32)
+
/*--------------------------------------------------------------------*/
// From linux-2.6.32.4/include/linux/getcpu.h
/*--------------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2016-10-19 16:01:08
|
Author: sewardj
Date: Wed Oct 19 17:01:01 2016
New Revision: 3275
Log:
CVTPI2PS: Only switch to MMX mode if the source is a MMX register.
(for both x86 and amd64 front ends)
Fixes #357059.
Modified:
trunk/priv/guest_amd64_toIR.c
trunk/priv/guest_x86_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
==============================================================================
--- trunk/priv/guest_amd64_toIR.c (original)
+++ trunk/priv/guest_amd64_toIR.c Wed Oct 19 17:01:01 2016
@@ -12848,8 +12848,10 @@
IRTemp rmode = newTemp(Ity_I32);
modrm = getUChar(delta);
- do_MMX_preamble();
if (epartIsReg(modrm)) {
+ /* Only switch to MMX mode if the source is a MMX register.
+ See comments on CVTPI2PD for details. Fixes #357059. */
+ do_MMX_preamble();
assign( arg64, getMMXReg(eregLO3ofRM(modrm)) );
delta += 1;
DIP("cvtpi2ps %s,%s\n", nameMMXReg(eregLO3ofRM(modrm)),
Modified: trunk/priv/guest_x86_toIR.c
==============================================================================
--- trunk/priv/guest_x86_toIR.c (original)
+++ trunk/priv/guest_x86_toIR.c Wed Oct 19 17:01:01 2016
@@ -8565,8 +8565,10 @@
vassert(sz == 4);
modrm = getIByte(delta+2);
- do_MMX_preamble();
if (epartIsReg(modrm)) {
+ /* Only switch to MMX mode if the source is a MMX register.
+ See comments on CVTPI2PD for details. Fixes #357059. */
+ do_MMX_preamble();
assign( arg64, getMMXReg(eregOfRM(modrm)) );
delta += 2+1;
DIP("cvtpi2ps %s,%s\n", nameMMXReg(eregOfRM(modrm)),
|
|
From: <sv...@va...> - 2016-10-19 15:38:00
|
Author: sewardj
Date: Wed Oct 19 16:37:54 2016
New Revision: 3274
Log:
Accept redundant REX prefixes for {minsd,maxsd} m128, xmm. Fixes #357932.
Patch from axe...@gm....
Modified:
trunk/priv/guest_amd64_toIR.c
Modified: trunk/priv/guest_amd64_toIR.c
==============================================================================
--- trunk/priv/guest_amd64_toIR.c (original)
+++ trunk/priv/guest_amd64_toIR.c Wed Oct 19 16:37:54 2016
@@ -13520,7 +13520,8 @@
goto decode_success;
}
/* F2 0F 5D = MINSD -- min 64F0x2 from R/M to R */
- if (haveF2no66noF3(pfx) && sz == 4) {
+ if (haveF2no66noF3(pfx)
+ && (sz == 4 || /* ignore redundant REX.W */ sz == 8)) {
delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "minsd", Iop_Min64F0x2 );
goto decode_success;
}
@@ -13566,7 +13567,8 @@
goto decode_success;
}
/* F2 0F 5F = MAXSD -- max 64F0x2 from R/M to R */
- if (haveF2no66noF3(pfx) && sz == 4) {
+ if (haveF2no66noF3(pfx)
+ && (sz == 4 || /* ignore redundant REX.W */ sz == 8)) {
delta = dis_SSE_E_to_G_lo64( vbi, pfx, delta, "maxsd", Iop_Max64F0x2 );
goto decode_success;
}
|
|
From: <sv...@va...> - 2016-10-19 15:19:24
|
Author: sewardj
Date: Wed Oct 19 16:19:16 2016
New Revision: 16076
Log:
Update.
Modified:
trunk/NEWS
trunk/docs/internals/3_11_BUGSTATUS.txt
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Wed Oct 19 16:19:16 2016
@@ -77,7 +77,9 @@
303877 valgrind doesn't support compressed debuginfo sections.
345307 Warning about "still reachable" memory when using libstdc++ from gcc 5
348345 Assertion fails for negative lineno
+351282 V 3.10.1 MIPS softfloat build broken with GCC 4.9.3 / binutils 2.25.1
351804 Crash on generating suppressions for "printf" call on OS X 10.10
+352197 mips: mmap2() not wrapped correctly for page size > 4096
353083 arm64 doesn't implement various xattr system calls
353084 arm64 doesn't support sigpending system call
353137 www: update info for Supported Platforms
@@ -106,6 +108,7 @@
355454 do not intercept malloc related symbols from the runtime linker
355455 stderr.exp of test cases wrapmalloc and wrapmallocstatic overconstrained
356044 Dwarf line info reader misinterprets is_stmt register
+356112 mips: replace addi with addiu
356393 valgrind (vex) crashes because isZeroU happened
== 363497
== 364497
@@ -143,6 +146,7 @@
360425 arm64 unsupported instruction ldpsw
== 364435
360519 none/tests/arm64/memory.vgtest might fail with newer gcc
+360571 Error about the Android Runtime reading below the stack pointer on ARM
360574 Wrong parameter type for an ashmem ioctl() call on Android and ARM64
360749 kludge for multiple .rodata sections on Solaris no longer needed
360752 raise the number of reserved fds in m_main.c from 10 to 12
@@ -168,18 +172,19 @@
364948 Valgrind does not support the IBM POWER ISA 3.0 instructions, part 5/5
365273 Invalid write to stack location reported after signal handler runs
365912 ppc64BE segfault during jm-insns test (RELRO)
-366344 Multiple unhandled instruction for Aarch64
+366079 FPXX Support for MIPS32 Valgrind
366138 Fix configure errors out when using Xcode 8 (clang 8.0.0)
366344 Multiple unhandled instruction for Aarch64
(0x0EE0E020, 0x1AC15800, 0x4E284801, 0x5E040023, 0x5E056060)
367995 Integration of memcheck with custom memory allocator
+368120 x86_linux asm _start functions do not keep 16-byte aligned stack pointer
368412 False positive result for altivec capability check
368461 mmapunmap test fails on ppc64
368416 Add tc06_two_races_xml.exp output for ppc64
368412 False positive result for altivec capability check
368461 mmapunmap test fails on ppc64
+368823 run_a_thread_NORETURN assembly code typo for VGP_arm64_linux target
369000 AMD64 fma4 instructions unsupported.
-361253 [s390x] ex_clone.c:42: undefined reference to `pthread_create'
369169 ppc64 fails jm_int_isa_2_07 test
369175 jm_vec_isa_2_07 test crashes on ppc64
369209 valgrind loops and eats up all memory if cwd doesn't exist.
Modified: trunk/docs/internals/3_11_BUGSTATUS.txt
==============================================================================
--- trunk/docs/internals/3_11_BUGSTATUS.txt (original)
+++ trunk/docs/internals/3_11_BUGSTATUS.txt Wed Oct 19 16:19:16 2016
@@ -51,10 +51,6 @@
=== VEX/mips ===========================================================
-356112 mips: replace addi with addiu
-
-366079 FPXX Support for MIPS32 Valgrind
-
=== VEX/ppc ============================================================
361405 disInstr(ppc): unhandled instruction: 0xFF81010C
@@ -82,8 +78,7 @@
359705 memcheck causes segfault on a dynamically-linked test from
rustlang's test suite on i686
360429 Warning: noted but unhandled ioctl 0x530d with no size/direction hints.
-361615 Inconsistent termination when an instrumented multithreaded process
- is terminated by signal
+ (has patch, should take)
361726 WARNING:unhandled syscall on ppc64
361770 Missing F_ADD_SEALS
362892 test apk in android5.0.2,after fix the bug 344802,android log
@@ -125,7 +120,6 @@
364279 False "Uninitialized" on atomic_compare_exchange
366035 valgrind misses buffer overflow, segfaults in malloc in localtime
366817 VALGRIND_MEMPOOL_CHANGE has a performance bug
-367995 Integration of memcheck with custom memory allocator
368507 valgrind throws std::bad_alloc on memory allocations larger than 34255421416 bytes
=== Tools/DRD ==========================================================
@@ -157,18 +151,11 @@
=== other/x86 ==========================================================
-368120 x86_linux asm _start functions do not keep 16-byte aligned stack pointer
-
=== other/mips =========================================================
-351282 valgrind 3.10.1 MIPS softfloat build broken with GCC 4.9.3 /
- binutils 2.25.1
-
351692 Dumps created by valgrind are not readable by gdb
[mips32 specific?]
-352197 mips: mmap2() not wrapped correctly for page size > 4096
-
=== other/ppc ==========================================================
365208 valgrind stuck after redirecting "memcpy"
@@ -179,11 +166,10 @@
core, : at 0x4000E7C: ??? (in /lib/ld-uClibc.so.0)
368529 Android arm target link error, missing atexit and pthread_atfork
+ (should take patch)
=== other/arm64 ========================================================
-368823 run_a_thread_NORETURN assembly code typo for VGP_arm64_linux target
-
=== other/s390 =========================================================
=== other/tilegx =======================================================
@@ -237,7 +223,6 @@
[Possible V memory corruption?]
359249 valgrind unable to load 64-bit linux executable
linked with -mcmodel=medium
-360571 Error about the Android Runtime reading below the stack pointer on ARM
362223 valgrind: m_commandline.c:79 (read_dot_valgrindrc):
Assertion 'n >= 0 && n <= stat_buf.size+1' failed.
362680 --error-exitcode not honored when file descriptor leaks are found
@@ -245,6 +230,7 @@
=== Uncategorised/build ================================================
358697 valgrind.h: Some code remains even when defining NVALGRIND
+ (we should fix this)
359202 Add musl libc configure/compile
359920 Configure fails with relative DESTDIR
362033 undeclared identifier build failures for getpid(), usleep(),
@@ -265,9 +251,6 @@
* mention that x86-linux is deprecated
-* the mempool changes (367995) are still under discussion
- (PhilippeW, dev list, 6 Oct 2016) and may need further cleanup
-
========================================================================
========================================================================
========================================================================
@@ -279,7 +262,8 @@
368864 WARNING: unhandled arm64-linux syscall: 262
368865 WARNING: unhandled arm64-linux syscall: 272
368866 WARNING: unhandled arm64-linux syscall: 238
-368868 disInstr(arm64): unhandled instruction 0xD53BE000 = cntfrq_el0 (ARMv8)
+368868 disInstr(arm64): unhandled instruction 0xD53BE000 = cntfrq_el0 (ARMv8)
+ (should fix this for 3.12.1)
368873 Please add FreeBSD to supported OS list
368913 WARNING: unhandled arm64-linux syscall: 117
368914 WARNING: unhandled arm64-linux syscall: 142
@@ -306,9 +290,6 @@
369034 WARNING: unhandled amd64-linux syscall: 136 (ustat)
369053 AMD64 fma4 instructions missing 256 bit support
-369264 Fedora 24 i686 and vex x86->IR:
- unhandled instruction bytes: 0xC5 0xF8 0x10 0x3 (32 bit AVX) -> wontfix
-
369409 null pointer dereference in vgPlain_do_syscall
possibly a dup of (fixed) 353370
@@ -326,19 +307,21 @@
370028 Reduce the number of compiler warnings on MIPS platforms
370635 arm64 missing syscall getcpu
-370941 Investigate using new VG_(HT_remove_at_Iter)() at other places
- in memcheck
+ (should fix this for 3.12.1)
+
+371065 www: add CfP for FOSDEM 2017 in valgrind.org NEWS section
+371128 BCD add/sub instructions on Power BE in 32-bit mode do not work.
-Mon 17 Oct 16:50:15 CEST 2016
+Wed 19 Oct 17:07:42 CEST 2016
========================================================================
========================================================================
-
3_12_BRANCH: vex 3250 is a copy of trunk 3249
val 15963 is a copy of trunk 15962
+3.12.0.BETA1 is 3_12_BRANCHes at 15973/3250.
MERGED (trunk -> 3_12_BRANCH unless otherwise indicated):
@@ -347,9 +330,8 @@
15970 -> 15972 fix for bugzilla 361253 [s390x]
15971 -> 15973 Add feature check for tests that use -march=armv8-a+crc.
15975 -> 16007 Avoid unused variable warning.
-
-15976 Prelim support for macOS Sierra (10.12). Partial fix for #365327.
-
+15976 -> 16071 Prelim support for macOS Sierra (10.12).
+ Partial fix for #365327.
15977 -> 16008 ppcBE, fix the expected output file for
none/tests/ppc64/jm_int_isa_2_07.stdout.exp
15978 -> 16009 Use proper compiler flags on Solaris for fma4 test.
@@ -444,9 +426,15 @@
related to leak-autofreepool tests. This is a follow up
fix for r16042.
-(tracked up to and including 16045/3263)
+3271 M Fix PPC BE in 32-bit mode (Iop_CmpXX64 not supported in 32-bit mode)
+16072 M Fix PPC BE in 32-bit mode (Iop_CmpXX64 not supported in 32-bit mode)
+16073 M Add --ignore-range-below-sp=<offset>-<offset>
+16074 M Fix run_a_thread_NORETURN assembly code typo for VGP_arm64_linux
+16075 M x86_linux asm _start functions do not keep 16-byte aligned %esp.
+3272 M Fix incorrect register-number constraint check for LDAEX{,B,H,D}
+3273 M Fix two cases of PPCAvFpOp vs PPCFpOp enum confusion.
-3.12.0.BETA1 is 3_12_BRANCHes at 15973/3250.
+(tracked up to and including 16075/3273)
========================================================================
========================================================================
|
|
From: <sv...@va...> - 2016-10-19 07:41:46
|
Author: sewardj
Date: Wed Oct 19 08:41:35 2016
New Revision: 3273
Log:
Fix two cases of PPCAvFpOp vs PPCFpOp enum confusion, as spotted
by Clang-3.8.
Modified:
trunk/priv/host_ppc_isel.c
Modified: trunk/priv/host_ppc_isel.c
==============================================================================
--- trunk/priv/host_ppc_isel.c (original)
+++ trunk/priv/host_ppc_isel.c Wed Oct 19 08:41:35 2016
@@ -4210,7 +4210,7 @@
HReg tmp = newVRegV(env);
PPCAMode* zero_r1 = PPCAMode_IR( 0, StackFramePtr(env->mode64) );
PPCAMode* eight_r1 = PPCAMode_IR( 8, StackFramePtr(env->mode64) );
- PPCAvFpOp fpop = Pavfp_INVALID;
+ PPCFpOp fpop = Pfp_INVALID;
if (FPU_rounding_mode_isOdd(e->Iex.Binop.arg1)) {
/* use rounding mode specified by RN. Issue inst with R0 = 0 */
@@ -4495,7 +4495,7 @@
static HReg iselFp128Expr_wrk( ISelEnv* env, IRExpr* e, IREndness IEndianess)
{
Bool mode64 = env->mode64;
- PPCAvFpOp fpop = Pavfp_INVALID;
+ PPCFpOp fpop = Pfp_INVALID;
IRType ty = typeOfIRExpr(env->type_env,e);
vassert(e);
|
|
From: <sv...@va...> - 2016-10-19 07:39:32
|
Author: sewardj
Date: Wed Oct 19 08:39:22 2016
New Revision: 3272
Log:
Fix incorrect register-number constraint check for LDAEX{,B,H,D}
introduced in r3248. Spotted by Clang-3.8.
Modified:
trunk/priv/guest_arm_toIR.c
Modified: trunk/priv/guest_arm_toIR.c
==============================================================================
--- trunk/priv/guest_arm_toIR.c (original)
+++ trunk/priv/guest_arm_toIR.c Wed Oct 19 08:39:22 2016
@@ -13329,7 +13329,7 @@
if (szBlg2 < 3) {
if (! (tt != 15 && nn != 15)) gate = False;
} else {
- if (! (tt & 1) == 0 && tt != 14 && nn != 15) gate = False;
+ if (! ((tt & 1) == 0 && tt != 14 && nn != 15)) gate = False;
vassert(tt2 == 16/*invalid*/);
tt2 = tt + 1;
}
|
|
From: <sv...@va...> - 2016-10-19 06:00:40
|
Author: sewardj
Date: Wed Oct 19 07:00:32 2016
New Revision: 16075
Log:
Bug 368120 - x86_linux asm _start functions do not keep 16-byte
aligned stack pointer. Patch from ch...@go....
Modified:
trunk/coregrind/m_main.c
trunk/coregrind/m_syswrap/syswrap-x86-linux.c
Modified: trunk/coregrind/m_main.c
==============================================================================
--- trunk/coregrind/m_main.c (original)
+++ trunk/coregrind/m_main.c Wed Oct 19 07:00:32 2016
@@ -2985,12 +2985,13 @@
"\tmovl $vgPlain_interim_stack, %eax\n"
"\taddl $"VG_STRINGIFY(VG_STACK_GUARD_SZB)", %eax\n"
"\taddl $"VG_STRINGIFY(VG_DEFAULT_STACK_ACTIVE_SZB)", %eax\n"
+ /* allocate at least 16 bytes on the new stack, and aligned */
"\tsubl $16, %eax\n"
"\tandl $~15, %eax\n"
/* install it, and collect the original one */
"\txchgl %eax, %esp\n"
/* call _start_in_C_linux, passing it the startup %esp */
- "\tpushl %eax\n"
+ "\tmovl %eax, (%esp)\n"
"\tcall _start_in_C_linux\n"
"\thlt\n"
".previous\n"
Modified: trunk/coregrind/m_syswrap/syswrap-x86-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-x86-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-x86-linux.c Wed Oct 19 07:00:32 2016
@@ -83,8 +83,9 @@
".globl vgModuleLocal_call_on_new_stack_0_1\n"
"vgModuleLocal_call_on_new_stack_0_1:\n"
" movl %esp, %esi\n" // remember old stack pointer
-" movl 4(%esi), %esp\n" // set stack
-" pushl 16(%esi)\n" // arg1 to stack
+" movl 4(%esi), %esp\n" // set stack, assume %esp is now 16-byte aligned
+" subl $12, %esp\n" // skip 12 bytes
+" pushl 16(%esi)\n" // arg1 to stack, %esp is 16-byte aligned
" pushl 8(%esi)\n" // retaddr to stack
" pushl 12(%esi)\n" // f to stack
" movl $0, %eax\n" // zero all GP regs
@@ -150,7 +151,8 @@
" movl 4+"FSZ"(%esp), %ecx\n" /* syscall arg2: child stack */
" movl 12+"FSZ"(%esp), %ebx\n" /* fn arg */
" movl 0+"FSZ"(%esp), %eax\n" /* fn */
-" lea -8(%ecx), %ecx\n" /* make space on stack */
+" andl $-16, %ecx\n" /* align to 16-byte */
+" lea -20(%ecx), %ecx\n" /* allocate 16*n+4 bytes on stack */
" movl %ebx, 4(%ecx)\n" /* fn arg */
" movl %eax, 0(%ecx)\n" /* fn */
@@ -165,7 +167,7 @@
" jnz 1f\n"
/* CHILD - call thread function */
-" popl %eax\n"
+" popl %eax\n" /* child %esp is 16-byte aligned */
" call *%eax\n" /* call fn */
/* exit with result */
|