This is the mail archive of the gdb-patches@sources.redhat.com mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [RFA] dwarf2expr.c: Prepare for eventual DW_OP_piece support


Kevin Buettner writes:
 > 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?
 > 

 ok.

elena

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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]