This is the mail archive of the
gdb-patches@sources.redhat.com
mailing list for the GDB project.
Re: [RFA] dwarf2expr.c: Prepare for eventual DW_OP_piece support
- From: Elena Zannoni <ezannoni at redhat dot com>
- To: Kevin Buettner <kevinb at redhat dot com>
- Cc: gdb-patches at sources dot redhat dot com
- Date: Wed, 7 May 2003 19:06:11 -0400
- Subject: Re: [RFA] dwarf2expr.c: Prepare for eventual DW_OP_piece support
- References: <1030424010535.ZM18157@localhost.localdomain><1030507224112.ZM32208@localhost.localdomain>
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, ®);
> - 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>