gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 11 Jul 2011 13:40:24 +0000 (13:40 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 11 Jul 2011 13:40:24 +0000 (13:40 +0000)
* dwarf2expr.c (read_sleb128): Fix signed extension overflowing host
`int'.

gdb/testsuite/
* gdb.dwarf2/dw2-const.S (Pointer size): Change from 4 to 8.
(DW_AT_high_pc, DW_AT_low_pc): Remove them.
(val8, .Ltype_const8, .Ltype_int8, DW_TAG_variable): New.
* gdb.dwarf2/dw2-const.exp (print/x val8): New test.

gdb/ChangeLog
gdb/dwarf2expr.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/dw2-const.S
gdb/testsuite/gdb.dwarf2/dw2-const.exp

index 71010f4d93b6cc37df907e816957fb4800e6c433..4828a3c109044703a8a0a5751df45a67ec572e97 100644 (file)
@@ -1,3 +1,8 @@
+2011-07-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * dwarf2expr.c (read_sleb128): Fix signed extension overflowing host
+       `int'.
+
 2011-07-11  Phil Muldoon  <pmuldoon@redhat.com>
 
         PR python/12438
index 4522eb8b0f4c1e6d920622e9bbd9779c679fec06..b23ad9ab1a9b86a591fa194ae2fb8fda3d5d414b 100644 (file)
@@ -418,7 +418,7 @@ read_sleb128 (const gdb_byte *buf, const gdb_byte *buf_end, LONGEST * r)
        break;
     }
   if (shift < (sizeof (*r) * 8) && (byte & 0x40) != 0)
-    result |= -(1 << shift);
+    result |= -(((LONGEST) 1) << shift);
 
   *r = result;
   return buf;
index bf29ba0a1974c5c1216f3d3dd02079e8d654016f..7c7d5627f1da2261568a77e245d98c82c293c1ed 100644 (file)
@@ -1,3 +1,10 @@
+2011-07-11  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       * gdb.dwarf2/dw2-const.S (Pointer size): Change from 4 to 8.
+       (DW_AT_high_pc, DW_AT_low_pc): Remove them.
+       (val8, .Ltype_const8, .Ltype_int8, DW_TAG_variable): New.
+       * gdb.dwarf2/dw2-const.exp (print/x val8): New test.
+
 2011-07-11  Phil Muldoon  <pmuldoon@redhat.com>
 
         PR python/12438
index b0622f3b3149c1c33800871fd4463a0726eabfe2..9ff584403a832637da8c2b33fab1216d9fb0f5c9 100644 (file)
@@ -37,13 +37,11 @@ func_cu1:
 .Lcu1_start:
        .2byte  2                               /* DWARF Version */
        .4byte  .Labbrev1_begin                 /* Offset into abbrev section */
-       .byte   4                               /* Pointer size */
+       .byte   8                               /* Pointer size */
 
        /* CU die */
        .uleb128 1                              /* Abbrev: DW_TAG_compile_unit */
        .4byte  .Lline1_begin                   /* DW_AT_stmt_list */
-       .4byte  .Lend_text1                     /* DW_AT_high_pc */
-       .4byte  .Lbegin_text1                   /* DW_AT_low_pc */
        .ascii  "file1.txt\0"                   /* DW_AT_name */
        .ascii  "GNU C 3.3.3\0"                 /* DW_AT_producer */
        .byte   1                               /* DW_AT_language (C) */
@@ -57,6 +55,27 @@ func_cu1:
         .uleb128        0x9                     /* Abbrev: DW_TAG_const_type */
         .4byte           .Ltype_int-.Lcu1_begin /* DW_AT_type */
 
+        .uleb128        0xa                     /* Abbrev: DW_TAG_variable */
+        .ascii          "val8\0"                /* DW_AT_name */
+        .4byte          .Ltype_const8-.Lcu1_begin   /* DW_AT_type */
+        .byte           2f - 1f                 /* DW_AT_location */
+1:      .byte           0x11                    /* DW_OP_consts */
+#if 0 /* gas encodes it explicitly.  */
+        .slab128        0xffffffff00000000
+#endif
+#if 0 /* gas encoded it correctly - formed GDB FAILed.  */
+        .sleb128        -4294967296
+#endif
+#if 1 /* Rather encode sleb128 by hand.  */
+        .byte           0x80, 0x80, 0x80, 0x80, 0x70
+#endif
+        .byte           0x9f                    /* DW_OP_stack_value */
+2:
+
+.Ltype_const8:
+        .uleb128        0x9                     /* Abbrev: DW_TAG_const_type */
+        .4byte           .Ltype_int8-.Lcu1_begin /* DW_AT_type */
+
        /* func_cu1 */
        .uleb128        2                       /* Abbrev: DW_TAG_subprogram */
        .byte           1                       /* DW_AT_external */
