Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Randolph Chung <randolph@tausq.org>
To: gdb-patches@sources.redhat.com
Subject: [RFA/RFC] Support DW_OP_breg for tracepoints
Date: Sun, 13 Nov 2005 18:10:00 -0000	[thread overview]
Message-ID: <43775DDB.6020408@tausq.org> (raw)

[-- Attachment #1: Type: text/plain, Size: 792 bytes --]

Warning: I don't really understand how this works :-)

On hppa-linux, when running gdb.trace/save-trace.exp, the test fails 
because of:

"Unsupported DWARF opcode in the location of q1"

The opcode in question is "DW_OP_breg3". The attached patch attempts to 
add support for DW_OP_breg0..DW_OP_breg31. With this patch hppa-linux 
passes the testcase, although not really understanding DWARF-2 I am not 
certain this is 100% correct. DWARF experts, comments appreciated.

I was going to write the code for DW_OP_bregx too, but I'm not sure how 
that is supposed to work in terms of the "size" argument to that 
function since there are two params to read off the stack. In any case 
since I can't test that case easily I haven't written any code for it.

Comments? ok to check in?

randolph

[-- Attachment #2: d.diff --]
[-- Type: text/x-patch, Size: 1501 bytes --]

2005-11-13  Randolph Chung  <tausq@debian.org>

	* dwarf2loc.c (dwarf2_tracepoint_var_ref): Handle DW_OP_breg0
	through DW_OP_breg31.  Print DWARF opcode for unsupported
	case.

Index: dwarf2loc.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2loc.c,v
retrieving revision 1.30
diff -u -p -r1.30 dwarf2loc.c
--- dwarf2loc.c	4 Nov 2005 02:42:34 -0000	1.30
+++ dwarf2loc.c	13 Nov 2005 15:29:18 -0000
@@ -479,9 +479,30 @@ dwarf2_tracepoint_var_ref (struct symbol
       ax_simple (ax, aop_add);
       value->kind = axs_lvalue_memory;
     }
+  else if (data[0] >= DW_OP_breg0
+	   && data[0] <= DW_OP_breg31)
+    {
+      unsigned int reg;
+      LONGEST offset;
+      gdb_byte *buf_end;
+
+      reg = data[0] - DW_OP_breg0;
+      buf_end = read_sleb128 (data + 1, data + size, &offset);
+      if (buf_end != data + size)
+	error (_("Unexpected opcode after DW_OP_breg%u for symbol \"%s\"."),
+	       reg, SYMBOL_PRINT_NAME (symbol));
+
+      ax_reg (ax, reg);
+      ax_const_l (ax, offset);
+      ax_simple (ax, aop_add);
+
+      ax_const_l (ax, offset);
+      ax_simple (ax, aop_add);
+      value->kind = axs_lvalue_memory;
+    }
   else
-    error (_("Unsupported DWARF opcode in the location of \"%s\"."),
-	   SYMBOL_PRINT_NAME (symbol));
+    error (_("Unsupported DWARF opcode 0x%x in the location of \"%s\"."),
+	   data[0], SYMBOL_PRINT_NAME (symbol));
 }
 \f
 /* Return the value of SYMBOL in FRAME using the DWARF-2 expression

             reply	other threads:[~2005-11-13 15:38 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-11-13 18:10 Randolph Chung [this message]
2005-11-13 18:11 ` Daniel Jacobowitz
2005-11-14  2:27 ` Jim Blandy
2005-11-14  3:41   ` Randolph Chung
2005-11-14  3:56     ` Daniel Jacobowitz
2005-11-14 15:57       ` Jim Blandy
2005-11-19 19:41       ` Randolph Chung

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=43775DDB.6020408@tausq.org \
    --to=randolph@tausq.org \
    --cc=gdb-patches@sources.redhat.com \
    /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