aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gdb/ChangeLog5
-rw-r--r--gdb/dwarf2read.c1
-rw-r--r--gdb/testsuite/ChangeLog5
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-strp.S28
-rw-r--r--gdb/testsuite/gdb.dwarf2/dw2-strp.exp5
5 files changed, 39 insertions, 5 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index beeb707..93127d6 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-21 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.
+
2009-05-20 Joel Brobecker <brobecker@adacore.com>
* aix-thread.c (giter_count): Do not count the main thread.
diff --git a/gdb/dwarf2read.c b/gdb/dwarf2read.c
index 6ddaecd..bb08841 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 70ded08..c65edbe 100644
--- a/gdb/testsuite/ChangeLog
+++ b/gdb/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2009-05-21 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.
+
2009-05-18 Jon Beniston <jon@beniston.com>
* 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 293cc1b..4dbb761 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 2201d30..41620a4 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\\\]"