@@ -64,8 +83,6 @@ func_cu1:
        .byte           2                       /* DW_AT_decl_line */
        .ascii          "func_cu1\0"            /* DW_AT_name */
        .4byte          .Ltype_int-.Lcu1_begin  /* DW_AT_type */
-       .4byte          .Lbegin_func_cu1        /* DW_AT_low_pc */
-       .4byte          .Lend_func_cu1          /* DW_AT_high_pc */
        .byte           1                       /* DW_AT_frame_base: length */
        .byte           0x55                    /* DW_AT_frame_base: DW_OP_reg5 */
 
@@ -75,6 +92,12 @@ func_cu1:
        .byte           4                       /* DW_AT_byte_size */
        .byte           5                       /* DW_AT_encoding */
 
+.Ltype_int8:
+       .uleb128        3                       /* Abbrev: DW_TAG_base_type */
+       .ascii          "int8\0"                /* DW_AT_name */
+       .byte           8                       /* DW_AT_byte_size */
+       .byte           5                       /* DW_AT_encoding */
+
        .byte           0                       /* End of children of CU */
 
 .Lcu1_end:
@@ -87,10 +110,6 @@ func_cu1:
        .byte           1                       /* has_children */
        .uleb128        0x10                    /* DW_AT_stmt_list */
        .uleb128        0x6                     /* DW_FORM_data4 */
-       .uleb128        0x12                    /* DW_AT_high_pc */
-       .uleb128        0x1                     /* DW_FORM_addr */
-       .uleb128        0x11                    /* DW_AT_low_pc */
-       .uleb128        0x1                     /* DW_FORM_addr */
        .uleb128        0x3                     /* DW_AT_name */
        .uleb128        0x8                     /* DW_FORM_string */
        .uleb128        0x25                    /* DW_AT_producer */
@@ -113,10 +132,6 @@ func_cu1:
        .uleb128        0x8                     /* DW_FORM_string */
        .uleb128        0x49                    /* DW_AT_type */
        .uleb128        0x13                    /* DW_FORM_ref4 */
-       .uleb128        0x11                    /* DW_AT_low_pc */
-       .uleb128        0x1                     /* DW_FORM_addr */
-       .uleb128        0x12                    /* DW_AT_high_pc */
-       .uleb128        0x1                     /* DW_FORM_addr */
        .uleb128        0x40                    /* DW_AT_frame_base */
        .uleb128        0xa                     /* DW_FORM_block1 */
        .byte           0x0                     /* Terminator */
@@ -154,6 +169,18 @@ func_cu1:
        .byte           0x0                     /* Terminator */
        .byte           0x0                     /* Terminator */
 
+       .uleb128        0xa                     /* abbrev code */
+       .uleb128        0x34                    /* TAG: DW_TAG_variable */
+       .byte           0x0                     /* DW_children_no */
+       .uleb128        0x3                     /* DW_AT_name */
+       .uleb128        0x8                     /* DW_FORM_string */
+       .uleb128        0x49                    /* DW_AT_type */
+       .uleb128        0x13                    /* DW_FORM_ref4 */
+       .uleb128        0x02                    /* DW_AT_location */
+       .uleb128        0xa                     /* DW_FORM_block1 */
+       .byte           0x0                     /* Terminator */
+       .byte           0x0                     /* Terminator */
+
        .byte           0x0                     /* Terminator */
        .byte           0x0                     /* Terminator */
 
index a0bb89ce27c141c89bc63a26f9762353f1cc11db..da37ce07512644e0dcd6eb4e90a02d55f3ae6195 100644 (file)
@@ -39,3 +39,4 @@ clean_restart ${testfile}.x
 
 gdb_test "print twelve" "= 12"
 
+gdb_test "print/x val8" " = 0xffffffff00000000"