diff --git a/gdb-6.6-bz233716-empty-structure-override.patch b/gdb-6.6-bz233716-empty-structure-override.patch new file mode 100644 index 0000000..d434b1c --- /dev/null +++ b/gdb-6.6-bz233716-empty-structure-override.patch @@ -0,0 +1,325 @@ +https://bugzilla.redhat.com/bugzilla/show_bug.cgi?id=233716 +http://sources.redhat.com/ml/gdb-patches/2007-03/msg00129.html + + +2007-03-12 Jan Kratochvil + + * gdbtypes.h (TYPE_FLAG_STUB_SUPPORTED, TYPE_STUB_SUPPORTED): New + macros. + (TYPE_IS_OPAQUE): Empty vs. opaque structures are now + distinct on the TYPE_STUB_SUPPORTED debug targets. + * dwarf2read.c (read_structure_type): Set TYPE_FLAG_STUB_SUPPORTED. + * dwarfread.c (struct_type): New comment on TYPE_FLAG_STUB_SUPPORTED. + +2007-03-12 Jan Kratochvil + + * gdb.base/type-opaque-lib.c, gdb.base/type-opaque-main.c, + gdb.base/type-opaque.exp: New files. + + +--- ./gdb/dwarf2read.c 12 Feb 2007 15:19:31 -0000 1.215 ++++ ./gdb/dwarf2read.c 12 Mar 2007 21:33:06 -0000 +@@ -3879,6 +3879,7 @@ read_structure_type (struct die_info *di + TYPE_LENGTH (type) = 0; + } + ++ TYPE_FLAGS (type) |= TYPE_FLAG_STUB_SUPPORTED; + if (die_is_declaration (die, cu)) + TYPE_FLAGS (type) |= TYPE_FLAG_STUB; + +--- ./gdb/dwarfread.c 12 Feb 2007 15:19:31 -0000 1.47 ++++ ./gdb/dwarfread.c 12 Mar 2007 21:33:07 -0000 +@@ -1083,7 +1083,10 @@ struct_type (struct dieinfo *dip, char * + not even have any fields, if this DIE was generated due to a reference + to an anonymous structure or union. In this case, TYPE_FLAG_STUB is + set, which clues gdb in to the fact that it needs to search elsewhere +- for the full structure definition. */ ++ for the full structure definition. ++ As such opaque reference is not distinguishable from an empty STRUCT ++ definition as DWARF1 is missing DW_AT_declaration we cannot set ++ TYPE_FLAG_STUB_SUPPORTED here. */ + if (nfields == 0) + { + TYPE_FLAGS (type) |= TYPE_FLAG_STUB; +--- ./gdb/gdbtypes.h 29 Jan 2007 17:31:06 -0000 1.68 ++++ ./gdb/gdbtypes.h 12 Mar 2007 21:33:08 -0000 +@@ -319,6 +319,14 @@ enum type_code + + #define TYPE_FLAG_FIXED_INSTANCE (1 << 15) + ++/* This debug target supports TYPE_STUB(t). In the unsupported case we have to ++ rely on NFIELDS to be zero etc., see TYPE_IS_OPAQUE (). ++ TYPE_STUB(t) with !TYPE_STUB_SUPPORTED(t) may exist if we only guessed ++ the TYPE_STUB(t) value (see dwarfread.c). */ ++ ++#define TYPE_FLAG_STUB_SUPPORTED (1 << 16) ++#define TYPE_STUB_SUPPORTED(t) (TYPE_FLAGS (t) & TYPE_FLAG_STUB_SUPPORTED) ++ + /* Array bound type. */ + enum array_bound_type + { +@@ -969,7 +977,8 @@ extern void allocate_cplus_struct_type ( + #define TYPE_IS_OPAQUE(thistype) (((TYPE_CODE (thistype) == TYPE_CODE_STRUCT) || \ + (TYPE_CODE (thistype) == TYPE_CODE_UNION)) && \ + (TYPE_NFIELDS (thistype) == 0) && \ +- (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0))) ++ (TYPE_CPLUS_SPECIFIC (thistype) && (TYPE_NFN_FIELDS (thistype) == 0)) && \ ++ (TYPE_STUB (thistype) || !TYPE_STUB_SUPPORTED (thistype))) + + struct builtin_type + { +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ ./gdb/testsuite/gdb.base/type-opaque-lib.c 12 Mar 2007 21:33:09 -0000 +@@ -0,0 +1,56 @@ ++/* Test resolving of an opaque type from the loaded shared library. ++ ++ Copyright 2007, Free Software Foundation, Inc. ++ ++ This file is part of GDB. ++ ++ 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. */ ++ ++struct struct_libtype_opaque ++{ ++ int libfield_opaque; ++}; ++struct struct_libtype_opaque struct_libtype_opaque_use; ++ ++struct struct_libtype_empty ++{ ++ int libfield_empty; ++}; ++struct struct_libtype_empty struct_libtype_empty_use; ++ ++struct struct_libtype_filled ++{ ++ int libfield_filled; ++}; ++struct struct_libtype_filled struct_libtype_filled_use; ++ ++union union_libtype_opaque ++{ ++ int libfield_opaque; ++}; ++union union_libtype_opaque union_libtype_opaque_use; ++ ++union union_libtype_empty ++{ ++ int libfield_empty; ++}; ++union union_libtype_empty union_libtype_empty_use; ++ ++union union_libtype_filled ++{ ++ int libfield_filled; ++}; ++union union_libtype_filled union_libtype_filled_use; +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ ./gdb/testsuite/gdb.base/type-opaque-main.c 12 Mar 2007 21:33:09 -0000 +@@ -0,0 +1,56 @@ ++/* Test resolving of an opaque type from the loaded shared library. ++ ++ Copyright 2007, Free Software Foundation, Inc. ++ ++ This file is part of GDB. ++ ++ 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. */ ++ ++struct struct_libtype_opaque; ++ ++struct struct_libtype_empty ++ { ++ }; ++ ++struct struct_libtype_filled ++ { ++ long mainfield_filled; ++ }; ++ ++union union_libtype_opaque; ++ ++union union_libtype_empty ++ { ++ }; ++ ++union union_libtype_filled ++ { ++ long mainfield_filled; ++ }; ++ ++int main (void) ++{ ++ volatile struct struct_libtype_opaque *pointer_struct_opaque = (void *) 0; ++ volatile struct struct_libtype_empty *pointer_struct_empty = (void *) 0; ++ volatile struct struct_libtype_filled *pointer_struct_filled = (void *) 0; ++ volatile union union_libtype_opaque *pointer_union_opaque = (void *) 0; ++ volatile union union_libtype_empty *pointer_union_empty = (void *) 0; ++ volatile union union_libtype_filled *pointer_union_filled = (void *) 0; ++ ++ return (long) pointer_struct_opaque + (long) pointer_struct_empty ++ + (long) pointer_struct_filled + (long) pointer_union_opaque ++ + (long) pointer_union_empty + (long) pointer_union_filled; ++} +--- /dev/null 1 Jan 1970 00:00:00 -0000 ++++ ./gdb/testsuite/gdb.base/type-opaque.exp 12 Mar 2007 21:33:09 -0000 +@@ -0,0 +1,134 @@ ++# Copyright 2004, 2007 Free Software Foundation, Inc. ++ ++# 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. */ ++ ++# Please email any bugs, comments, and/or additions to this file to: ++# bug-gdb@prep.ai.mit.edu ++ ++# Test resolving of an opaque type from the loaded shared library. ++ ++if $tracelevel then { ++ strace $tracelevel ++} ++ ++set testfile type-opaque-main ++set libfile type-opaque-lib ++set srcfile ${testfile}.c ++set binfile ${objdir}/${subdir}/${testfile} ++ ++set libsrc "${srcdir}/${subdir}/${libfile}.c" ++set libobj "${objdir}/${subdir}/${libfile}.so" ++set execsrc "${srcdir}/${subdir}/${srcfile}" ++ ++remote_exec build "rm -f ${binfile}" ++ ++# Are we on a target board? No support for downloading shared libraries ++# to a target yet. ++if ![isnative] then { ++ return 0 ++} ++ ++# get the value of gcc_compiled ++if [get_compiler_info ${binfile}] { ++ return -1 ++} ++ ++if { [gdb_compile_shlib $libsrc $libobj {debug}] != "" ++ || [gdb_compile $execsrc ${binfile} executable \ ++ [list debug shlib=${libobj}]] != "" } { ++ return -1 ++} ++ ++gdb_exit ++gdb_start ++gdb_reinitialize_dir $srcdir/$subdir ++gdb_load ${binfile} ++ ++if ![runto_main] then { ++ fail "Can't run to main" ++ return 0 ++} ++ ++ ++# DWARF3: An incomplete structure, union or class type is represented by ++# a structure, union or class entry that does not have a byte size attribute ++# and that has a DW_AT_declaration attribute. ++ ++ ++proc body { struct } { ++ global gdb_prompt ++ ++ ++ # <1><15f>: Abbrev Number: 8 (DW_TAG_structure_type) ++ # DW_AT_name : libtype_opaque ++ # DW_AT_declaration : 1 ++ ++ set name "opaque $struct type resolving" ++ gdb_test_multiple "ptype pointer_${struct}_opaque" $name \ ++ { ++ -re "libfield_opaque.*$gdb_prompt $" { ++ pass $name ++ } ++ } ++ ++ ++ # <1><9e>: Abbrev Number: 2 (DW_TAG_structure_type) ++ # DW_AT_name : libtype_empty ++ # DW_AT_byte_size : 0 ++ # DW_AT_decl_file : 1 ++ # DW_AT_decl_line : 25 ++ ++ set name "empty $struct type resolving" ++ gdb_test_multiple "ptype pointer_${struct}_empty" $name \ ++ { ++ -re "\\{\[ \t\r\n\]*\[ \t\r\n\]*\\}.*$gdb_prompt $" { ++ pass $name ++ } ++ -re "libfield_empty.*$gdb_prompt $" { ++ fail $name ++ } ++ } ++ ++ ++ # <1>: Abbrev Number: 3 (DW_TAG_structure_type) ++ # DW_AT_sibling : ++ # DW_AT_name : libtype_filled ++ # DW_AT_byte_size : 4 ++ # DW_AT_decl_file : 1 ++ # DW_AT_decl_line : 29 ++ # <2>: Abbrev Number: 4 (DW_TAG_member) ++ # DW_AT_name : mainfield_filled ++ # DW_AT_decl_file : 1 ++ # DW_AT_decl_line : 30 ++ # DW_AT_type : ++ # DW_AT_data_member_location: 2 byte block: 23 0 (DW_OP_plus_uconst: 0) ++ ++ set name "filled $struct type resolving" ++ gdb_test_multiple "ptype pointer_${struct}_filled" $name \ ++ { ++ -re "mainfield_filled.*$gdb_prompt $" { ++ pass $name ++ } ++ -re "libfield_filled.*$gdb_prompt $" { ++ fail $name ++ } ++ } ++ ++ ++} ++ ++ ++body struct ++body union diff --git a/gdb.spec b/gdb.spec index f57bf97..5b4178a 100644 --- a/gdb.spec +++ b/gdb.spec @@ -11,7 +11,7 @@ Name: gdb Version: 6.6 # The release always contains a leading reserved number, start it at 1. -Release: 7%{?dist} +Release: 8%{?dist} License: GPL Group: Development/Debuggers @@ -314,6 +314,9 @@ Patch235: gdb-6.3-bz231832-obstack-2gb.patch # Suggest SELinux permissions problem; no assertion failure anymore (BZ 232371). Patch236: gdb-6.6-bz232371-selinux-thread-error.patch +# Use definition of an empty structure as it is not an opaque type (BZ 233716). +Patch238: gdb-6.6-bz233716-empty-structure-override.patch + BuildRequires: ncurses-devel glibc-devel gcc make gzip texinfo dejagnu gettext BuildRequires: flex bison sharutils @@ -441,6 +444,7 @@ and printing their data. %patch234 -p1 %patch235 -p1 %patch236 -p1 +%patch238 -p1 # Change the version that gets printed at GDB startup, so it is RedHat # specific. @@ -603,6 +607,10 @@ fi # don't include the files in include, they are part of binutils %changelog +* Sat Mar 24 2007 Jan Kratochvil - 6.6-8 +- Use definition of an empty structure as it is not an opaque type (BZ 233716). +- Fixed the gdb.base/attachstop.exp testcase false 2 FAILs. + * Thu Mar 15 2007 Jan Kratochvil - 6.6-7 - Suggest SELinux permissions problem; no assertion failure anymore (BZ 232371).