diff --git a/bnc329420.patch b/bnc329420-1.patch similarity index 100% rename from bnc329420.patch rename to bnc329420-1.patch diff --git a/bnc329420-2.patch b/bnc329420-2.patch new file mode 100644 index 0000000..346f965 --- /dev/null +++ b/bnc329420-2.patch @@ -0,0 +1,128 @@ +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 + + Fix parsing DW_AT_const_value using DW_FORM_string. + * dwarf2read.c (dwarf2_const_value ): New. + +gdb/testsuite/ +2009-05-15 Jan Kratochvil + + * 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\\\]" + diff --git a/gdb.changes b/gdb.changes index 884e8fe..cd69f35 100644 --- a/gdb.changes +++ b/gdb.changes @@ -1,3 +1,8 @@ +------------------------------------------------------------------- +Mon May 18 10:42:26 CEST 2009 - rguenther@suse.de + +- Add patch to fix handling of string DW_AT_const_values. [bnc#329420] + ------------------------------------------------------------------- Thu May 14 15:26:42 CEST 2009 - rguenther@suse.de diff --git a/gdb.spec b/gdb.spec index c8bfc43..cf41be9 100644 --- a/gdb.spec +++ b/gdb.spec @@ -23,7 +23,7 @@ Name: gdb # 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 @@ Patch133: gdb-6.3-test-dtorfix-20050121.patch 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 @@ Patch1000: readline-5.1-random.patch 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 @@ rm -f gdb/jv-exp.c gdb/m2-exp.c gdb/objc-exp.c gdb/p-exp.c %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 @@ fi %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]