From 4ac3663827c86f3e5bf756eafca995562dbd2ca2 Mon Sep 17 00:00:00 2001 From: Jan Kratochvil Date: Thu, 21 May 2009 07:15:47 +0000 Subject: [PATCH] gdb/ Fix parsing DW_AT_const_value using DW_FORM_string. * dwarf2read.c (dwarf2_const_value ): New. gdb/testsuite/ * gdb.dwarf2/dw2-strp.exp (p a_string2, ptype a_string2): New. * gdb.dwarf2/dw2-strp.S (a_string2): New. --- gdb/ChangeLog | 5 +++++ gdb/dwarf2read.c | 1 + gdb/testsuite/ChangeLog | 5 +++++ gdb/testsuite/gdb.dwarf2/dw2-strp.S | 28 +++++++++++++++++++++++---- gdb/testsuite/gdb.dwarf2/dw2-strp.exp | 5 ++++- 5 files changed, 39 insertions(+), 5 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index beeb7074813..93127d6681d 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,8 @@ +2009-05-21 Jan Kratochvil + + Fix parsing DW_AT_const_value using DW_FORM_string. + * dwarf2read.c (dwarf2_const_value ): New. + 2009-05-20 Joel Brobecker * aix-thread.c (giter_count): Do not count the main thread. diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c index 6ddaecd9f4f..bb088413715 100644 --- a/gdb/dwarf2read.c +++ b/gdb/dwarf2read.c @@ -7957,6 +7957,7 @@ dwarf2_const_value (struct attribute *attr, struct symbol *sym, 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. */ diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 70ded08ba41..c65edbe318d 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2009-05-21 Jan Kratochvil + + * gdb.dwarf2/dw2-strp.exp (p a_string2, ptype a_string2): New. + * gdb.dwarf2/dw2-strp.S (a_string2): New. + 2009-05-18 Jon Beniston * gdb.asm/asm-source.exp: Add lm32 target. diff --git a/gdb/testsuite/gdb.dwarf2/dw2-strp.S b/gdb/testsuite/gdb.dwarf2/dw2-strp.S index 293cc1bda19..4dbb761c016 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-strp.S +++ b/gdb/testsuite/gdb.dwarf2/dw2-strp.S @@ -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 */ diff --git a/gdb/testsuite/gdb.dwarf2/dw2-strp.exp b/gdb/testsuite/gdb.dwarf2/dw2-strp.exp index 2201d3071af..41620a4cf25 100644 --- a/gdb/testsuite/gdb.dwarf2/dw2-strp.exp +++ b/gdb/testsuite/gdb.dwarf2/dw2-strp.exp @@ -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\\\]" -- 2.30.2