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
(5) |
2
(15) |
3
(20) |
|
4
(4) |
5
(11) |
6
(8) |
7
(36) |
8
(23) |
9
(6) |
10
(4) |
|
11
(4) |
12
(19) |
13
(17) |
14
(33) |
15
(16) |
16
(17) |
17
(4) |
|
18
(4) |
19
(30) |
20
(22) |
21
(23) |
22
(29) |
23
(20) |
24
(12) |
|
25
(7) |
26
(33) |
27
(10) |
28
(12) |
29
(19) |
30
(15) |
31
(8) |
|
From: Julian S. <js...@ac...> - 2009-01-24 20:30:41
|
> test00: negative
> GLOB=0
> --22433-- VALGRIND INTERNAL ERROR: Valgrind received a signal 11 (SIGSEGV)
> - exiting
> --22433-- si_code=1; Faulting address: 0x10; sp: 0x62e67e88
> Test 0's destructor is trying to delete a mutex, but the whole program
> never used mutexes.
> So, Helgrind's loag is not initialized and trying to delete the mutex
> faults.
I understand what you're saying, but I can't reproduce this failure:
sewardj@zazenhausen:~/DaRaT/unittest$
valgrind-3.4.0 --tool=helgrind ./racecheck_unittest 0
==24354== Helgrind, a thread error detector.
==24354== Copyright (C) 2007-2008, and GNU GPL'd, by OpenWorks LLP et al.
==24354== Using LibVEX rev 1878, a library for dynamic binary translation.
==24354== Copyright (C) 2004-2008, and GNU GPL'd, by OpenWorks LLP.
==24354== Using valgrind-3.4.0, a dynamic binary instrumentation framework.
==24354== Copyright (C) 2000-2008, and GNU GPL'd, by Julian Seward et al.
==24354== For more details, rerun with: -v
==24354==
test00: negative
GLOB=0
==24354==
==24354== ERROR SUMMARY: 0 errors from 0 contexts (suppressed: 0 from 0)
Do I need to build racecheck_unittest in some special way? I simply
checked out the sources and did 'make' in the unittest directory;
maybe there is some other config option needed? I believe there are
some magic configuration options for racecheck_unittest, but I don't
know what they are.
J
|
|
From: <sv...@va...> - 2009-01-24 10:52:37
|
Author: sewardj
Date: 2009-01-24 10:52:32 +0000 (Sat, 24 Jan 2009)
New Revision: 9056
Log:
Handle a few more syscalls, as per #179618.
MERGE TO 3_4_BRANCH.
Modified:
trunk/exp-ptrcheck/h_main.c
Modified: trunk/exp-ptrcheck/h_main.c
===================================================================
--- trunk/exp-ptrcheck/h_main.c 2009-01-24 01:44:15 UTC (rev 9055)
+++ trunk/exp-ptrcheck/h_main.c 2009-01-24 10:52:32 UTC (rev 9056)
@@ -2188,6 +2188,9 @@
# endif
ADD(0, __NR_chmod);
ADD(0, __NR_chown);
+# if defined(__NR_chown32)
+ ADD(0, __NR_chown32);
+# endif
ADD(0, __NR_clock_getres);
ADD(0, __NR_clock_gettime);
ADD(0, __NR_clone);
@@ -2255,6 +2258,7 @@
# if defined(__NR_getsockopt)
ADD(0, __NR_getsockopt);
# endif
+ ADD(0, __NR_gettid);
ADD(0, __NR_gettimeofday);
ADD(0, __NR_getuid);
# if defined(__NR_getuid32)
@@ -2304,6 +2308,7 @@
ADD(0, __NR_sched_getaffinity);
ADD(0, __NR_sched_getparam);
ADD(0, __NR_sched_getscheduler);
+ ADD(0, __NR_sched_setaffinity);
ADD(0, __NR_sched_setscheduler);
ADD(0, __NR_sched_yield);
ADD(0, __NR_select);
@@ -2332,6 +2337,7 @@
# if defined(__NR_shutdown)
ADD(0, __NR_shutdown);
# endif
+ ADD(0, __NR_sigaltstack);
# if defined(__NR_socket)
ADD(0, __NR_socket);
# endif
|
|
From: <sv...@va...> - 2009-01-24 10:34:27
|
Author: sewardj
Date: 2009-01-24 10:34:19 +0000 (Sat, 24 Jan 2009)
New Revision: 1882
Log:
Handle redundant REX.W on PUNPCKHgg. Fixes test case dated 2009-01-22
of #173751.
Modified:
trunk/priv/guest-amd64/toIR.c
Modified: trunk/priv/guest-amd64/toIR.c
===================================================================
--- trunk/priv/guest-amd64/toIR.c 2009-01-22 20:40:22 UTC (rev 1881)
+++ trunk/priv/guest-amd64/toIR.c 2009-01-24 10:34:19 UTC (rev 1882)
@@ -6594,7 +6594,8 @@
case 0x68:
case 0x69:
case 0x6A: /* PUNPCKHgg (src)mmxreg-or-mem, (dst)mmxreg */
- if (sz != 4)
+ if (sz != 4
+ && /*ignore redundant REX.W*/!(sz==8 && haveNo66noF2noF3(pfx)))
goto mmx_decode_failure;
delta = dis_MMXop_regmem_to_reg ( vbi, pfx, delta, opc, "punpckh", True );
break;
|
|
From: Tom H. <th...@cy...> - 2009-01-24 03:47:22
|
Nightly build on vauxhall ( x86_64, Fedora 10 ) started at 2009-01-24 03:20:06 GMT Results differ from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 481 tests, 1 stderr failure, 0 stdout failures, 0 post failures == memcheck/tests/x86-linux/scalar (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 == 481 tests, 2 stderr failures, 0 stdout failures, 0 post failures == helgrind/tests/hg05_race2 (stderr) memcheck/tests/x86-linux/scalar (stderr) ================================================= == Difference between 24 hours ago and now == ================================================= *** old.short Sat Jan 24 03:33:50 2009 --- new.short Sat Jan 24 03:47:17 2009 *************** *** 8,11 **** ! == 481 tests, 2 stderr failures, 0 stdout failures, 0 post failures == ! helgrind/tests/hg05_race2 (stderr) memcheck/tests/x86-linux/scalar (stderr) --- 8,10 ---- ! == 481 tests, 1 stderr failure, 0 stdout failures, 0 post failures == memcheck/tests/x86-linux/scalar (stderr) |
|
From: Tom H. <th...@cy...> - 2009-01-24 03:45:50
|
Nightly build on lloyd ( x86_64, Fedora 7 ) started at 2009-01-24 03:05:07 GMT Results unchanged from 24 hours ago Checking out valgrind source tree ... done Configuring valgrind ... done Building valgrind ... done Running regression tests ... failed Regression test results follow == 472 tests, 6 stderr failures, 0 stdout failures, 0 post failures == exp-ptrcheck/tests/ccc (stderr) exp-ptrcheck/tests/preen_invars (stderr) exp-ptrcheck/tests/pth_create (stderr) exp-ptrcheck/tests/pth_specific (stderr) helgrind/tests/tc20_verifywrap (stderr) memcheck/tests/x86-linux/scalar (stderr) |
|
From: <sv...@va...> - 2009-01-24 02:42:19
|
Author: sewardj
Date: 2009-01-24 01:42:20 +0000 (Sat, 24 Jan 2009)
New Revision: 9054
Log:
Make the leak checker a bit less verbose.
Modified:
trunk/memcheck/mc_leakcheck.c
Modified: trunk/memcheck/mc_leakcheck.c
===================================================================
--- trunk/memcheck/mc_leakcheck.c 2009-01-24 01:22:51 UTC (rev 9053)
+++ trunk/memcheck/mc_leakcheck.c 2009-01-24 01:42:20 UTC (rev 9054)
@@ -377,8 +377,8 @@
static void lc_scan_memory(Addr start, SizeT len)
{
- if (VG_(clo_verbosity) > 1) {
- VG_(message)(Vg_DebugMsg, "Scanning segment: %#lx..%#lx (%ld)",
+ if (VG_(clo_verbosity) > 2) {
+ VG_(message)(Vg_DebugMsg, " Scanning segment: %#lx..%#lx (%ld)",
start, start+len-1, len);
}
lc_scan_memory_WRK(start, len, -1);
|
|
From: <sv...@va...> - 2009-01-24 02:42:19
|
Author: sewardj
Date: 2009-01-24 01:44:15 +0000 (Sat, 24 Jan 2009)
New Revision: 9055
Log:
Accept 'enum' type DIEs that do not have any names; apparently Dwarf2
allows this. Patch from Nuno Lopes. #181707.
MERGE TO 3_4_BRANCH
Modified:
trunk/coregrind/m_debuginfo/readdwarf3.c
Modified: trunk/coregrind/m_debuginfo/readdwarf3.c
===================================================================
--- trunk/coregrind/m_debuginfo/readdwarf3.c 2009-01-24 01:42:20 UTC (rev 9054)
+++ trunk/coregrind/m_debuginfo/readdwarf3.c 2009-01-24 01:44:15 UTC (rev 9055)
@@ -2236,9 +2236,14 @@
typeE.Te.TyEnum.szB = cts;
}
}
+
+ if (!typeE.Te.TyEnum.name)
+ typeE.Te.TyEnum.name
+ = ML_(dinfo_strdup)( "di.readdwarf3.pTD.enum_type.3",
+ "<anon_enum_type>" );
+
/* Do we have something that looks sane? */
- if (typeE.Te.TyEnum.szB == 0 /* we must know the size */
- /* But the name can be present, or not */)
+ if (typeE.Te.TyEnum.szB == 0 /* we must know the size */)
goto bad_DIE;
/* On't stack! */
typestack_push( cc, parser, td3, &typeE, level );
|
|
From: <sv...@va...> - 2009-01-24 01:23:02
|
Author: sewardj Date: 2009-01-24 01:22:51 +0000 (Sat, 24 Jan 2009) New Revision: 9053 Log: Fix aix5 build breakage following r9021. Modified: trunk/coregrind/m_debuginfo/readxcoff.c Modified: trunk/coregrind/m_debuginfo/readxcoff.c =================================================================== --- trunk/coregrind/m_debuginfo/readxcoff.c 2009-01-24 01:22:25 UTC (rev 9052) +++ trunk/coregrind/m_debuginfo/readxcoff.c 2009-01-24 01:22:51 UTC (rev 9053) @@ -58,6 +58,7 @@ #include "pub_core_xarray.h" #include "priv_misc.h" #include "priv_tytypes.h" +#include "pub_tool_debuginfo.h" #include "priv_d3basics.h" #include "priv_storage.h" #include "priv_readxcoff.h" /* self */ |
|
From: <sv...@va...> - 2009-01-24 01:22:31
|
Author: sewardj Date: 2009-01-24 01:22:25 +0000 (Sat, 24 Jan 2009) New Revision: 9052 Log: Don't try to build m_ume on aix5. Modified: trunk/coregrind/Makefile.am Modified: trunk/coregrind/Makefile.am =================================================================== --- trunk/coregrind/Makefile.am 2009-01-24 00:07:53 UTC (rev 9051) +++ trunk/coregrind/Makefile.am 2009-01-24 01:22:25 UTC (rev 9052) @@ -222,10 +222,7 @@ m_replacemalloc/replacemalloc_core.c \ m_scheduler/scheduler.c \ m_scheduler/sema.c \ - m_syswrap/syswrap-main.c \ - m_ume/elf.c \ - m_ume/main.c \ - m_ume/script.c + m_syswrap/syswrap-main.c COREGRIND_LINUX_SOURCE = \ m_coredump/coredump-elf.c \ @@ -237,7 +234,10 @@ m_debuginfo/readdwarf.c \ m_debuginfo/readdwarf3.c \ m_debuginfo/readstabs.c \ - m_syswrap/syswrap-generic.c + m_syswrap/syswrap-generic.c \ + m_ume/elf.c \ + m_ume/main.c \ + m_ume/script.c COREGRIND_AIX5_SOURCE = \ m_aspacemgr/aspacemgr-aix5.c \ |
|
From: <sv...@va...> - 2009-01-24 00:07:59
|
Author: sewardj
Date: 2009-01-24 00:07:53 +0000 (Sat, 24 Jan 2009)
New Revision: 9051
Log:
VG_(apply_StackTrace): following r8818, we should regard an entry of -1
as denoting the logical end of the stack. This change stops printing
of a lot of junk below the logical "-1" end mark. See added comments
for details.
Modified:
trunk/coregrind/m_stacktrace.c
Modified: trunk/coregrind/m_stacktrace.c
===================================================================
--- trunk/coregrind/m_stacktrace.c 2009-01-24 00:06:13 UTC (rev 9050)
+++ trunk/coregrind/m_stacktrace.c 2009-01-24 00:07:53 UTC (rev 9051)
@@ -561,7 +561,13 @@
action(i, ip);
i++;
- } while (i < n_ips && ips[i] != 0 && !main_done);
+ // re 'while' condition: stop if we hit a zero value (the traditional
+ // end-of-stack marker) or a ~0 value. The latter because r8818
+ // (in this file) changes the meaning of entries [1] and above in a
+ // stack trace, by subtracting 1 from them. Hence stacks that used
+ // to end with a zero value now end in -1 and so we must detect
+ // that too.
+ } while (i < n_ips && ips[i] != 0 && ips[i] != ~(Addr)0 && !main_done);
#undef MYBUF_LEN
}
|
|
From: <sv...@va...> - 2009-01-24 00:06:19
|
Author: sewardj
Date: 2009-01-24 00:06:13 +0000 (Sat, 24 Jan 2009)
New Revision: 9050
Log:
ML_(evaluate_trivial_GX): handle the case
(DW_OP_addr: DW_OP_plus_uconst: ULEB < 128)
This is a really nasty kludge and should be fixed properly.
MERGE TO 3_4_BRANCH (?)
Modified:
trunk/coregrind/m_debuginfo/d3basics.c
Modified: trunk/coregrind/m_debuginfo/d3basics.c
===================================================================
--- trunk/coregrind/m_debuginfo/d3basics.c 2009-01-24 00:04:28 UTC (rev 9049)
+++ trunk/coregrind/m_debuginfo/d3basics.c 2009-01-24 00:06:13 UTC (rev 9050)
@@ -736,7 +736,10 @@
* any of the subexpressions do not produce a manifest constant
* there's more than one subexpression, all of which successfully
evaluate to a constant, but they don't all produce the same constant.
- */
+ JRS 23Jan09: the special-casing in this function is a nasty kludge.
+ Really it ought to be pulled out and turned into a general
+ constant- expression evaluator.
+*/
GXResult ML_(evaluate_trivial_GX)( GExpr* gx, const DebugInfo* di )
{
GXResult res;
@@ -747,7 +750,7 @@
MaybeULong *mul, *mul2;
HChar* badness = NULL;
- UChar* p = &gx->payload[0];
+ UChar* p = &gx->payload[0]; /* must remain unsigned */
XArray* results = VG_(newXA)( ML_(dinfo_zalloc), "di.d3basics.etG.1",
ML_(dinfo_free),
sizeof(MaybeULong) );
@@ -778,18 +781,41 @@
/* Peer at this particular subexpression, to see if it's
obviously a constant. */
if (nbytes == 1 + sizeof(Addr) && *p == DW_OP_addr) {
+ /* DW_OP_addr a */
Addr a = *(Addr*)(p+1);
if (bias_address(&a, di)) {
thisResult.b = True;
thisResult.ul = (ULong)a;
+ } else {
+ if (!badness)
+ badness = "trivial GExpr denotes constant address "
+ "in unknown section (1)";
}
- else if (!badness) {
- badness = "trivial GExpr denotes constant address in unknown section";
+ }
+ else
+ if (nbytes == 1 + sizeof(Addr) + 1 + 1
+ /* 11 byte block: 3 c0 b6 2b 0 0 0 0 0 23 4
+ (DW_OP_addr: 2bb6c0; DW_OP_plus_uconst: 4)
+ This is really a nasty kludge - only matches if the
+ trailing ULEB denotes a number in the range 0 .. 127
+ inclusive. */
+ && p[0] == DW_OP_addr
+ && p[1 + sizeof(Addr)] == DW_OP_plus_uconst
+ && p[1 + sizeof(Addr) + 1] < 0x80 /*1-byte ULEB*/) {
+ Addr a = *(Addr*)&p[1];
+ if (bias_address(&a, di)) {
+ thisResult.b = True;
+ thisResult.ul = (ULong)a + (ULong)p[1 + sizeof(Addr) + 1];
+ } else {
+ if (!badness)
+ badness = "trivial GExpr denotes constant address "
+ "in unknown section (2)";
}
}
- else if (nbytes == 2 + sizeof(Addr)
- && *p == DW_OP_addr
- && *(p + 1 + sizeof(Addr)) == DW_OP_GNU_push_tls_address) {
+ else
+ if (nbytes == 2 + sizeof(Addr)
+ && *p == DW_OP_addr
+ && *(p + 1 + sizeof(Addr)) == DW_OP_GNU_push_tls_address) {
if (!badness)
badness = "trivial GExpr is DW_OP_addr plus trailing junk";
}
|
|
From: <sv...@va...> - 2009-01-24 00:04:35
|
Author: sewardj
Date: 2009-01-24 00:04:28 +0000 (Sat, 24 Jan 2009)
New Revision: 9049
Log:
Handle the case where a Compilation Unit (CU) (or, really, the CU and
its associated DIEs) occupies less space than stated in the CU's
header. icc9 appears to produce CUs with this anomaly. Not handling
the case causes the reader to lose sync at the start of the following
CU, since it hasn't skipped the junk bytes at the end of the current
CU, and it is basically hosed after that.
MERGE TO 3_4_BRANCH (?)
Modified:
trunk/coregrind/m_debuginfo/readdwarf3.c
Modified: trunk/coregrind/m_debuginfo/readdwarf3.c
===================================================================
--- trunk/coregrind/m_debuginfo/readdwarf3.c 2009-01-23 04:55:49 UTC (rev 9048)
+++ trunk/coregrind/m_debuginfo/readdwarf3.c 2009-01-24 00:04:28 UTC (rev 9049)
@@ -387,7 +387,12 @@
Bool is_dw64;
/* Which DWARF version ? (2 or 3) */
UShort version;
- /* Length of this Compilation Unit, excluding its Header */
+ /* Length of this Compilation Unit, as stated in the
+ .unit_length :: InitialLength field of the CU Header.
+ However, this size (as specified by the D3 spec) does not
+ include the size of the .unit_length field itself, which is
+ either 4 or 12 bytes (32-bit or 64-bit Dwarf3). That value
+ can be obtained through the expression ".is_dw64 ? 12 : 4". */
ULong unit_length;
/* Offset of start of this unit in .debug_info */
UWord cu_start_offset;
@@ -3368,12 +3373,30 @@
while (True) {
UWord cu_start_offset, cu_offset_now;
CUConst cc;
+ /* It may be that the stated size of this CU is larger than the
+ amount of stuff actually in it. icc9 seems to generate CUs
+ thusly. We use these variables to figure out if this is
+ indeed the case, and if so how many bytes we need to skip to
+ get to the start of the next CU. Not skipping those bytes
+ causes us to misidentify the start of the next CU, and it all
+ goes badly wrong after that (not surprisingly). */
+ UWord cu_size_including_IniLen, cu_amount_used;
/* It seems icc9 finishes the DIE info before debug_info_sz
bytes have been used up. So be flexible, and declare the
sequence complete if there is not enough remaining bytes to
hold even the smallest conceivable CU header. (11 bytes I
reckon). */
+ /* JRS 23Jan09: I suspect this is no longer necessary now that
+ the code below contains a 'while (cu_amount_used <
+ cu_size_including_IniLen ...' style loop, which skips over
+ any leftover bytes at the end of a CU in the case where the
+ CU's stated size is larger than its actual size (as
+ determined by reading all its DIEs). However, for prudence,
+ I'll leave the following test in place. I can't see that a
+ CU header can be smaller than 11 bytes, so I don't think
+ there's any harm possible through the test -- it just adds
+ robustness. */
Word avail = get_remaining_length_Cursor( &info );
if (avail < 11) {
if (avail > 0)
@@ -3447,10 +3470,36 @@
&info, td3, &cc, 0 );
cu_offset_now = get_position_of_Cursor( &info );
+
+ if (0) VG_(printf)("Travelled: %lu size %llu\n",
+ cu_offset_now - cc.cu_start_offset,
+ cc.unit_length + (cc.is_dw64 ? 12 : 4));
+
+ /* How big the CU claims it is .. */
+ cu_size_including_IniLen = cc.unit_length + (cc.is_dw64 ? 12 : 4);
+ /* .. vs how big we have found it to be */
+ cu_amount_used = cu_offset_now - cc.cu_start_offset;
+
if (1) TRACE_D3("offset now %ld, d-i-size %ld\n",
cu_offset_now, debug_info_sz);
if (cu_offset_now > debug_info_sz)
barf("toplevel DIEs beyond end of CU");
+
+ /* If the CU is bigger than it claims to be, we've got a serious
+ problem. */
+ if (cu_amount_used > cu_size_including_IniLen)
+ barf("CU's actual size appears to be larger than it claims it is");
+
+ /* If the CU is smaller than it claims to be, we need to skip some
+ bytes. Loop updates cu_offset_new and cu_amount_used. */
+ while (cu_amount_used < cu_size_including_IniLen
+ && get_remaining_length_Cursor( &info ) > 0) {
+ if (0) VG_(printf)("SKIP\n");
+ (void)get_UChar( &info );
+ cu_offset_now = get_position_of_Cursor( &info );
+ cu_amount_used = cu_offset_now - cc.cu_start_offset;
+ }
+
if (cu_offset_now == debug_info_sz)
break;
|