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
(11) |
|
2
|
3
|
4
|
5
(4) |
6
(21) |
7
(14) |
8
(14) |
|
9
(16) |
10
(19) |
11
(18) |
12
(17) |
13
(14) |
14
(21) |
15
(15) |
|
16
(10) |
17
(7) |
18
(15) |
19
(20) |
20
(20) |
21
(14) |
22
(7) |
|
23
(2) |
24
(8) |
25
(15) |
26
(11) |
27
(6) |
28
(10) |
|
|
From: <sv...@va...> - 2014-02-20 23:20:20
|
Author: sewardj
Date: Thu Feb 20 23:20:08 2014
New Revision: 13824
Log:
Enable sys_ppoll, sys_kill, sys_socketpair.
Modified:
trunk/coregrind/m_syswrap/syswrap-arm64-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-arm64-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-arm64-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-arm64-linux.c Thu Feb 20 23:20:08 2014
@@ -896,7 +896,7 @@
GENXY(__NR_read, sys_read), // 63
GENX_(__NR_write, sys_write), // 64
GENX_(__NR_writev, sys_writev), // 66
-
+ LINXY(__NR_ppoll, sys_ppoll), // 73
LINX_(__NR_readlinkat, sys_readlinkat), // 78
// FIXME IS THIS CORRECT?
@@ -910,6 +910,7 @@
LINX_(__NR_set_robust_list, sys_set_robust_list), // 99
GENXY(__NR_nanosleep, sys_nanosleep), // 101
LINXY(__NR_clock_gettime, sys_clock_gettime), // 113
+ GENX_(__NR_kill, sys_kill), // 129
LINX_(__NR_tgkill, sys_tgkill), // 131 */Linux
LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 134
LINXY(__NR_rt_sigprocmask, sys_rt_sigprocmask), // 135
@@ -927,6 +928,7 @@
GENX_(__NR_getegid, sys_getegid), // 177
LINX_(__NR_gettid, sys_gettid), // 178
LINXY(__NR_socket, sys_socket), // 198
+ LINXY(__NR_socketpair, sys_socketpair), // 199
LINX_(__NR_connect, sys_connect), // 203
GENX_(__NR_brk, sys_brk), // 214
GENXY(__NR_munmap, sys_munmap), // 215
@@ -982,7 +984,6 @@
//ZZ
//ZZ // GENX_(__NR_ftime, sys_ni_syscall), // 35
//ZZ GENX_(__NR_sync, sys_sync), // 36
-//ZZ GENX_(__NR_kill, sys_kill), // 37
//ZZ GENX_(__NR_rename, sys_rename), // 38
//ZZ GENX_(__NR_mkdir, sys_mkdir), // 39
//ZZ
@@ -1265,7 +1266,6 @@
//ZZ LINXY(__NR_accept, sys_accept), // 285
//ZZ LINXY(__NR_getsockname, sys_getsockname), // 286
//ZZ LINXY(__NR_getpeername, sys_getpeername), // 287
-//ZZ LINXY(__NR_socketpair, sys_socketpair), // 288
//ZZ LINX_(__NR_send, sys_send),
//ZZ LINX_(__NR_sendto, sys_sendto), // 290
//ZZ LINXY(__NR_recv, sys_recv),
@@ -1340,7 +1340,6 @@
//ZZ // From here onwards, please ensure the numbers are correct.
//ZZ
//ZZ LINX_(__NR_pselect6, sys_pselect6), // 335
-//ZZ LINXY(__NR_ppoll, sys_ppoll), // 336
//ZZ
//ZZ LINXY(__NR_epoll_pwait, sys_epoll_pwait), // 346
//ZZ
|
|
From: <sv...@va...> - 2014-02-20 23:19:06
|
Author: sewardj
Date: Thu Feb 20 23:18:32 2014
New Revision: 13823
Log:
arm64-linux: make restarting of syscalls interrupted by signals work
Modified:
trunk/coregrind/m_syswrap/syswrap-main.c
trunk/include/vki/vki-arm64-linux.h
Modified: trunk/coregrind/m_syswrap/syswrap-main.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-main.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-main.c Thu Feb 20 23:18:32 2014
@@ -2046,8 +2046,25 @@
}
#elif defined(VGP_arm64_linux)
- // probably simplest to copy the ppc version
- I_die_here;
+ arch->vex.guest_PC -= 4; // sizeof(arm64 instr)
+
+ /* Make sure our caller is actually sane, and we're really backing
+ back over a syscall.
+
+ svc #0 == d4 00 00 01
+ */
+ {
+ UChar *p = (UChar *)arch->vex.guest_PC;
+
+ if (p[0] != 0x01 || p[1] != 0x00 || p[2] != 0x00 || p[3] != 0xD4)
+ VG_(message)(
+ Vg_DebugMsg,
+ "?! restarting over syscall at %#llx %02x %02x %02x %02x\n",
+ arch->vex.guest_PC + 0ULL, p[0], p[1], p[2], p[3]
+ );
+
+ vg_assert(p[0] == 0x01 && p[1] == 0x00 && p[2] == 0x00 && p[3] == 0xD4);
+ }
#elif defined(VGP_x86_darwin)
arch->vex.guest_EIP = arch->vex.guest_IP_AT_SYSCALL;
Modified: trunk/include/vki/vki-arm64-linux.h
==============================================================================
--- trunk/include/vki/vki-arm64-linux.h (original)
+++ trunk/include/vki/vki-arm64-linux.h Thu Feb 20 23:18:32 2014
@@ -515,15 +515,18 @@
typedef struct vki_user_fpsimd_state vki_elf_fpregset_t;
//----------------------------------------------------------------------
-// From linux-3.10.5/include/uapi/asm-generic/ucontext.h
+// From linux-3.10.5/arch/arm64/include/asm/ucontext.h
//----------------------------------------------------------------------
struct vki_ucontext {
- unsigned long uc_flags;
- struct vki_ucontext *uc_link;
- vki_stack_t uc_stack;
- struct vki_sigcontext uc_mcontext;
- vki_sigset_t uc_sigmask;
+ unsigned long uc_flags;
+ struct vki_ucontext *uc_link;
+ vki_stack_t uc_stack;
+ vki_sigset_t uc_sigmask;
+ /* glibc uses a 1024-bit sigset_t */
+ __vki_u8 __unused[1024 / 8 - sizeof(vki_sigset_t)];
+ /* last for future expansion */
+ struct vki_sigcontext uc_mcontext;
};
//ZZ //----------------------------------------------------------------------
|
|
From: Anil S. <ani...@li...> - 2014-02-20 17:49:44
|
Index: priv/guest_arm64_toIR.c
===================================================================
--- priv/guest_arm64_toIR.c (revision 2814)
+++ priv/guest_arm64_toIR.c (working copy)
@@ -621,6 +621,7 @@
#define OFFB_CC_NDEP offsetof(VexGuestARM64State,guest_CC_NDEP)
#define OFFB_TPIDR_EL0 offsetof(VexGuestARM64State,guest_TPIDR_EL0)
+#define OFFB_DCZID_EL0 offsetof(VexGuestARM64State,guest_DCZID_EL0)
#define OFFB_NRADDR offsetof(VexGuestARM64State,guest_NRADDR)
#define OFFB_Q0 offsetof(VexGuestARM64State,guest_Q0)
@@ -4289,6 +4290,25 @@
}
return True;
}
+
+ /* Only handles the case where the system register is DCZID_EL0.
+ 0xD51B00 0E0 Rt MSR dczid_el0, rT
+ 0xD53B00 0E0 Rt MRS rT, dczid_el0
+ */
+ if ( (INSN(31,0) & 0xFFFFFFE0) == 0xD51B00E0 /*MSR*/
+ || (INSN(31,0) & 0xFFFFFFE0) == 0xD53B00E0 /*MRS*/) {
+ Bool toSys = INSN(21,21) == 0;
+ UInt tt = INSN(4,0);
+ if (toSys) {
+ stmt( IRStmt_Put( OFFB_DCZID_EL0, getIReg64orZR(tt)) );
+ DIP("msr dczid_el0, %s\n", nameIReg64orZR(tt));
+ } else {
+ putIReg64orZR(tt, IRExpr_Get( OFFB_DCZID_EL0, Ity_I64 ));
+ DIP("mrs %s, dczid_el0\n", nameIReg64orZR(tt));
+ }
+ return True;
+ }
+
/* Cases for FPCR
0xD51B44 000 Rt MSR fpcr, rT
0xD53B44 000 Rt MSR rT, fpcr
Index: switchback/switchback.c
===================================================================
--- switchback/switchback.c (revision 2814)
+++ switchback/switchback.c (working copy)
@@ -388,7 +388,8 @@
assert(offsetof(VexGuestARM64State, guest_X30) == 16 + 8*30);
assert(offsetof(VexGuestARM64State, guest_SP) == 16 + 8*31);
assert(offsetof(VexGuestARM64State, guest_TPIDR_EL0) == 16 + 8*37);
- assert(offsetof(VexGuestARM64State, guest_Q0) == 16 + 8*38 + 16*0);
+ assert(offsetof(VexGuestARM64State, guest_DCZID_EL0) == 16 + 8*38);
+ assert(offsetof(VexGuestARM64State, guest_Q0) == 16 + 8*39 + 16*0);
HWord arg0 = (HWord)&gst;
HWord arg1 = LibVEX_GuestARM64_get_nzcv(&gst);
Index: pub/libvex_guest_arm64.h
===================================================================
--- pub/libvex_guest_arm64.h (revision 2814)
+++ pub/libvex_guest_arm64.h (working copy)
@@ -89,6 +89,10 @@
/* User-space thread register? */
ULong guest_TPIDR_EL0;
+ /* Cache block size written with byte values of 0 by the DC
+ ZVA, Data Cache Zero by Address, system instruction */
+ ULong guest_DCZID_EL0;
+
/* FP/SIMD state */
U128 guest_Q0;
U128 guest_Q1; |
Author: sewardj
Date: Thu Feb 20 17:43:38 2014
New Revision: 2823
Log:
First pass at implementation of load/store exclusive and
load/store exclusive w/ read-acquire/store-release:
LD{,A}X{R,RH,RB}
ST{,L}X{R,RH,RB}
Modified:
trunk/priv/guest_arm64_toIR.c
trunk/priv/host_arm64_defs.c
trunk/priv/host_arm64_defs.h
trunk/priv/host_arm64_isel.c
trunk/priv/ir_defs.c
trunk/pub/libvex_ir.h
Modified: trunk/priv/guest_arm64_toIR.c
==============================================================================
--- trunk/priv/guest_arm64_toIR.c (original)
+++ trunk/priv/guest_arm64_toIR.c Thu Feb 20 17:43:38 2014
@@ -575,6 +575,31 @@
return res;
}
+/* U-widen 8/16/32/64 bit int expr to 64. */
+static IRExpr* widenUto64 ( IRType srcTy, IRExpr* e )
+{
+ switch (srcTy) {
+ case Ity_I64: return e;
+ case Ity_I32: return unop(Iop_32Uto64, e);
+ case Ity_I16: return unop(Iop_16Uto64, e);
+ case Ity_I8: return unop(Iop_8Uto64, e);
+ default: vpanic("widenUto64(arm64)");
+ }
+}
+
+/* Narrow 64 bit int expr to 8/16/32/64. Clearly only some
+ of these combinations make sense. */
+static IRExpr* narrowFrom64 ( IRType dstTy, IRExpr* e )
+{
+ switch (dstTy) {
+ case Ity_I64: return e;
+ case Ity_I32: return unop(Iop_64to32, e);
+ case Ity_I16: return unop(Iop_64to16, e);
+ case Ity_I8: return unop(Iop_64to8, e);
+ default: vpanic("narrowFrom64(arm64)");
+ }
+}
+
/*------------------------------------------------------------*/
/*--- Helpers for accessing guest registers. ---*/
@@ -3990,25 +4015,19 @@
/* ---------- LD1/ST1 (single structure, post index) ---------- */
/* 31 23
- 0100 1100 1001 1111 0111 11 N T ST1 {vT.2d}, [xN|SP], #16
- 0100 1100 1101 1111 0111 11 N T LD1 {vT.2d}, [xN|SP], #16
- 0100 1100 1001 1111 0111 10 N T ST1 {vT.4s}, [xN|SP], #16
- 0100 1100 1101 1111 0111 10 N T LD1 {vT.4s}, [xN|SP], #16
- 0100 1100 1001 1111 0111 01 N T ST1 {vT.8h}, [xN|SP], #16
- 0100 1100 1101 1111 0111 01 N T LD1 {vT.8h}, [xN|SP], #16
- ..
+ 0100 1100 1001 1111 0111 11 N T ST1 {vT.2d}, [xN|SP], #16
+ 0100 1100 1101 1111 0111 11 N T LD1 {vT.2d}, [xN|SP], #16
+ 0100 1100 1001 1111 0111 10 N T ST1 {vT.4s}, [xN|SP], #16
+ 0100 1100 1101 1111 0111 10 N T LD1 {vT.4s}, [xN|SP], #16
+ 0100 1100 1001 1111 0111 01 N T ST1 {vT.8h}, [xN|SP], #16
+ 0100 1100 1101 1111 0111 01 N T LD1 {vT.8h}, [xN|SP], #16
+ 0100 1100 1001 1111 0111 00 N T ST1 {vT.16b}, [xN|SP], #16
0100 1100 1101 1111 0111 00 N T LD1 {vT.16b}, [xN|SP], #16
Note that #16 is implied and cannot be any other value.
FIXME does this assume that the host is little endian?
*/
- if ( (insn & 0xFFFFFC00) == 0x4C9F7C00 // ST1 {vT.2d}, [xN|SP], #16
- || (insn & 0xFFFFFC00) == 0x4CDF7C00 // LD1 {vT.2d}, [xN|SP], #16
- || (insn & 0xFFFFFC00) == 0x4C9F7800 // ST1 {vT.4s}, [xN|SP], #16
- || (insn & 0xFFFFFC00) == 0x4CDF7800 // LD1 {vT.4s}, [xN|SP], #16
- || (insn & 0xFFFFFC00) == 0x4C9F7400 // ST1 {vT.8h}, [xN|SP], #16
- || (insn & 0xFFFFFC00) == 0x4CDF7400 // LD1 {vT.8h}, [xN|SP], #16
- /* */
- || (insn & 0xFFFFFC00) == 0x4CDF7000 // LD1 {vT.16b}, [xN|SP], #16
+ if ( (insn & 0xFFFFF000) == 0x4CDF7000 // LD1 cases
+ || (insn & 0xFFFFF000) == 0x4C9F7000 // ST1 cases
) {
Bool isLD = INSN(22,22) == 1;
UInt rN = INSN(9,5);
@@ -4051,56 +4070,61 @@
return True;
}
- /* FIXME Temporary hacks to get through ld.so FIXME */
-
- /* -------------------- LD{A}XR -------------------- */
- /* FIXME: this is a hack; needs real atomicity stuff. */
- /* 31 29 20 19 9 4
- 1x(size) 001000010 1 1111 1 11111 n t LDAXR Rt, [Xn|SP]
- 1x(size) 001000010 1 1111 0 11111 n t LDXR Rt, [Xn|SP]
- */
- if (INSN(29,20) == BITS10(0,0,1,0,0,0,0,1,0,1)
- && (INSN(19,10) == BITS10(1,1,1,1,1,1,1,1,1,1)
- || INSN(19,10) == BITS10(1,1,1,1,0,1,1,1,1,1))
- && INSN(31,31) == 1) {
- Bool is64 = INSN(30,30) == 1;
- Bool isA = INSN(15,15) == 1;
- UInt nn = INSN(9,5);
- UInt tt = INSN(4,0);
- if (is64) {
- putIReg64orZR(tt, loadLE(Ity_I64, getIReg64orSP(nn)));
- } else {
- putIReg32orZR(tt, loadLE(Ity_I32, getIReg64orSP(nn)));
- }
- DIP("ld%sxr %s, [%s]\n",
- isA ? "s" : "", nameIRegOrZR(is64, tt), nameIReg64orSP(nn));
- return True;
- }
-
- /* -------------------- ST{L}XR -------------------- */
- /* FIXME: this is a hack; needs real atomicity stuff. */
- /* 31 29 20 15 14 9 4
- 1x(size) 001000000 s 0 11111 n t STXR Ws, Rt, [Xn|SP]
- 1x(size) 001000000 s 1 11111 n t STLXR Ws, Rt, [Xn|SP]
- with the result coding that Ws == 0 iff the store succeeded
- */
- if (INSN(29,21) == BITS9(0,0,1,0,0,0,0,0,0)
- && INSN(14,10) == BITS5(1,1,1,1,1) && INSN(31,31) == 1) {
- Bool is64 = INSN(30,30) == 1;
- UInt ss = INSN(20,16);
- Bool isL = INSN(15,15) == 1;
- UInt nn = INSN(9,5);
- UInt tt = INSN(4,0);
- if (is64) {
- storeLE(getIReg64orSP(nn), getIReg64orZR(tt));
- } else {
- storeLE(getIReg64orSP(nn), getIReg32orZR(tt));
- }
- putIReg32orZR(ss, mkU32(0));
- DIP("st%sxr %s, %s, [%s]\n",
- isL ? "s" : "",
- nameIReg32orZR(ss), nameIRegOrZR(is64, tt), nameIReg64orSP(nn));
- return True;
+ /* ------------------ LD{,A}X{R,RH,RB} ------------------ */
+ /* ------------------ ST{,L}X{R,RH,RB} ------------------ */
+ /* 31 29 23 20 14 9 4
+ sz 001000 010 11111 0 11111 n t LDX{R,RH,RB} Rt, [Xn|SP]
+ sz 001000 010 11111 1 11111 n t LDAX{R,RH,RB} Rt, [Xn|SP]
+ sz 001000 000 s 0 11111 n t STX{R,RH,RB} Ws, Rt, [Xn|SP]
+ sz 001000 000 s 1 11111 n t STLX{R,RH,RB} Ws, Rt, [Xn|SP]
+ */
+ if (INSN(29,23) == BITS7(0,0,1,0,0,0,0)
+ && (INSN(23,21) & BITS3(1,0,1)) == BITS3(0,0,0)
+ && INSN(14,10) == BITS5(1,1,1,1,1)) {
+ UInt szBlg2 = INSN(31,30);
+ Bool isLD = INSN(22,22) == 1;
+ Bool isAcqOrRel = INSN(15,15) == 1;
+ UInt ss = INSN(20,16);
+ UInt nn = INSN(9,5);
+ UInt tt = INSN(4,0);
+
+ vassert(szBlg2 < 4);
+ UInt szB = 1 << szBlg2; /* 1, 2, 4 or 8 */
+ IRType ty = integerIRTypeOfSize(szB);
+ const HChar* suffix[4] = { "rb", "rh", "r", "r" };
+
+ IRTemp ea = newTemp(Ity_I64);
+ assign(ea, getIReg64orSP(nn));
+ /* FIXME generate check that ea is szB-aligned */
+
+ if (isLD && ss == BITS5(1,1,1,1,1)) {
+ IRTemp res = newTemp(ty);
+ stmt(IRStmt_LLSC(Iend_LE, res, mkexpr(ea), NULL/*LL*/));
+ putIReg64orZR(tt, widenUto64(ty, mkexpr(res)));
+ if (isAcqOrRel) {
+ stmt(IRStmt_MBE(Imbe_Fence));
+ }
+ DIP("ld%sx%s %s, [%s]\n", isAcqOrRel ? "a" : "", suffix[szBlg2],
+ nameIRegOrZR(szB == 8, tt), nameIReg64orSP(nn));
+ return True;
+ }
+ if (!isLD) {
+ if (isAcqOrRel) {
+ stmt(IRStmt_MBE(Imbe_Fence));
+ }
+ IRTemp res = newTemp(Ity_I1);
+ IRExpr* data = narrowFrom64(ty, getIReg64orZR(tt));
+ stmt(IRStmt_LLSC(Iend_LE, res, mkexpr(ea), data));
+ /* IR semantics: res is 1 if store succeeds, 0 if it fails.
+ Need to set rS to 1 on failure, 0 on success. */
+ putIReg64orZR(ss, binop(Iop_Xor64, unop(Iop_1Uto64, mkexpr(res)),
+ mkU64(1)));
+ DIP("st%sx%s %s, %s, [%s]\n", isAcqOrRel ? "a" : "", suffix[szBlg2],
+ nameIRegOrZR(False, ss),
+ nameIRegOrZR(szB == 8, tt), nameIReg64orSP(nn));
+ return True;
+ }
+ /* else fall through */
}
vex_printf("ARM64 front end: load_store\n");
@@ -4307,8 +4331,8 @@
return True;
}
/* Cases for FPSR
- 0xD51B44 001 Rt MSR fpcr, rT
- 0xD53B44 001 Rt MSR rT, fpcr
+ 0xD51B44 001 Rt MSR fpsr, rT
+ 0xD53B44 001 Rt MSR rT, fpsr
*/
if ( (INSN(31,0) & 0xFFFFFFE0) == 0xD51B4420 /*MSR*/
|| (INSN(31,0) & 0xFFFFFFE0) == 0xD53B4420 /*MRS*/) {
Modified: trunk/priv/host_arm64_defs.c
==============================================================================
--- trunk/priv/host_arm64_defs.c (original)
+++ trunk/priv/host_arm64_defs.c Thu Feb 20 17:43:38 2014
@@ -1442,24 +1442,28 @@
i->ARM64in.Mul.op = op;
return i;
}
-//ZZ ARMInstr* ARMInstr_Mul ( ARMMulOp op ) {
-//ZZ ARMInstr* i = LibVEX_Alloc(sizeof(ARMInstr));
-//ZZ i->tag = ARMin_Mul;
-//ZZ i->ARMin.Mul.op = op;
-//ZZ return i;
-//ZZ }
-//ZZ ARMInstr* ARMInstr_LdrEX ( Int szB ) {
-//ZZ ARMInstr* i = LibVEX_Alloc(sizeof(ARMInstr));
-//ZZ i->tag = ARMin_LdrEX;
-//ZZ i->ARMin.LdrEX.szB = szB;
-//ZZ vassert(szB == 8 || szB == 4 || szB == 2 || szB == 1);
-//ZZ return i;
-//ZZ }
-//ZZ ARMInstr* ARMInstr_StrEX ( Int szB ) {
-//ZZ ARMInstr* i = LibVEX_Alloc(sizeof(ARMInstr));
-//ZZ i->tag = ARMin_StrEX;
-//ZZ i->ARMin.StrEX.szB = szB;
-//ZZ vassert(szB == 8 || szB == 4 || szB == 2 || szB == 1);
+ARM64Instr* ARM64Instr_LdrEX ( Int szB ) {
+ ARM64Instr* i = LibVEX_Alloc(sizeof(ARM64Instr));
+ i->tag = ARM64in_LdrEX;
+ i->ARM64in.LdrEX.szB = szB;
+ vassert(szB == 8 || szB == 4 || szB == 2 || szB == 1);
+ return i;
+}
+ARM64Instr* ARM64Instr_StrEX ( Int szB ) {
+ ARM64Instr* i = LibVEX_Alloc(sizeof(ARM64Instr));
+ i->tag = ARM64in_StrEX;
+ i->ARM64in.StrEX.szB = szB;
+ vassert(szB == 8 || szB == 4 || szB == 2 || szB == 1);
+ return i;
+}
+ARM64Instr* ARM64Instr_MFence ( void ) {
+ ARM64Instr* i = LibVEX_Alloc(sizeof(ARM64Instr));
+ i->tag = ARM64in_MFence;
+ return i;
+}
+//ZZ ARM64Instr* ARM64Instr_CLREX( void ) {
+//ZZ ARM64Instr* i = LibVEX_Alloc(sizeof(ARM64Instr));
+//ZZ i->tag = ARM64in_CLREX;
//ZZ return i;
//ZZ }
ARM64Instr* ARM64Instr_VLdStS ( Bool isLoad, HReg sD, HReg rN, UInt uimm12 ) {
@@ -1674,16 +1678,6 @@
//ZZ i->ARMin.VCvtID.src = src;
//ZZ return i;
//ZZ }
-//ZZ ARMInstr* ARMInstr_MFence ( void ) {
-//ZZ ARMInstr* i = LibVEX_Alloc(sizeof(ARMInstr));
-//ZZ i->tag = ARMin_MFence;
-//ZZ return i;
-//ZZ }
-//ZZ ARMInstr* ARMInstr_CLREX( void ) {
-//ZZ ARMInstr* i = LibVEX_Alloc(sizeof(ARMInstr));
-//ZZ i->tag = ARMin_CLREX;
-//ZZ return i;
-//ZZ }
//ZZ ARMInstr* ARMInstr_NLdStD ( Bool isLoad, HReg dD, ARMAModeN *amode ) {
//ZZ ARMInstr* i = LibVEX_Alloc(sizeof(ARMInstr));
//ZZ i->tag = ARMin_NLdStD;
@@ -2061,28 +2055,37 @@
vex_printf(", ");
ppHRegARM64(i->ARM64in.Mul.argR);
return;
-//ZZ case ARMin_LdrEX: {
-//ZZ const HChar* sz = "";
-//ZZ switch (i->ARMin.LdrEX.szB) {
-//ZZ case 1: sz = "b"; break; case 2: sz = "h"; break;
-//ZZ case 8: sz = "d"; break; case 4: break;
-//ZZ default: vassert(0);
-//ZZ }
-//ZZ vex_printf("ldrex%s %sr2, [r4]",
-//ZZ sz, i->ARMin.LdrEX.szB == 8 ? "r3:" : "");
-//ZZ return;
-//ZZ }
-//ZZ case ARMin_StrEX: {
-//ZZ const HChar* sz = "";
-//ZZ switch (i->ARMin.StrEX.szB) {
-//ZZ case 1: sz = "b"; break; case 2: sz = "h"; break;
-//ZZ case 8: sz = "d"; break; case 4: break;
-//ZZ default: vassert(0);
-//ZZ }
-//ZZ vex_printf("strex%s r0, %sr2, [r4]",
-//ZZ sz, i->ARMin.StrEX.szB == 8 ? "r3:" : "");
+
+ case ARM64in_LdrEX: {
+ const HChar* sz = " ";
+ switch (i->ARM64in.LdrEX.szB) {
+ case 1: sz = "b"; break;
+ case 2: sz = "h"; break;
+ case 4: case 8: break;
+ default: vassert(0);
+ }
+ vex_printf("ldxr%s %c2, [x4]",
+ sz, i->ARM64in.LdrEX.szB == 8 ? 'x' : 'w');
+ return;
+ }
+ case ARM64in_StrEX: {
+ const HChar* sz = " ";
+ switch (i->ARM64in.StrEX.szB) {
+ case 1: sz = "b"; break;
+ case 2: sz = "h"; break;
+ case 4: case 8: break;
+ default: vassert(0);
+ }
+ vex_printf("stxr%s w0, %c2, [x4]",
+ sz, i->ARM64in.StrEX.szB == 8 ? 'x' : 'w');
+ return;
+ }
+ case ARM64in_MFence:
+ vex_printf("(mfence) dsb sy; dmb sy; isb");
+ return;
+//ZZ case ARM64in_CLREX:
+//ZZ vex_printf("clrex");
//ZZ return;
-//ZZ }
case ARM64in_VLdStS:
if (i->ARM64in.VLdStS.isLoad) {
vex_printf("ldr ");
@@ -2319,12 +2322,6 @@
//ZZ ppHRegARM(i->ARMin.VCvtID.src);
//ZZ return;
//ZZ }
-//ZZ case ARMin_MFence:
-//ZZ vex_printf("(mfence) dsb sy; dmb sy; isb");
-//ZZ return;
-//ZZ case ARMin_CLREX:
-//ZZ vex_printf("clrex");
-//ZZ return;
//ZZ case ARMin_NLdStD:
//ZZ if (i->ARMin.NLdStD.isLoad)
//ZZ vex_printf("vld1.32 {");
@@ -2641,18 +2638,18 @@
addHRegUse(u, HRmRead, i->ARM64in.Mul.argL);
addHRegUse(u, HRmRead, i->ARM64in.Mul.argR);
return;
-//ZZ case ARMin_LdrEX:
-//ZZ addHRegUse(u, HRmRead, hregARM_R4());
-//ZZ addHRegUse(u, HRmWrite, hregARM_R2());
-//ZZ if (i->ARMin.LdrEX.szB == 8)
-//ZZ addHRegUse(u, HRmWrite, hregARM_R3());
-//ZZ return;
-//ZZ case ARMin_StrEX:
-//ZZ addHRegUse(u, HRmRead, hregARM_R4());
-//ZZ addHRegUse(u, HRmWrite, hregARM_R0());
-//ZZ addHRegUse(u, HRmRead, hregARM_R2());
-//ZZ if (i->ARMin.StrEX.szB == 8)
-//ZZ addHRegUse(u, HRmRead, hregARM_R3());
+ case ARM64in_LdrEX:
+ addHRegUse(u, HRmRead, hregARM64_X4());
+ addHRegUse(u, HRmWrite, hregARM64_X2());
+ return;
+ case ARM64in_StrEX:
+ addHRegUse(u, HRmRead, hregARM64_X4());
+ addHRegUse(u, HRmWrite, hregARM64_X0());
+ addHRegUse(u, HRmRead, hregARM64_X2());
+ return;
+ case ARM64in_MFence:
+ return;
+//ZZ case ARMin_CLREX:
//ZZ return;
case ARM64in_VLdStS:
addHRegUse(u, HRmRead, i->ARM64in.VLdStS.rN);
@@ -2781,10 +2778,6 @@
//ZZ addHRegUse(u, HRmWrite, i->ARMin.VCvtID.dst);
//ZZ addHRegUse(u, HRmRead, i->ARMin.VCvtID.src);
//ZZ return;
-//ZZ case ARMin_MFence:
-//ZZ return;
-//ZZ case ARMin_CLREX:
-//ZZ return;
//ZZ case ARMin_NLdStD:
//ZZ if (i->ARMin.NLdStD.isLoad)
//ZZ addHRegUse(u, HRmWrite, i->ARMin.NLdStD.dD);
@@ -2954,11 +2947,13 @@
i->ARM64in.Mul.argL = lookupHRegRemap(m, i->ARM64in.Mul.argL);
i->ARM64in.Mul.argR = lookupHRegRemap(m, i->ARM64in.Mul.argR);
break;
-//ZZ case ARMin_Mul:
-//ZZ return;
-//ZZ case ARMin_LdrEX:
-//ZZ return;
-//ZZ case ARMin_StrEX:
+ case ARM64in_LdrEX:
+ return;
+ case ARM64in_StrEX:
+ return;
+ case ARM64in_MFence:
+ return;
+//ZZ case ARMin_CLREX:
//ZZ return;
case ARM64in_VLdStS:
i->ARM64in.VLdStS.sD = lookupHRegRemap(m, i->ARM64in.VLdStS.sD);
@@ -3058,10 +3053,6 @@
//ZZ i->ARMin.VCvtID.dst = lookupHRegRemap(m, i->ARMin.VCvtID.dst);
//ZZ i->ARMin.VCvtID.src = lookupHRegRemap(m, i->ARMin.VCvtID.src);
//ZZ return;
-//ZZ case ARMin_MFence:
-//ZZ return;
-//ZZ case ARMin_CLREX:
-//ZZ return;
//ZZ case ARMin_NLdStD:
//ZZ i->ARMin.NLdStD.dD = lookupHRegRemap(m, i->ARMin.NLdStD.dD);
//ZZ mapRegs_ARMAModeN(m, i->ARMin.NLdStD.amode);
@@ -4564,36 +4555,48 @@
}
goto bad;
}
-//ZZ case ARMin_LdrEX: {
-//ZZ /* E1D42F9F ldrexb r2, [r4]
-//ZZ E1F42F9F ldrexh r2, [r4]
-//ZZ E1942F9F ldrex r2, [r4]
-//ZZ E1B42F9F ldrexd r2, r3, [r4]
-//ZZ */
-//ZZ switch (i->ARMin.LdrEX.szB) {
-//ZZ case 1: *p++ = 0xE1D42F9F; goto done;
-//ZZ case 2: *p++ = 0xE1F42F9F; goto done;
-//ZZ case 4: *p++ = 0xE1942F9F; goto done;
-//ZZ case 8: *p++ = 0xE1B42F9F; goto done;
-//ZZ default: break;
-//ZZ }
-//ZZ goto bad;
-//ZZ }
-//ZZ case ARMin_StrEX: {
-//ZZ /* E1C40F92 strexb r0, r2, [r4]
-//ZZ E1E40F92 strexh r0, r2, [r4]
-//ZZ E1840F92 strex r0, r2, [r4]
-//ZZ E1A40F92 strexd r0, r2, r3, [r4]
-//ZZ */
-//ZZ switch (i->ARMin.StrEX.szB) {
-//ZZ case 1: *p++ = 0xE1C40F92; goto done;
-//ZZ case 2: *p++ = 0xE1E40F92; goto done;
-//ZZ case 4: *p++ = 0xE1840F92; goto done;
-//ZZ case 8: *p++ = 0xE1A40F92; goto done;
-//ZZ default: break;
-//ZZ }
-//ZZ goto bad;
-//ZZ }
+ case ARM64in_LdrEX: {
+ /* 085F7C82 ldxrb w2, [x4]
+ 485F7C82 ldxrh w2, [x4]
+ 885F7C82 ldxr w2, [x4]
+ C85F7C82 ldxr x2, [x4]
+ */
+ switch (i->ARM64in.LdrEX.szB) {
+ case 1: *p++ = 0x085F7C82; goto done;
+ case 2: *p++ = 0x485F7C82; goto done;
+ case 4: *p++ = 0x885F7C82; goto done;
+ case 8: *p++ = 0xC85F7C82; goto done;
+ default: break;
+ }
+ goto bad;
+ }
+ case ARM64in_StrEX: {
+ /* 08007C82 stxrb w0, w2, [x4]
+ 48007C82 stxrh w0, w2, [x4]
+ 88007C82 stxr w0, w2, [x4]
+ C8007C82 stxr w0, x2, [x4]
+ */
+ switch (i->ARM64in.StrEX.szB) {
+ case 1: *p++ = 0x08007C82; goto done;
+ case 2: *p++ = 0x48007C82; goto done;
+ case 4: *p++ = 0x88007C82; goto done;
+ case 8: *p++ = 0xC8007C82; goto done;
+ default: break;
+ }
+ goto bad;
+ }
+ case ARM64in_MFence: {
+ *p++ = 0xD5033F9F; /* DSB sy */
+ *p++ = 0xD5033FBF; /* DMB sy */
+ *p++ = 0xD5033FDF; /* ISB */
+ goto done;
+ }
+ //case ARM64in_CLREX: {
+ // //ATC, but believed to be correct
+ // goto bad;
+ // *p++ = 0xD5033F5F; /* clrex */
+ // goto done;
+ //}
case ARM64in_VLdStS: {
/* 10 111101 01 imm12 n t LDR St, [Xn|SP, #imm12 * 4]
10 111101 00 imm12 n t STR St, [Xn|SP, #imm12 * 4]
@@ -5257,22 +5260,6 @@
//ZZ /*UNREACHED*/
//ZZ vassert(0);
//ZZ }
-//ZZ case ARMin_MFence: {
-//ZZ // It's not clear (to me) how these relate to the ARMv7
-//ZZ // versions, so let's just use the v7 versions as they
-//ZZ // are at least well documented.
-//ZZ //*p++ = 0xEE070F9A; /* mcr 15,0,r0,c7,c10,4 (DSB) */
-//ZZ //*p++ = 0xEE070FBA; /* mcr 15,0,r0,c7,c10,5 (DMB) */
-//ZZ //*p++ = 0xEE070F95; /* mcr 15,0,r0,c7,c5,4 (ISB) */
-//ZZ *p++ = 0xF57FF04F; /* DSB sy */
-//ZZ *p++ = 0xF57FF05F; /* DMB sy */
-//ZZ *p++ = 0xF57FF06F; /* ISB */
-//ZZ goto done;
-//ZZ }
-//ZZ case ARMin_CLREX: {
-//ZZ *p++ = 0xF57FF01F; /* clrex */
-//ZZ goto done;
-//ZZ }
//ZZ case ARMin_NLdStD: {
//ZZ UInt regD = dregNo(i->ARMin.NLdStD.dD);
//ZZ UInt regN, regM;
Modified: trunk/priv/host_arm64_defs.h
==============================================================================
--- trunk/priv/host_arm64_defs.h (original)
+++ trunk/priv/host_arm64_defs.h Thu Feb 20 17:43:38 2014
@@ -525,8 +525,10 @@
ARM64in_AddToSP, /* move SP by small, signed constant */
ARM64in_FromSP, /* move SP to integer register */
ARM64in_Mul,
-//ZZ ARMin_LdrEX,
-//ZZ ARMin_StrEX,
+ ARM64in_LdrEX,
+ ARM64in_StrEX,
+ ARM64in_MFence,
+//ZZ ARMin_CLREX,
/* ARM64in_V*: scalar ops involving vector registers */
ARM64in_VLdStS, /* 32-bit FP load/store, with imm offset */
ARM64in_VLdStD, /* 64-bit FP load/store, with imm offset */
@@ -552,8 +554,6 @@
//ZZ ARMin_VXferD,
//ZZ ARMin_VXferS,
//ZZ ARMin_VCvtID,
-//ZZ ARMin_MFence,
-//ZZ ARMin_CLREX,
//ZZ /* Neon */
//ZZ ARMin_NLdStD,
//ZZ ARMin_NUnary,
@@ -712,22 +712,23 @@
HReg argR;
ARM64MulOp op;
} Mul;
-//ZZ /* LDREX{,H,B} r2, [r4] and
-//ZZ LDREXD r2, r3, [r4] (on LE hosts, transferred value is r3:r2)
-//ZZ Again, hardwired registers since this is not performance
-//ZZ critical, and there are possibly constraints on the
-//ZZ registers that we can't express in the register allocator.*/
-//ZZ struct {
-//ZZ Int szB; /* 1, 2, 4 or 8 */
-//ZZ } LdrEX;
-//ZZ /* STREX{,H,B} r0, r2, [r4] and
-//ZZ STREXD r0, r2, r3, [r4] (on LE hosts, transferred value is r3:r2)
-//ZZ r0 = SC( [r4] = r2 ) (8, 16, 32 bit transfers)
-//ZZ r0 = SC( [r4] = r3:r2) (64 bit transfers)
-//ZZ Ditto comment re fixed registers. */
+ /* LDXR{,H,B} x2, [x4] */
+ struct {
+ Int szB; /* 1, 2, 4 or 8 */
+ } LdrEX;
+ /* STXR{,H,B} w0, x2, [x4] */
+ struct {
+ Int szB; /* 1, 2, 4 or 8 */
+ } StrEX;
+ /* Mem fence. An insn which fences all loads and stores as
+ much as possible before continuing. On ARM64 we emit the
+ sequence "dsb sy ; dmb sy ; isb sy", which is probably
+ total nuclear overkill, but better safe than sorry. */
+ struct {
+ } MFence;
+//ZZ /* A CLREX instruction. */
//ZZ struct {
-//ZZ Int szB; /* 1, 2, 4 or 8 */
-//ZZ } StrEX;
+//ZZ } CLREX;
/* --- INSTRUCTIONS INVOLVING VECTOR REGISTERS --- */
/* 32-bit Fp load/store */
struct {
@@ -882,20 +883,6 @@
//ZZ HReg dst;
//ZZ HReg src;
//ZZ } VCvtID;
-//ZZ /* Mem fence. An insn which fences all loads and stores as
-//ZZ much as possible before continuing. On ARM we emit the
-//ZZ sequence
-//ZZ mcr 15,0,r0,c7,c10,4 (DSB)
-//ZZ mcr 15,0,r0,c7,c10,5 (DMB)
-//ZZ mcr 15,0,r0,c7,c5,4 (ISB)
-//ZZ which is probably total overkill, but better safe than
-//ZZ sorry.
-//ZZ */
-//ZZ struct {
-//ZZ } MFence;
-//ZZ /* A CLREX instruction. */
-//ZZ struct {
-//ZZ } CLREX;
//ZZ /* Neon data processing instruction: 3 registers of the same
//ZZ length */
//ZZ struct {
@@ -1020,10 +1007,10 @@
extern ARM64Instr* ARM64Instr_FromSP ( HReg dst );
extern ARM64Instr* ARM64Instr_Mul ( HReg dst, HReg argL, HReg argR,
ARM64MulOp op );
-
-//ZZ extern ARMInstr* ARMInstr_Mul ( ARMMulOp op );
-//ZZ extern ARMInstr* ARMInstr_LdrEX ( Int szB );
-//ZZ extern ARMInstr* ARMInstr_StrEX ( Int szB );
+extern ARM64Instr* ARM64Instr_LdrEX ( Int szB );
+extern ARM64Instr* ARM64Instr_StrEX ( Int szB );
+extern ARM64Instr* ARM64Instr_MFence ( void );
+//ZZ extern ARMInstr* ARMInstr_CLREX ( void );
extern ARM64Instr* ARM64Instr_VLdStS ( Bool isLoad, HReg sD, HReg rN,
UInt uimm12 /* 0 .. 16380, 0 % 4 */ );
extern ARM64Instr* ARM64Instr_VLdStD ( Bool isLoad, HReg dD, HReg rN,
@@ -1052,8 +1039,6 @@
//ZZ extern ARMInstr* ARMInstr_VXferS ( Bool toS, HReg fD, HReg rLo );
//ZZ extern ARMInstr* ARMInstr_VCvtID ( Bool iToD, Bool syned,
//ZZ HReg dst, HReg src );
-//ZZ extern ARMInstr* ARMInstr_MFence ( void );
-//ZZ extern ARMInstr* ARMInstr_CLREX ( void );
//ZZ extern ARMInstr* ARMInstr_NLdStD ( Bool isLoad, HReg, ARMAModeN* );
//ZZ extern ARMInstr* ARMInstr_NUnary ( ARMNeonUnOp, HReg, HReg, UInt, Bool );
//ZZ extern ARMInstr* ARMInstr_NUnaryS ( ARMNeonUnOpS, ARMNRS*, ARMNRS*,
Modified: trunk/priv/host_arm64_isel.c
==============================================================================
--- trunk/priv/host_arm64_isel.c (original)
+++ trunk/priv/host_arm64_isel.c Thu Feb 20 17:43:38 2014
@@ -2157,17 +2157,19 @@
//ZZ }
//ZZ return rLo;
//ZZ }
-//ZZ
-//ZZ case Iop_1Uto32:
-//ZZ /* 1Uto32(tmp). Since I1 values generated into registers
-//ZZ are guaranteed to have value either only zero or one,
-//ZZ we can simply return the value of the register in this
-//ZZ case. */
-//ZZ if (e->Iex.Unop.arg->tag == Iex_RdTmp) {
-//ZZ HReg dst = lookupIRTemp(env, e->Iex.Unop.arg->Iex.RdTmp.tmp);
-//ZZ return dst;
-//ZZ }
-//ZZ /* else fall through */
+
+ case Iop_1Uto64:
+ /* 1Uto64(tmp). */
+ if (e->Iex.Unop.arg->tag == Iex_RdTmp) {
+ ARM64RIL* one = mb_mkARM64RIL_I(1);
+ HReg src = lookupIRTemp(env, e->Iex.Unop.arg->Iex.RdTmp.tmp);
+ HReg dst = newVRegI(env);
+ vassert(one);
+ addInstr(env, ARM64Instr_Logic(dst, src, one, ARM64lo_AND));
+ return dst;
+ }
+ /* else fall through */
+ break; // RM when 1Uto8 is implemented
//ZZ case Iop_1Uto8: {
//ZZ HReg dst = newVRegI(env);
//ZZ ARMCondCode cond = iselCondCode(env, e->Iex.Unop.arg);
@@ -6611,109 +6613,83 @@
break;
}
-//ZZ /* --------- Load Linked and Store Conditional --------- */
-//ZZ case Ist_LLSC: {
-//ZZ if (stmt->Ist.LLSC.storedata == NULL) {
-//ZZ /* LL */
-//ZZ IRTemp res = stmt->Ist.LLSC.result;
-//ZZ IRType ty = typeOfIRTemp(env->type_env, res);
-//ZZ if (ty == Ity_I32 || ty == Ity_I16 || ty == Ity_I8) {
-//ZZ Int szB = 0;
-//ZZ HReg r_dst = lookupIRTemp(env, res);
-//ZZ HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
-//ZZ switch (ty) {
-//ZZ case Ity_I8: szB = 1; break;
-//ZZ case Ity_I16: szB = 2; break;
-//ZZ case Ity_I32: szB = 4; break;
-//ZZ default: vassert(0);
-//ZZ }
-//ZZ addInstr(env, mk_iMOVds_RR(hregARM_R4(), raddr));
-//ZZ addInstr(env, ARMInstr_LdrEX(szB));
-//ZZ addInstr(env, mk_iMOVds_RR(r_dst, hregARM_R2()));
-//ZZ return;
-//ZZ }
-//ZZ if (ty == Ity_I64) {
-//ZZ HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
-//ZZ addInstr(env, mk_iMOVds_RR(hregARM_R4(), raddr));
-//ZZ addInstr(env, ARMInstr_LdrEX(8));
-//ZZ /* Result is in r3:r2. On a non-NEON capable CPU, we must
-//ZZ move it into a result register pair. On a NEON capable
-//ZZ CPU, the result register will be a 64 bit NEON
-//ZZ register, so we must move it there instead. */
-//ZZ if (env->hwcaps & VEX_HWCAPS_ARM_NEON) {
-//ZZ HReg dst = lookupIRTemp(env, res);
-//ZZ addInstr(env, ARMInstr_VXferD(True, dst, hregARM_R3(),
-//ZZ hregARM_R2()));
-//ZZ } else {
-//ZZ HReg r_dst_hi, r_dst_lo;
-//ZZ lookupIRTemp64(&r_dst_hi, &r_dst_lo, env, res);
-//ZZ addInstr(env, mk_iMOVds_RR(r_dst_lo, hregARM_R2()));
-//ZZ addInstr(env, mk_iMOVds_RR(r_dst_hi, hregARM_R3()));
-//ZZ }
-//ZZ return;
-//ZZ }
-//ZZ /*NOTREACHED*/
-//ZZ vassert(0);
-//ZZ } else {
-//ZZ /* SC */
-//ZZ IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.LLSC.storedata);
-//ZZ if (tyd == Ity_I32 || tyd == Ity_I16 || tyd == Ity_I8) {
-//ZZ Int szB = 0;
-//ZZ HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata);
-//ZZ HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
-//ZZ switch (tyd) {
-//ZZ case Ity_I8: szB = 1; break;
-//ZZ case Ity_I16: szB = 2; break;
-//ZZ case Ity_I32: szB = 4; break;
-//ZZ default: vassert(0);
-//ZZ }
-//ZZ addInstr(env, mk_iMOVds_RR(hregARM_R2(), rD));
-//ZZ addInstr(env, mk_iMOVds_RR(hregARM_R4(), rA));
-//ZZ addInstr(env, ARMInstr_StrEX(szB));
-//ZZ } else {
-//ZZ vassert(tyd == Ity_I64);
-//ZZ /* This is really ugly. There is no is/is-not NEON
-//ZZ decision akin to the case for LL, because iselInt64Expr
-//ZZ fudges this for us, and always gets the result into two
-//ZZ GPRs even if this means moving it from a NEON
-//ZZ register. */
-//ZZ HReg rDhi, rDlo;
-//ZZ iselInt64Expr(&rDhi, &rDlo, env, stmt->Ist.LLSC.storedata);
-//ZZ HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
-//ZZ addInstr(env, mk_iMOVds_RR(hregARM_R2(), rDlo));
-//ZZ addInstr(env, mk_iMOVds_RR(hregARM_R3(), rDhi));
-//ZZ addInstr(env, mk_iMOVds_RR(hregARM_R4(), rA));
-//ZZ addInstr(env, ARMInstr_StrEX(8));
-//ZZ }
-//ZZ /* now r0 is 1 if failed, 0 if success. Change to IR
-//ZZ conventions (0 is fail, 1 is success). Also transfer
-//ZZ result to r_res. */
-//ZZ IRTemp res = stmt->Ist.LLSC.result;
-//ZZ IRType ty = typeOfIRTemp(env->type_env, res);
-//ZZ HReg r_res = lookupIRTemp(env, res);
-//ZZ ARMRI84* one = ARMRI84_I84(1,0);
-//ZZ vassert(ty == Ity_I1);
-//ZZ addInstr(env, ARMInstr_Alu(ARMalu_XOR, r_res, hregARM_R0(), one));
-//ZZ /* And be conservative -- mask off all but the lowest bit */
-//ZZ addInstr(env, ARMInstr_Alu(ARMalu_AND, r_res, r_res, one));
-//ZZ return;
-//ZZ }
-//ZZ break;
-//ZZ }
-//ZZ
-//ZZ /* --------- MEM FENCE --------- */
-//ZZ case Ist_MBE:
-//ZZ switch (stmt->Ist.MBE.event) {
-//ZZ case Imbe_Fence:
-//ZZ addInstr(env, ARMInstr_MFence());
-//ZZ return;
+ /* --------- Load Linked and Store Conditional --------- */
+ case Ist_LLSC: {
+ if (stmt->Ist.LLSC.storedata == NULL) {
+ /* LL */
+ IRTemp res = stmt->Ist.LLSC.result;
+ IRType ty = typeOfIRTemp(env->type_env, res);
+ if (ty == Ity_I64 || ty == Ity_I32
+ || ty == Ity_I16 || ty == Ity_I8) {
+ Int szB = 0;
+ HReg r_dst = lookupIRTemp(env, res);
+ HReg raddr = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
+ switch (ty) {
+ case Ity_I8: szB = 1; break;
+ case Ity_I16: szB = 2; break;
+ case Ity_I32: szB = 4; break;
+ case Ity_I64: szB = 8; break;
+ default: vassert(0);
+ }
+ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), raddr));
+ addInstr(env, ARM64Instr_LdrEX(szB));
+ addInstr(env, ARM64Instr_MovI(r_dst, hregARM64_X2()));
+ return;
+ }
+ goto stmt_fail;
+ } else {
+ /* SC */
+ IRType tyd = typeOfIRExpr(env->type_env, stmt->Ist.LLSC.storedata);
+ if (tyd == Ity_I64 || tyd == Ity_I32
+ || tyd == Ity_I16 || tyd == Ity_I8) {
+ Int szB = 0;
+ HReg rD = iselIntExpr_R(env, stmt->Ist.LLSC.storedata);
+ HReg rA = iselIntExpr_R(env, stmt->Ist.LLSC.addr);
+ switch (tyd) {
+ case Ity_I8: szB = 1; break;
+ case Ity_I16: szB = 2; break;
+ case Ity_I32: szB = 4; break;
+ case Ity_I64: szB = 8; break;
+ default: vassert(0);
+ }
+ addInstr(env, ARM64Instr_MovI(hregARM64_X2(), rD));
+ addInstr(env, ARM64Instr_MovI(hregARM64_X4(), rA));
+ addInstr(env, ARM64Instr_StrEX(szB));
+ } else {
+ goto stmt_fail;
+ }
+ /* now r0 is 1 if failed, 0 if success. Change to IR
+ conventions (0 is fail, 1 is success). Also transfer
+ result to r_res. */
+ IRTemp res = stmt->Ist.LLSC.result;
+ IRType ty = typeOfIRTemp(env->type_env, res);
+ HReg r_res = lookupIRTemp(env, res);
+ ARM64RIL* one = mb_mkARM64RIL_I(1);
+ vassert(ty == Ity_I1);
+ vassert(one);
+ addInstr(env, ARM64Instr_Logic(r_res, hregARM64_X0(), one,
+ ARM64lo_XOR));
+ /* And be conservative -- mask off all but the lowest bit. */
+ addInstr(env, ARM64Instr_Logic(r_res, r_res, one,
+ ARM64lo_AND));
+ return;
+ }
+ break;
+ }
+
+ /* --------- MEM FENCE --------- */
+ case Ist_MBE:
+ switch (stmt->Ist.MBE.event) {
+ case Imbe_Fence:
+ addInstr(env, ARM64Instr_MFence());
+ return;
//ZZ case Imbe_CancelReservation:
//ZZ addInstr(env, ARMInstr_CLREX());
//ZZ return;
-//ZZ default:
-//ZZ break;
-//ZZ }
-//ZZ break;
+ default:
+ break;
+ }
+ break;
/* --------- INSTR MARK --------- */
/* Doesn't generate any executable code ... */
Modified: trunk/priv/ir_defs.c
==============================================================================
--- trunk/priv/ir_defs.c (original)
+++ trunk/priv/ir_defs.c Thu Feb 20 17:43:38 2014
@@ -4483,6 +4483,17 @@
}
}
+IRType integerIRTypeOfSize ( Int szB )
+{
+ switch (szB) {
+ case 8: return Ity_I64;
+ case 4: return Ity_I32;
+ case 2: return Ity_I16;
+ case 1: return Ity_I8;
+ default: vpanic("integerIRTypeOfSize");
+ }
+}
+
IRExpr* mkIRExpr_HWord ( HWord hw )
{
vassert(sizeof(void*) == sizeof(HWord));
Modified: trunk/pub/libvex_ir.h
==============================================================================
--- trunk/pub/libvex_ir.h (original)
+++ trunk/pub/libvex_ir.h Thu Feb 20 17:43:38 2014
@@ -242,6 +242,10 @@
/* Get the size (in bytes) of an IRType */
extern Int sizeofIRType ( IRType );
+/* Translate 1/2/4/8 into Ity_I{8,16,32,64} respectively. Asserts on
+ any other input. */
+extern IRType integerIRTypeOfSize ( Int szB );
+
/* ------------------ Endianness ------------------ */
@@ -2862,12 +2866,12 @@
/*---------------------------------------------------------------*/
/*--- IR injection ---*/
/*---------------------------------------------------------------*/
+
void vex_inject_ir(IRSB *, IREndness);
#endif /* ndef __LIBVEX_IR_H */
-
/*---------------------------------------------------------------*/
/*--- libvex_ir.h ---*/
/*---------------------------------------------------------------*/
|
|
From: <sv...@va...> - 2014-02-20 17:37:03
|
Author: sewardj
Date: Thu Feb 20 17:36:56 2014
New Revision: 13822
Log:
First attempt at supporting sys_clone.
Also enable: sys_exit, sys_nanosleep, sys_madvise.
Modified:
trunk/coregrind/m_syswrap/syswrap-arm64-linux.c
Modified: trunk/coregrind/m_syswrap/syswrap-arm64-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-arm64-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-arm64-linux.c Thu Feb 20 17:36:56 2014
@@ -37,19 +37,19 @@
#include "pub_core_threadstate.h"
#include "pub_core_aspacemgr.h"
//ZZ #include "pub_core_debuglog.h"
-//ZZ #include "pub_core_libcbase.h"
+#include "pub_core_libcbase.h"
#include "pub_core_libcassert.h"
#include "pub_core_libcprint.h"
//ZZ #include "pub_core_libcproc.h"
-//ZZ #include "pub_core_libcsignal.h"
+#include "pub_core_libcsignal.h"
#include "pub_core_options.h"
-//ZZ #include "pub_core_scheduler.h"
+#include "pub_core_scheduler.h"
#include "pub_core_sigframe.h" // For VG_(sigframe_destroy)()
//ZZ #include "pub_core_signals.h"
#include "pub_core_syscall.h"
#include "pub_core_syswrap.h"
#include "pub_core_tooliface.h"
-//ZZ #include "pub_core_stacks.h" // VG_(register_stack)
+#include "pub_core_stacks.h" // VG_(register_stack)
//ZZ #include "pub_core_transtab.h" // VG_(discard_translations)
#include "priv_types_n_macros.h"
@@ -116,167 +116,230 @@
);
-//ZZ #define __NR_CLONE VG_STRINGIFY(__NR_clone)
-//ZZ #define __NR_EXIT VG_STRINGIFY(__NR_exit)
-//ZZ
-//ZZ extern
-//ZZ ULong do_syscall_clone_arm_linux ( Word (*fn)(void *),
-//ZZ void* stack,
-//ZZ Int flags,
-//ZZ void* arg,
-//ZZ Int* child_tid,
-//ZZ Int* parent_tid,
-//ZZ void* tls );
-//ZZ asm(
-//ZZ ".text\n"
-//ZZ ".globl do_syscall_clone_arm_linux\n"
-//ZZ "do_syscall_clone_arm_linux:\n"
-//ZZ
-//ZZ /*Setup child stack */
-//ZZ " str r0, [r1, #-4]!\n"
-//ZZ " str r3, [r1, #-4]!\n"
-//ZZ " push {r4,r7}\n"
-//ZZ " mov r0, r2\n" /* arg1: flags */
-//ZZ /* r1 (arg2) is already our child's stack */
-//ZZ " ldr r2, [sp, #12]\n" // parent tid
-//ZZ " ldr r3, [sp, #16]\n" // tls
-//ZZ " ldr r4, [sp, #8]\n" // Child tid
-//ZZ " mov r7, #"__NR_CLONE"\n"
-//ZZ " svc 0x00000000\n"
-//ZZ " cmp r0, #0\n"
-//ZZ " beq 1f\n"
-//ZZ
-//ZZ /* Parent */
-//ZZ " pop {r4,r7}\n"
-//ZZ " bx lr\n"
-//ZZ
-//ZZ "1:\n" /*child*/
-//ZZ " mov lr, pc\n"
-//ZZ " pop {r0,pc}\n"
-//ZZ /* Retval from child is already in r0 */
-//ZZ " mov r7, #"__NR_EXIT"\n"
-//ZZ " svc 0x00000000\n"
-//ZZ /* Urh.. why did exit return? */
-//ZZ " .long 0\n"
-//ZZ " .previous\n"
-//ZZ );
-//ZZ
-//ZZ #undef __NR_CLONE
-//ZZ #undef __NR_EXIT
-//ZZ
-//ZZ // forward declarations
-//ZZ static void setup_child ( ThreadArchState*, ThreadArchState* );
-//ZZ static void assign_guest_tls(ThreadId ctid, Addr tlsptr);
+/*
+ Perform a clone system call. clone is strange because it has
+ fork()-like return-twice semantics, so it needs special
+ handling here.
+
+ Upon entry, we have:
+
+ Word (*fn)(void*) in x0
+ void* child_stack in x1
+ int flags in x2
+ void* arg in x3
+ pid_t* child_tid in x4
+ pid_t* parent_tid in x5
+ void* tls_ptr in x6
+
+ System call requires:
+
+ int $__NR_clone in x8
+ int flags in x0
+ void* child_stack in x1
+ pid_t* parent_tid in x2
+ pid_t* child_tid in x3
+ void* tls_ptr in x4
+
+ Returns a Long encoded in the linux-arm64 way, not a SysRes.
+ x10-x20 are caller save, so they might be useful.
+*/
+#define __NR_CLONE VG_STRINGIFY(__NR_clone)
+#define __NR_EXIT VG_STRINGIFY(__NR_exit)
+
+extern
+Long do_syscall_clone_arm64_linux ( Word (*fn)(void *),
+ void* stack,
+ Long flags,
+ void* arg,
+ Long* child_tid,
+ Long* parent_tid,
+ void* tls );
+asm(
+".text\n"
+".globl do_syscall_clone_arm64_linux\n"
+"do_syscall_clone_arm64_linux:\n"
+ // set up child stack, temporarily preserving fn and arg
+" sub x1, x1, #16\n" // make space on stack
+" str x3, [x1, #8]\n" // save arg
+" str x0, [x1, #0]\n" // save fn
+
+ // setup syscall
+" mov x8, #"__NR_CLONE"\n" // syscall number
+" mov x0, x2\n" // syscall arg1: flags
+" mov x1, x1\n" // syscall arg2: child_stack
+" mov x2, x5\n" // syscall arg3: parent_tid
+" mov x3, x4\n" // syscall arg4: child_tid
+" mov x4, x6\n" // syscall arg5: tls_ptr
+
+" svc 0\n" // clone()
+
+" cmp x0, #0\n" // child if retval == 0
+" bne 1f\n"
+
+ // CHILD - call thread function
+" ldr x1, [sp, #0]\n" // pop fn
+" ldr x0, [sp, #8]\n" // pop fn arg1: arg
+" add sp, sp, #16\n"
+" blr x1\n" // call fn
+
+ // exit with result
+" mov x0, x0\n" // arg1: return value from fn
+" mov x8, #"__NR_EXIT"\n"
+
+" svc 0\n"
+
+ // Exit returned?!
+" .word 0xFFFFFFFF\n"
+
+"1:\n" // PARENT or ERROR. x0 holds return value from the clone syscall.
+" ret\n"
+".previous\n"
+);
+
+#undef __NR_CLONE
+#undef __NR_EXIT
+
+// forward declaration
+static void setup_child ( ThreadArchState*, ThreadArchState* );
+static void assign_guest_tls(ThreadId ctid, Addr tlsptr);
//ZZ static SysRes sys_set_tls ( ThreadId tid, Addr tlsptr );
-//ZZ
-//ZZ /*
-//ZZ When a client clones, we need to keep track of the new thread. This means:
-//ZZ 1. allocate a ThreadId+ThreadState+stack for the the thread
-//ZZ
-//ZZ 2. initialize the thread's new VCPU state
-//ZZ
-//ZZ 3. create the thread using the same args as the client requested,
-//ZZ but using the scheduler entrypoint for IP, and a separate stack
-//ZZ for SP.
-//ZZ */
-//ZZ static SysRes do_clone ( ThreadId ptid,
-//ZZ UInt flags, Addr sp,
-//ZZ Int *parent_tidptr,
-//ZZ Int *child_tidptr,
-//ZZ Addr child_tls)
-//ZZ {
-//ZZ const Bool debug = False;
-//ZZ
-//ZZ ThreadId ctid = VG_(alloc_ThreadState)();
-//ZZ ThreadState* ptst = VG_(get_ThreadState)(ptid);
-//ZZ ThreadState* ctst = VG_(get_ThreadState)(ctid);
-//ZZ UInt r0;
-//ZZ UWord *stack;
-//ZZ NSegment const* seg;
-//ZZ SysRes res;
-//ZZ vki_sigset_t blockall, savedmask;
-//ZZ
-//ZZ VG_(sigfillset)(&blockall);
-//ZZ
-//ZZ vg_assert(VG_(is_running_thread)(ptid));
-//ZZ vg_assert(VG_(is_valid_tid)(ctid));
-//ZZ
-//ZZ stack = (UWord*)ML_(allocstack)(ctid);
-//ZZ
-//ZZ if(stack == NULL) {
-//ZZ res = VG_(mk_SysRes_Error)( VKI_ENOMEM );
-//ZZ goto out;
-//ZZ }
-//ZZ
-//ZZ setup_child( &ctst->arch, &ptst->arch );
-//ZZ
-//ZZ ctst->arch.vex.guest_R0 = 0;
-//ZZ if(sp != 0)
-//ZZ ctst->arch.vex.guest_R13 = sp;
-//ZZ
-//ZZ ctst->os_state.parent = ptid;
-//ZZ
-//ZZ ctst->sig_mask = ptst->sig_mask;
-//ZZ ctst->tmp_sig_mask = ptst->sig_mask;
-//ZZ
-//ZZ /* Start the child with its threadgroup being the same as the
-//ZZ parent's. This is so that any exit_group calls that happen
-//ZZ after the child is created but before it sets its
-//ZZ os_state.threadgroup field for real (in thread_wrapper in
-//ZZ syswrap-linux.c), really kill the new thread. a.k.a this avoids
-//ZZ a race condition in which the thread is unkillable (via
-//ZZ exit_group) because its threadgroup is not set. The race window
-//ZZ is probably only a few hundred or a few thousand cycles long.
-//ZZ See #226116. */
-//ZZ ctst->os_state.threadgroup = ptst->os_state.threadgroup;
-//ZZ
-//ZZ seg = VG_(am_find_nsegment)((Addr)sp);
-//ZZ if (seg && seg->kind != SkResvn) {
-//ZZ ctst->client_stack_highest_word = (Addr)VG_PGROUNDUP(sp);
-//ZZ ctst->client_stack_szB = ctst->client_stack_highest_word - seg->start;
-//ZZ
-//ZZ VG_(register_stack)(seg->start, ctst->client_stack_highest_word);
-//ZZ
-//ZZ if (debug)
-//ZZ VG_(printf)("tid %d: guessed client stack range %#lx-%#lx\n",
-//ZZ ctid, seg->start, VG_PGROUNDUP(sp));
-//ZZ } else {
-//ZZ VG_(message)(Vg_UserMsg, "!? New thread %d starts with sp+%#lx) unmapped\n", ctid, sp);
-//ZZ ctst->client_stack_szB = 0;
-//ZZ }
-//ZZ
-//ZZ vg_assert(VG_(owns_BigLock_LL)(ptid));
-//ZZ VG_TRACK ( pre_thread_ll_create, ptid, ctid );
-//ZZ
-//ZZ if (flags & VKI_CLONE_SETTLS) {
-//ZZ /* Just assign the tls pointer in the guest TPIDRURO. */
-//ZZ assign_guest_tls(ctid, child_tls);
-//ZZ }
-//ZZ
-//ZZ flags &= ~VKI_CLONE_SETTLS;
-//ZZ
-//ZZ VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, &savedmask);
-//ZZ
-//ZZ r0 = do_syscall_clone_arm_linux(
-//ZZ ML_(start_thread_NORETURN), stack, flags, &VG_(threads)[ctid],
-//ZZ child_tidptr, parent_tidptr, NULL
-//ZZ );
-//ZZ //VG_(printf)("AFTER SYSCALL, %x and %x CHILD: %d PARENT: %d\n",child_tidptr, parent_tidptr,*child_tidptr,*parent_tidptr);
-//ZZ
-//ZZ res = VG_(mk_SysRes_arm_linux)( r0 );
-//ZZ
-//ZZ VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
-//ZZ
-//ZZ out:
-//ZZ if (sr_isError(res)) {
-//ZZ VG_(cleanup_thread)(&ctst->arch);
-//ZZ ctst->status = VgTs_Empty;
-//ZZ VG_TRACK( pre_thread_ll_exit, ctid );
-//ZZ }
-//ZZ
-//ZZ return res;
-//ZZ }
+
+/*
+ When a client clones, we need to keep track of the new thread. This means:
+ 1. allocate a ThreadId+ThreadState+stack for the the thread
+
+ 2. initialize the thread's new VCPU state
+
+ 3. create the thread using the same args as the client requested,
+ but using the scheduler entrypoint for IP, and a separate stack
+ for SP.
+ */
+static SysRes do_clone ( ThreadId ptid,
+ ULong flags, Addr xsp,
+ Long* parent_tidptr,
+ Long* child_tidptr,
+ Addr child_tls )
+{
+ const Bool debug = False;
+ ThreadId ctid = VG_(alloc_ThreadState)();
+ ThreadState* ptst = VG_(get_ThreadState)(ptid);
+ ThreadState* ctst = VG_(get_ThreadState)(ctid);
+ UWord* stack;
+ NSegment const* seg;
+ SysRes res;
+ ULong x0;
+ vki_sigset_t blockall, savedmask;
+
+ VG_(sigfillset)(&blockall);
+
+ vg_assert(VG_(is_running_thread)(ptid));
+ vg_assert(VG_(is_valid_tid)(ctid));
+
+ stack = (UWord*)ML_(allocstack)(ctid);
+ if (stack == NULL) {
+ res = VG_(mk_SysRes_Error)( VKI_ENOMEM );
+ goto out;
+ }
+
+ /* Copy register state
+
+ Both parent and child return to the same place, and the code
+ following the clone syscall works out which is which, so we
+ don't need to worry about it.
+
+ The parent gets the child's new tid returned from clone, but the
+ child gets 0.
+
+ If the clone call specifies a NULL xsp for the new thread, then
+ it actually gets a copy of the parent's xsp.
+ */
+ setup_child( &ctst->arch, &ptst->arch );
+
+ /* Make sys_clone appear to have returned Success(0) in the
+ child. */
+ ctst->arch.vex.guest_X0 = 0;
+
+ if (xsp != 0)
+ ctst->arch.vex.guest_XSP = xsp;
+
+ ctst->os_state.parent = ptid;
+
+ /* inherit signal mask */
+ ctst->sig_mask = ptst->sig_mask;
+ ctst->tmp_sig_mask = ptst->sig_mask;
+
+ /* Start the child with its threadgroup being the same as the
+ parent's. This is so that any exit_group calls that happen
+ after the child is created but before it sets its
+ os_state.threadgroup field for real (in thread_wrapper in
+ syswrap-linux.c), really kill the new thread. a.k.a this avoids
+ a race condition in which the thread is unkillable (via
+ exit_group) because its threadgroup is not set. The race window
+ is probably only a few hundred or a few thousand cycles long.
+ See #226116. */
+ ctst->os_state.threadgroup = ptst->os_state.threadgroup;
+
+ /* We don't really know where the client stack is, because its
+ allocated by the client. The best we can do is look at the
+ memory mappings and try to derive some useful information. We
+ assume that xsp starts near its highest possible value, and can
+ only go down to the start of the mmaped segment. */
+ seg = VG_(am_find_nsegment)((Addr)xsp);
+ if (seg && seg->kind != SkResvn) {
+ ctst->client_stack_highest_word = (Addr)VG_PGROUNDUP(xsp);
+ ctst->client_stack_szB = ctst->client_stack_highest_word - seg->start;
+
+ VG_(register_stack)(seg->start, ctst->client_stack_highest_word);
+
+ if (debug)
+ VG_(printf)("tid %d: guessed client stack range %#lx-%#lx\n",
+ ctid, seg->start, VG_PGROUNDUP(xsp));
+ } else {
+ VG_(message)(
+ Vg_UserMsg,
+ "!? New thread %d starts with sp+%#lx) unmapped\n", ctid, xsp
+ );
+ ctst->client_stack_szB = 0;
+ }
+
+ /* Assume the clone will succeed, and tell any tool that wants to
+ know that this thread has come into existence. If the clone
+ fails, we'll send out a ll_exit notification for it at the out:
+ label below, to clean up. */
+ vg_assert(VG_(owns_BigLock_LL)(ptid));
+ VG_TRACK ( pre_thread_ll_create, ptid, ctid );
+
+ if (flags & VKI_CLONE_SETTLS) {
+ /* Just assign the tls pointer in the guest TPIDR_EL0. */
+ assign_guest_tls(ctid, child_tls);
+ }
+
+ flags &= ~VKI_CLONE_SETTLS;
+
+ /* start the thread with everything blocked */
+ VG_(sigprocmask)(VKI_SIG_SETMASK, &blockall, &savedmask);
+
+ x0 = do_syscall_clone_arm64_linux(
+ ML_(start_thread_NORETURN), stack, flags, &VG_(threads)[ctid],
+ child_tidptr, parent_tidptr, NULL
+ );
+
+ res = VG_(mk_SysRes_arm64_linux)( x0 );
+
+ VG_(sigprocmask)(VKI_SIG_SETMASK, &savedmask, NULL);
+
+ out:
+ if (sr_isError(res)) {
+ /* clone failed */
+ VG_(cleanup_thread)(&ctst->arch);
+ ctst->status = VgTs_Empty;
+ /* oops. Better tell the tool the thread exited in a hurry :-) */
+ VG_TRACK( pre_thread_ll_exit, ctid );
+ }
+
+ return res;
+}
/* ---------------------------------------------------------------------
@@ -289,19 +352,19 @@
{
}
-//ZZ void setup_child ( /*OUT*/ ThreadArchState *child,
-//ZZ /*IN*/ ThreadArchState *parent )
-//ZZ {
-//ZZ child->vex = parent->vex;
-//ZZ child->vex_shadow1 = parent->vex_shadow1;
-//ZZ child->vex_shadow2 = parent->vex_shadow2;
-//ZZ }
-//ZZ
-//ZZ static void assign_guest_tls(ThreadId tid, Addr tlsptr)
-//ZZ {
-//ZZ VG_(threads)[tid].arch.vex.guest_TPIDRURO = tlsptr;
-//ZZ }
-//ZZ
+void setup_child ( /*OUT*/ ThreadArchState *child,
+ /*IN*/ ThreadArchState *parent )
+{
+ child->vex = parent->vex;
+ child->vex_shadow1 = parent->vex_shadow1;
+ child->vex_shadow2 = parent->vex_shadow2;
+}
+
+static void assign_guest_tls(ThreadId tid, Addr tlsptr)
+{
+ VG_(threads)[tid].arch.vex.guest_TPIDR_EL0 = tlsptr;
+}
+
//ZZ /* Assigns tlsptr to the guest TPIDRURO.
//ZZ If needed for the specific hardware, really executes
//ZZ the set_tls syscall.
@@ -473,7 +536,7 @@
PRE(sys_clone)
{
- UInt cloneflags;
+ UInt cloneflags;
PRINT("sys_clone ( %lx, %#lx, %#lx, %#lx, %#lx )",ARG1,ARG2,ARG3,ARG4,ARG5);
PRE_REG_READ5(int, "clone",
@@ -518,16 +581,16 @@
/* Only look at the flags we really care about */
switch (cloneflags & (VKI_CLONE_VM | VKI_CLONE_FS
| VKI_CLONE_FILES | VKI_CLONE_VFORK)) {
-//ZZ case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
-//ZZ /* thread creation */
-//ZZ SET_STATUS_from_SysRes(
-//ZZ do_clone(tid,
-//ZZ ARG1, /* flags */
-//ZZ (Addr)ARG2, /* child ESP */
-//ZZ (Int *)ARG3, /* parent_tidptr */
-//ZZ (Int *)ARG5, /* child_tidptr */
-//ZZ (Addr)ARG4)); /* set_tls */
-//ZZ break;
+ case VKI_CLONE_VM | VKI_CLONE_FS | VKI_CLONE_FILES:
+ /* thread creation */
+ SET_STATUS_from_SysRes(
+ do_clone(tid,
+ ARG1, /* flags */
+ (Addr)ARG2, /* child SP */
+ (Long *)ARG3, /* parent_tidptr */
+ (Long *)ARG5, /* child_tidptr */
+ (Addr)ARG4)); /* set_tls */
+ break;
case VKI_CLONE_VFORK | VKI_CLONE_VM: /* vfork */
/* FALLTHROUGH - assume vfork == fork */
@@ -840,10 +903,12 @@
LINXY(__NR3264_fstatat, sys_newfstatat), // 79
GENXY(__NR3264_fstat, sys_newfstat), // 80
+ GENX_(__NR_exit, sys_exit), // 93
LINX_(__NR_exit_group, sys_exit_group), // 94
LINX_(__NR_set_tid_address, sys_set_tid_address), // 96
LINXY(__NR_futex, sys_futex), // 98
LINX_(__NR_set_robust_list, sys_set_robust_list), // 99
+ GENXY(__NR_nanosleep, sys_nanosleep), // 101
LINXY(__NR_clock_gettime, sys_clock_gettime), // 113
LINX_(__NR_tgkill, sys_tgkill), // 131 */Linux
LINXY(__NR_rt_sigaction, sys_rt_sigaction), // 134
@@ -872,13 +937,13 @@
PLAX_(__NR3264_mmap, sys_mmap), // 222
GENXY(__NR_mprotect, sys_mprotect), // 226
+ GENX_(__NR_madvise, sys_madvise), // 233
GENXY(__NR_wait4, sys_wait4), // 260
// The numbers below are bogus. (See comment further down.)
// When pulling entries above this line, change the numbers
// to be correct.
-//ZZ GENX_(__NR_exit, sys_exit), // 93
//ZZ //zz // (restart_syscall) // 0
//ZZ GENX_(__NR_fork, sys_fork), // 2
//ZZ
@@ -1060,7 +1125,6 @@
//ZZ
//ZZ LINX_(__NR_sched_get_priority_min, sys_sched_get_priority_min),// 160
//ZZ //zz //LINX?(__NR_sched_rr_get_interval, sys_sched_rr_get_interval), // 161 */*
-//ZZ GENXY(__NR_nanosleep, sys_nanosleep), // 162
//ZZ GENX_(__NR_mremap, sys_mremap), // 163
//ZZ LINX_(__NR_setresuid, sys_setresuid16), // 164
//ZZ
@@ -1125,7 +1189,6 @@
//ZZ LINX_(__NR_setfsgid32, sys_setfsgid), // 216
//ZZ //zz // (__NR_pivot_root, sys_pivot_root), // 217 */Linux
//ZZ GENXY(__NR_mincore, sys_mincore), // 218
-//ZZ GENX_(__NR_madvise, sys_madvise), // 219
//ZZ
//ZZ LINXY(__NR_fcntl64, sys_fcntl64), // 221
//ZZ // GENX_(222, sys_ni_syscall), // 222
|
|
From: <sv...@va...> - 2014-02-20 17:34:53
|
Author: sewardj
Date: Thu Feb 20 17:34:45 2014
New Revision: 13821
Log:
Make these buildable on arm64-linux.
Modified:
trunk/memcheck/tests/atomic_incs.c
trunk/memcheck/tests/unit_libcbase.c
Modified: trunk/memcheck/tests/atomic_incs.c
==============================================================================
--- trunk/memcheck/tests/atomic_incs.c (original)
+++ trunk/memcheck/tests/atomic_incs.c Thu Feb 20 17:34:45 2014
@@ -96,6 +96,24 @@
: /*trash*/ "memory", "cc", "r5", "r8", "r9", "r10", "r4"
);
} while (block[2] != 0);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxrb w8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxrb w4, w8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
int dummy;
__asm__ __volatile__(
@@ -277,6 +295,24 @@
: /*trash*/ "memory", "cc", "r5", "r8", "r9", "r10", "r4"
);
} while (block[2] != 0);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxrh w8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxrh w4, w8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
int dummy;
__asm__ __volatile__(
@@ -455,6 +491,24 @@
: /*trash*/ "memory", "cc", "r5", "r8", "r9", "r10", "r4"
);
} while (block[2] != 0);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxr w8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxr w4, w8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
__asm__ __volatile__(
" l 0,%0\n\t"
@@ -555,6 +609,24 @@
: /*trash*/ "memory", "cc", "r5", "r0", "r1", "r8", "r2", "r3"
);
} while (block[2] != 0xFFFFFFFF00000000ULL);
+#elif defined(VGA_arm64)
+ unsigned long long int block[3]
+ = { (unsigned long long int)p, (unsigned long long int)n,
+ 0xFFFFFFFFFFFFFFFFULL};
+ do {
+ __asm__ __volatile__(
+ "mov x5, %0" "\n\t"
+ "ldr x9, [x5, #0]" "\n\t" // p
+ "ldr x10, [x5, #8]" "\n\t" // n
+ "ldxr x8, [x9]" "\n\t"
+ "add x8, x8, x10" "\n\t"
+ "stxr w4, x8, [x9]" "\n\t"
+ "str x4, [x5, #16]" "\n\t"
+ : /*out*/
+ : /*in*/ "r"(&block[0])
+ : /*trash*/ "memory", "cc", "x5", "x8", "x9", "x10", "x4"
+ );
+ } while (block[2] != 0);
#elif defined(VGA_s390x)
__asm__ __volatile__(
" lg 0,%0\n\t"
Modified: trunk/memcheck/tests/unit_libcbase.c
==============================================================================
--- trunk/memcheck/tests/unit_libcbase.c (original)
+++ trunk/memcheck/tests/unit_libcbase.c Thu Feb 20 17:34:45 2014
@@ -58,6 +58,8 @@
// On PPC/Linux VKI_PAGE_SIZE is a variable, not a macro.
#if defined(VGP_ppc32_linux) || defined(VGP_ppc64_linux)
unsigned long VKI_PAGE_SIZE = 1UL << 12;
+#elif defined(VGP_arm64_linux)
+unsigned long VKI_PAGE_SIZE = 1UL << 16;
#endif
void test_VG_IS_XYZ_ALIGNED(void)
|
|
From: <sv...@va...> - 2014-02-20 15:43:17
|
Author: mjw
Date: Thu Feb 20 15:43:07 2014
New Revision: 13820
Log:
Bug 331337 s390x WARNING: unhandled syscall: 326 (dup3)
Modified:
trunk/NEWS
trunk/coregrind/m_syswrap/syswrap-s390x-linux.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Thu Feb 20 15:43:07 2014
@@ -57,6 +57,7 @@
331254 Fix expected output for memcheck/tests/dw4
331255 Fix race condition in test none/tests/coolo_sigaction
331257 Fix type of jump buffer in test none/tests/faultstatus
+331337 s390x WARNING: unhandled syscall: 326 (dup3)
n-i-bz Fix KVM_CREATE_IRQCHIP ioctl handling
Release 3.9.0 (31 October 2013)
Modified: trunk/coregrind/m_syswrap/syswrap-s390x-linux.c
==============================================================================
--- trunk/coregrind/m_syswrap/syswrap-s390x-linux.c (original)
+++ trunk/coregrind/m_syswrap/syswrap-s390x-linux.c Thu Feb 20 15:43:07 2014
@@ -1044,7 +1044,7 @@
LINXY(__NR_inotify_init1, sys_inotify_init1), // 324
LINXY(__NR_pipe2, sys_pipe2), // 325
- // (__NR_dup3, ),
+ LINXY(__NR_dup3, sys_dup3), // 326
LINXY(__NR_epoll_create1, sys_epoll_create1), // 327
LINXY(__NR_preadv, sys_preadv), // 328
LINX_(__NR_pwritev, sys_pwritev), // 329
|
|
From: Dejan J. <dej...@rt...> - 2014-02-20 10:43:46
|
Hello Carl, mips32 and mips64 are both supporting big and little endian. Maybe you could check: #if defined (_MIPSEL) // for little and #if defined (_MIPSEB) // for big endian. Regards, Dejan On 19.02.2014. 21:34, Carl E. Love wrote: > > IBM will be supporting both big endian and little endian on power. I am > working on porting Valgrind to run under little endian. I am getting a > number of errors as follows that do not occur when run on big endian > Valgrind: > > Conditional jump or move depends on uninitialised value(s) > Use of uninitialised value of size 8 > > I suspect that there is still an issue with the setting and/or checking > of the Vbits in memcheck that determine if the values are initialized or > not. > > In file memchec/mc_machine.c there is a comment before function > get_otrack_shadow_offset_wrk() about the function being endian dependent > > "This function is dependent on the host's endianness, hence we > assert that the use case is supported. " > > I am not seeing where the endian dependency is and specifically how I > should change the code to go from PPC64 big endian to PPC little endian. > Hope someone can help identify where the endian dependency is and how to > fix it for power. I am still trying to figure out what all this code is > trying to do. Thanks. > > Carl Love > > > ------------------------------------------------------------------------------ > Managing the Performance of Cloud-Based Applications > Take advantage of what the Cloud has to offer - Avoid Common Pitfalls. > Read the Whitepaper. > http://pubads.g.doubleclick.net/gampad/clk?id=121054471&iu=/4140/ostg.clktrk > _______________________________________________ > Valgrind-developers mailing list > Val...@li... > https://lists.sourceforge.net/lists/listinfo/valgrind-developers > |
|
From: Philippe W. <phi...@sk...> - 2014-02-20 05:44:14
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora (7.5.1-37.fc18) Assembler: GNU assembler version 2.23.51.0.1-7.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.8.8-202.fc18.ppc64p7 ppc64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on gcc110 ( Fedora release 18 (Spherical Cow), ppc64 ) Started at 2014-02-19 20:00:11 PST Ended at 2014-02-19 21:41:12 PST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 575 tests, 36 stderr failures, 7 stdout failures, 0 stderrB failures, 0 stdoutB failures, 2 post failures == memcheck/tests/linux/getregset (stdout) memcheck/tests/linux/getregset (stderr) memcheck/tests/ppc64/power_ISA2_05 (stdout) memcheck/tests/supp_unknown (stderr) memcheck/tests/varinfo6 (stderr) memcheck/tests/wrap8 (stdout) memcheck/tests/wrap8 (stderr) massif/tests/big-alloc (post) massif/tests/deep-D (post) none/tests/ppc32/jm-vmx (stdout) none/tests/ppc32/jm-vmx (stderr) none/tests/ppc32/test_isa_2_06_part2 (stdout) none/tests/ppc32/test_isa_2_06_part2 (stderr) none/tests/ppc64/jm-vmx (stdout) none/tests/ppc64/jm-vmx (stderr) none/tests/ppc64/test_isa_2_06_part2 (stdout) none/tests/ppc64/test_isa_2_06_part2 (stderr) helgrind/tests/annotate_rwlock (stderr) helgrind/tests/free_is_write (stderr) helgrind/tests/hg02_deadlock (stderr) helgrind/tests/hg03_inherit (stderr) helgrind/tests/hg04_race (stderr) helgrind/tests/hg05_race2 (stderr) helgrind/tests/locked_vs_unlocked1_fwd (stderr) helgrind/tests/locked_vs_unlocked1_rev (stderr) helgrind/tests/locked_vs_unlocked2 (stderr) helgrind/tests/locked_vs_unlocked3 (stderr) helgrind/tests/pth_barrier1 (stderr) helgrind/tests/pth_barrier2 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/pth_destroy_cond (stderr) helgrind/tests/rwlock_race (stderr) helgrind/tests/tc01_simple_race (stderr) helgrind/tests/tc05_simple_race (stderr) helgrind/tests/tc06_two_races (stderr) helgrind/tests/tc06_two_races_xml (stderr) helgrind/tests/tc09_bad_unlock (stderr) helgrind/tests/tc14_laog_dinphils (stderr) helgrind/tests/tc16_byterace (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc19_shadowmem (stderr) helgrind/tests/tc20_verifywrap (stderr) helgrind/tests/tc21_pthonce (stderr) helgrind/tests/tc22_exit_w_lock (stderr) --tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old -- Running tests in perf ---------------------------------------------- -- bigcode1 -- bigcode1 valgrind-new:0.26s no: 1.7s ( 6.5x, -----) me: 3.1s (11.8x, -----) ca:17.9s (69.0x, -----) he: 1.7s ( 6.7x, -----) ca: 5.3s (20.3x, -----) dr: 1.7s ( 6.6x, -----) ma: 2.2s ( 8.7x, -----) bigcode1 valgrind-old:0.26s no: 1.7s ( 6.6x, -1.2%) me: 2.9s (11.0x, 6.8%) ca:19.3s (74.2x, -7.5%) he: 1.9s ( 7.2x, -7.5%) ca: 5.5s (21.1x, -4.0%) dr: 1.9s ( 7.2x, -8.8%) ma: 2.3s ( 8.7x, -0.4%) -- bigcode2 -- bigcode2 valgrind-new:0.27s no: 1.7s ( 6.2x, -----) me: 3.2s (11.9x, -----) ca:18.7s (69.1x, -----) he: 2.1s ( 7.7x, -----) ca: 5.4s (20.0x, -----) dr: 1.8s ( 6.8x, -----) ma: 2.1s ( 7.9x, -----) bigcode2 valgrind-old:0.27s no: 1.6s ( 5.8x, 6.6%) me: 2.9s (10.9x, 8.4%) ca:18.2s (67.3x, 2.7%) he: 2.1s ( 7.8x, -0.5%) ca: 5.5s (20.2x, -0.7%) dr: 1.8s ( 6.8x, 0.0%) ma: 2.1s ( 7.9x, -0.5%) -- bz2 -- bz2 valgrind-new:0.72s no: 4.6s ( 6.3x, -----) me:11.8s (16.3x, -----) ca:25.8s (35.9x, -----) he:14.7s (20.4x, -----) ca:24.2s (33.7x, -----) dr:20.0s (27.8x, -----) ma: 4.7s ( 6.5x, -----) bz2 valgrind-old:0.72s no: 4.5s ( 6.3x, 0.9%) me:11.8s (16.3x, 0.1%) ca:25.9s (36.0x, -0.2%) he:14.9s (20.7x, -1.3%) ca:24.2s (33.6x, 0.3%) dr:20.3s (28.2x, -1.5%) ma: 4.7s ( 6.5x, 0.4%) -- fbench -- fbench valgrind-new:0.34s no: 2.1s ( 6.2x, -----) me: 5.3s (15.5x, -----) ca: 8.5s (24.9x, -----) he: 5.2s (15.4x, -----) ca: 8.3s (24.3x, -----) dr: 5.1s (14.9x, -----) ma: 2.3s ( 6.8x, -----) fbench valgrind-old:0.34s no: 2.1s ( 6.2x, 0.5%) me: 5.3s (15.6x, -0.4%) ca: 8.7s (25.6x, -2.7%) he: 5.4s (15.8x, -2.7%) ca: 8.2s (24.2x, 0.5%) dr: 5.0s (14.9x, 0.2%) ma: 2.3s ( 6.7x, 1.3%) -- ffbench -- ffbench valgrind-new:0.45s no: 1.4s ( 3.2x, -----) me: 2.8s ( 6.2x, -----) ca: 2.6s ( 5.9x, -----) he: 7.1s (15.8x, -----) ca: 7.3s (16.2x, -----) dr: 5.0s (11.1x, -----) ma: 1.0s ( 2.2x, -----) ffbench valgrind-old:0.45s no: 1.3s ( 3.0x, 6.3%) me: 2.6s ( 5.9x, 5.4%) ca: 2.5s ( 5.6x, 5.7%) he: 7.2s (16.0x, -0.8%) ca: 7.3s (16.2x, 0.0%) dr: 5.0s (11.1x, 0.4%) ma: 1.1s ( 2.3x, -4.0%) -- heap -- heap valgrind-new:0.41s no: 2.4s ( 5.9x, -----) me: 9.9s (24.2x, -----) ca:13.1s (32.0x, -----) he:11.8s (28.8x, -----) ca:12.2s (29.7x, -----) dr: 8.4s (20.4x, -----) ma: 8.5s (20.8x, -----) heap valgrind-old:0.41s no: 2.5s ( 6.0x, -2.1%) me:10.0s (24.5x, -1.1%) ca:13.2s (32.2x, -0.4%) he:11.7s (28.6x, 0.7%) ca:12.1s (29.6x, 0.6%) dr: 8.3s (20.1x, 1.4%) ma: 8.7s (21.2x, -1.8%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.43s no: 2.5s ( 5.9x, -----) me:13.8s (32.2x, -----) ca:14.1s (32.7x, -----) he:13.3s (31.0x, -----) ca:13.1s (30.5x, -----) dr: 9.2s (21.5x, -----) ma: 8.7s (20.2x, -----) heap_pdb4 valgrind-old:0.43s no: 2.6s ( 6.0x, -1.6%) me:14.1s (32.7x, -1.5%) ca:14.1s (32.7x, 0.0%) he:13.1s (30.5x, 1.7%) ca:13.1s (30.6x, -0.2%) dr: 9.3s (21.7x, -0.8%) ma: 8.8s (20.6x, -1.7%) -- many-loss-records -- many-loss-records valgrind-new:0.03s no: 0.5s (17.7x, -----) me: 2.2s (72.7x, -----) ca: 1.9s (62.3x, -----) he: 1.8s (60.0x, -----) ca: 1.9s (62.0x, -----) dr: 1.6s (52.0x, -----) ma: 1.6s (51.7x, -----) many-loss-records valgrind-old:0.03s no: 0.5s (17.3x, 1.9%) me: 2.2s (73.0x, -0.5%) ca: 1.9s (62.3x, 0.0%) he: 1.8s (60.3x, -0.6%) ca: 1.9s (62.0x, 0.0%) dr: 1.6s (52.0x, 0.0%) ma: 1.6s (52.3x, -1.3%) -- many-xpts -- many-xpts valgrind-new:0.07s no: 0.7s (10.6x, -----) me: 3.4s (49.0x, -----) ca: 4.7s (66.7x, -----) he: 4.8s (68.7x, -----) ca: 2.9s (41.3x, -----) dr: 2.3s (33.4x, -----) ma: 2.2s (32.1x, -----) many-xpts valgrind-old:0.07s no: 0.7s (10.4x, 1.4%) me: 3.5s (49.6x, -1.2%) ca: 4.7s (66.6x, 0.2%) he: 4.8s (68.7x, 0.0%) ca: 2.9s (41.1x, 0.3%) dr: 2.3s (33.1x, 0.9%) ma: 2.3s (32.3x, -0.4%) -- sarp -- sarp valgrind-new:0.02s no: 0.4s (19.5x, -----) me: 3.1s (157.5x, -----) ca: 2.9s (146.5x, -----) he:11.2s (558.0x, -----) ca: 1.7s (83.5x, -----) dr: 1.1s (55.0x, -----) ma: 0.4s (20.5x, -----) sarp valgrind-old:0.02s no: 0.4s (19.5x, 0.0%) me: 3.2s (158.0x, -0.3%) ca: 2.9s (145.5x, 0.7%) he:11.0s (551.0x, 1.3%) ca: 1.7s (84.5x, -1.2%) dr: 1.1s (54.0x, 1.8%) ma: 0.4s (21.0x, -2.4%) -- tinycc -- tinycc valgrind-new:0.27s no: 3.0s (11.0x, -----) me:14.2s (52.6x, -----) ca:17.2s (63.7x, -----) he:18.9s (70.1x, -----) ca:15.6s (57.9x, -----) dr:12.4s (45.9x, -----) ma: 3.8s (14.2x, -----) tinycc valgrind-old:0.27s no: 3.1s (11.4x, -3.0%) me:14.2s (52.7x, -0.4%) ca:17.2s (63.6x, 0.1%) he:19.0s (70.3x, -0.4%) ca:15.6s (57.9x, 0.0%) dr:12.4s (46.0x, -0.2%) ma: 3.8s (14.2x, 0.0%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 154 timings ================= real 54m28.000s user 52m47.678s sys 0m18.762s |
|
From: Tom H. <to...@co...> - 2014-02-20 04:46:28
|
valgrind revision: 13815 VEX revision: 2820 C compiler: gcc (GCC) 4.8.2 20131212 (Red Hat 4.8.2-7) GDB: GNU gdb (GDB) Fedora 7.6.1-46.fc19 Assembler: GNU assembler version 2.23.52.0.1-9.fc19 20130226 C library: GNU C Library (GNU libc) stable release version 2.17 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 19 (Schrödingerâs Cat) Nightly build on bristol ( x86_64, Fedora 19 (Schrödingerâs Cat) ) Started at 2014-02-19 02:32:07 GMT Ended at 2014-02-20 04:46:15 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 3 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) none/tests/fdleak_ipv4 (stdout) none/tests/fdleak_ipv4 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) none/tests/fdleak_ipv4 (stderr) exp-sgcheck/tests/hackedbz2 (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2014-02-20 04:26:35.661692337 +0000 --- new.short 2014-02-20 04:46:15.684539632 +0000 *************** *** 8,11 **** ! == 673 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) none/tests/fdleak_ipv4 (stderr) --- 8,12 ---- ! == 673 tests, 3 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/dw4 (stderr) + none/tests/fdleak_ipv4 (stdout) none/tests/fdleak_ipv4 (stderr) |
|
From: Tom H. <to...@co...> - 2014-02-20 04:46:08
|
valgrind revision: 13815 VEX revision: 2820 C compiler: gcc (GCC) 4.7.2 20121109 (Red Hat 4.7.2-8) GDB: GNU gdb (GDB) Fedora 7.5.1-42.fc18 Assembler: GNU assembler version 2.23.51.0.1-10.fc18 20120806 C library: GNU C Library stable release version 2.16 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 18 (Spherical Cow) Nightly build on bristol ( x86_64, Fedora 18 (Spherical Cow) ) Started at 2014-02-19 02:41:32 GMT Ended at 2014-02-20 04:45:46 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 2 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/err_disable4 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) |
|
From: Tom H. <to...@co...> - 2014-02-20 04:45:55
|
valgrind revision: 13815 VEX revision: 2820 C compiler: gcc (GCC) 4.7.2 20120921 (Red Hat 4.7.2-2) GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-54.fc17) Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131 C library: GNU C Library stable release version 2.15 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 17 (Beefy Miracle) Nightly build on bristol ( x86_64, Fedora 17 (Beefy Miracle) ) Started at 2014-02-19 02:51:40 GMT Ended at 2014-02-20 04:45:33 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 6 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) gdbserver_tests/mcinfcallWSRU (stderr) gdbserver_tests/mcmain_pic (stderr) memcheck/tests/err_disable4 (stderr) none/tests/fdleak_ipv4 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 6 stderr failures, 2 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) gdbserver_tests/mcinfcallWSRU (stderr) gdbserver_tests/mcmain_pic (stderr) memcheck/tests/err_disable4 (stderr) none/tests/fdleak_ipv4 (stdout) none/tests/fdleak_ipv4 (stderr) exp-sgcheck/tests/preen_invars (stdout) exp-sgcheck/tests/preen_invars (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2014-02-20 04:26:27.110880034 +0000 --- new.short 2014-02-20 04:45:33.667358724 +0000 *************** *** 8,10 **** ! == 673 tests, 6 stderr failures, 2 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) --- 8,10 ---- ! == 673 tests, 6 stderr failures, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == gdbserver_tests/mcinfcallRU (stderr) *************** *** 13,15 **** memcheck/tests/err_disable4 (stderr) - none/tests/fdleak_ipv4 (stdout) none/tests/fdleak_ipv4 (stderr) --- 13,14 ---- |
|
From: Tom H. <to...@co...> - 2014-02-20 04:28:32
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (GCC) 4.3.0 20080428 (Red Hat 4.3.0-8) GDB: Assembler: GNU assembler version 2.18.50.0.6-2 20080403 C library: GNU C Library stable release version 2.8 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 9 (Sulphur) Nightly build on bristol ( x86_64, Fedora 9 ) Started at 2014-02-20 03:52:40 GMT Ended at 2014-02-20 04:28:16 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 645 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/amd64/insn-pcmpistri (stderr) none/tests/amd64/sse4-64 (stdout) |
|
From: Rich C. <rc...@wi...> - 2014-02-20 04:01:10
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] GDB: GNU gdb (GDB) SUSE (7.5.1-2.1.1) Assembler: GNU assembler (GNU Binutils; openSUSE 12.3) 2.23.1 C library: GNU C Library (GNU libc) stable release version 2.17 (git c758a6861537) uname -mrs: Linux 3.7.9-1.1-desktop x86_64 Vendor version: Welcome to openSUSE 12.3 "Dartmouth" Beta 1 - Kernel %r (%t). Nightly build on ultra ( gcc (SUSE Linux) 4.7.2 20130108 [gcc-4_7-branch revision 195012] Linux 3.7.9-1.1-desktop x86_64 ) Started at 2014-02-19 21:30:01 CST Ended at 2014-02-19 22:00:58 CST Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 666 tests, 0 stderr failures, 0 stdout failures, 1 stderrB failure, 0 stdoutB failures, 0 post failures == gdbserver_tests/mssnapshot (stderrB) ================================================= ./valgrind-new/gdbserver_tests/mssnapshot.stderrB.diff ================================================= --- mssnapshot.stderrB.exp 2014-02-19 21:45:57.293175766 -0600 +++ mssnapshot.stderrB.out 2014-02-19 21:50:01.674154949 -0600 @@ -1,5 +1,11 @@ relaying data between gdb and process .... +Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 +Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158" vgdb-error value changed from 0 to 999999 +Missing separate debuginfo for /lib64/libpthread.so.0 +Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef" +Missing separate debuginfo for /lib64/libc.so.6 +Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7" general valgrind monitor commands: help [debug] : monitor command help. With debug: + debugging commands v.wait [<ms>] : sleep <ms> (default 0) then continue ================================================= ./valgrind-old/gdbserver_tests/mssnapshot.stderrB.diff ================================================= --- mssnapshot.stderrB.exp 2014-02-19 21:30:29.912376768 -0600 +++ mssnapshot.stderrB.out 2014-02-19 21:34:39.089416942 -0600 @@ -1,5 +1,11 @@ relaying data between gdb and process .... +Missing separate debuginfo for /lib64/ld-linux-x86-64.so.2 +Try: zypper install -C "debuginfo(build-id)=ecb8ef1a6904a2a3ec60a527f415f520c8636158" vgdb-error value changed from 0 to 999999 +Missing separate debuginfo for /lib64/libpthread.so.0 +Try: zypper install -C "debuginfo(build-id)=ef5f5dbcb2398c608fef7884e1bfb65be3b5f0ef" +Missing separate debuginfo for /lib64/libc.so.6 +Try: zypper install -C "debuginfo(build-id)=bd1473e8e6a4c10a14731b5be4b35b4e87db2af7" general valgrind monitor commands: help [debug] : monitor command help. With debug: + debugging commands v.wait [<ms>] : sleep <ms> (default 0) then continue |
|
From: Tom H. <to...@co...> - 2014-02-20 03:53:59
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.1-48.fc15) Assembler: GNU assembler version 2.21.51.0.6-6.fc15 20110118 C library: GNU C Library stable release version 2.14.1 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 15 (Lovelock) Nightly build on bristol ( x86_64, Fedora 15 ) Started at 2014-02-20 03:13:15 GMT Ended at 2014-02-20 03:53:39 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 0 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == |
|
From: Tom H. <to...@co...> - 2014-02-20 03:47:41
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (GCC) 4.6.3 20120306 (Red Hat 4.6.3-2) GDB: GNU gdb (GDB) Fedora (7.3.50.20110722-16.fc16) Assembler: GNU assembler version 2.21.53.0.1-6.fc16 20110716 C library: GNU C Library development release version 2.14.90 uname -mrs: Linux 3.11.10-301.fc20.x86_64 x86_64 Vendor version: Fedora release 16 (Verne) Nightly build on bristol ( x86_64, Fedora 16 ) Started at 2014-02-20 03:02:05 GMT Ended at 2014-02-20 03:47:26 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 673 tests, 0 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == |
|
From: Maran P. <ma...@li...> - 2014-02-20 03:46:03
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (SUSE Linux) 4.3.4 [gcc-4_3-branch revision 152973] GDB: GNU gdb (GDB) SUSE (7.5.1-0.7.29) Assembler: GNU assembler (GNU Binutils; SUSE Linux Enterprise 11) 2.23.1 C library: GNU C Library stable release version 2.11.3 (20110527) uname -mrs: Linux 3.0.101-0.8-default s390x Vendor version: Welcome to SUSE Linux Enterprise Server 11 SP3 (s390x) - Kernel %r (%t). Nightly build on sless390 ( SUSE Linux Enterprise Server 11 SP1 gcc 4.3.4 on z196 (s390x) ) Started at 2014-02-20 03:45:02 CET Ended at 2014-02-20 04:45:51 CET Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 642 tests, 6 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/err_disable4 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) drd/tests/pth_barrier3 (stderr) drd/tests/pth_barrier_thr_cr (stderr) drd/tests/pth_create_chain (stderr) --tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old -- Running tests in perf ---------------------------------------------- -- bigcode1 -- bigcode1 valgrind-new:0.22s no: 4.3s (19.5x, -----) me: 7.0s (31.9x, -----) bigcode1 valgrind-old:0.22s no: 4.3s (19.5x, 0.2%) me: 7.0s (31.6x, 0.7%) -- bigcode2 -- bigcode2 valgrind-new:0.24s no: 7.2s (30.0x, -----) me:14.0s (58.5x, -----) bigcode2 valgrind-old:0.24s no: 7.2s (29.9x, 0.4%) me:13.9s (57.8x, 1.2%) -- bz2 -- bz2 valgrind-new:0.70s no: 5.0s ( 7.1x, -----) me:13.0s (18.5x, -----) bz2 valgrind-old:0.70s no: 4.9s ( 7.0x, 1.2%) me:13.0s (18.6x, -0.1%) -- fbench -- fbench valgrind-new:0.41s no: 1.6s ( 3.9x, -----) me: 4.2s (10.3x, -----) fbench valgrind-old:0.41s no: 1.6s ( 3.9x, 0.0%) me: 4.2s (10.3x, 0.0%) -- ffbench -- ffbench valgrind-new:0.20s no: 1.0s ( 5.1x, -----) me: 3.0s (15.2x, -----) ffbench valgrind-old:0.20s no: 1.0s ( 5.2x, -1.0%) me: 3.4s (17.0x,-11.8%) -- heap -- heap valgrind-new:0.23s no: 1.8s ( 7.7x, -----) me: 8.8s (38.0x, -----) heap valgrind-old:0.23s no: 1.8s ( 7.7x, 0.6%) me: 8.9s (38.8x, -1.9%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.22s no: 1.9s ( 8.8x, -----) me:12.9s (58.6x, -----) heap_pdb4 valgrind-old:0.22s no: 1.9s ( 8.9x, -0.5%) me:13.1s (59.5x, -1.4%) -- many-loss-records -- many-loss-records valgrind-new:0.02s no: 0.5s (23.5x, -----) me: 2.1s (103.5x, -----) many-loss-records valgrind-old:0.02s no: 0.5s (23.0x, 2.1%) me: 2.1s (104.5x, -1.0%) -- many-xpts -- many-xpts valgrind-new:0.07s no: 0.6s ( 8.6x, -----) me: 3.2s (45.4x, -----) many-xpts valgrind-old:0.07s no: 0.6s ( 8.4x, 1.7%) me: 3.2s (45.6x, -0.3%) -- sarp -- sarp valgrind-new:0.03s no: 0.6s (19.3x, -----) me: 3.6s (120.3x, -----) sarp valgrind-old:0.03s no: 0.6s (19.3x, 0.0%) me: 3.6s (121.0x, -0.6%) -- tinycc -- tinycc valgrind-new:0.22s no: 2.6s (12.0x, -----) me:15.0s (68.0x, -----) tinycc valgrind-old:0.22s no: 2.6s (12.0x, 0.0%) me:14.9s (68.0x, 0.1%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 44 timings ================= real 19m48.881s user 19m27.651s sys 0m19.463s |
|
From: Maran P. <ma...@li...> - 2014-02-20 03:41:14
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (GCC) 4.7.0 20120604 (Red Hat 4.7.0-7) GDB: GNU gdb (GDB) Fedora (7.4.50.20120120-42.fc17) Assembler: GNU assembler version 2.22.52.0.1-10.fc17 20120131 C library: unknown uname -mrs: Linux 3.3.4-5.fc17.s390x s390x Vendor version: Fedora release 17 (Beefy Miracle) Nightly build on fedoras390 ( Fedora 17 with gcc 4.7.0 on z196 (s390x) ) Started at 2014-02-20 03:45:26 CET Ended at 2014-02-20 04:41:24 CET Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 647 tests, 6 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/err_disable4 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/tc18_semabuse (stderr) helgrind/tests/tc20_verifywrap (stderr) drd/tests/pth_barrier3 (stderr) --tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old -- Running tests in perf ---------------------------------------------- -- bigcode1 -- bigcode1 valgrind-new:0.22s no: 2.8s (12.9x, -----) me: 6.0s (27.0x, -----) bigcode1 valgrind-old:0.22s no: 2.8s (12.8x, 1.1%) me: 6.4s (29.0x, -7.2%) -- bigcode2 -- bigcode2 valgrind-new:0.24s no: 5.2s (21.7x, -----) me:11.3s (47.1x, -----) bigcode2 valgrind-old:0.24s no: 5.2s (21.6x, 0.4%) me:11.6s (48.4x, -2.8%) -- bz2 -- bz2 valgrind-new:0.68s no: 3.9s ( 5.8x, -----) me:11.4s (16.8x, -----) bz2 valgrind-old:0.68s no: 3.9s ( 5.7x, 1.0%) me:11.4s (16.8x, -0.4%) -- fbench -- fbench valgrind-new:0.36s no: 1.5s ( 4.2x, -----) me: 5.7s (15.9x, -----) fbench valgrind-old:0.36s no: 1.5s ( 4.2x, 0.0%) me: 5.7s (15.8x, 0.5%) -- ffbench -- ffbench valgrind-new:0.21s no: 1.2s ( 5.5x, -----) me: 3.4s (16.4x, -----) ffbench valgrind-old:0.21s no: 1.2s ( 5.5x, 0.0%) me: 3.4s (16.3x, 0.3%) -- heap -- heap valgrind-new:0.23s no: 1.2s ( 5.4x, -----) me: 8.1s (35.1x, -----) heap valgrind-old:0.23s no: 1.2s ( 5.2x, 4.0%) me: 8.0s (35.0x, 0.5%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.22s no: 1.3s ( 6.0x, -----) me:12.3s (55.9x, -----) heap_pdb4 valgrind-old:0.22s no: 1.3s ( 6.0x, 0.0%) me:12.4s (56.2x, -0.6%) -- many-loss-records -- many-loss-records valgrind-new:0.03s no: 0.3s (11.7x, -----) me: 2.0s (67.0x, -----) many-loss-records valgrind-old:0.03s no: 0.4s (12.0x, -2.9%) me: 2.0s (67.7x, -1.0%) -- many-xpts -- many-xpts valgrind-new:0.07s no: 0.5s ( 6.4x, -----) me: 3.4s (48.3x, -----) many-xpts valgrind-old:0.07s no: 0.5s ( 6.6x, -2.2%) me: 3.4s (48.3x, 0.0%) -- sarp -- sarp valgrind-new:0.03s no: 0.5s (15.0x, -----) me: 5.6s (185.7x, -----) sarp valgrind-old:0.03s no: 0.5s (15.0x, 0.0%) me: 5.6s (186.0x, -0.2%) -- tinycc -- tinycc valgrind-new:0.23s no: 2.1s ( 9.3x, -----) me:15.3s (66.5x, -----) tinycc valgrind-old:0.23s no: 2.1s ( 9.3x, -0.5%) me:15.3s (66.6x, -0.1%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 44 timings ================= real 18m23.633s user 18m1.725s sys 0m19.176s |
|
From: Rich C. <rc...@wi...> - 2014-02-20 03:25:45
|
valgrind revision: 13819
VEX revision: 2822
C compiler: gcc (SUSE Linux) 4.8.1 20130909 [gcc-4_8-branch revision 202388]
GDB: GNU gdb (GDB; openSUSE Factory) 7.6.50.20130731-cvs
Assembler: GNU assembler (GNU Binutils; openSUSE Factory) 2.23.2
C library: GNU C Library (GNU libc) stable release version 2.18 (git )
uname -mrs: Linux 3.11.4-3-desktop x86_64
Vendor version: Welcome to openSUSE 13.1 "Bottle" Beta 1 - Kernel %r (%t).
Nightly build on rodan ( Linux 3.11.4-3-desktop x86_64 )
Started at 2014-02-19 19:22:01 CST
Ended at 2014-02-19 21:25:30 CST
Results unchanged from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... failed
Regression test results follow
== 588 tests, 6 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/dw4 (stderr)
memcheck/tests/err_disable3 (stderr)
memcheck/tests/err_disable4 (stderr)
memcheck/tests/threadname (stderr)
memcheck/tests/threadname_xml (stderr)
exp-sgcheck/tests/hackedbz2 (stderr)
=================================================
./valgrind-new/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-02-19 20:24:23.898656348 -0600
+++ hackedbz2.stderr.out 2014-02-19 21:24:11.783277434 -0600
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-new/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2014-02-19 20:24:01.469396158 -0600
+++ dw4.stderr.out 2014-02-19 20:42:31.229269875 -0600
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-new/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-new/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-02-19 20:24:04.521431563 -0600
+++ err_disable3.stderr.out 2014-02-19 20:42:37.924347541 -0600
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-new/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2014-02-19 20:24:07.364464544 -0600
+++ err_disable4.stderr.out 2014-02-19 20:42:41.969394466 -0600
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-new/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-02-19 20:24:07.396464915 -0600
+++ threadname.stderr.out 2014-02-19 20:48:26.132386912 -0600
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-new/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2014-02-19 20:24:04.554431946 -0600
+++ threadname_xml.stderr.out 2014-02-19 20:48:28.168410531 -0600
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
=================================================
./valgrind-old/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-02-19 19:22:36.047643597 -0600
+++ hackedbz2.stderr.out 2014-02-19 20:22:01.136000236 -0600
@@ -1,7 +1,6 @@
Invalid read of size 1
- at 0x........: vex_strlen (hackedbz2.c:1006)
- by 0x........: add_to_myprintf_buf (hackedbz2.c:1284)
+ at 0x........: add_to_myprintf_buf (hackedbz2.c:1006)
by 0x........: vex_printf (hackedbz2.c:1155)
by 0x........: BZ2_compressBlock (hackedbz2.c:4039)
by 0x........: handle_compress (hackedbz2.c:4761)
=================================================
./valgrind-old/memcheck/tests/dw4.stderr.diff
=================================================
--- dw4.stderr.exp 2014-02-19 19:22:26.187529215 -0600
+++ dw4.stderr.out 2014-02-19 19:40:10.681877832 -0600
@@ -1,3 +1,11 @@
+
+parse_type_DIE: confused by:
+ <1><492>: DW_TAG_structure_type
+ DW_AT_signature : 8 byte signature: 9b d0 55 13 bb 1e e9 37
+
+WARNING: Serious error when reading debug info
+When reading debug info from /usr/local/src/valgrind/nightly/valgrind-old/memcheck/tests/dw4:
+parse_type_DIE: confused by the above DIE
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:49)
@@ -8,12 +16,10 @@
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:51)
- Location 0x........ is 0 bytes inside S2[0].i,
- a global variable declared at dw4.c:42
+ Address 0x........ is 4 bytes inside data symbol "S2"
Uninitialised byte(s) found during client check request
at 0x........: croak (dw4.c:27)
by 0x........: main (dw4.c:52)
- Location 0x........ is 0 bytes inside local.i,
- declared at dw4.c:46, in frame #1 of thread 1
+ Address 0x........ is on thread 1's stack
=================================================
./valgrind-old/memcheck/tests/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-02-19 19:22:26.172529041 -0600
+++ err_disable3.stderr.out 2014-02-19 19:40:17.274954314 -0600
@@ -10,8 +10,6 @@
Thread 2:
Invalid read of size 1
at 0x........: err (err_disable3.c:25)
- by 0x........: child_fn (err_disable3.c:31)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable3.c:42)
=================================================
./valgrind-old/memcheck/tests/err_disable4.stderr.diff
=================================================
--- err_disable4.stderr.exp 2014-02-19 19:22:24.933514668 -0600
+++ err_disable4.stderr.out 2014-02-19 19:40:21.337001436 -0600
@@ -1501,8 +1501,6 @@
Thread x:
Invalid read of size 1
at 0x........: err (err_disable4.c:41)
- by 0x........: child_fn_2 (err_disable4.c:55)
- ...
Address 0x........ is 5 bytes inside a block of size 10 free'd
at 0x........: free (vg_replace_malloc.c:...)
by 0x........: main (err_disable4.c:68)
=================================================
./valgrind-old/memcheck/tests/threadname.stderr.diff
=================================================
--- threadname.stderr.exp 2014-02-19 19:22:26.319530747 -0600
+++ threadname.stderr.out 2014-02-19 19:46:06.551006075 -0600
@@ -9,36 +9,12 @@
Thread 2:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_0 (threadname.c:53)
- ...
Address 0x........ is 0 bytes after a block of size 2 alloc'd
at 0x........: malloc (vg_replace_malloc.c:...)
by 0x........: bad_things (threadname.c:15)
by 0x........: child_fn_0 (threadname.c:53)
...
-Thread 3 try1:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
- Address 0x........ is 0 bytes after a block of size 3 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_1 (threadname.c:38)
- ...
-
-Thread 4 012345678901234:
-Invalid write of size 1
- at 0x........: bad_things (threadname.c:16)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
- Address 0x........ is 0 bytes after a block of size 4 alloc'd
- at 0x........: malloc (vg_replace_malloc.c:...)
- by 0x........: bad_things (threadname.c:15)
- by 0x........: child_fn_2 (threadname.c:26)
- ...
-
Thread 1:
Invalid write of size 1
at 0x........: bad_things (threadname.c:16)
=================================================
./valgrind-old/memcheck/tests/threadname_xml.stderr.diff
=================================================
--- threadname_xml.stderr.exp 2014-02-19 19:22:25.248518322 -0600
+++ threadname_xml.stderr.out 2014-02-19 19:46:08.568029473 -0600
@@ -94,14 +94,6 @@
<file>threadname.c</file>
<line>...</line>
</frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_0</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
</stack>
<auxwhat>Address 0x........ is 0 bytes after a block of size 2 alloc'd</auxwhat>
<stack>
@@ -135,112 +127,6 @@
<error>
<unique>0x........</unique>
<tid>...</tid>
- <threadname>try1</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 3 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>malloc</fn>
- <dir>...</dir>
- <file>vg_replace_malloc.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_1</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
-</error>
-
-<error>
- <unique>0x........</unique>
- <tid>...</tid>
- <threadname>012345678901234</threadname>
- <kind>InvalidWrite</kind>
- <what>Invalid write of size 1</what>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>bad_things</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
- <fn>child_fn_2</fn>
- <dir>...</dir>
- <file>threadname.c</file>
- <line>...</line>
- </frame>
- </stack>
- <auxwhat>Address 0x........ is 0 bytes after a block of size 4 alloc'd</auxwhat>
- <stack>
- <frame>
- <ip>0x........</ip>
- <obj>...</obj>
<truncated beyond 100 lines>
|
|
From: Maran P. <ma...@li...> - 2014-02-20 03:24:07
|
valgrind revision: 13819 VEX revision: 2822 C compiler: gcc (GCC) 4.4.7 20120313 (Red Hat 4.4.7-3) GDB: GNU gdb (GDB) Red Hat Enterprise Linux (7.2-60.el6) Assembler: GNU assembler version 2.20.51.0.2-5.36.el6 20100205 C library: GNU C Library stable release version 2.12 uname -mrs: Linux 2.6.32-358.el6.s390x s390x Vendor version: Red Hat Enterprise Linux Server release 6.4 (Santiago) Nightly build on rhels390 ( RHEL 6.4 with gcc 4.4.7 on zEC12 (s390x) ) Started at 2014-02-20 03:45:26 CET Ended at 2014-02-20 04:24:11 CET Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 641 tests, 5 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/err_disable4 (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) drd/tests/pth_barrier3 (stderr) drd/tests/pth_create_chain (stderr) ================================================= == Results from 24 hours ago == ================================================= Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 641 tests, 6 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/err_disable4 (stderr) memcheck/tests/thread_alloca (stderr) helgrind/tests/pth_barrier3 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) drd/tests/pth_barrier3 (stderr) drd/tests/pth_create_chain (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short 2014-02-20 03:57:51.000000000 +0100 --- new.short 2014-02-20 04:11:18.000000000 +0100 *************** *** 8,12 **** ! == 641 tests, 6 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/err_disable4 (stderr) - memcheck/tests/thread_alloca (stderr) helgrind/tests/pth_barrier3 (stderr) --- 8,11 ---- ! == 641 tests, 5 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/err_disable4 (stderr) helgrind/tests/pth_barrier3 (stderr) --tools=none,memcheck --reps=5 --vg=../valgrind-new --vg=../valgrind-old -- Running tests in perf ---------------------------------------------- -- bigcode1 -- bigcode1 valgrind-new:0.16s no: 1.7s (10.5x, -----) me: 3.1s (19.6x, -----) bigcode1 valgrind-old:0.16s no: 1.7s (10.6x, -1.2%) me: 3.1s (19.6x, -0.3%) -- bigcode2 -- bigcode2 valgrind-new:0.17s no: 3.6s (21.1x, -----) me: 7.5s (44.1x, -----) bigcode2 valgrind-old:0.17s no: 3.6s (21.4x, -1.7%) me: 7.6s (44.5x, -0.9%) -- bz2 -- bz2 valgrind-new:0.70s no: 2.5s ( 3.6x, -----) me:10.1s (14.4x, -----) bz2 valgrind-old:0.70s no: 2.5s ( 3.6x, 0.0%) me:10.1s (14.5x, -0.2%) -- fbench -- fbench valgrind-new:0.36s no: 1.4s ( 3.8x, -----) me: 3.6s (10.0x, -----) fbench valgrind-old:0.36s no: 1.4s ( 3.8x, -0.0%) me: 3.6s ( 9.9x, 0.6%) -- ffbench -- ffbench valgrind-new:0.18s no: 0.8s ( 4.3x, -----) me: 3.0s (16.4x, -----) ffbench valgrind-old:0.18s no: 0.8s ( 4.3x, 0.0%) me: 3.0s (16.5x, -0.3%) -- heap -- heap valgrind-new:0.11s no: 0.7s ( 6.6x, -----) me: 6.0s (55.0x, -----) heap valgrind-old:0.11s no: 0.7s ( 6.6x, 0.0%) me: 6.0s (55.0x, 0.0%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.13s no: 0.8s ( 6.5x, -----) me: 9.1s (69.6x, -----) heap_pdb4 valgrind-old:0.13s no: 0.8s ( 6.5x, 0.0%) me: 8.9s (68.8x, 1.1%) -- many-loss-records -- many-loss-records valgrind-new:0.01s no: 0.2s (24.0x, -----) me: 1.5s (149.0x, -----) many-loss-records valgrind-old:0.01s no: 0.2s (24.0x, 0.0%) me: 1.5s (150.0x, -0.7%) -- many-xpts -- many-xpts valgrind-new:0.04s no: 0.3s ( 7.5x, -----) me: 2.2s (56.2x, -----) many-xpts valgrind-old:0.04s no: 0.3s ( 7.5x, 0.0%) me: 2.2s (56.2x, 0.0%) -- sarp -- sarp valgrind-new:0.02s no: 0.2s (12.5x, -----) me: 2.4s (121.5x, -----) sarp valgrind-old:0.02s no: 0.2s (12.5x, 0.0%) me: 2.5s (124.0x, -2.1%) -- tinycc -- tinycc valgrind-new:0.17s no: 1.6s ( 9.5x, -----) me:12.1s (71.2x, -----) tinycc valgrind-old:0.17s no: 1.6s ( 9.6x, -0.6%) me:12.1s (71.1x, 0.2%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 44 timings ================= real 12m53.660s user 12m40.409s sys 0m10.814s |