gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 21 May 2009 07:15:47 +0000 (07:15 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Thu, 21 May 2009 07:15:47 +0000 (07:15 +0000)
Fix parsing DW_AT_const_value using DW_FORM_string.
* dwarf2read.c (dwarf2_const_value <DW_FORM_string>): 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
gdb/dwarf2read.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/dw2-strp.S
gdb/testsuite/gdb.dwarf2/dw2-strp.exp

index beeb707..93127d6 100644 (file)
@@ -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.
index 6ddaecd..bb08841 100644 (file)
@@ -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.  */
index 70ded08..c65edbe 100644 (file)
@@ -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.
index 293cc1b..4dbb761 100644 (file)
        .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 */
        .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 */
        .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 */
index 2201d30..41620a4 100644 (file)
@@ -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\\\]"