Hello community, here is the log from the commit of package gdb for openSUSE:Factory checked in at Tue May 19 01:01:58 CEST 2009. -------- --- gdb/gdb.changes 2009-05-15 10:37:53.000000000 +0200 +++ gdb/gdb.changes 2009-05-18 10:58:12.000000000 +0200 @@ -1,0 +2,5 @@ +Mon May 18 10:42:26 CEST 2009 - rguenther@suse.de + +- Add patch to fix handling of string DW_AT_const_values. [bnc#329420] + +------------------------------------------------------------------- calling whatdependson for head-i586 Old: ---- bnc329420.patch New: ---- bnc329420-1.patch bnc329420-2.patch ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ gdb.spec ++++++ --- /var/tmp/diff_new_pack.vb6887/_old 2009-05-19 00:59:24.000000000 +0200 +++ /var/tmp/diff_new_pack.vb6887/_new 2009-05-19 00:59:24.000000000 +0200 @@ -23,7 +23,7 @@ # NOTE: the FSF gdb versions are numbered N.M for official releases, like 6.3 # and, since January 2005, X.Y.Z.date for daily snapshots, like 6.3.50.20050112 # (daily snapshot from mailine), or 6.3.0.20040112 (head of the release branch). Version: 6.8.50.20090302 -Release: 3 +Release: 4 # The release always contains a leading reserved number, start it at 1. # `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing. License: GNU Free Documentation License, Version 1.2 (GFDL 1.2); GPL v2 or later; GPL v3 or later @@ -91,8 +91,6 @@ Patch134: gdb-6.3-dtorfix-20050121.patch # Fix to support executable moving Patch136: gdb-6.3-test-movedir-20050125.patch -# Fix to support unwinding syscalls in ia64 corefiles -# Patch138: gdb-6.3-ia64-corefile-fix-20050127.patch # Fix gcore for threads Patch140: gdb-6.3-gcore-thread-20050204.patch # Stop while intentionally stepping and the thread exit is met. @@ -283,7 +281,8 @@ Patch1001: gdb-readline6.patch Patch1002: gdb-6.6-buildid-locate-rpm-suse.patch Patch1004: bnc492331.patch -Patch1005: bnc329420.patch +Patch1005: bnc329420-1.patch +Patch1006: bnc329420-2.patch BuildRequires: bison flex gettext glibc-devel ncurses-devel texinfo zlib-devel %if %{suse_version} < 1020 BuildRequires: expat @@ -508,6 +507,7 @@ %patch1002 -p1 %patch1004 -p1 %patch1005 -p1 +%patch1006 find -name "*.orig" | xargs rm -f ! find -name "*.rej" # Should not happen. %endif # 0%{!?_with_upstream:1} @@ -757,6 +757,8 @@ %endif %changelog +* Mon May 18 2009 rguenther@suse.de +- Add patch to fix handling of string DW_AT_const_values. [bnc#329420] * Thu May 14 2009 rguenther@suse.de - Change reported version to mention SUSE instead of Fedora. - Fix handling of bogus global namespace DIEs from GCC 4.1. [bnc#329420] ++++++ bnc329420-1.patch ++++++ On Wed, 13 May 2009, Sami Wagiaalla wrote:
This problem is due to the fact that in Archer we are using dwarf2_full_name instead of dwarf2_linkage_name.
I am trying your patch but it does not seem to have solved the problem for me. Are you testing against the Archer fedora branch ( archer-jankratochvil-fedora-merge ) ?
Meh, wrong patch, sorry. I must have had traces of my other approach still in dwarf2read.c that this worked when I checked before sending. It actually fixes only the partial DIEs and I'm not even sure if that's necessary. It certainly does not fix the problem for reading full DIEs. As it's a rather generic tree reader (read_die_and_children_1 and friends) it seems a bit clumsy to special case bogus namespace dies there, which brings me back to my other option (that's the one I started and tested with), hacking determine_prefix, like below. That fixes the problem. Really :-) Ciao, Michael. Index: gdb-6.8.50.20090302/gdb/dwarf2read.c =================================================================== --- gdb-6.8.50.20090302.orig/gdb/dwarf2read.c 2009-05-13 15:53:22.000000000 +0200 +++ gdb-6.8.50.20090302/gdb/dwarf2read.c 2009-05-13 23:48:52.000000000 +0200 @@ -8885,9 +8894,18 @@ determine_prefix (struct die_info *die, switch (parent->tag) { case DW_TAG_namespace: - parent_type = read_type_die (parent, cu); - /* We give a name to even anonymous namespaces. */ - return TYPE_TAG_NAME (parent_type); + { + char *prefix; + parent_type = read_type_die (parent, cu); + /* We give a name to even anonymous namespaces. */ + prefix = TYPE_TAG_NAME (parent_type); + /* Special hack for bogus global namespace that is emitted as an + explicit namespace with the name '::' in g++ 4.1, for + some decls. */ + if (prefix[0] == ':' && prefix[1] == ':' && prefix[2] == 0) + return ""; + return prefix; + } case DW_TAG_class_type: case DW_TAG_interface_type: case DW_TAG_structure_type: ++++++ bnc329420-2.patch ++++++ On Fri, 15 May 2009 21:44:43 +0200, Richard Guenther wrote:
One more issue is that with g++ 4.1
#include <stdio.h> const char foo_c[] = "here is foo_c"; int main() { puts(foo_c); return 0; }
foo_c at main is printed as
(gdb) p foo_c $1 = '\0' <repeats 13 times> (gdb) ptype foo_c type = char [14]
it works if I remove the puts call. It also works with g++ 4.2 and newer. I wonder if gdb is confused by g++ 4.1 using DW_AT_const_value for the string ...
Yes, it looks so. But this issue is unrelated to the Archer patches, it is a normal FSF GDB bug. Cross-posting and requesting commit approval. Regression tested on x86_64-unknown-linux-gnu. Thanks, Jan gdb/ 2009-05-15 Jan Kratochvil <jan.kratochvil@redhat.com> Fix parsing DW_AT_const_value using DW_FORM_string. * dwarf2read.c (dwarf2_const_value <DW_FORM_string>): New. gdb/testsuite/ 2009-05-15 Jan Kratochvil <jan.kratochvil@redhat.com> * gdb.dwarf2/dw2-strp.exp (p a_string2, ptype a_string2): New. * gdb.dwarf2/dw2-strp.S (a_string2): New. --- gdb/dwarf2read.c 1 May 2009 14:43:20 -0000 1.302 +++ gdb/dwarf2read.c 15 May 2009 20:44:44 -0000 @@ -7957,6 +7957,7 @@ dwarf2_const_value (struct attribute *at DW_ADDR (attr)); SYMBOL_CLASS (sym) = LOC_CONST_BYTES; break; + case DW_FORM_string: case DW_FORM_strp: /* DW_STRING is already allocated on the obstack, point directly to it. */ --- gdb/testsuite/gdb.dwarf2/dw2-strp.S 31 Mar 2009 20:21:08 -0000 1.4 +++ gdb/testsuite/gdb.dwarf2/dw2-strp.S 15 May 2009 20:44:44 -0000 @@ -52,17 +52,23 @@ .byte 1 /* DW_AT_byte_size */ .byte 6 /* DW_AT_encoding */ - .uleb128 5 /* Abbrev: DW_TAG_variable */ + .uleb128 5 /* Abbrev: DW_TAG_variable DW_FORM_strp */ .4byte .Lvarname /* DW_AT_name */ .4byte .Lconst_type-.Lcu1_begin/* DW_AT_type */ .4byte .Lvarcontents /* DW_AT_const_value */ .byte 1 /* DW_AT_external */ + .uleb128 6 /* Abbrev: DW_TAG_variable DW_FORM_string */ + .string "a_string2" /* DW_AT_name */ + .4byte .Lconst_type-.Lcu1_begin/* DW_AT_type */ + .string "hello world2\n" /* DW_AT_const_value */ + .byte 1 /* DW_AT_external */ + .Lconst_type: - .uleb128 6 /* Abbrev: DW_TAG_const_type */ + .uleb128 7 /* Abbrev: DW_TAG_const_type */ .4byte .Larray_type-.Lcu1_begin/* DW_AT_type */ - .uleb128 7 /* Abbrev: DW_TAG_variable (name "") */ + .uleb128 8 /* Abbrev: DW_TAG_variable (name "") */ .4byte .Lemptyname /* DW_AT_name */ .byte 0 /* End of children of CU */ @@ -125,6 +131,20 @@ .byte 0x0 /* Terminator */ .uleb128 6 /* Abbrev code */ + .uleb128 0x34 /* DW_TAG_variable */ + .byte 0x0 /* no_children */ + .uleb128 0x3 /* DW_AT_name */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x49 /* DW_AT_type */ + .uleb128 0x13 /* DW_FORM_ref4 */ + .uleb128 0x1c /* DW_AT_const_value */ + .uleb128 0x8 /* DW_FORM_string */ + .uleb128 0x3f /* DW_AT_external */ + .uleb128 0xc /* DW_FORM_flag */ + .byte 0x0 /* Terminator */ + .byte 0x0 /* Terminator */ + + .uleb128 7 /* Abbrev code */ .uleb128 0x26 /* DW_TAG_const_type */ .byte 0x0 /* DW_children_no */ .uleb128 0x49 /* DW_AT_type */ @@ -132,7 +152,7 @@ .byte 0x0 /* Terminator */ .byte 0x0 /* Terminator */ - .uleb128 7 /* Abbrev code */ + .uleb128 8 /* Abbrev code */ .uleb128 0x34 /* DW_TAG_variable */ .byte 0x0 /* DW_children_no */ .uleb128 0x3 /* DW_AT_name */ --- gdb/testsuite/gdb.dwarf2/dw2-strp.exp 3 Jan 2009 05:58:04 -0000 1.2 +++ gdb/testsuite/gdb.dwarf2/dw2-strp.exp 15 May 2009 20:44:44 -0000 @@ -48,5 +48,8 @@ gdb_start gdb_reinitialize_dir $srcdir/$subdir gdb_load ${binfile} -gdb_test "p a_string" "\$1 = "hello world!\\n"" +gdb_test "p a_string" " = "hello world!\\n"" gdb_test "ptype a_string" "type = char \[14\]" + +gdb_test "p a_string2" " = "hello world2\\n"" +gdb_test "ptype a_string2" "type = char \[14\]" ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Remember to have fun... -- To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org For additional commands, e-mail: opensuse-commit+help@opensuse.org