gdb/
authorJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 25 Jul 2011 16:04:53 +0000 (16:04 +0000)
committerJan Kratochvil <jan.kratochvil@redhat.com>
Mon, 25 Jul 2011 16:04:53 +0000 (16:04 +0000)
Fix implicit pointer offsets.
* dwarf2loc.c (indirect_pieced_value): Comment byte_offset.  Use also
ptr.OFFSET.

gdb/testsuite/
Fix implicit pointer offsets.
* gdb.dwarf2/implptr.c (add): New marker baz breakpoint.
* gdb.dwarf2/implptr.exp (set baz breakpoint for implptr)
(continue to breakpoint: continue to baz breakpoint for implptr)
(sanity check element 0, sanity check element 1)
(enter the inlined function, check element 0 for the offset)
(check element 1 for the offset)
(continue to breakpoint: ignore the second baz breakpoint): New tests.
(set foo breakpoint for implptr): Update the breakpoint number.

gdb/ChangeLog
gdb/dwarf2loc.c
gdb/testsuite/ChangeLog
gdb/testsuite/gdb.dwarf2/implptr.c
gdb/testsuite/gdb.dwarf2/implptr.exp

index c90b88f..08361be 100644 (file)
@@ -1,3 +1,9 @@
+2011-07-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       Fix implicit pointer offsets.
+       * dwarf2loc.c (indirect_pieced_value): Comment byte_offset.  Use also
+       ptr.OFFSET.
+
 2011-07-25  Tom Tromey  <tromey@redhat.com>
 
        * ada-lang.c (ada_exception_breakpoint_ops): Make return type
index c29a07c..8ecc688 100644 (file)
@@ -1012,6 +1012,8 @@ indirect_pieced_value (struct value *value)
     }
 
   frame = get_selected_frame (_("No frame selected."));
+
+  /* This is an offset requested by GDB, such as value subcripts.  */
   byte_offset = value_as_address (value);
 
   gdb_assert (piece);
@@ -1023,7 +1025,7 @@ indirect_pieced_value (struct value *value)
 
   result = dwarf2_evaluate_loc_desc_full (TYPE_TARGET_TYPE (type), frame,
                                          baton.data, baton.size, baton.per_cu,
-                                         byte_offset);
+                                         piece->v.ptr.offset + byte_offset);
 
   do_cleanups (back_to);
 
index d448337..622fd58 100644 (file)
@@ -1,3 +1,15 @@
+2011-07-25  Jan Kratochvil  <jan.kratochvil@redhat.com>
+
+       Fix implicit pointer offsets.
+       * gdb.dwarf2/implptr.c (add): New marker baz breakpoint.
+       * gdb.dwarf2/implptr.exp (set baz breakpoint for implptr)
+       (continue to breakpoint: continue to baz breakpoint for implptr)
+       (sanity check element 0, sanity check element 1)
+       (enter the inlined function, check element 0 for the offset)
+       (check element 1 for the offset)
+       (continue to breakpoint: ignore the second baz breakpoint): New tests.
+       (set foo breakpoint for implptr): Update the breakpoint number.
+
 2011-07-22  Ulrich Weigand  <ulrich.weigand@linaro.org>
 
        * gdb.python/py-mi.exp: Use different file names for different
index 9812b7e..ab68c24 100644 (file)
@@ -31,7 +31,7 @@ int u[6];
 static inline void
 add (struct S *a, struct S *b, int c)
 {
-  *a->x += *b->x;
+  *a->x += *b->x;              /* baz breakpoint */
   a->y += b->y;
   u[c + 0]++;
   a = (struct S *) 0;
index 562e983..a199a84 100644 (file)
@@ -60,11 +60,26 @@ proc implptr_test_bar {} {
     gdb_test "print ***l" " = 5" "print ***l in implptr:bar"
 }
 
+# Test implicit pointer offset.
+proc implptr_test_baz {} {
+    global csrcfile
+    set line [gdb_get_line_number "baz breakpoint" $csrcfile]
+    gdb_test "break implptr.c:$line" "Breakpoint 3.*" \
+       "set baz breakpoint for implptr"
+    gdb_continue_to_breakpoint "continue to baz breakpoint for implptr"
+    gdb_test {p p[0].y} " = 92" "sanity check element 0"
+    gdb_test {p p[1].y} " = 46" "sanity check element 1"
+    gdb_test "step" "\r\nadd \\(.*" "enter the inlined function"
+    gdb_test "p a->y" " = 92" "check element 0 for the offset"
+    gdb_test "p b->y" " = 46" "check element 1 for the offset"
+    gdb_continue_to_breakpoint "ignore the second baz breakpoint"
+}
+
 # Test some values in foo.
 proc implptr_test_foo {} {
     global csrcfile
     set line [gdb_get_line_number "foo breakpoint" $csrcfile]
-    gdb_test "break implptr.c:$line" "Breakpoint 3.*" \
+    gdb_test "break implptr.c:$line" "Breakpoint 4.*" \
        "set foo breakpoint for implptr"
     gdb_continue_to_breakpoint "continue to foo breakpoint for implptr"
     gdb_test "print p\[0].x" " = \\(int \\*\\) <synthetic pointer>" \
@@ -81,4 +96,5 @@ proc implptr_test_foo {} {
 }
 
 implptr_test_bar
+implptr_test_baz
 implptr_test_foo