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
(9) |
2
(11) |
3
(3) |
4
(7) |
5
(15) |
|
6
(10) |
7
(9) |
8
(12) |
9
(10) |
10
(6) |
11
(12) |
12
(12) |
|
13
(11) |
14
(14) |
15
(18) |
16
(15) |
17
(19) |
18
(15) |
19
(9) |
|
20
|
21
(5) |
22
(10) |
23
(15) |
24
(18) |
25
(20) |
26
(15) |
|
27
(14) |
28
(11) |
29
(17) |
30
(17) |
31
(23) |
|
|
|
From: <sv...@va...> - 2014-07-31 21:45:02
|
Author: sewardj
Date: Thu Jul 31 21:44:54 2014
New Revision: 14228
Log:
Add a wrapper for sys_GETMEMORYSIZE.
Modified:
branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c
Modified: branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c
==============================================================================
--- branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c (original)
+++ branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c Thu Jul 31 21:44:54 2014
@@ -1528,6 +1528,17 @@
PRINT("sys_1075_GETRANK()");
}
+// GETMEMORYSIZE(S,Pout)
+PRE(sys_1083)
+{
+ PRINT("sys_1083_GETMEMORYSIZE(%lu,%#lx)", ARG1, ARG2);
+ PRE_MEM_WRITE("getmemorysize(size)", ARG2, sizeof(ULong));
+}
+POST(sys_1083)
+{
+ POST_MEM_WRITE(ARG2, sizeof(ULong));
+}
+
// GETPVR: (P?,S,S,S,S,S)
PRE(sys_1089)
{
@@ -1976,6 +1987,7 @@
PLAX_(1071, sys_1071), // SETGINTCLASSROUTE
PLAX_(1075, sys_1075), // SETNUMSPECDOMAINS
PLAX_(1076, sys_1076), // GETRANK
+ PLAXY(1083, sys_1083), // GETMEMORYSIZE
PLAXY(1089, sys_1089), // GETPVR
PLAX_(1090, sys_1090), // ENABLEFASTSPECULATIONPATHS
};
|
|
From: <sv...@va...> - 2014-07-31 21:15:51
|
Author: philippe
Date: Thu Jul 31 21:15:42 2014
New Revision: 14227
Log:
Allow no debuginfo to be found when (trying to) produce the help msg
for activating the host visibility in gdbsrv
Modified:
trunk/coregrind/m_gdbserver/server.c
Modified: trunk/coregrind/m_gdbserver/server.c
==============================================================================
--- trunk/coregrind/m_gdbserver/server.c (original)
+++ trunk/coregrind/m_gdbserver/server.c Thu Jul 31 21:15:42 2014
@@ -327,16 +327,20 @@
hostvisibility = True;
}
if (hostvisibility) {
- const DebugInfo *tooldi = VG_(find_DebugInfo) ((Addr)handle_gdb_valgrind_command);
- vg_assert(tooldi);
- const NSegment *toolseg = VG_(am_find_nsegment)
- (VG_(DebugInfo_get_text_avma) (tooldi));
- vg_assert(toolseg);
+ const DebugInfo *tooldi
+ = VG_(find_DebugInfo) ((Addr)handle_gdb_valgrind_command);
+ const NSegment *toolseg
+ = tooldi ?
+ VG_(am_find_nsegment) (VG_(DebugInfo_get_text_avma) (tooldi))
+ : NULL;
VG_(gdb_printf)
("Enabled access to Valgrind memory/status by GDB\n"
"If not yet done, tell GDB which valgrind file(s) to use, "
"typically:\n"
- "add-symbol-file %s %p\n", VG_(am_get_filename)(toolseg), (void*) toolseg->start);
+ "add-symbol-file %s %p\n",
+ toolseg ? VG_(am_get_filename)(toolseg)
+ : "<toolfile> <address> e.g.",
+ toolseg ? (void*)toolseg->start : (void*)0x38000000);
} else
VG_(gdb_printf)
("Disabled access to Valgrind memory/status by GDB\n");
|
|
From: <sv...@va...> - 2014-07-31 20:38:48
|
Author: sewardj
Date: Thu Jul 31 20:38:40 2014
New Revision: 14226
Log:
Don't disable error reporting in the wrapper for MPI_Abort, since
doing so causes the calling thread to exit with error reporting
disabled, and the core complains -- correctly but confusingly -- about
that.
Modified:
branches/VALGRIND_3_8_BRANCH_BGQ/mpi/libmpiwrap.c
Modified: branches/VALGRIND_3_8_BRANCH_BGQ/mpi/libmpiwrap.c
==============================================================================
--- branches/VALGRIND_3_8_BRANCH_BGQ/mpi/libmpiwrap.c (original)
+++ branches/VALGRIND_3_8_BRANCH_BGQ/mpi/libmpiwrap.c Thu Jul 31 20:38:40 2014
@@ -2367,6 +2367,16 @@
return res; \
}
+#define DEFAULT_WRAPPER_W_2W_NO_DER(basename) \
+ /* Special variant of _W_2W that doesn't disable error */ \
+ /* reporting. For use by MPI_Abort only. */ \
+ UWord WRAPPER_FOR(PMPI_##basename)( UWord a1, UWord a2 ) \
+ { \
+ DEFAULT_WRAPPER_PREAMBLE(basename) \
+ CALL_FN_W_WW(res, fn, a1,a2); \
+ return res; \
+ }
+
#define DEFAULT_WRAPPER_W_3W(basename) \
UWord WRAPPER_FOR(PMPI_##basename) \
( UWord a1, UWord a2, UWord a3 ) \
@@ -2482,7 +2492,13 @@
/* If a function is commented out in this list, it's because it has a
proper wrapper written elsewhere (above here). */
-DEFAULT_WRAPPER_W_2W(Abort)
+/* MPI_Abort is a bit special. It (may?) cause the calling thread to
+ exit, so disabling error reporting over the wrapped call causes
+ Valgrind to complain that the exiting thread has error reporting
+ disabled. Hence user a special _NO_DER variant that doesn't
+ disable error reporting. */
+DEFAULT_WRAPPER_W_2W_NO_DER(Abort)
+
DEFAULT_WRAPPER_W_9W(Accumulate)
DEFAULT_WRAPPER_W_1W(Add_error_class)
DEFAULT_WRAPPER_W_2W(Add_error_code)
|
|
From: <sv...@va...> - 2014-07-31 20:13:40
|
Author: philippe
Date: Thu Jul 31 20:13:23 2014
New Revision: 14225
Log:
ensure the regcache is in sync with the fpsr part VEX represents
when fpsr is modified from gdb
Modified:
trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
Modified: trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
==============================================================================
--- trunk/coregrind/m_gdbserver/valgrind-low-arm64.c (original)
+++ trunk/coregrind/m_gdbserver/valgrind-low-arm64.c Thu Jul 31 20:13:23 2014
@@ -232,6 +232,9 @@
ULong fpsr = 0;
VG_(transfer) ((UInt*)&fpsr, buf, dir, size, mod);
LibVEX_GuestARM64_set_fpsr(arm, fpsr);
+ /* resync the cache with the part of fpsr that VEX represents. */
+ fpsr = LibVEX_GuestARM64_get_fpsr(arm);
+ VG_(transfer) ((UInt*)&fpsr, buf, valgrind_to_gdbserver, size, mod);
}
break;
}
|
|
From: <sv...@va...> - 2014-07-31 19:59:16
|
Author: sewardj
Date: Thu Jul 31 19:59:08 2014
New Revision: 14224
Log:
Enable sys_stat() on BGQ.
Modified:
branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c
Modified: branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c
==============================================================================
--- branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c (original)
+++ branches/VALGRIND_3_8_BRANCH_BGQ/coregrind/m_syswrap/syswrap-ppc64-bgq.c Thu Jul 31 19:59:08 2014
@@ -1702,7 +1702,7 @@
//QQ GENXY(__NR_setitimer, sys_setitimer), // 104
//QQ
//QQ GENXY(__NR_getitimer, sys_getitimer), // 105
-//QQ GENXY(__NR_stat, sys_newstat), // 106
+ GENXY(__NR_stat, sys_newstat), // 106
//QQ GENXY(__NR_lstat, sys_newlstat), // 107
GENXY(__NR_fstat, sys_newfstat), // 108
//QQ// _____(__NR_olduname, sys_olduname), // 109
|
|
From: <sv...@va...> - 2014-07-31 19:44:31
|
Author: philippe
Date: Thu Jul 31 19:44:24 2014
New Revision: 14223
Log:
take endianness into account in arm64 fpsr xfer,
use VKI_LITTLE_ENDIAN to decide to reverse or not bytes in image function
Modified:
trunk/coregrind/m_gdbserver/remote-utils.c
trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
Modified: trunk/coregrind/m_gdbserver/remote-utils.c
==============================================================================
--- trunk/coregrind/m_gdbserver/remote-utils.c (original)
+++ trunk/coregrind/m_gdbserver/remote-utils.c Thu Jul 31 19:44:24 2014
@@ -657,17 +657,17 @@
Useful for register and int image */
char* heximage (char *buf, char *bin, int count)
{
-#if defined(VGA_x86) || defined(VGA_amd64)
+#if (VKI_LITTLE_ENDIAN)
char rev[count];
/* note: no need for trailing \0, length is known with count */
- int i;
- for (i = 0; i < count; i++)
- rev[i] = bin[count - i - 1];
- hexify (buf, rev, count);
+ int i;
+ for (i = 0; i < count; i++)
+ rev[i] = bin[count - i - 1];
+ hexify (buf, rev, count);
#else
- hexify (buf, bin, count);
+ hexify (buf, bin, count);
#endif
- return buf;
+ return buf;
}
void* C2v(CORE_ADDR addr)
Modified: trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
==============================================================================
--- trunk/coregrind/m_gdbserver/valgrind-low-arm64.c (original)
+++ trunk/coregrind/m_gdbserver/valgrind-low-arm64.c Thu Jul 31 19:44:24 2014
@@ -222,15 +222,15 @@
architecturally defined representation. Hence use conversion
functions to convert to/from it.
VEX FPSR only models QC (bit 27), and uses a 64 bits to store
- this FPSR QC bit. So, we need to transfer from/to the lowest part
- of the ULong that VEX provides/needs, as GDB expects or
- gives only 4 bytes. */
+ this FPSR QC bit. So, we need to transfer from/to the lowest
+ significant part of the ULong that VEX provides/needs,
+ as GDB expects or gives only 4 bytes. */
if (dir == valgrind_to_gdbserver) {
ULong fpsr = LibVEX_GuestARM64_get_fpsr(arm);
- VG_(transfer) ((UInt*)&fpsr + 1, buf, dir, size, mod);
+ VG_(transfer) ((UInt*)&fpsr, buf, dir, size, mod);
} else {
ULong fpsr = 0;
- VG_(transfer) ((UInt*)&fpsr + 1, buf, dir, size, mod);
+ VG_(transfer) ((UInt*)&fpsr, buf, dir, size, mod);
LibVEX_GuestARM64_set_fpsr(arm, fpsr);
}
break;
|
|
From: <sv...@va...> - 2014-07-31 19:44:11
|
Author: florian
Date: Thu Jul 31 19:44:03 2014
New Revision: 14222
Log:
Allocate a large enough buffer in function open_tracefile.
Eliminate the global write buffer and replace it with several
buffers at block scope.
Get rid of a few unneeded casts.
Modified:
branches/BUF_REMOVAL/exp-bbv/bbv_main.c
Modified: branches/BUF_REMOVAL/exp-bbv/bbv_main.c
==============================================================================
--- branches/BUF_REMOVAL/exp-bbv/bbv_main.c (original)
+++ branches/BUF_REMOVAL/exp-bbv/bbv_main.c Thu Jul 31 19:44:03 2014
@@ -65,9 +65,6 @@
static Bool instr_count_only=False;
static Bool generate_pc_file=False;
- /* write buffer */
-static HChar buf[1024];
-
/* Global values */
static OSet* instr_info_table; /* table that holds the basic block info */
static Int block_num=1; /* global next block number */
@@ -122,11 +119,12 @@
VG_(OSetGen_ResetIter)(instr_info_table);
while ( (bb_elem = VG_(OSetGen_Next)(instr_info_table)) ) {
VG_(write)(pctrace_fd,"F",1);
+ HChar buf[VG_(strlen)(bb_elem->fn_name) + 100]; // large enough
VG_(sprintf)( buf,":%d:%x:%s\n",
bb_elem->block_num,
(Int)bb_elem->BB_addr,
bb_elem->fn_name);
- VG_(write)(pctrace_fd, (void*)buf, VG_(strlen)(buf));
+ VG_(write)(pctrace_fd, buf, VG_(strlen)(buf));
}
VG_(close)(pctrace_fd);
@@ -135,13 +133,14 @@
static Int open_tracefile(Int thread_num)
{
SysRes sres;
- HChar temp_string[2048];
+ // Allocate a buffer large enough for the general case "%s.%d" below
+ HChar temp_string[VG_(strlen)(bb_out_file) + 1 + 10 + 1];
/* For thread 1, don't append any thread number */
/* This lets the single-thread case not have any */
/* extra values appended to the file name. */
if (thread_num==1) {
- VG_(strncpy)(temp_string,bb_out_file,2047);
+ VG_(strcpy)(temp_string, bb_out_file);
}
else {
VG_(sprintf)(temp_string,"%s.%d",bb_out_file,thread_num);
@@ -178,11 +177,12 @@
VG_(OSetGen_ResetIter)(instr_info_table);
while ( (bb_elem = VG_(OSetGen_Next)(instr_info_table)) ) {
if ( bb_elem->inst_counter[current_thread] != 0 ) {
+ HChar buf[32]; // large enough
VG_(sprintf)( buf,":%d:%d ",
bb_elem->block_num,
bb_elem->inst_counter[current_thread]);
VG_(write)(bbv_thread[current_thread].bbtrace_fd,
- (void*)buf, VG_(strlen)(buf));
+ buf, VG_(strlen)(buf));
bb_elem->inst_counter[current_thread] = 0;
}
}
@@ -570,7 +570,7 @@
for(i=0;i<allocated_threads;i++) {
if (bbv_thread[i].total_instr!=0) {
-
+ HChar buf[500]; // large enough
VG_(sprintf)(buf,"\n\n"
"# Thread %d\n"
"# Total intervals: %d (Interval Size %d)\n"
@@ -594,7 +594,7 @@
bbv_thread[i].bbtrace_fd=open_tracefile(i);
}
/* Also print to results file */
- VG_(write)(bbv_thread[i].bbtrace_fd,(void*)buf,VG_(strlen)(buf));
+ VG_(write)(bbv_thread[i].bbtrace_fd,buf,VG_(strlen)(buf));
VG_(close)(bbv_thread[i].bbtrace_fd);
}
}
|
|
From: <sv...@va...> - 2014-07-31 19:29:44
|
Author: florian
Date: Thu Jul 31 19:29:37 2014
New Revision: 14221
Log:
Fix one more format string in VG_(percentify).
Modified:
branches/BUF_REMOVAL/coregrind/m_libcprint.c
Modified: branches/BUF_REMOVAL/coregrind/m_libcprint.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_libcprint.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_libcprint.c Thu Jul 31 19:29:37 2014
@@ -307,7 +307,7 @@
p1 = (100*n) / m;
if (d == 0) {
- VG_(sprintf)(buf, "%lld%%", p1); // FIXME: unsafe
+ VG_(sprintf)(buf, "%llu%%", p1); // FIXME: unsafe
} else {
ULong p2;
UInt ex;
|
|
From: <sv...@va...> - 2014-07-31 19:21:17
|
Author: florian
Date: Thu Jul 31 19:21:07 2014
New Revision: 14220
Log:
Fix VG_(percentify) to some extent.
- for m == 0, the computed format string was incorrect
- ULong value requires %llu format, UInt needs %u
The function has other issues:
- The computation of p1 and p2 will overflow for certain value
combinations e.g. n = ULONG_MAX and m = 1.
- It is unsafe to use sprintf.
- The width of the result into which the numbers will be right justified
is coupled to the size of the buffer. That is not always desirable.
- The size of the buffer should be at least 20 + 1 + d + 1 + 1 so no
overrun will ever occur for all possible input values.
I'm not going to tackle this. The proper fix is to add light-weight
support for writing floating point numbers to the printf machinery.
Modified:
branches/BUF_REMOVAL/coregrind/m_libcprint.c
Modified: branches/BUF_REMOVAL/coregrind/m_libcprint.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_libcprint.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_libcprint.c Thu Jul 31 19:21:07 2014
@@ -293,12 +293,12 @@
{
Int i, len, space;
ULong p1;
- HChar fmt[32];
+ HChar fmt[32]; // large enough
if (m == 0) {
// Have to generate the format string in order to be flexible about
// the width of the field.
- VG_(sprintf)(fmt, "%%-%ds", n_buf);
+ VG_(sprintf)(fmt, "%%%ds", n_buf);
// fmt is now "%<n_buf>s" where <d> is 1,2,3...
VG_(sprintf)(buf, fmt, "--%");
return;
@@ -307,7 +307,7 @@
p1 = (100*n) / m;
if (d == 0) {
- VG_(sprintf)(buf, "%lld%%", p1);
+ VG_(sprintf)(buf, "%lld%%", p1); // FIXME: unsafe
} else {
ULong p2;
UInt ex;
@@ -320,9 +320,9 @@
p2 = ((100*n*ex) / m) % ex;
// Have to generate the format string in order to be flexible about
// the width of the post-decimal-point part.
- VG_(sprintf)(fmt, "%%lld.%%0%dlld%%%%", d);
+ VG_(sprintf)(fmt, "%%llu.%%0%ullu%%%%", d);
// fmt is now "%lld.%0<d>lld%%" where <d> is 1,2,3...
- VG_(sprintf)(buf, fmt, p1, p2);
+ VG_(sprintf)(buf, fmt, p1, p2); // FIXME: unsafe
}
len = VG_(strlen)(buf);
|
|
From: <sv...@va...> - 2014-07-31 17:55:35
|
Author: philippe
Date: Thu Jul 31 17:55:27 2014
New Revision: 14219
Log:
arm64: fix the conversion from/to VEX fpsr to/from GDB representation
Modified:
trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
Modified: trunk/coregrind/m_gdbserver/valgrind-low-arm64.c
==============================================================================
--- trunk/coregrind/m_gdbserver/valgrind-low-arm64.c (original)
+++ trunk/coregrind/m_gdbserver/valgrind-low-arm64.c Thu Jul 31 17:55:27 2014
@@ -218,17 +218,19 @@
case 64: VG_(transfer) (&arm->guest_Q30, buf, dir, size, mod); break;
case 65: VG_(transfer) (&arm->guest_Q31, buf, dir, size, mod); break;
case 66: {
- /* The ARM64 FPSR representation is not the same as the
+ /* The VEX ARM64 FPSR representation is not the same as the
architecturally defined representation. Hence use conversion
- functions to convert to/from it. */
+ functions to convert to/from it.
+ VEX FPSR only models QC (bit 27), and uses a 64 bits to store
+ this FPSR QC bit. So, we need to transfer from/to the lowest part
+ of the ULong that VEX provides/needs, as GDB expects or
+ gives only 4 bytes. */
if (dir == valgrind_to_gdbserver) {
ULong fpsr = LibVEX_GuestARM64_get_fpsr(arm);
- // XXX FIXME what if size != 8 ? Does this still work?
- VG_(transfer) (&fpsr, buf, dir, size, mod);
+ VG_(transfer) ((UInt*)&fpsr + 1, buf, dir, size, mod);
} else {
- // XXX FIXME what if size != 8 ? Does this still work?
ULong fpsr = 0;
- VG_(transfer) (&fpsr, buf, dir, size, mod);
+ VG_(transfer) ((UInt*)&fpsr + 1, buf, dir, size, mod);
LibVEX_GuestARM64_set_fpsr(arm, fpsr);
}
break;
|
|
From: <sv...@va...> - 2014-07-31 16:45:02
|
Author: philippe
Date: Thu Jul 31 16:44:51 2014
New Revision: 14218
Log:
cfsi_m_ix array should only be indexed according to sizeof_m_ix,
so decalre as a void*.
Modified:
trunk/coregrind/m_debuginfo/priv_storage.h
Modified: trunk/coregrind/m_debuginfo/priv_storage.h
==============================================================================
--- trunk/coregrind/m_debuginfo/priv_storage.h (original)
+++ trunk/coregrind/m_debuginfo/priv_storage.h Thu Jul 31 16:44:51 2014
@@ -904,7 +904,9 @@
cfsi_exprs. */
Addr* cfsi_base;
UInt sizeof_cfsi_m_ix; /* size in byte of indexes stored in cfsi_m_ix. */
- UInt* cfsi_m_ix; /* Each index occupies sizeof_cfsi_m_ix bytes. */
+ void* cfsi_m_ix; /* Each index occupies sizeof_cfsi_m_ix bytes.
+ The void* is an UChar* or UShort* or UInt*
+ depending on sizeof_cfsi_m_ix. */
DiCfSI* cfsi_rd; /* Only used during reading, NULL once info is read. */
|
|
From: <sv...@va...> - 2014-07-31 14:25:40
|
Author: sewardj
Date: Thu Jul 31 14:25:29 2014
New Revision: 14217
Log:
Add support for stack unwinding using the ARM32 specific EXIDX format.
Added:
trunk/coregrind/m_debuginfo/priv_readexidx.h
trunk/coregrind/m_debuginfo/readexidx.c
Modified:
trunk/NEWS
trunk/coregrind/Makefile.am
trunk/coregrind/m_debuginfo/debuginfo.c
trunk/coregrind/m_debuginfo/priv_storage.h
trunk/coregrind/m_debuginfo/readelf.c
trunk/coregrind/m_debuginfo/storage.c
Modified: trunk/NEWS
==============================================================================
--- trunk/NEWS (original)
+++ trunk/NEWS Thu Jul 31 14:25:29 2014
@@ -90,6 +90,10 @@
* Reduction of memory used by Valgrind to read and store the debug information.
+* Valgrind can now read EXIDX unwind information on 32-bit ARM targets.
+ If an object contains both CFI and EXIDX unwind information, Valgrind
+ will prefer the CFI over the EXIDX.
+
* ==================== FIXED BUGS ====================
The following bugs have been fixed or resolved. Note that "n-i-bz"
Modified: trunk/coregrind/Makefile.am
==============================================================================
--- trunk/coregrind/Makefile.am (original)
+++ trunk/coregrind/Makefile.am Thu Jul 31 14:25:29 2014
@@ -222,6 +222,7 @@
m_debuginfo/priv_readdwarf.h \
m_debuginfo/priv_readdwarf3.h \
m_debuginfo/priv_readelf.h \
+ m_debuginfo/priv_readexidx.h \
m_debuginfo/priv_readmacho.h \
m_debuginfo/priv_image.h \
m_debuginfo/lzoconf.h \
@@ -319,6 +320,7 @@
m_debuginfo/readdwarf.c \
m_debuginfo/readdwarf3.c \
m_debuginfo/readelf.c \
+ m_debuginfo/readexidx.c \
m_debuginfo/readmacho.c \
m_debuginfo/readpdb.c \
m_debuginfo/readstabs.c \
Modified: trunk/coregrind/m_debuginfo/debuginfo.c
==============================================================================
--- trunk/coregrind/m_debuginfo/debuginfo.c (original)
+++ trunk/coregrind/m_debuginfo/debuginfo.c Thu Jul 31 14:25:29 2014
@@ -2378,6 +2378,7 @@
case Creg_ARM_R14: return eec->uregs->r14;
case Creg_ARM_R13: return eec->uregs->r13;
case Creg_ARM_R12: return eec->uregs->r12;
+ case Creg_ARM_R7: return eec->uregs->r7;
# elif defined(VGA_s390x)
case Creg_IA_IP: return eec->uregs->ia;
case Creg_IA_SP: return eec->uregs->sp;
Added: trunk/coregrind/m_debuginfo/priv_readexidx.h
==============================================================================
--- trunk/coregrind/m_debuginfo/priv_readexidx.h (added)
+++ trunk/coregrind/m_debuginfo/priv_readexidx.h Thu Jul 31 14:25:29 2014
@@ -0,0 +1,50 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
+
+/*--------------------------------------------------------------------*/
+/*--- Reading of ARM(32) EXIDX unwind information ---*/
+/*-- priv_readexidx.h ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2014-2014 Mozilla Foundation
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+/* Contributed by Julian Seward <js...@ac...> */
+
+#ifndef __PRIV_READEXIDX_H
+#define __PRIV_READEXIDX_H
+
+#include "pub_core_debuginfo.h" // DebugInfo
+
+extern
+void ML_(read_exidx) ( /*MOD*/DebugInfo* di,
+ UChar* exidx_img, SizeT exidx_size,
+ UChar* extab_img, SizeT extab_size,
+ Addr text_last_svma,
+ PtrdiffT text_bias );
+
+#endif /* ndef __PRIV_READEXIDX_H */
+
+/*--------------------------------------------------------------------*/
+/*--- end priv_readexidx.h ---*/
+/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_debuginfo/priv_storage.h
==============================================================================
--- trunk/coregrind/m_debuginfo/priv_storage.h (original)
+++ trunk/coregrind/m_debuginfo/priv_storage.h Thu Jul 31 14:25:29 2014
@@ -274,6 +274,8 @@
Int r12_off;
Int r11_off;
Int r7_off;
+ // If you add additional fields, don't forget to update the
+ // initialisation of this in readexidx.c accordingly.
}
DiCfSI_m;
#elif defined(VGA_arm64)
@@ -369,13 +371,15 @@
typedef
enum {
- Creg_IA_SP=0x213,
+ Creg_INVALID=0x213,
+ Creg_IA_SP,
Creg_IA_BP,
Creg_IA_IP,
Creg_ARM_R13,
Creg_ARM_R12,
Creg_ARM_R15,
Creg_ARM_R14,
+ Creg_ARM_R7,
Creg_ARM64_X30,
Creg_S390_R14,
Creg_MIPS_RA
@@ -788,6 +792,18 @@
PtrdiffT sbss_bias;
Addr sbss_debug_svma;
PtrdiffT sbss_debug_bias;
+ /* .ARM.exidx -- sometimes present on arm32, containing unwind info. */
+ Bool exidx_present;
+ Addr exidx_avma;
+ Addr exidx_svma;
+ SizeT exidx_size;
+ PtrdiffT exidx_bias;
+ /* .ARM.extab -- sometimes present on arm32, containing unwind info. */
+ Bool extab_present;
+ Addr extab_avma;
+ Addr extab_svma;
+ SizeT extab_size;
+ PtrdiffT extab_bias;
/* .plt */
Bool plt_present;
Addr plt_avma;
Modified: trunk/coregrind/m_debuginfo/readelf.c
==============================================================================
--- trunk/coregrind/m_debuginfo/readelf.c (original)
+++ trunk/coregrind/m_debuginfo/readelf.c Thu Jul 31 14:25:29 2014
@@ -51,6 +51,7 @@
#include "priv_readdwarf.h" /* 'cos ELF contains DWARF */
#include "priv_readdwarf3.h"
#include "priv_readstabs.h" /* and stabs, if we're unlucky */
+#include "priv_readexidx.h"
/* --- !!! --- EXTERNAL HEADERS start --- !!! --- */
#include <elf.h>
@@ -2176,6 +2177,50 @@
}
}
+ /* Accept .ARM.exidx where mapped as rx (code). */
+ /* FIXME: make sure the entire section is mapped in, not just
+ the first address. */
+ if (0 == VG_(strcmp)(name, ".ARM.exidx")) {
+ if (inrx && !di->exidx_present) {
+ di->exidx_present = True;
+ di->exidx_svma = svma;
+ di->exidx_avma = svma + inrx->bias;
+ di->exidx_size = size;
+ di->exidx_bias = inrx->bias;
+ TRACE_SYMTAB("acquiring .exidx svma = %#lx .. %#lx\n",
+ di->exidx_svma,
+ di->exidx_svma + di->exidx_size - 1);
+ TRACE_SYMTAB("acquiring .exidx avma = %#lx .. %#lx\n",
+ di->exidx_avma,
+ di->exidx_avma + di->exidx_size - 1);
+ TRACE_SYMTAB("acquiring .exidx bias = %#lx\n", di->exidx_bias);
+ } else {
+ BAD(".ARM.exidx");
+ }
+ }
+
+ /* Accept .ARM.extab where mapped as rx (code). */
+ /* FIXME: make sure the entire section is mapped in, not just
+ the first address. */
+ if (0 == VG_(strcmp)(name, ".ARM.extab")) {
+ if (inrx && !di->extab_present) {
+ di->extab_present = True;
+ di->extab_svma = svma;
+ di->extab_avma = svma + inrx->bias;
+ di->extab_size = size;
+ di->extab_bias = inrx->bias;
+ TRACE_SYMTAB("acquiring .extab svma = %#lx .. %#lx\n",
+ di->extab_svma,
+ di->extab_svma + di->extab_size - 1);
+ TRACE_SYMTAB("acquiring .extab avma = %#lx .. %#lx\n",
+ di->extab_avma,
+ di->extab_avma + di->extab_size - 1);
+ TRACE_SYMTAB("acquiring .extab bias = %#lx\n", di->extab_bias);
+ } else {
+ BAD(".ARM.extab");
+ }
+ }
+
ML_(dinfo_free)(name);
# undef BAD
@@ -2729,6 +2774,7 @@
vg_assert((dynsym_escn.szB % sizeof(ElfXX_Sym)) == 0);
vg_assert((symtab_escn.szB % sizeof(ElfXX_Sym)) == 0);
+ /* TOPLEVEL */
/* Read symbols */
{
void (*read_elf_symtab)(struct _DebugInfo*, const HChar*,
@@ -2746,7 +2792,7 @@
read_elf_symtab(di, "dynamic symbol table",
&dynsym_escn, &dynstr_escn, &opd_escn,
False);
- } /* Read symbols */
+ }
/* TOPLEVEL */
/* Read .eh_frame and .debug_frame (call-frame-info) if any. Do
@@ -2781,13 +2827,15 @@
&& !defined(VGPV_arm_linux_android) \
&& !defined(VGPV_x86_linux_android) \
&& !defined(VGP_mips64_linux)
-#if 0
- if (stab_img && stabstr_img) {
- ML_(read_debuginfo_stabs) ( di, stab_img, stab_sz,
- stabstr_img, stabstr_sz );
- }
-#endif
+ // JRS 31 July 2014: stabs reading is currently broken and
+ // therefore deactivated.
+ //if (stab_img && stabstr_img) {
+ // ML_(read_debuginfo_stabs) ( di, stab_img, stab_sz,
+ // stabstr_img, stabstr_sz );
+ //}
# endif
+
+ /* TOPLEVEL */
/* jrs 2006-01-01: icc-8.1 has been observed to generate
binaries without debug_str sections. Don't preclude
debuginfo reading for that reason, but, in
@@ -2820,13 +2868,50 @@
);
}
}
-#if 0
- if (dwarf1d_img && dwarf1l_img) {
- ML_(read_debuginfo_dwarf1) ( di, dwarf1d_img, dwarf1d_sz,
- dwarf1l_img, dwarf1l_sz );
- }
-#endif
+
+ /* TOPLEVEL */
+ // JRS 31 July 2014: dwarf-1 reading is currently broken and
+ // therefore deactivated.
+ //if (dwarf1d_img && dwarf1l_img) {
+ // ML_(read_debuginfo_dwarf1) ( di, dwarf1d_img, dwarf1d_sz,
+ // dwarf1l_img, dwarf1l_sz );
+ //}
+
+# if defined(VGA_arm)
/* TOPLEVEL */
+ /* ARM32 only: read .exidx/.extab if present. Note we are
+ reading these directly out of the mapped in (running) image.
+ Also, read these only if no CFI based unwind info was
+ acquired for this file.
+
+ An .exidx section is always required, but the .extab section
+ can be optionally omitted, provided that .exidx does not
+ refer to it. If the .exidx is erroneous and does refer to
+ .extab even though .extab is missing, the range checks done
+ by GET_EX_U32 in ExtabEntryExtract in readexidx.c should
+ prevent any invalid memory accesses, and cause the .extab to
+ be rejected as invalid.
+
+ FIXME:
+ * check with m_aspacemgr that the entire [exidx_avma, +exidx_size)
+ and [extab_avma, +extab_size) areas are readable, since we're
+ reading this stuff out of the running image (not from a file/socket)
+ and we don't want to segfault.
+ * DebugInfo::exidx_bias and use text_bias instead.
+ I think it's always the same.
+ * remove DebugInfo::{extab_bias, exidx_svma, extab_svma} since
+ they are never used.
+ */
+ if (di->exidx_present
+ && di->cfsi_used == 0
+ && di->text_present && di->text_size > 0) {
+ Addr text_last_svma = di->text_svma + di->text_size - 1;
+ ML_(read_exidx)( di, (UChar*)di->exidx_avma, di->exidx_size,
+ (UChar*)di->extab_avma, di->extab_size,
+ text_last_svma,
+ di->exidx_bias );
+ }
+# endif /* defined(VGA_arm) */
} /* "Find interesting sections, read the symbol table(s), read any debug
information" (a local scope) */
Added: trunk/coregrind/m_debuginfo/readexidx.c
==============================================================================
--- trunk/coregrind/m_debuginfo/readexidx.c (added)
+++ trunk/coregrind/m_debuginfo/readexidx.c Thu Jul 31 14:25:29 2014
@@ -0,0 +1,1097 @@
+/* -*- mode: C; c-basic-offset: 3; -*- */
+
+/*--------------------------------------------------------------------*/
+/*--- Reading of ARM(32) EXIDX unwind information readexidx.c ---*/
+/*--------------------------------------------------------------------*/
+
+/*
+ This file is part of Valgrind, a dynamic binary instrumentation
+ framework.
+
+ Copyright (C) 2014-2014 Mozilla Foundation
+
+ This program is free software; you can redistribute it and/or
+ modify it under the terms of the GNU General Public License as
+ published by the Free Software Foundation; either version 2 of the
+ License, or (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful, but
+ WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+ 02111-1307, USA.
+
+ The GNU General Public License is contained in the file COPYING.
+*/
+
+/* libunwind - a platform-independent unwind library
+ Copyright 2011 Linaro Limited
+
+This file is part of libunwind.
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
+
+
+// Copyright (c) 2010 Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+
+// Derived originally from libunwind, with very extensive modifications.
+/* Contributed by Julian Seward <js...@ac...> */
+
+
+// This file translates EXIDX unwind information into the same format
+// that Valgrind uses for CFI information. Hence Valgrind's CFI
+// unwinding abilities also become usable for EXIDX.
+//
+// See: "Exception Handling ABI for the ARM Architecture", ARM IHI 0038A
+// http://infocenter.arm.com/help/topic/com.arm.doc.ihi0038a/IHI0038A_ehabi.pdf
+
+// EXIDX data is presented in two parts:
+//
+// * an index table. This contains two words per routine,
+// the first of which identifies the routine, and the second
+// of which is a reference to the unwind bytecode. If the
+// bytecode is very compact -- 3 bytes or less -- it can be
+// stored directly in the second word.
+//
+// * an area containing the unwind bytecodes.
+//
+// General flow is: ML_(read_exidx) iterates over all
+// of the index table entries (pairs). For each entry, it:
+//
+// * calls ExtabEntryExtract to copy the bytecode out into
+// an intermediate buffer.
+
+// * uses ExtabEntryDecode to parse the intermediate
+// buffer. Each bytecode instruction is bundled into a
+// arm_ex_to_module::extab_data structure, and handed to ..
+//
+// * .. TranslateCmd, which generates the pseudo-CFI
+// records that Valgrind stores.
+
+// This file is derived from the following files in the Mozilla tree
+// toolkit/crashreporter/google-breakpad:
+// src/common/arm_ex_to_module.cc
+// src/common/arm_ex_reader.cc
+
+
+#if defined(VGA_arm)
+
+#include "pub_core_basics.h"
+#include "pub_core_libcbase.h"
+#include "pub_core_libcprint.h"
+#include "pub_core_libcassert.h"
+#include "pub_core_options.h"
+
+#include "priv_storage.h"
+#include "priv_readexidx.h"
+
+
+static void complain ( const HChar* str )
+{
+ if (!VG_(clo_xml) && VG_(clo_verbosity) > 1)
+ VG_(message)(Vg_UserMsg,
+ " Warning: whilst reading EXIDX: %s\n", str);
+}
+
+
+/*------------------------------------------------------------*/
+/*--- MemoryRange ---*/
+/*------------------------------------------------------------*/
+
+typedef struct { Addr start; SizeT len; } MemoryRange;
+
+/* Initialise |mr| for [start .. start+len). Zero ranges are allowed,
+ but wraparounds are not. Returns True on success. */
+static Bool MemoryRange__init ( /*OUT*/MemoryRange* mr,
+ const void* startV, SizeT len )
+{
+ VG_(memset)(mr, 0, sizeof(*mr));
+ /* This relies on Addr being unsigned. */
+ Addr start = (Addr)startV;
+ if (len > 0 && start + len - 1 < start) {
+ return False;
+ }
+ mr->start = start;
+ mr->len = len;
+ return True;
+}
+
+static Bool MemoryRange__covers ( MemoryRange* mr,
+ const void* startV, SizeT len )
+{
+ vg_assert(len > 0);
+ if (mr->len == 0) {
+ return False;
+ }
+ Addr start = (Addr)startV;
+ return start >= mr->start && start + len - 1 <= mr->start + mr->len - 1;
+}
+
+
+/*------------------------------------------------------------*/
+/*--- (Pass 1 of 3) The EXIDX extractor ---*/
+/*------------------------------------------------------------*/
+
+#define ARM_EXIDX_CANT_UNWIND 0x00000001
+#define ARM_EXIDX_COMPACT 0x80000000
+#define ARM_EXTBL_OP_FINISH 0xb0
+#define ARM_EXIDX_TABLE_LIMIT (255*4)
+
+/* These are in the ARM-defined format, so their layout is important. */
+typedef
+ struct { UInt addr; UInt data; }
+ ExidxEntry;
+
+
+typedef
+ enum {
+ ExSuccess=1, // success
+ ExInBufOverflow, // out-of-range while reading .exidx
+ ExOutBufOverflow, // output buffer is too small
+ ExCantUnwind, // this function is marked CANT_UNWIND
+ ExCantRepresent, // entry valid, but we can't represent it
+ ExInvalid // entry is invalid
+ }
+ ExExtractResult;
+
+
+/* Helper function for fishing bits out of the EXIDX representation. */
+static void* Prel31ToAddr(const void* addr)
+{
+ UInt offset32 = *(const UInt*)addr;
+ // sign extend offset32[30:0] to 64 bits -- copy bit 30 to positions
+ // 63:31 inclusive.
+ ULong offset64 = offset32;
+ if (offset64 & (1ULL << 30))
+ offset64 |= 0xFFFFFFFF80000000ULL;
+ else
+ offset64 &= 0x000000007FFFFFFFULL;
+ return ((UChar*)addr) + (UWord)offset64;
+}
+
+
+// Extract unwind bytecode for the function denoted by |entry| into |buf|,
+// and return the number of bytes of |buf| written, along with a code
+// indicating the outcome.
+static
+ExExtractResult ExtabEntryExtract ( MemoryRange* mr_exidx,
+ MemoryRange* mr_extab,
+ const ExidxEntry* entry,
+ UChar* buf, SizeT buf_size,
+ /*OUT*/SizeT* buf_used)
+{
+ Bool ok;
+ MemoryRange mr_out;
+ ok = MemoryRange__init(&mr_out, buf, buf_size);
+ if (!ok) return ExOutBufOverflow;
+
+ *buf_used = 0;
+
+# define PUT_BUF_U8(_byte) \
+ do { if (!MemoryRange__covers(&mr_out, &buf[*buf_used], 1)) \
+ return ExOutBufOverflow; \
+ buf[(*buf_used)++] = (_byte); } while (0)
+
+# define GET_EX_U32(_lval, _addr, _mr) \
+ do { if (!MemoryRange__covers((_mr), (void*)(_addr), 4)) \
+ return ExInBufOverflow; \
+ (_lval) = *(UInt*)(_addr); } while (0)
+
+# define GET_EXIDX_U32(_lval, _addr) \
+ GET_EX_U32(_lval, _addr, mr_exidx)
+
+# define GET_EXTAB_U32(_lval, _addr) \
+ GET_EX_U32(_lval, _addr, mr_extab)
+
+ UInt data;
+ GET_EXIDX_U32(data, &entry->data);
+
+ // A function can be marked CANT_UNWIND if (eg) it is known to be
+ // at the bottom of the stack.
+ if (data == ARM_EXIDX_CANT_UNWIND)
+ return ExCantUnwind;
+
+ UInt pers; // personality number
+ UInt extra; // number of extra data words required
+ UInt extra_allowed; // number of extra data words allowed
+ UInt* extbl_data; // the handler entry, if not inlined
+
+ if (data & ARM_EXIDX_COMPACT) {
+ // The handler table entry has been inlined into the index table entry.
+ // In this case it can only be an ARM-defined compact model, since
+ // bit 31 is 1. Only personalities 0, 1 and 2 are defined for the
+ // ARM compact model, but 1 and 2 are "Long format" and may require
+ // extra data words. Hence the allowable personalities here are:
+ // personality 0, in which case 'extra' has no meaning
+ // personality 1, with zero extra words
+ // personality 2, with zero extra words
+ extbl_data = NULL;
+ pers = (data >> 24) & 0x0F;
+ extra = (data >> 16) & 0xFF;
+ extra_allowed = 0;
+ }
+ else {
+ // The index table entry is a pointer to the handler entry. Note
+ // that Prel31ToAddr will read the given address, but we already
+ // range-checked above.
+ extbl_data = (UInt*)(Prel31ToAddr(&entry->data));
+ GET_EXTAB_U32(data, extbl_data);
+ if (!(data & ARM_EXIDX_COMPACT)) {
+ // This denotes a "generic model" handler. That will involve
+ // executing arbitary machine code, which is something we
+ // can't represent here; hence reject it.
+ return ExCantRepresent;
+ }
+ // So we have a compact model representation. Again, 3 possible
+ // personalities, but this time up to 255 allowable extra words.
+ pers = (data >> 24) & 0x0F;
+ extra = (data >> 16) & 0xFF;
+ extra_allowed = 255;
+ extbl_data++;
+ }
+
+ // Now look at the the handler table entry. The first word is
+ // |data| and subsequent words start at |*extbl_data|. The number
+ // of extra words to use is |extra|, provided that the personality
+ // allows extra words. Even if it does, none may be available --
+ // extra_allowed is the maximum number of extra words allowed. */
+ if (pers == 0) {
+ // "Su16" in the documentation -- 3 unwinding insn bytes
+ // |extra| has no meaning here; instead that byte is an unwind-info byte
+ PUT_BUF_U8(data >> 16);
+ PUT_BUF_U8(data >> 8);
+ PUT_BUF_U8(data);
+ }
+ else if ((pers == 1 || pers == 2) && extra <= extra_allowed) {
+ // "Lu16" or "Lu32" respectively -- 2 unwinding insn bytes,
+ // and up to 255 extra words.
+ PUT_BUF_U8(data >> 8);
+ PUT_BUF_U8(data);
+ UInt j;
+ for (j = 0; j < extra; j++) {
+ GET_EXTAB_U32(data, extbl_data);
+ extbl_data++;
+ PUT_BUF_U8(data >> 24);
+ PUT_BUF_U8(data >> 16);
+ PUT_BUF_U8(data >> 8);
+ PUT_BUF_U8(data >> 0);
+ }
+ }
+ else {
+ // The entry is invalid.
+ return ExInvalid;
+ }
+
+ // Make sure the entry is terminated with "FINISH"
+ if (*buf_used > 0 && buf[(*buf_used) - 1] != ARM_EXTBL_OP_FINISH)
+ PUT_BUF_U8(ARM_EXTBL_OP_FINISH);
+
+ return ExSuccess;
+
+# undef GET_EXTAB_U32
+# undef GET_EXIDX_U32
+# undef GET_U32
+# undef PUT_BUF_U8
+}
+
+
+/*------------------------------------------------------------*/
+/*--- (Pass 2 of 3) The EXIDX decoder ---*/
+/*------------------------------------------------------------*/
+
+/* This (ExtabData) is an intermediate structure, used to carry
+ information from the decoder (pass 2) to the summariser (pass 3).
+ I don't think its layout is important. */
+typedef
+ enum {
+ ARM_EXIDX_CMD_FINISH=0x100,
+ ARM_EXIDX_CMD_SUB_FROM_VSP,
+ ARM_EXIDX_CMD_ADD_TO_VSP,
+ ARM_EXIDX_CMD_REG_POP,
+ ARM_EXIDX_CMD_REG_TO_SP,
+ ARM_EXIDX_CMD_VFP_POP,
+ ARM_EXIDX_CMD_WREG_POP,
+ ARM_EXIDX_CMD_WCGR_POP,
+ ARM_EXIDX_CMD_RESERVED,
+ ARM_EXIDX_CMD_REFUSED
+ }
+ ExtabCmd;
+
+static const HChar* showExtabCmd ( ExtabCmd cmd ) {
+ switch (cmd) {
+ case ARM_EXIDX_CMD_FINISH: return "FINISH";
+ case ARM_EXIDX_CMD_SUB_FROM_VSP: return "SUB_FROM_VSP";
+ case ARM_EXIDX_CMD_ADD_TO_VSP: return "ADD_TO_VSP";
+ case ARM_EXIDX_CMD_REG_POP: return "REG_POP";
+ case ARM_EXIDX_CMD_REG_TO_SP: return "REG_TO_SP";
+ case ARM_EXIDX_CMD_VFP_POP: return "VFP_POP";
+ case ARM_EXIDX_CMD_WREG_POP: return "WREG_POP";
+ case ARM_EXIDX_CMD_WCGR_POP: return "WCGR_POP";
+ case ARM_EXIDX_CMD_RESERVED: return "RESERVED";
+ case ARM_EXIDX_CMD_REFUSED: return "REFUSED";
+ default: return "???";
+ }
+}
+
+
+typedef
+ struct { ExtabCmd cmd; UInt data; }
+ ExtabData;
+
+static void ppExtabData ( const ExtabData* etd ) {
+ VG_(printf)("ExtabData{%12s 0x%08x}", showExtabCmd(etd->cmd), etd->data);
+}
+
+
+enum extab_cmd_flags {
+ ARM_EXIDX_VFP_SHIFT_16 = 1 << 16,
+ ARM_EXIDX_VFP_FSTMD = 1 << 17, // distinguishes FSTMxxD from FSTMxxX
+};
+
+
+/* Forwards */
+typedef struct _SummState SummState;
+static Int TranslateCmd(/*MOD*/SummState* state, const ExtabData* edata);
+
+
+// Take the unwind information extracted by ExtabEntryExtract
+// and parse it into frame-unwind instructions. These are as
+// specified in "Table 4, ARM-defined frame-unwinding instructions"
+// in the specification document detailed in comments at the top
+// of this file.
+//
+// This reads from |buf[0, +data_size)|. It checks for overruns of
+// the input buffer and returns a negative value if that happens, or
+// for any other failure cases. It returns zero in case of success.
+// Whilst reading the input, it dumps the result in |*state|.
+static
+Int ExtabEntryDecode(/*OUT*/SummState* state, const UChar* buf, SizeT buf_size)
+{
+ if (buf == NULL || buf_size == 0)
+ return -3;
+
+ MemoryRange mr_in;
+ Bool ok = MemoryRange__init(&mr_in, buf, buf_size);
+ if (!ok)
+ return -2;
+
+# define GET_BUF_U8(_lval) \
+ do { if (!MemoryRange__covers(&mr_in, buf, 1)) \
+ return -4; \
+ (_lval) = *(buf++); } while (0)
+
+ const UChar* end = buf + buf_size;
+
+ while (buf < end) {
+ ExtabData edata;
+ VG_(bzero_inline)(&edata, sizeof(edata));
+
+ UChar op;
+ GET_BUF_U8(op);
+ if ((op & 0xc0) == 0x00) {
+ // vsp = vsp + (xxxxxx << 2) + 4
+ edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP;
+ edata.data = (((Int)op & 0x3f) << 2) + 4;
+ }
+ else if ((op & 0xc0) == 0x40) {
+ // vsp = vsp - (xxxxxx << 2) - 4
+ edata.cmd = ARM_EXIDX_CMD_SUB_FROM_VSP;
+ edata.data = (((Int)op & 0x3f) << 2) + 4;
+ }
+ else if ((op & 0xf0) == 0x80) {
+ UChar op2;
+ GET_BUF_U8(op2);
+ if (op == 0x80 && op2 == 0x00) {
+ // Refuse to unwind
+ edata.cmd = ARM_EXIDX_CMD_REFUSED;
+ } else {
+ // Pop up to 12 integer registers under masks {r15-r12},{r11-r4}
+ edata.cmd = ARM_EXIDX_CMD_REG_POP;
+ edata.data = ((op & 0xf) << 8) | op2;
+ edata.data = edata.data << 4;
+ }
+ }
+ else if ((op & 0xf0) == 0x90) {
+ if (op == 0x9d || op == 0x9f) {
+ // 9d: Reserved as prefix for ARM register to register moves
+ // 9f: Reserved as prefix for Intel Wireless MMX reg to reg moves
+ edata.cmd = ARM_EXIDX_CMD_RESERVED;
+ } else {
+ // Set vsp = r[nnnn]
+ edata.cmd = ARM_EXIDX_CMD_REG_TO_SP;
+ edata.data = op & 0x0f;
+ }
+ }
+ else if ((op & 0xf0) == 0xa0) {
+ // Pop r4 to r[4+nnn], or
+ // Pop r4 to r[4+nnn] and r14
+ Int nnn = (op & 0x07);
+ edata.data = (1 << (nnn + 1)) - 1;
+ edata.data = edata.data << 4;
+ if (op & 0x08) edata.data |= 1 << 14;
+ edata.cmd = ARM_EXIDX_CMD_REG_POP;
+ }
+ else if (op == ARM_EXTBL_OP_FINISH) {
+ // Finish
+ edata.cmd = ARM_EXIDX_CMD_FINISH;
+ buf = end;
+ }
+ else if (op == 0xb1) {
+ UChar op2;
+ GET_BUF_U8(op2);
+ if (op2 == 0 || (op2 & 0xf0)) {
+ // Spare
+ edata.cmd = ARM_EXIDX_CMD_RESERVED;
+ } else {
+ // Pop integer registers under mask {r3,r2,r1,r0}
+ edata.cmd = ARM_EXIDX_CMD_REG_POP;
+ edata.data = op2 & 0x0f;
+ }
+ }
+ else if (op == 0xb2) {
+ // vsp = vsp + 0x204 + (uleb128 << 2)
+ ULong offset = 0;
+ UChar byte, shift = 0;
+ do {
+ GET_BUF_U8(byte);
+ offset |= (byte & 0x7f) << shift;
+ shift += 7;
+ } while ((byte & 0x80) && buf < end);
+ edata.data = offset * 4 + 0x204;
+ edata.cmd = ARM_EXIDX_CMD_ADD_TO_VSP;
+ }
+ else if (op == 0xb3 || op == 0xc8 || op == 0xc9) {
+ // b3: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDX-ishly
+ // c8: Pop VFP regs D[16+ssss] to D[16+ssss+cccc], FSTMFDD-ishly
+ // c9: Pop VFP regs D[ssss] to D[ssss+cccc], FSTMFDD-ishly
+ edata.cmd = ARM_EXIDX_CMD_VFP_POP;
+ GET_BUF_U8(edata.data);
+ if (op == 0xc8) edata.data |= ARM_EXIDX_VFP_SHIFT_16;
+ if (op != 0xb3) edata.data |= ARM_EXIDX_VFP_FSTMD;
+ }
+ else if ((op & 0xf8) == 0xb8 || (op & 0xf8) == 0xd0) {
+ // b8: Pop VFP regs D[8] to D[8+nnn], FSTMFDX-ishly
+ // d0: Pop VFP regs D[8] to D[8+nnn], FSTMFDD-ishly
+ edata.cmd = ARM_EXIDX_CMD_VFP_POP;
+ edata.data = 0x80 | (op & 0x07);
+ if ((op & 0xf8) == 0xd0) edata.data |= ARM_EXIDX_VFP_FSTMD;
+ }
+ else if (op >= 0xc0 && op <= 0xc5) {
+ // Intel Wireless MMX pop wR[10]-wr[10+nnn], nnn != 6,7
+ edata.cmd = ARM_EXIDX_CMD_WREG_POP;
+ edata.data = 0xa0 | (op & 0x07);
+ }
+ else if (op == 0xc6) {
+ // Intel Wireless MMX pop wR[ssss] to wR[ssss+cccc]
+ edata.cmd = ARM_EXIDX_CMD_WREG_POP;
+ GET_BUF_U8(edata.data);
+ }
+ else if (op == 0xc7) {
+ UChar op2;
+ GET_BUF_U8(op2);
+ if (op2 == 0 || (op2 & 0xf0)) {
+ // Spare
+ edata.cmd = ARM_EXIDX_CMD_RESERVED;
+ } else {
+ // Intel Wireless MMX pop wCGR registers under mask {wCGR3,2,1,0}
+ edata.cmd = ARM_EXIDX_CMD_WCGR_POP;
+ edata.data = op2 & 0x0f;
+ }
+ }
+ else {
+ // Spare
+ edata.cmd = ARM_EXIDX_CMD_RESERVED;
+ }
+
+ if (0)
+ VG_(printf)(" edata: cmd %08x data %08x\n",
+ (UInt)edata.cmd, (UInt)edata.data);
+
+ Int ret = TranslateCmd ( state, &edata );
+ if (ret < 0) return ret;
+ }
+ return 0;
+
+# undef GET_BUF_U8
+}
+
+
+/*------------------------------------------------------------*/
+/*--- (Pass 3 of 3) The EXIDX summariser ---*/
+/*------------------------------------------------------------*/
+
+/* In this translation into DiCfSI_m, we're going to have the CFA play
+ the role of the VSP. That means that the VSP can be exactly any of
+ the CFA expressions, viz: {r7,r11,r12,r13) +/- offset.
+
+ All of this would be a lot simpler if the DiCfSI_m representation
+ was just a bit more expressive and orthogonal. But it isn't.
+
+ The central difficulty is that, although we can track changes
+ to the offset of VSP (via vsp_off), we can't deal with assignments
+ of an entirely new expression to it, because the existing
+ rules in |cfi| will almost certainly refer to the CFA, and so
+ changing it will make them invalid. Hence, below:
+
+ * for the case ARM_EXIDX_CMD_REG_TO_SP we simply disallow
+ assignment, and hence give up, if any rule refers to CFA
+
+ * for the case ARM_EXIDX_CMD_REG_POP, the SP (hence, VSP) is
+ updated by the pop, give up.
+
+ This is an ugly hack to work around not having a better (LUL-like)
+ expression representation. That said, these restrictions don't
+ appear to be a big problem in practice.
+*/
+
+struct _SummState {
+ // The DiCfSI_m under construction
+ DiCfSI_m cfi;
+ Int vsp_off;
+ // For generating CFI register expressions, if needed.
+ DebugInfo* di;
+};
+
+
+/* Generate a trivial CfiExpr, for the ARM(32) integer register
+ numbered |gprNo|. First ensure this DebugInfo has a cfsi_expr
+ array in which to park it. Returns -1 if |gprNo| cannot be
+ represented, otherwise returns a value >= 0. */
+static
+Int gen_CfiExpr_CfiReg_ARM_GPR ( /*MB_MOD*/DebugInfo* di, UInt gprNo )
+{
+ CfiReg creg = Creg_INVALID;
+ switch (gprNo) {
+ case 13: creg = Creg_ARM_R13; break;
+ case 12: creg = Creg_ARM_R12; break;
+ case 15: creg = Creg_ARM_R15; break;
+ case 14: creg = Creg_ARM_R14; break;
+ case 7: creg = Creg_ARM_R7; break;
+ default: break;
+ }
+ if (creg == Creg_INVALID) {
+ return -1;
+ }
+ if (!di->cfsi_exprs) {
+ di->cfsi_exprs = VG_(newXA)( ML_(dinfo_zalloc), "di.gCCAG",
+ ML_(dinfo_free), sizeof(CfiExpr) );
+ }
+ Int res = ML_(CfiExpr_CfiReg)( di->cfsi_exprs, creg );
+ vg_assert(res >= 0);
+ return res;
+}
+
+
+/* Given a DiCfSI_m, find the _how/_off pair for the given ARM(32) GPR
+ number inside |cfsi_m|, or return NULL for both if that register
+ number is not represented. */
+static
+void maybeFindExprForRegno( /*OUT*/UChar** howPP, /*OUT*/Int** offPP,
+ DiCfSI_m* cfsi_m, Int regNo )
+{
+ switch (regNo) {
+ case 15: *howPP = &cfsi_m->ra_how; *offPP = &cfsi_m->ra_off; return;
+ case 14: *howPP = &cfsi_m->r14_how; *offPP = &cfsi_m->r14_off; return;
+ case 13: *howPP = &cfsi_m->r13_how; *offPP = &cfsi_m->r13_off; return;
+ case 12: *howPP = &cfsi_m->r12_how; *offPP = &cfsi_m->r12_off; return;
+ case 11: *howPP = &cfsi_m->r11_how; *offPP = &cfsi_m->r11_off; return;
+ case 7: *howPP = &cfsi_m->r7_how; *offPP = &cfsi_m->r7_off; return;
+ default: break;
+ }
+ *howPP = NULL; *offPP = NULL;
+}
+
+
+/* Set cfi.cfa_{how,off} so as to be a copy of the expression denoted
+ by (how,off), if it is possible to do so. Returns True on
+ success. */
+static
+Bool setCFAfromCFIR( /*MOD*/DiCfSI_m* cfi, XArray*/*CfiExpr*/ cfsi_exprs,
+ UChar how, Int off )
+{
+ switch (how) {
+ case CFIR_EXPR:
+ if (!cfsi_exprs) return False;
+ CfiExpr* e = (CfiExpr*)VG_(indexXA)(cfsi_exprs, off);
+ if (e->tag != Cex_CfiReg) return False;
+ if (e->Cex.CfiReg.reg == Creg_ARM_R7) {
+ cfi->cfa_how = CFIC_ARM_R7REL;
+ cfi->cfa_off = 0;
+ return True;
+ }
+ ML_(ppCfiExpr)(cfsi_exprs, off);
+ vg_assert(0);
+ default:
+ break;
+ }
+ VG_(printf)("setCFAfromCFIR: FAIL: how %d off %d\n", (Int)how, (Int)off);
+ vg_assert(0);
+ return False;
+}
+
+
+#define ARM_EXBUF_START(x) (((x) >> 4) & 0x0f)
+#define ARM_EXBUF_COUNT(x) ((x) & 0x0f)
+#define ARM_EXBUF_END(x) (ARM_EXBUF_START(x) + ARM_EXBUF_COUNT(x))
+
+
+static Bool mentionsCFA ( DiCfSI_m* cfi )
+{
+# define MENTIONS_CFA(_how) ((_how) == CFIR_CFAREL || (_how) == CFIR_MEMCFAREL)
+ if (MENTIONS_CFA(cfi->ra_how)) return True;
+ if (MENTIONS_CFA(cfi->r14_how)) return True;
+ if (MENTIONS_CFA(cfi->r13_how)) return True;
+ if (MENTIONS_CFA(cfi->r12_how)) return True;
+ if (MENTIONS_CFA(cfi->r11_how)) return True;
+ if (MENTIONS_CFA(cfi->r7_how)) return True;
+ return False;
+# undef MENTIONS_CFA
+}
+
+
+// Translate command from extab_data to command for Module.
+static
+Int TranslateCmd(/*MOD*/SummState* state, const ExtabData* edata)
+{
+ /* Stay sane: check that the CFA has the expected form. */
+ vg_assert(state);
+ switch (state->cfi.cfa_how) {
+ case CFIC_ARM_R13REL: case CFIC_ARM_R12REL:
+ case CFIC_ARM_R11REL: case CFIC_ARM_R7REL: break;
+ default: vg_assert(0);
+ }
+
+ if (0) {
+ VG_(printf)(" TranslateCmd: ");
+ ppExtabData(edata);
+ VG_(printf)("\n");
+ }
+
+ Int ret = 0;
+ switch (edata->cmd) {
+ case ARM_EXIDX_CMD_FINISH:
+ /* Copy LR to PC if there isn't currently a rule for PC in force. */
+ if (state->cfi.ra_how == CFIR_UNKNOWN) {
+ if (state->cfi.r14_how == CFIR_UNKNOWN) {
+ state->cfi.ra_how = CFIR_EXPR;
+ state->cfi.ra_off = gen_CfiExpr_CfiReg_ARM_GPR(state->di, 14);
+ vg_assert(state->cfi.ra_off >= 0);
+ } else {
+ state->cfi.ra_how = state->cfi.r14_how;
+ state->cfi.ra_off = state->cfi.r14_off;
+ }
+ }
+ break;
+ case ARM_EXIDX_CMD_SUB_FROM_VSP:
+ state->vsp_off -= (Int)(edata->data);
+ break;
+ case ARM_EXIDX_CMD_ADD_TO_VSP:
+ state->vsp_off += (Int)(edata->data);
+ break;
+ case ARM_EXIDX_CMD_REG_POP: {
+ UInt i;
+ for (i = 0; i < 16; i++) {
+ if (edata->data & (1 << i)) {
+ // See if we're summarising for int register |i|. If so,
+ // describe how to pull it off the stack. The cast of |i| is
+ // a bit of a kludge but works because DW_REG_ARM_Rn has the
+ // value |n|, for 0 <= |n| <= 15 -- that is, for the ARM
+ // general-purpose registers.
+ UChar* rX_howP = NULL;
+ Int* rX_offP = NULL;
+ maybeFindExprForRegno(&rX_howP, &rX_offP, &state->cfi, i);
+ if (rX_howP) {
+ vg_assert(rX_offP);
+ /* rX_howP and rX_offP point at one of the rX fields
+ in |state->cfi|. Hence the following assignments
+ are really updating |state->cfi|. */
+ *rX_howP = CFIR_MEMCFAREL;
+ *rX_offP = state->vsp_off;
+ } else {
+ /* We're not tracking this register, so ignore it. */
+ vg_assert(!rX_offP);
+ }
+ state->vsp_off += 4;
+ }
+ }
+ /* Set cfa in case the SP got popped. */
+ if (edata->data & (1 << 13)) {
+ // vsp = curr_rules_.mR13expr;
+ //state->cfi.cfa_how =
+ //state->cfi.cfa_off =
+ //state->vsp_off = 0;
+ // If this happens, it would make the existing CFA references
+ // in the summary invalid. So give up instead.
+ goto cant_summarise;
+ }
+ break;
+ }
+ case ARM_EXIDX_CMD_REG_TO_SP: {
+ /* We're generating a new value for the CFA/VSP here. Hence,
+ if the summary already refers to the CFA at all, we can't
+ go any further, and have to abandon summarisation. */
+ if (mentionsCFA(&state->cfi))
+ goto cant_summarise;
+ vg_assert(edata->data < 16);
+ Int reg_no = edata->data;
+ // Same comment as above, re the casting of |reg_no|, applies.
+ UChar* rX_howP = NULL;
+ Int* rX_offP = NULL;
+ maybeFindExprForRegno(&rX_howP, &rX_offP, &state->cfi, reg_no);
+ if (rX_howP) {
+ vg_assert(rX_offP);
+ if (*rX_howP == CFIR_UNKNOWN) {
+ //curr_rules_.mR13expr = LExpr(LExpr::NODEREF, reg_no, 0);
+ Int expr_ix = gen_CfiExpr_CfiReg_ARM_GPR(state->di, reg_no);
+ if (expr_ix >= 0) {
+ state->cfi.r13_how = CFIR_EXPR;
+ state->cfi.r13_off = expr_ix;
+ } else {
+ goto cant_summarise;
+ }
+ } else {
+ //curr_rules_.mR13expr = *reg_exprP;
+ state->cfi.r13_how = *rX_howP;
+ state->cfi.r13_off = *rX_offP;
+ }
+ //vsp = curr_rules_.mR13expr;
+ Bool ok = setCFAfromCFIR( &state->cfi, state->di->cfsi_exprs,
+ state->cfi.r13_how, state->cfi.r13_off );
+ if (!ok) goto cant_summarise;
+ state->vsp_off = 0;
+ } else {
+ vg_assert(!rX_offP);
+ }
+ break;
+ }
+ case ARM_EXIDX_CMD_VFP_POP: {
+ /* Don't recover VFP registers, but be sure to adjust the stack
+ pointer. */
+ UInt i;
+ for (i = ARM_EXBUF_START(edata->data);
+ i <= ARM_EXBUF_END(edata->data); i++) {
+ state->vsp_off += 8;
+ }
+ if (!(edata->data & ARM_EXIDX_VFP_FSTMD)) {
+ state->vsp_off += 4;
+ }
+ break;
+ }
+ case ARM_EXIDX_CMD_WREG_POP: {
+ UInt i;
+ for (i = ARM_EXBUF_START(edata->data);
+ i <= ARM_EXBUF_END(edata->data); i++) {
+ state->vsp_off += 8;
+ }
+ break;
+ }
+ case ARM_EXIDX_CMD_WCGR_POP: {
+ UInt i;
+ // Pop wCGR registers under mask {wCGR3,2,1,0}, hence "i < 4"
+ for (i = 0; i < 4; i++) {
+ if (edata->data & (1 << i)) {
+ state->vsp_off += 4;
+ }
+ }
+ break;
+ }
+ case ARM_EXIDX_CMD_REFUSED:
+ case ARM_EXIDX_CMD_RESERVED:
+ ret = -1;
+ break;
+ }
+ return ret;
+
+ cant_summarise:
+ return -10;
+}
+
+
+/* Initialise the EXIDX summariser, by writing initial values in |state|. */
+static
+void AddStackFrame ( /*OUT*/SummState* state,
+ DebugInfo* di )
+{
+ VG_(bzero_inline)(state, sizeof(*state));
+ state->vsp_off = 0;
+ state->di = di;
+ /* Initialise the DiCfSI_m that we are building. */
+ state->cfi.cfa_how = CFIC_ARM_R13REL;
+ state->cfi.cfa_off = 0;
+ state->cfi.ra_how = CFIR_UNKNOWN;
+ state->cfi.r14_how = CFIR_UNKNOWN;
+ state->cfi.r13_how = CFIR_UNKNOWN;
+ state->cfi.r12_how = CFIR_UNKNOWN;
+ state->cfi.r11_how = CFIR_UNKNOWN;
+ state->cfi.r7_how = CFIR_UNKNOWN;
+}
+
+static
+void SubmitStackFrame( /*MOD*/DebugInfo* di,
+ SummState* state, Addr avma, SizeT len )
+{
+ // JRS: I'm really not sure what this means, or if it is necessary
+ // return address always winds up in pc
+ //stack_frame_entry_->initial_rules[ustr__ZDra()] // ".ra"
+ // = stack_frame_entry_->initial_rules[ustr__pc()];
+ // maybe don't need to do anything here?
+
+ // the final value of vsp is the new value of sp.
+ switch (state->cfi.cfa_how) {
+ case CFIC_ARM_R13REL: case CFIC_ARM_R12REL:
+ case CFIC_ARM_R11REL: case CFIC_ARM_R7REL: break;
+ default: vg_assert(0);
+ }
+ state->cfi.r13_how = CFIR_CFAREL;
+ state->cfi.r13_off = state->vsp_off;
+
+ // Finally, add the completed RuleSet to the SecMap
+ if (len > 0) {
+
+ // Futz with the rules for r4 .. r11 in the same way as happens
+ // with the CFI summariser:
+ /* Mark callee-saved registers (r4 .. r11) as unchanged, if there is
+ no other information about them. FIXME: do this just once, at
+ the point where the ruleset is committed. */
+ if (state->cfi.r7_how == CFIR_UNKNOWN) {
+ state->cfi.r7_how = CFIR_SAME;
+ state->cfi.r7_off = 0;
+ }
+ if (state->cfi.r11_how == CFIR_UNKNOWN) {
+ state->cfi.r11_how = CFIR_SAME;
+ state->cfi.r11_off = 0;
+ }
+ if (state->cfi.r12_how == CFIR_UNKNOWN) {
+ state->cfi.r12_how = CFIR_SAME;
+ state->cfi.r12_off = 0;
+ }
+ if (state->cfi.r14_how == CFIR_UNKNOWN) {
+ state->cfi.r14_how = CFIR_SAME;
+ state->cfi.r14_off = 0;
+ }
+
+ // And add them
+ ML_(addDiCfSI)(di, avma, len, &state->cfi);
+ if (di->trace_cfi)
+ ML_(ppDiCfSI)(di->cfsi_exprs, avma, len, &state->cfi);
+ }
+}
+
+
+/*------------------------------------------------------------*/
+/*--- Top level ---*/
+/*------------------------------------------------------------*/
+
+void ML_(read_exidx) ( /*MOD*/DebugInfo* di,
+ UChar* exidx_img, SizeT exidx_size,
+ UChar* extab_img, SizeT extab_size,
+ Addr text_last_svma,
+ PtrdiffT text_bias )
+{
+ if (di->trace_cfi)
+ VG_(printf)("BEGIN ML_(read_exidx) exidx_img=[%p, +%lu) "
+ "extab_img=[%p, +%lu) text_last_svma=%lx text_bias=%lx\n",
+ exidx_img, exidx_size, extab_img, extab_size,
+ text_last_svma, text_bias);
+ Bool ok;
+ MemoryRange mr_exidx, mr_extab;
+ ok = MemoryRange__init(&mr_exidx, exidx_img, exidx_size);
+ ok = ok && MemoryRange__init(&mr_extab, extab_img, extab_size);
+ if (!ok) {
+ complain(".exidx or .extab image area wraparound");
+ return;
+ }
+
+ const ExidxEntry* start_img = (const ExidxEntry*)exidx_img;
+ const ExidxEntry* end_img = (const ExidxEntry*)(exidx_img + exidx_size);
+
+ if (VG_(clo_verbosity) > 1)
+ VG_(message)(Vg_DebugMsg, " Reading EXIDX entries: %lu available\n",
+ exidx_size / sizeof(ExidxEntry) );
+
+ // Iterate over each of the EXIDX entries (pairs of 32-bit words).
+ // These occupy the entire .exidx section.
+ UWord n_attempted = 0, n_successful = 0;
+
+ const ExidxEntry* entry_img;
+ for (entry_img = start_img; entry_img < end_img; ++entry_img) {
+
+ n_attempted++;
+ // Figure out the code address range that this table entry_img is
+ // associated with.
+ Addr avma = (Addr)Prel31ToAddr(&entry_img->addr);
+ if (di->trace_cfi)
+ VG_(printf)("XXX1 entry: entry->addr 0x%lx, avma 0x%lx\n",
+ (UWord)entry_img->addr, avma);
+
+ Addr next_avma;
+ if (entry_img < end_img - 1) {
+ next_avma = (Addr)Prel31ToAddr(&(entry_img+1)->addr);
+ } else {
+ // This is the last EXIDX entry in the sequence, so we don't
+ // have an address for the start of the next function, to limit
+ // this one. Instead use the address of the last byte of the
+ // text section associated with this .exidx section, that we
+ // have been given. So as to avoid junking up the CFI unwind
+ // tables with absurdly large address ranges in the case where
+ // text_last_svma_ is wrong, only use the value if it is nonzero
+ // and within one page of |svma|. Otherwise assume a length of 1.
+ //
+ // In some cases, gcc has been observed to finish the exidx
+ // section with an entry of length 1 marked CANT_UNWIND,
+ // presumably exactly for the purpose of giving a definite
+ // length for the last real entry, without having to look at
+ // text segment boundaries.
+ Addr text_last_avma = text_last_svma + text_bias;
+
+ Bool plausible;
+ Addr maybe_next_avma = text_last_avma + 1;
+ if (maybe_next_avma > avma && maybe_next_avma - avma <= 4096) {
+ next_avma = maybe_next_avma;
+ plausible = True;
+ } else {
+ next_avma = avma + 1;
+ plausible = False;
+ }
+
+ if (!plausible && avma != text_last_avma + 1) {
+ HChar buf[100];
+ VG_(snprintf)(buf, sizeof(buf),
+ "Implausible EXIDX last entry size %u"
+ "; using 1 instead.", (UInt)(text_last_avma - avma));
+ buf[sizeof(buf)-1] = 0;
+ complain(buf);
+ }
+ }
+
+ // Extract the unwind info into |buf|. This might fail for
+ // various reasons. It involves reading both the .exidx and
+ // .extab sections. All accesses to those sections are
+ // bounds-checked.
+ if (di->trace_cfi)
+ VG_(printf)("XXX1 entry is for AVMA 0x%lx 0x%lx\n",
+ avma, next_avma-1);
+ UChar buf[ARM_EXIDX_TABLE_LIMIT];
+ SizeT buf_used = 0;
+ ExExtractResult res
+ = ExtabEntryExtract(&mr_exidx, &mr_extab,
+ entry_img, buf, sizeof(buf), &buf_used);
+ if (res != ExSuccess) {
+ // Couldn't extract the unwind info, for some reason. Move on.
+ switch (res) {
+ case ExInBufOverflow:
+ complain("ExtabEntryExtract: .exidx/.extab section overrun");
+ break;
+ case ExOutBufOverflow:
+ complain("ExtabEntryExtract: bytecode buffer overflow");
+ break;
+ case ExCantUnwind:
+ // Some functions are marked CantUnwind by the compiler.
+ // Don't record these as attempted, since that's just
+ // confusing, and failure to summarise them is not the fault
+ // of this code.
+ n_attempted--;
+ if (0)
+ complain("ExtabEntryExtract: function is marked CANT_UNWIND");
+ break;
+ case ExCantRepresent:
+ complain("ExtabEntryExtract: bytecode can't be represented");
+ break;
+ case ExInvalid:
+ complain("ExtabEntryExtract: index table entry is invalid");
+ break;
+ default: {
+ HChar mbuf[100];
+ VG_(snprintf)(mbuf, sizeof(mbuf),
+ "ExtabEntryExtract: unknown error: %d", (Int)res);
+ buf[sizeof(mbuf)-1] = 0;
+ complain(mbuf);
+ break;
+ }
+ }
+ continue;
+ }
+
+ // Finally, work through the unwind instructions in |buf| and
+ // create CFI entries that Valgrind can use. This can also fail.
+ // First, initialise the summariser's running state, into which
+ // ExtabEntryDecode will write the CFI entries.
+
+ SummState state;
+ AddStackFrame( &state, di );
+ Int ret = ExtabEntryDecode( &state, buf, buf_used );
+ if (ret < 0) {
+ /* Failed summarisation. Ignore and move on. */
+ HChar mbuf[100];
+ VG_(snprintf)(mbuf, sizeof(mbuf),
+ "ExtabEntryDecode: failed with error code: %d", ret);
+ mbuf[sizeof(mbuf)-1] = 0;
+ complain(mbuf);
+ } else {
+ /* Successful summarisation. Add it to the collection. */
+ SubmitStackFrame( di, &state, avma, next_avma - avma );
+ n_successful++;
+ }
+
+ } /* iterating over .exidx */
+
+ if (VG_(clo_verbosity) > 1)
+ VG_(message)(Vg_DebugMsg,
+ " Reading EXIDX entries: %lu attempted, %lu successful\n",
+ n_attempted, n_successful);
+}
+
+#endif /* defined(VGA_arm) */
+
+/*--------------------------------------------------------------------*/
+/*--- end readexidx.c ---*/
+/*--------------------------------------------------------------------*/
Modified: trunk/coregrind/m_debuginfo/storage.c
==============================================================================
--- trunk/coregrind/m_debuginfo/storage.c (original)
+++ trunk/coregrind/m_debuginfo/storage.c Thu Jul 31 14:25:29 2014
@@ -696,7 +696,7 @@
if (VG_(clo_verbosity) > 1) {
VG_(message)(
Vg_DebugMsg,
- "warning: DiCfSI %#lx .. %#lx outside mapped rw segments (%s)\n",
+ "warning: DiCfSI %#lx .. %#lx outside mapped rx segments (%s)\n",
base,
base + len - 1,
di->soname
@@ -875,6 +875,7 @@
static void ppCfiReg ( CfiReg reg )
{
switch (reg) {
+ case Creg_INVALID: VG_(printf)("Creg_INVALID"); break;
case Creg_IA_SP: VG_(printf)("xSP"); break;
case Creg_IA_BP: VG_(printf)("xBP"); break;
case Creg_IA_IP: VG_(printf)("xIP"); break;
@@ -882,6 +883,7 @@
case Creg_ARM_R12: VG_(printf)("R12"); break;
case Creg_ARM_R15: VG_(printf)("R15"); break;
case Creg_ARM_R14: VG_(printf)("R14"); break;
+ case Creg_ARM_R7: VG_(printf)("R7"); break;
case Creg_ARM64_X30: VG_(printf)("X30"); break;
case Creg_MIPS_RA: VG_(printf)("RA"); break;
case Creg_S390_R14: VG_(printf)("R14"); break;
|
|
From: <sv...@va...> - 2014-07-31 12:13:33
|
Author: florian
Date: Thu Jul 31 12:13:26 2014
New Revision: 14216
Log:
Get all available groups. Simply resize the groups buffer until large
enough. Free it later.
Modified:
branches/BUF_REMOVAL/coregrind/m_libcfile.c
Modified: branches/BUF_REMOVAL/coregrind/m_libcfile.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_libcfile.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_libcfile.c Thu Jul 31 12:13:26 2014
@@ -662,8 +662,15 @@
if (VG_(getegid)() == st.gid)
grpmatch = 1;
else {
- UInt groups[32];
- Int ngrp = VG_(getgroups)(32, groups);
+ UInt *groups = NULL;
+ Int ngrp, groups_size = 0;
+ do {
+ groups_size += 32;
+ groups = VG_(arena_realloc)(VG_AR_CORE, "check_executable",
+ groups, groups_size);
+ ngrp = VG_(getgroups)(groups_size, groups);
+ if (ngrp == -1) break; // failed
+ } while (ngrp == groups_size);
Int i;
/* ngrp will be -1 if VG_(getgroups) failed. */
for (i = 0; i < ngrp; i++) {
@@ -672,6 +679,7 @@
break;
}
}
+ if (groups) VG_(free)(groups);
}
if (grpmatch) {
|
|
From: <sv...@va...> - 2014-07-31 11:55:51
|
Author: florian
Date: Thu Jul 31 11:55:40 2014
New Revision: 14215
Log:
Get rid of the fixed size buffer in VG_(assert_fail). I have no idea
why it was there in the first place. First, we would write into it
and later printf("%s", buf). We can as well use vprintf directly.
That's what we do now.
Modified:
branches/BUF_REMOVAL/coregrind/m_libcassert.c
Modified: branches/BUF_REMOVAL/coregrind/m_libcassert.c
==============================================================================
--- branches/BUF_REMOVAL/coregrind/m_libcassert.c (original)
+++ branches/BUF_REMOVAL/coregrind/m_libcassert.c Thu Jul 31 11:55:40 2014
@@ -396,8 +396,7 @@
void VG_(assert_fail) ( Bool isCore, const HChar* expr, const HChar* file,
Int line, const HChar* fn, const HChar* format, ... )
{
- va_list vargs;
- HChar buf[512];
+ va_list vargs, vargs_copy;
const HChar* component;
const HChar* bugs_to;
UInt written;
@@ -407,15 +406,6 @@
VG_(exit)(2);
entered = True;
- va_start(vargs, format);
- written = VG_(vsnprintf) ( buf, sizeof(buf), format, vargs );
- va_end(vargs);
-
- if (written >= sizeof(buf)) {
- VG_(printf)("\nvalgrind: %s: buf is too small, sizeof(buf) = %u, "
- "written = %d\n", __func__, (unsigned)sizeof(buf), written);
- }
-
if (isCore) {
component = "valgrind";
bugs_to = VG_BUGS_TO;
@@ -435,8 +425,19 @@
VG_(printf)("\n%s: %s:%d (%s): Assertion '%s' failed.\n",
component, file, line, fn, expr );
}
- if (!VG_STREQ(buf, ""))
- VG_(printf)("%s: %s\n", component, buf );
+
+ /* Check whether anything will be written */
+ HChar buf[5];
+ va_start(vargs, format);
+ va_copy(vargs_copy, vargs);
+ written = VG_(vsnprintf) ( buf, sizeof(buf), format, vargs );
+ va_end(vargs);
+
+ if (written > 0) {
+ VG_(printf)("%s: ", component);
+ VG_(vprintf)(format, vargs_copy);
+ VG_(printf)("\n");
+ }
report_and_quit(bugs_to, NULL);
}
|
|
From: Rich C. <rc...@wi...> - 2014-07-31 05:12:23
|
valgrind revision: 14214
VEX revision: 2910
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-07-30 19:22:01 CDT
Ended at 2014-07-31 00:12:11 CDT
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
== 607 tests, 5 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/err_disable3 (stderr)
memcheck/tests/err_disable4 (stderr)
memcheck/tests/threadname (stderr)
memcheck/tests/threadname_xml (stderr)
exp-sgcheck/tests/hackedbz2 (stderr)
--tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old
+ perl perf/vg_perf --tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old perf
-- Running tests in perf ----------------------------------------------
-- bigcode1 --
bigcode1 valgrind-new:0.48s no: 7.8s (16.3x, -----) me:15.0s (31.3x, -----) ca:61.2s (127.4x, -----) he: 8.9s (18.6x, -----) ca:25.5s (53.2x, -----) dr: 8.7s (18.2x, -----) ma: 9.1s (19.0x, -----)
bigcode1 valgrind-old:0.48s no: 7.8s (16.3x, 0.3%) me:15.0s (31.3x, 0.1%) ca:61.2s (127.5x, -0.1%) he: 9.0s (18.7x, -0.2%) ca:25.5s (53.1x, 0.1%) dr: 8.7s (18.2x, 0.1%) ma: 9.1s (18.9x, 0.5%)
-- bigcode2 --
bigcode2 valgrind-new:0.49s no:18.7s (38.2x, -----) me:38.6s (78.7x, -----) ca:105.9s (216.1x, -----) he:22.4s (45.7x, -----) ca:41.0s (83.7x, -----) dr:21.2s (43.4x, -----) ma:21.6s (44.0x, -----)
bigcode2 valgrind-old:0.49s no:18.6s (38.0x, 0.4%) me:38.5s (78.6x, 0.1%) ca:106.6s (217.6x, -0.7%) he:22.5s (45.8x, -0.4%) ca:40.9s (83.4x, 0.3%) dr:21.2s (43.3x, 0.0%) ma:21.4s (43.6x, 1.0%)
-- bz2 --
bz2 valgrind-new:2.32s no:10.2s ( 4.4x, -----) me:27.3s (11.8x, -----) ca:59.1s (25.5x, -----) he:39.8s (17.1x, -----) ca:75.9s (32.7x, -----) dr:58.4s (25.2x, -----) ma: 9.8s ( 4.2x, -----)
bz2 valgrind-old:2.32s no:10.2s ( 4.4x, 0.2%) me:27.3s (11.8x, 0.1%) ca:59.1s (25.5x, -0.0%) he:39.8s (17.1x, 0.0%) ca:75.9s (32.7x, 0.0%) dr:57.4s (24.7x, 1.7%) ma: 9.8s ( 4.2x, 0.1%)
-- fbench --
fbench valgrind-new:1.44s no: 5.4s ( 3.8x, -----) me:17.8s (12.4x, -----) ca:27.2s (18.9x, -----) he:13.0s ( 9.1x, -----) ca:21.6s (15.0x, -----) dr:13.0s ( 9.0x, -----) ma: 5.6s ( 3.9x, -----)
fbench valgrind-old:1.44s no: 5.5s ( 3.8x, -0.2%) me:17.8s (12.4x, 0.1%) ca:27.3s (18.9x, -0.1%) he:12.9s ( 9.0x, 1.2%) ca:21.6s (15.0x, 0.2%) dr:13.0s ( 9.0x, 0.3%) ma: 5.6s ( 3.9x, 0.4%)
-- ffbench --
ffbench valgrind-new:1.00s no: 3.7s ( 3.7x, -----) me:12.1s (12.1x, -----) ca: 8.2s ( 8.2x, -----) he:21.7s (21.7x, -----) ca:27.5s (27.5x, -----) dr:17.1s (17.1x, -----) ma: 3.7s ( 3.7x, -----)
ffbench valgrind-old:1.00s no: 3.7s ( 3.7x, 0.3%) me:12.1s (12.1x, 0.2%) ca: 8.2s ( 8.2x, 0.0%) he:21.7s (21.7x, 0.1%) ca:27.5s (27.5x, 0.0%) dr:17.1s (17.1x, 0.1%) ma: 3.7s ( 3.7x, -0.3%)
-- heap --
heap valgrind-new:0.41s no: 3.3s ( 8.1x, -----) me:22.0s (53.8x, -----) ca:31.6s (77.1x, -----) he:30.8s (75.2x, -----) ca:22.8s (55.6x, -----) dr:20.6s (50.3x, -----) ma:22.6s (55.0x, -----)
heap valgrind-old:0.41s no: 3.3s ( 8.1x, -0.3%) me:22.1s (53.9x, -0.3%) ca:31.6s (77.1x, -0.0%) he:30.8s (75.2x, 0.0%) ca:22.8s (55.5x, 0.1%) dr:20.8s (50.7x, -0.9%) ma:22.6s (55.2x, -0.4%)
-- heap_pdb4 --
heap_pdb4 valgrind-new:0.56s no: 3.6s ( 6.5x, -----) me:41.8s (74.7x, -----) ca:34.3s (61.2x, -----) he:35.9s (64.2x, -----) ca:24.9s (44.5x, -----) dr:23.1s (41.3x, -----) ma:24.0s (42.9x, -----)
heap_pdb4 valgrind-old:0.56s no: 3.6s ( 6.5x, 0.3%) me:42.0s (75.1x, -0.5%) ca:34.3s (61.2x, 0.1%) he:35.9s (64.1x, 0.1%) ca:24.9s (44.5x, 0.0%) dr:23.2s (41.5x, -0.4%) ma:24.1s (43.0x, -0.1%)
-- many-loss-records --
many-loss-records valgrind-new:0.05s no: 1.3s (25.4x, -----) me: 5.8s (116.0x, -----) ca: 5.1s (102.8x, -----) he: 5.3s (106.4x, -----) ca: 4.1s (81.6x, -----) dr: 4.7s (94.2x, -----) ma: 4.7s (94.0x, -----)
many-loss-records valgrind-old:0.05s no: 1.3s (25.2x, 0.8%) me: 5.8s (115.2x, 0.7%) ca: 5.1s (102.6x, 0.2%) he: 5.3s (106.2x, 0.2%) ca: 4.1s (81.4x, 0.2%) dr: 4.8s (95.8x, -1.7%) ma: 4.7s (94.6x, -0.6%)
-- many-xpts --
many-xpts valgrind-new:0.15s no: 1.5s (10.2x, -----) me: 7.1s (47.3x, -----) ca:13.0s (86.4x, -----) he: 9.9s (66.3x, -----) ca: 5.9s (39.1x, -----) dr: 6.2s (41.5x, -----) ma: 7.3s (48.6x, -----)
many-xpts valgrind-old:0.15s no: 1.5s (10.1x, 0.7%) me: 7.1s (47.1x, 0.4%) ca:13.0s (86.5x, -0.1%) he: 9.9s (65.9x, 0.6%) ca: 5.9s (39.1x, 0.0%) dr: 6.3s (41.9x, -1.0%) ma: 7.3s (48.9x, -0.5%)
-- sarp --
sarp valgrind-new:0.10s no: 1.5s (14.9x, -----) me: 9.4s (94.2x, -----) ca: 8.5s (85.1x, -----) he:30.6s (306.0x, -----) ca: 5.5s (55.5x, -----) dr: 4.1s (41.0x, -----) ma: 1.6s (15.5x, -----)
sarp valgrind-old:0.10s no: 1.5s (14.7x, 1.3%) me: 9.4s (94.1x, 0.1%) ca: 8.5s (85.1x, 0.0%) he:30.6s (305.6x, 0.1%) ca: 5.6s (55.6x, -0.2%) dr: 4.1s (40.7x, 0.7%) ma: 1.5s (15.4x, 0.6%)
-- tinycc --
tinycc valgrind-new:0.76s no: 7.6s (10.0x, -----) me:37.4s (49.2x, -----) ca:47.7s (62.7x, -----) he:45.3s (59.6x, -----) ca:45.0s (59.2x, -----) dr:38.2s (50.2x, -----) ma:12.0s (15.8x, -----)
tinycc valgrind-old:0.76s no: 7.6s (10.0x, 0.3%) me:37.3s (49.0x, 0.4%) ca:48.2s (63.4x, -1.1%) he:45.4s (59.7x, -0.1%) ca:44.9s (59.1x, 0.1%) dr:38.1s (50.1x, 0.2%) ma:12.0s (15.8x, -0.1%)
-- Finished tests in perf ----------------------------------------------
== 11 programs, 154 timings =================
real 162m48.960s
user 160m46.319s
sys 1m48.185s
=================================================
./valgrind-new/exp-sgcheck/tests/hackedbz2.stderr.diff-glibc28-amd64
=================================================
--- hackedbz2.stderr.exp-glibc28-amd64 2014-07-30 20:27:49.339897933 -0500
+++ hackedbz2.stderr.out 2014-07-30 21:28:11.501419357 -0500
@@ -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/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-07-30 20:26:45.355203730 -0500
+++ err_disable3.stderr.out 2014-07-30 20:48:54.964655294 -0500
@@ -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-07-30 20:27:09.021460512 -0500
+++ err_disable4.stderr.out 2014-07-30 20:48:59.304702550 -0500
@@ -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-07-30 20:26:42.016167560 -0500
+++ threadname.stderr.out 2014-07-30 20:55:10.499752885 -0500
@@ -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-07-30 20:26:36.919111280 -0500
+++ threadname_xml.stderr.out 2014-07-30 20:55:12.577775654 -0500
@@ -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-07-30 19:22:22.076275381 -0500
+++ hackedbz2.stderr.out 2014-07-30 20:21:37.991872498 -0500
@@ -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/err_disable3.stderr.diff
=================================================
--- err_disable3.stderr.exp 2014-07-30 19:22:45.087525037 -0500
+++ err_disable3.stderr.out 2014-07-30 19:42:32.121408608 -0500
@@ -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-07-30 19:22:36.320429968 -0500
+++ err_disable4.stderr.out 2014-07-30 19:42:36.190452846 -0500
@@ -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-07-30 19:22:33.814402779 -0500
+++ threadname.stderr.out 2014-07-30 19:48:45.184466554 -0500
@@ -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-07-30 19:22:36.331430087 -0500
+++ threadname_xml.stderr.out 2014-07-30 19:48:47.237488897 -0500
@@ -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: Christian B. <bor...@de...> - 2014-07-31 04:09:14
|
valgrind revision: 14214 VEX revision: 2910 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.31-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 SP3 gcc 4.3.4 on z196 (s390x) ) Started at 2014-07-31 03:45:01 CEST Ended at 2014-07-31 06:09:00 CEST 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 == 657 tests, 3 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures == memcheck/tests/origin5-bz2 (stderr) helgrind/tests/pth_cond_destroy_busy (stderr) helgrind/tests/tc20_verifywrap (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.23s no: 4.9s (21.2x, -----) me: 6.2s (27.1x, -----) ca:26.5s (115.1x, -----) he: 5.5s (23.8x, -----) ca: 9.1s (39.6x, -----) dr: 4.8s (20.8x, -----) ma: 4.0s (17.2x, -----) bigcode1 valgrind-old:0.23s no: 4.9s (21.4x, -1.2%) me: 6.2s (27.0x, 0.3%) ca:26.5s (115.1x, 0.0%) he: 5.5s (23.7x, 0.2%) ca: 9.1s (39.7x, -0.3%) dr: 4.8s (20.8x, -0.2%) ma: 3.9s (17.0x, 1.3%) -- bigcode2 -- bigcode2 valgrind-new:0.25s no: 8.0s (31.8x, -----) me:13.2s (52.8x, -----) ca:39.1s (156.6x, -----) he:10.5s (42.0x, -----) ca:14.2s (56.7x, -----) dr: 8.9s (35.6x, -----) ma: 7.4s (29.4x, -----) bigcode2 valgrind-old:0.25s no: 7.8s (31.0x, 2.5%) me:13.1s (52.3x, 1.0%) ca:39.1s (156.5x, 0.1%) he:10.5s (42.1x, -0.2%) ca:14.3s (57.2x, -0.8%) dr: 8.9s (35.6x, 0.1%) ma: 7.3s (29.4x, 0.3%) -- bz2 -- bz2 valgrind-new:0.70s no: 6.7s ( 9.5x, -----) me:12.7s (18.1x, -----) ca:30.6s (43.7x, -----) he:19.8s (28.3x, -----) ca:34.3s (49.0x, -----) dr:28.7s (41.1x, -----) ma: 4.2s ( 6.0x, -----) bz2 valgrind-old:0.70s no: 6.6s ( 9.5x, 0.5%) me:12.7s (18.1x, 0.1%) ca:30.6s (43.8x, -0.0%) he:19.8s (28.3x, 0.1%) ca:34.3s (49.1x, -0.0%) dr:28.8s (41.1x, -0.2%) ma: 4.1s ( 5.9x, 1.4%) -- fbench -- fbench valgrind-new:0.41s no: 1.6s ( 3.9x, -----) me: 4.3s (10.4x, -----) ca: 9.3s (22.8x, -----) he: 6.3s (15.3x, -----) ca: 7.2s (17.7x, -----) dr: 5.5s (13.5x, -----) ma: 1.6s ( 4.0x, -----) fbench valgrind-old:0.41s no: 1.6s ( 4.0x, -0.6%) me: 4.2s (10.3x, 1.4%) ca: 9.3s (22.8x, 0.0%) he: 6.3s (15.3x, -0.5%) ca: 7.2s (17.6x, 0.1%) dr: 5.5s (13.5x, 0.2%) ma: 1.7s ( 4.0x, -0.6%) -- ffbench -- ffbench valgrind-new:0.21s no: 1.2s ( 5.6x, -----) me: 3.0s (14.1x, -----) ca: 3.0s (14.3x, -----) he:45.5s (216.5x, -----) ca: 9.6s (45.7x, -----) dr: 6.9s (32.9x, -----) ma: 1.0s ( 4.6x, -----) ffbench valgrind-old:0.21s no: 1.2s ( 6.0x, -5.9%) me: 3.0s (14.0x, 0.3%) ca: 3.0s (14.3x, 0.0%) he:45.2s (215.2x, 0.6%) ca: 9.6s (45.7x, 0.0%) dr: 6.9s (32.9x, 0.0%) ma: 1.0s ( 4.6x, 0.0%) -- heap -- heap valgrind-new:0.23s no: 2.3s (10.2x, -----) me: 8.9s (38.8x, -----) ca:13.2s (57.3x, -----) he:12.6s (54.9x, -----) ca:11.3s (49.2x, -----) dr: 7.8s (33.9x, -----) ma: 7.9s (34.3x, -----) heap valgrind-old:0.23s no: 2.3s (10.2x, 0.0%) me: 8.8s (38.3x, 1.1%) ca:13.2s (57.4x, -0.3%) he:12.7s (55.4x, -0.9%) ca:11.3s (49.3x, -0.2%) dr: 7.7s (33.3x, 1.8%) ma: 7.8s (33.9x, 1.0%) -- heap_pdb4 -- heap_pdb4 valgrind-new:0.22s no: 2.5s (11.6x, -----) me:13.0s (59.2x, -----) ca:14.3s (65.0x, -----) he:13.9s (63.1x, -----) ca:12.4s (56.4x, -----) dr: 8.7s (39.6x, -----) ma: 8.1s (36.6x, -----) heap_pdb4 valgrind-old:0.22s no: 2.6s (11.7x, -0.8%) me:12.9s (58.6x, 1.1%) ca:14.3s (65.0x, 0.0%) he:14.0s (63.5x, -0.6%) ca:12.4s (56.3x, 0.1%) dr: 8.6s (39.2x, 1.0%) ma: 8.1s (36.7x, -0.1%) -- many-loss-records -- many-loss-records valgrind-new:0.02s no: 0.5s (26.5x, -----) me: 2.1s (106.0x, -----) ca: 1.9s (96.5x, -----) he: 2.1s (106.5x, -----) ca: 1.9s (96.0x, -----) dr: 1.7s (86.5x, -----) ma: 1.7s (84.0x, -----) many-loss-records valgrind-old:0.02s no: 0.5s (26.5x, 0.0%) me: 2.1s (105.0x, 0.9%) ca: 1.9s (96.5x, 0.0%) he: 2.1s (107.0x, -0.5%) ca: 1.9s (96.0x, 0.0%) dr: 1.7s (86.0x, 0.6%) ma: 1.7s (83.5x, 0.6%) -- many-xpts -- many-xpts valgrind-new:0.07s no: 0.7s ( 9.7x, -----) me: 3.2s (45.6x, -----) ca:371.3s (5304.0x, -----) he: 6.6s (93.7x, -----) ca: 2.8s (40.1x, -----) dr: 2.5s (35.7x, -----) ma: 2.6s (37.0x, -----) many-xpts valgrind-old:0.07s no: 0.7s (10.0x, -2.9%) me: 3.2s (45.4x, 0.3%) ca:376.1s (5372.4x, -1.3%) he: 6.6s (94.6x, -0.9%) ca: 2.8s (40.1x, 0.0%) dr: 2.5s (35.3x, 1.2%) ma: 2.6s (36.9x, 0.4%) -- sarp -- sarp valgrind-new:0.03s no: 0.6s (20.7x, -----) me: 3.5s (115.3x, -----) ca: 3.2s (106.7x, -----) he:17.2s (573.3x, -----) ca: 2.0s (67.7x, -----) dr: 1.3s (44.7x, -----) ma: 0.5s (16.0x, -----) sarp valgrind-old:0.03s no: 0.6s (20.3x, 1.6%) me: 3.5s (115.0x, 0.3%) ca: 3.2s (106.7x, 0.0%) he:17.2s (572.7x, 0.1%) ca: 2.0s (68.0x, -0.5%) dr: 1.4s (45.0x, -0.7%) ma: 0.5s (16.0x, 0.0%) -- tinycc -- tinycc valgrind-new:0.22s no: 3.1s (14.3x, -----) me:14.5s (66.0x, -----) ca:30.0s (136.5x, -----) he:27.9s (127.0x, -----) ca:21.3s (96.6x, -----) dr:20.4s (92.7x, -----) ma: 3.9s (17.7x, -----) tinycc valgrind-old:0.22s no: 3.1s (14.3x, 0.0%) me:14.5s (65.9x, 0.2%) ca:30.0s (136.5x, 0.0%) he:28.1s (128.0x, -0.8%) ca:21.2s (96.5x, 0.1%) dr:20.6s (93.5x, -0.9%) ma: 3.9s (17.6x, 0.8%) -- Finished tests in perf ---------------------------------------------- == 11 programs, 154 timings ================= real 111m9.026s user 110m33.123s sys 0m29.588s |
|
From: Tom H. <to...@co...> - 2014-07-31 03:24:46
|
valgrind revision: 14214
VEX revision: 2910
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.15.3-200.fc20.x86_64 x86_64
Vendor version: Fedora release 9 (Sulphur)
Nightly build on bristol ( )
Started at 2014-07-31 03:52:04 BST
Ended at 2014-07-31 04:24:31 BST
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
== 660 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)
--tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old
-- Running tests in perf ----------------------------------------------
-- bigcode1 --
*** Command returned non-zero (32512)
*** See perf.{cmd,stdout,stderr} to determine what went wrong.
real 0m0.018s
user 0m0.012s
sys 0m0.001s
|
|
From: Tom H. <to...@co...> - 2014-07-31 02:48:16
|
valgrind revision: 14214
VEX revision: 2910
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.15.3-200.fc20.x86_64 x86_64
Vendor version: Fedora release 15 (Lovelock)
Nightly build on bristol ( )
Started at 2014-07-31 03:12:47 BST
Ended at 2014-07-31 03:48:07 BST
Results differ from 24 hours ago
Checking out valgrind source tree ... done
Configuring valgrind ... done
Building valgrind ... done
Running regression tests ... done
Regression test results follow
== 692 tests, 0 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
=================================================
== 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
== 692 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/err_disable4 (stderr)
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short 2014-07-31 03:30:09.607145868 +0100
--- new.short 2014-07-31 03:48:07.040521073 +0100
***************
*** 4,6 ****
Building valgrind ... done
! Running regression tests ... failed
--- 4,6 ----
Building valgrind ... done
! Running regression tests ... done
***************
*** 8,11 ****
! == 692 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
! memcheck/tests/err_disable4 (stderr)
--- 8,10 ----
! == 692 tests, 0 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
--tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old
-- Running tests in perf ----------------------------------------------
-- bigcode1 --
*** Command returned non-zero (32512)
*** See perf.{cmd,stdout,stderr} to determine what went wrong.
real 0m0.013s
user 0m0.007s
sys 0m0.003s
|
|
From: Tom H. <to...@co...> - 2014-07-31 02:37:38
|
valgrind revision: 14214
VEX revision: 2910
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.15.3-200.fc20.x86_64 x86_64
Vendor version: Fedora release 16 (Verne)
Nightly build on bristol ( )
Started at 2014-07-31 03:02:02 BST
Ended at 2014-07-31 03:37:28 BST
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
== 692 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/err_disable4 (stderr)
--tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old
-- Running tests in perf ----------------------------------------------
-- bigcode1 --
*** Command returned non-zero (32512)
*** See perf.{cmd,stdout,stderr} to determine what went wrong.
real 0m0.014s
user 0m0.008s
sys 0m0.001s
|
|
From: Tom H. <to...@co...> - 2014-07-31 02:28:05
|
valgrind revision: 14214
VEX revision: 2910
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.15.3-200.fc20.x86_64 x86_64
Vendor version: Fedora release 17 (Beefy Miracle)
Nightly build on bristol ( )
Started at 2014-07-31 02:51:31 BST
Ended at 2014-07-31 03:27:52 BST
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
== 692 tests, 5 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)
exp-sgcheck/tests/preen_invars (stdout)
exp-sgcheck/tests/preen_invars (stderr)
--tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old
-- Running tests in perf ----------------------------------------------
-- bigcode1 --
*** Command returned non-zero (32512)
*** See perf.{cmd,stdout,stderr} to determine what went wrong.
real 0m0.021s
user 0m0.006s
sys 0m0.003s
|
|
From: Tom H. <to...@co...> - 2014-07-31 02:18:53
|
valgrind revision: 14214
VEX revision: 2910
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.15.3-200.fc20.x86_64 x86_64
Vendor version: Fedora release 18 (Spherical Cow)
Nightly build on bristol ( )
Started at 2014-07-31 02:41:17 BST
Ended at 2014-07-31 03:18:41 BST
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
== 692 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)
=================================================
== 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
== 692 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
exp-sgcheck/tests/preen_invars (stdout)
exp-sgcheck/tests/preen_invars (stderr)
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short 2014-07-31 03:00:10.588583490 +0100
--- new.short 2014-07-31 03:18:41.487318167 +0100
***************
*** 8,10 ****
! == 692 tests, 1 stderr failure, 1 stdout failure, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
exp-sgcheck/tests/preen_invars (stdout)
--- 8,11 ----
! == 692 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)
--tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old
-- Running tests in perf ----------------------------------------------
-- bigcode1 --
*** Command returned non-zero (32512)
*** See perf.{cmd,stdout,stderr} to determine what went wrong.
real 0m0.013s
user 0m0.008s
sys 0m0.001s
|
|
From: Tom H. <to...@co...> - 2014-07-31 02:10:33
|
valgrind revision: 14214
VEX revision: 2910
C compiler: gcc (GCC) 4.8.3 20140624 (Red Hat 4.8.3-1)
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.15.3-200.fc20.x86_64 x86_64
Vendor version: Fedora release 19 (Schrödingerâs Cat)
Nightly build on bristol ( )
Started at 2014-07-31 02:31:38 BST
Ended at 2014-07-31 03:10:20 BST
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
== 692 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
memcheck/tests/err_disable4 (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
== 692 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
exp-sgcheck/tests/hackedbz2 (stderr)
=================================================
== Difference between 24 hours ago and now ==
=================================================
*** old.short 2014-07-31 02:52:03.420909073 +0100
--- new.short 2014-07-31 03:10:20.298912141 +0100
***************
*** 8,10 ****
! == 692 tests, 1 stderr failure, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
exp-sgcheck/tests/hackedbz2 (stderr)
--- 8,11 ----
! == 692 tests, 2 stderr failures, 0 stdout failures, 0 stderrB failures, 0 stdoutB failures, 0 post failures ==
! memcheck/tests/err_disable4 (stderr)
exp-sgcheck/tests/hackedbz2 (stderr)
--tools=none,memcheck,callgrind,helgrind,cachegrind,drd,massif --reps=3 --vg=../valgrind-new --vg=../valgrind-old
-- Running tests in perf ----------------------------------------------
-- bigcode1 --
*** Command returned non-zero (32512)
*** See perf.{cmd,stdout,stderr} to determine what went wrong.
real 0m0.053s
user 0m0.006s
sys 0m0.002s
|