Mirror of the gdb-patches mailing list
 help / color / mirror / Atom feed
From: Kevin Buettner <kevinb@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: Re: [RFA] dwarf2expr.c: Prepare for eventual DW_OP_piece support
Date: Wed, 07 May 2003 22:41:00 -0000	[thread overview]
Message-ID: <1030507224112.ZM32208@localhost.localdomain> (raw)
In-Reply-To: Kevin Buettner <kevinb@redhat.com> "[RFA] dwarf2expr.c: Prepare for eventual DW_OP_piece support" (Apr 23,  6:05pm)

Ping!

--- Forwarded mail from Kevin Buettner <kevinb@redhat.com>

Date: Wed, 23 Apr 2003 18:05:36 -0700
From: Kevin Buettner <kevinb@redhat.com>
To: gdb-patches@sources.redhat.com
Subject: [RFA] dwarf2expr.c: Prepare for eventual DW_OP_piece support

The patch below prepares execute_stack_op() for eventual DW_OP_piece
support.

The relatively obvious part of the patch is the revision of the tests
which force DW_OP_reg operations to be used alone.  These tests have
been revised to permit a DW_OP_piece operator to follow a DW_OP_reg*
operator.

The not so obvious part concerns the initialization of ctx->in_reg.
When a DW_OP_piece case is eventually added, it will need to know
whether the thing on the stack is a register or some other kind of
location expression.  At the moment, the only indication we have of
what this thing is is being cleared each time through the loop.  Moving
it out of the loop will allow a DW_OP_piece case to use this information
for determining how to proceed.

Okay?

	* dwarf2expr.c (execute_stack_op): Move ``ctx->in_reg'' initialization
	out of loop.  Allow DW_OP_reg0 ... DW_OP_reg31 and DW_OP_regx to
	be used in conjuction with DW_OP_piece.  Revise error message
	accordingly.

Index: dwarf2expr.c
===================================================================
RCS file: /cvs/src/src/gdb/dwarf2expr.c,v
retrieving revision 1.6
diff -u -p -r1.6 dwarf2expr.c
--- dwarf2expr.c	13 Apr 2003 15:53:44 -0000	1.6
+++ dwarf2expr.c	24 Apr 2003 00:36:43 -0000
@@ -228,6 +227,8 @@ static void
 execute_stack_op (struct dwarf_expr_context *ctx, unsigned char *op_ptr,
 		  unsigned char *op_end)
 {
+  ctx->in_reg = 0;
+
   while (op_ptr < op_end)
     {
       enum dwarf_location_atom op = *op_ptr++;
@@ -236,8 +237,6 @@ execute_stack_op (struct dwarf_expr_cont
       LONGEST offset;
       int bytes_read;
 
-      ctx->in_reg = 0;
-
       switch (op)
 	{
 	case DW_OP_lit0:
@@ -355,10 +354,9 @@ execute_stack_op (struct dwarf_expr_cont
 	case DW_OP_reg29:
 	case DW_OP_reg30:
 	case DW_OP_reg31:
-	  /* NOTE: in the presence of DW_OP_piece this check is incorrect.  */
-	  if (op_ptr != op_end)
+	  if (op_ptr != op_end && *op_ptr != DW_OP_piece)
 	    error ("DWARF-2 expression error: DW_OP_reg operations must be "
-		   "used alone.");
+		   "used either alone or in conjuction with DW_OP_piece.");
 
 	  result = op - DW_OP_reg0;
 	  ctx->in_reg = 1;
@@ -367,9 +365,9 @@ execute_stack_op (struct dwarf_expr_cont
 
 	case DW_OP_regx:
 	  op_ptr = read_uleb128 (op_ptr, op_end, &reg);
-	  if (op_ptr != op_end)
+	  if (op_ptr != op_end && *op_ptr != DW_OP_piece)
 	    error ("DWARF-2 expression error: DW_OP_reg operations must be "
-		   "used alone.");
+		   "used either alone or in conjuction with DW_OP_piece.");
 
 	  result = reg;
 	  ctx->in_reg = 1;


--- End of forwarded mail from Kevin Buettner <kevinb@redhat.com>


  parent reply	other threads:[~2003-05-07 22:41 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-04-24  3:46 Kevin Buettner
2003-04-24  5:54 ` Kevin Buettner
2003-04-24 15:53   ` Daniel Jacobowitz
2003-05-07 22:41 ` Kevin Buettner [this message]
2003-05-07 23:01   ` Elena Zannoni
     [not found]     ` <ezannoni@redhat.com>
2003-05-14 22:48       ` Kevin Buettner

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=1030507224112.ZM32208@localhost.localdomain \
    --to=kevinb@redhat.com \
    --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