[valgrind/f18] 3.8.0-5 Add valgrind-3.8.0-abbrev-parsing.patch for #849783 (KDE#305513).
Mark Wielaard
mjw at fedoraproject.org
Mon Aug 27 09:41:17 UTC 2012
commit ee910861b7462bdb8ae13dab2c6d625a8cdb30c3
Author: Mark Wielaard <mjw at redhat.com>
Date: Mon Aug 27 11:38:22 2012 +0200
3.8.0-5 Add valgrind-3.8.0-abbrev-parsing.patch for #849783 (KDE#305513).
valgrind-3.8.0-abbrev-parsing.patch | 92 +++++++++++++++++++++++++++++++++++
valgrind.spec | 7 ++-
2 files changed, 98 insertions(+), 1 deletions(-)
---
diff --git a/valgrind-3.8.0-abbrev-parsing.patch b/valgrind-3.8.0-abbrev-parsing.patch
new file mode 100644
index 0000000..fdd5199
--- /dev/null
+++ b/valgrind-3.8.0-abbrev-parsing.patch
@@ -0,0 +1,92 @@
+Index: coregrind/m_debuginfo/readdwarf.c
+===================================================================
+--- valgrind-3.8.0/coregrind/m_debuginfo/readdwarf.c (revision 12871)
++++ valgrind-3.8.0/coregrind/m_debuginfo/readdwarf.c (working copy)
+@@ -1115,7 +1115,8 @@
+ case 0x01: /* FORM_addr */ p += addr_size; break;
+ case 0x03: /* FORM_block2 */ p += ML_(read_UShort)(p) + 2; break;
+ case 0x04: /* FORM_block4 */ p += ML_(read_UInt)(p) + 4; break;
+- case 0x09: /* FORM_block */ p += read_leb128U( &p ); break;
++ case 0x09: /* FORM_block */ /* fallthrough */
++ case 0x18: /* FORM_exprloc */ { ULong block_len = read_leb128U( &p ); p += block_len; break; }
+ case 0x0a: /* FORM_block1 */ p += *p + 1; break;
+ case 0x0c: /* FORM_flag */ p++; break;
+ case 0x0d: /* FORM_sdata */ read_leb128S( &p ); break;
+@@ -1126,7 +1127,6 @@
+ case 0x13: /* FORM_ref4 */ p += 4; break;
+ case 0x14: /* FORM_ref8 */ p += 8; break;
+ case 0x15: /* FORM_ref_udata */ read_leb128U( &p ); break;
+- case 0x18: /* FORM_exprloc */ p += read_leb128U( &p ); break;
+ case 0x19: /* FORM_flag_present */break;
+ case 0x20: /* FORM_ref_sig8 */ p += 8; break;
+ case 0x1f20: /* FORM_GNU_ref_alt */ p += ui->dw64 ? 8 : 4; break;
+Index: coregrind/m_debuginfo/readdwarf.c
+===================================================================
+--- valgrind-3.8.0/coregrind/m_debuginfo/readdwarf.c (revision 12871)
++++ valgrind-3.8.0/coregrind/m_debuginfo/readdwarf.c (working copy)
+@@ -945,11 +945,11 @@
+ /* Return abbrev for given code
+ * Returned pointer points to the tag
+ * */
+-static UChar* lookup_abbrev( UChar* p, UInt acode )
++static UChar* lookup_abbrev( UChar* p, UInt acode, UChar* end_img )
+ {
+ UInt code;
+ UInt name;
+- for( ; ; ) {
++ while( p < end_img ) {
+ code = read_leb128U( &p );
+ if ( code == acode )
+ return p;
+@@ -959,7 +959,7 @@
+ name = read_leb128U( &p ); /* name */
+ read_leb128U( &p ); /* form */
+ }
+- while( name != 0 ); /* until name == form == 0 */
++ while( name != 0 && p < end_img ); /* until name == form == 0 */
+ }
+ return NULL;
+ }
+@@ -985,6 +985,7 @@
+ void read_unitinfo_dwarf2( /*OUT*/UnitInfo* ui,
+ UChar* unitblock_img,
+ UChar* debugabbrev_img,
++ Word debug_abbv_sz,
+ UChar* debugstr_img,
+ UChar* debugstr_alt_img )
+ {
+@@ -1046,7 +1047,12 @@
+ * not triggered since we shortcut the parsing once we have
+ * read the compile_unit block. This should only occur when
+ * level > 0 */
+- abbrev_img = lookup_abbrev( debugabbrev_img + atoffs, acode );
++ abbrev_img = lookup_abbrev( debugabbrev_img + atoffs, acode,
++ debugabbrev_img + debug_abbv_sz );
++ if ( abbrev_img == NULL ) {
++ VG_(printf)( "### unknown abbrev 0x%x\n", acode );
++ break;
++ }
+ }
+
+ tag = read_leb128U( &abbrev_img );
+@@ -1056,7 +1062,7 @@
+ level++;
+
+ /* And loop on entries */
+- for ( ; ; ) {
++ while( p < end_img ) {
+ /* Read entry definition */
+ UInt name, form;
+ ULong cval = -1LL; /* Constant value read */
+@@ -1226,9 +1232,9 @@
+ /* Fill ui with offset in .debug_line and compdir */
+ if (0)
+ VG_(printf)( "Reading UnitInfo at 0x%lx.....\n",
+- block_img - debug_info_img + 0UL );
++ block_img - debug_info_img + 0UL, blklen, blklen_is_64 );
+ read_unitinfo_dwarf2( &ui, block_img,
+- debug_abbv_img, debug_str_img,
++ debug_abbv_img, debug_abbv_sz, debug_str_img,
+ debug_str_alt_img );
+ if (0)
+ VG_(printf)( " => LINES=0x%llx NAME=%s DIR=%s\n",
diff --git a/valgrind.spec b/valgrind.spec
index 947ae5b..e7a9051 100644
--- a/valgrind.spec
+++ b/valgrind.spec
@@ -1,7 +1,7 @@
Summary: Tool for finding memory management bugs in programs
Name: valgrind
Version: 3.8.0
-Release: 4%{?dist}
+Release: 5%{?dist}
Epoch: 1
License: GPLv2
URL: http://www.valgrind.org/
@@ -20,6 +20,7 @@ Patch9: valgrind-3.8.0-enable-armv5.patch
Patch10: valgrind-3.8.0-ldso-supp.patch
Patch11: valgrind-3.8.0-x86-backtrace.patch
Patch12: valgrind-3.8.0-find-buildid.patch
+Patch13: valgrind-3.8.0-abbrev-parsing.patch
Obsoletes: valgrind-callgrind
%ifarch x86_64 ppc64
@@ -111,6 +112,7 @@ for details.
%patch10 -p1
%patch11 -p1
%patch12 -p1
+%patch13 -p1
%build
CC=gcc
@@ -221,6 +223,9 @@ echo ===============END TESTING===============
%endif
%changelog
+* Mon Aug 27 2012 Mark Wielaard <mjw at redhat.com> 3.8.0-5
+- Add valgrind-3.8.0-abbrev-parsing.patch for #849783 (KDE#305513).
+
* Sun Aug 19 2012 Mark Wielaard <mjw at redhat.com> 3.8.0-4
- Add valgrind-3.8.0-find-buildid.patch workaround bug #849435 (KDE#305431).
More information about the scm-commits
mailing list