Add valgrind-3.8.1-dwarf-anon-enum.patch.
This commit is contained in:
parent
bbbedabab5
commit
088e4859ab
71
valgrind-3.8.1-dwarf-anon-enum.patch
Normal file
71
valgrind-3.8.1-dwarf-anon-enum.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
commit 9d82d0f293c83ff2b8c3ab07065d8454059452be
|
||||||
|
Author: mjw <mjw@a5019735-40e9-0310-863c-91ae7b9d1cf9>
|
||||||
|
Date: Fri Jun 28 14:03:58 2013 +0000
|
||||||
|
|
||||||
|
Bug 289360 parse_type_DIE confused by DW_TAG_enumeration_type.
|
||||||
|
|
||||||
|
GCC allows incomplete enums as GNU extension.
|
||||||
|
http://gcc.gnu.org/onlinedocs/gcc/Incomplete-Enums.html
|
||||||
|
These are marked as DW_AT_declaration and won't have a size.
|
||||||
|
They can only be used in declaration or as pointer types.
|
||||||
|
You can't allocate variables or storage using such an enum type.
|
||||||
|
So don't require a size for such enum types.
|
||||||
|
|
||||||
|
git-svn-id: svn://svn.valgrind.org/valgrind/trunk@13433 a5019735-40e9-0310-863c-91ae7b9d1cf9
|
||||||
|
|
||||||
|
diff --git a/coregrind/m_debuginfo/readdwarf3.c b/coregrind/m_debuginfo/readdwarf3.c
|
||||||
|
index 8dbed5a..5e20ff0 100644
|
||||||
|
--- a/coregrind/m_debuginfo/readdwarf3.c
|
||||||
|
+++ b/coregrind/m_debuginfo/readdwarf3.c
|
||||||
|
@@ -2501,6 +2501,7 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents,
|
||||||
|
VG_(memset)(&typeE, 0, sizeof(typeE));
|
||||||
|
typeE.cuOff = posn;
|
||||||
|
typeE.tag = Te_TyEnum;
|
||||||
|
+ Bool is_decl = False;
|
||||||
|
typeE.Te.TyEnum.atomRs
|
||||||
|
= VG_(newXA)( ML_(dinfo_zalloc), "di.readdwarf3.ptD.enum_type.1",
|
||||||
|
ML_(dinfo_free),
|
||||||
|
@@ -2519,6 +2520,9 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents,
|
||||||
|
if (attr == DW_AT_byte_size && ctsSzB > 0) {
|
||||||
|
typeE.Te.TyEnum.szB = cts;
|
||||||
|
}
|
||||||
|
+ if (attr == DW_AT_declaration) {
|
||||||
|
+ is_decl = True;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!typeE.Te.TyEnum.name)
|
||||||
|
@@ -2530,22 +2534,17 @@ static void parse_type_DIE ( /*MOD*/XArray* /* of TyEnt */ tyents,
|
||||||
|
if (typeE.Te.TyEnum.szB == 0
|
||||||
|
/* we must know the size */
|
||||||
|
/* but not for Ada, which uses such dummy
|
||||||
|
- enumerations as helper for gdb ada mode. */
|
||||||
|
- && parser->language != 'A') {
|
||||||
|
- /* GCC has been seen to put an odd DIE like this into
|
||||||
|
- .debug_types:
|
||||||
|
-
|
||||||
|
- <1><cb72>: DW_TAG_enumeration_type (in .debug_types)
|
||||||
|
- DW_AT_name : (indirect string, offset: 0x3374a): exec_direction_kind
|
||||||
|
- DW_AT_declaration : 1
|
||||||
|
-
|
||||||
|
- It isn't clear what this means, but we accept it and
|
||||||
|
- assume that the enum is int-sized. */
|
||||||
|
- if (cc->is_type_unit) {
|
||||||
|
- typeE.Te.TyEnum.szB = sizeof(int);
|
||||||
|
- } else {
|
||||||
|
- goto bad_DIE;
|
||||||
|
- }
|
||||||
|
+ enumerations as helper for gdb ada mode.
|
||||||
|
+ Also GCC allows incomplete enums as GNU extension.
|
||||||
|
+ http://gcc.gnu.org/onlinedocs/gcc/Incomplete-Enums.html
|
||||||
|
+ These are marked as DW_AT_declaration and won't have
|
||||||
|
+ a size. They can only be used in declaration or as
|
||||||
|
+ pointer types. You can't allocate variables or storage
|
||||||
|
+ using such an enum type. (Also GCC seems to have a bug
|
||||||
|
+ that will put such an enumeration_type into a .debug_types
|
||||||
|
+ unit which should only contain complete types.) */
|
||||||
|
+ && (parser->language != 'A' && !is_decl)) {
|
||||||
|
+ goto bad_DIE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* On't stack! */
|
@ -159,6 +159,9 @@ Patch39: valgrind-3.8.1-regtest-fixlets.patch
|
|||||||
# KDE#309600 - valgrind is a bit confused about 0-sized sections
|
# KDE#309600 - valgrind is a bit confused about 0-sized sections
|
||||||
Patch40: valgrind-3.8.1-zero-size-sections.patch
|
Patch40: valgrind-3.8.1-zero-size-sections.patch
|
||||||
|
|
||||||
|
# KDE#289360 - parse_type_DIE confused by DW_TAG_enumeration_type
|
||||||
|
Patch41: valgrind-3.8.1-dwarf-anon-enum.patch
|
||||||
|
|
||||||
%ifarch x86_64 ppc64
|
%ifarch x86_64 ppc64
|
||||||
# Ensure glibc{,-devel} is installed for both multilib arches
|
# Ensure glibc{,-devel} is installed for both multilib arches
|
||||||
BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so
|
BuildRequires: /lib/libc.so.6 /usr/lib/libc.so /lib64/libc.so.6 /usr/lib64/libc.so
|
||||||
@ -298,6 +301,7 @@ touch ./memcheck/tests/linux/getregset.stderr.exp
|
|||||||
%patch38 -p1
|
%patch38 -p1
|
||||||
%patch39 -p1
|
%patch39 -p1
|
||||||
%patch40 -p1
|
%patch40 -p1
|
||||||
|
%patch41 -p1
|
||||||
|
|
||||||
# These tests go into an endless loop on ARM
|
# These tests go into an endless loop on ARM
|
||||||
# There is a __sync_add_and_fetch in the testcase.
|
# There is a __sync_add_and_fetch in the testcase.
|
||||||
@ -459,6 +463,9 @@ echo ===============END TESTING===============
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Jul 08 2013 Mark Wielaard <mjw@redhat.com>
|
||||||
|
- Add valgrind-3.8.1-dwarf-anon-enum.patch
|
||||||
|
|
||||||
* Tue May 28 2013 Michael Schwendt <mschwendt@fedoraproject.org> - 1:3.8.1-16
|
* Tue May 28 2013 Michael Schwendt <mschwendt@fedoraproject.org> - 1:3.8.1-16
|
||||||
- Provide virtual -static package in -devel subpackage (#609624).
|
- Provide virtual -static package in -devel subpackage (#609624).
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user