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
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'
(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