Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Jan Kratochvil <jan.kratochvil@redhat.com>
To: gdb-patches@sourceware.org
Subject: [patch] Fix implicit pointer offsets
Date: Mon, 25 Jul 2011 07:19:00 -0000	[thread overview]
Message-ID: <20110724211142.GA2913@host1.jankratochvil.net> (raw)

Hi Tom,

piece->v.ptr.offset has been carefully prepared and then gracefully ignored so
far.

 p p[0].y
 $5 = 92
 (gdb) PASS: gdb.dwarf2/implptr.exp: sanity check element 0
 p p[1].y
 $6 = 46
 (gdb) PASS: gdb.dwarf2/implptr.exp: sanity check element 1
 [...]
 p a->y
 $7 = 92
 (gdb) PASS: gdb.dwarf2/implptr.exp: check element 0 for the offset
 p b->y
-$8 = 92
-(gdb) FAIL: gdb.dwarf2/implptr.exp: check element 1 for the offset
+$8 = 46
+(gdb) PASS: gdb.dwarf2/implptr.exp: check element 1 for the offset

No regressions on {x86_64,x86_64-m32,i686}-fedora16pre-linux-gnu.
I will check it in in some time.


Thanks,
Jan


gdb/
2011-07-24  Jan Kratochvil  <jan.kratochvil@redhat.com>

	Fix implicit pointer offsets.
	* dwarf2loc.c (indirect_pieced_value): Comment byte_offset.  Use also
	ptr.OFFSET.

gdb/testsuite/
2011-07-24  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.

--- a/gdb/dwarf2loc.c
+++ b/gdb/dwarf2loc.c
@@ -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);
 
--- a/gdb/testsuite/gdb.dwarf2/implptr.c
+++ b/gdb/testsuite/gdb.dwarf2/implptr.c
@@ -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;
--- a/gdb/testsuite/gdb.dwarf2/implptr.exp
+++ b/gdb/testsuite/gdb.dwarf2/implptr.exp
@@ -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


             reply	other threads:[~2011-07-24 21:12 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-07-25  7:19 Jan Kratochvil [this message]
2011-07-25 16:05 ` Tom Tromey
2011-07-25 16:30   ` Jan Kratochvil

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20110724211142.GA2913@host1.jankratochvil.net \
    --to=jan.kratochvil@redhat.com \
    --cc=gdb-patches@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox