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
next 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