This is the mail archive of the gdb-patches@sourceware.org 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: [RFC] better dwarf checking for values on the stack


On Fri, Sep 11, 2009 at 4:23 PM, Doug Evans<dje@google.com> wrote:
> On Fri, Sep 11, 2009 at 2:19 PM, Doug Evans<dje@google.com> wrote:
>>>Tom Tromey wrote:
>>>[...]
>>> It seems to me that the inferior-stack-ness of a value must be an
>>> attribute carried alongside the value on the dwarf stack.
>>>[...]
>>
>> Yeah, I was wondering about this. ?[It's what prompted my question on IRC.]
>
> How about this?
>
> 2009-09-11 ?Doug Evans ?<dje@google.com>
>
> ? ? ? ?* dwarf2expr.h (dwarf_value_location): Add more comments describing
> ? ? ? ?enum values.
> ? ? ? ?(struct dwarf_stack_value): New struct.
> ? ? ? ?(struct dwarf_expr_context): Change type of `stack' from CORE_ADDR*
> ? ? ? ?to structd dwarf_stack_value*.
> ? ? ? ?(struct dwarf_expr_piece): Move `v.value' into its own struct, v.expr,
> ? ? ? ?all uses updated.
> ? ? ? ?Add v.expr.in_stack_memory.
> ? ? ? ?(dwarf_expr_push): Update declaration.
> ? ? ? ?(dwarf_expr_fetch_in_stack_memory): Declare.
> ? ? ? ?* dwarf2expr.c (dwarf_expr_grow_stack): Update calculation of
> ? ? ? ?size of stack value.
> ? ? ? ?(dwarf_expr_push): New arg in_stack_memory, all callers updated.
> ? ? ? ?(dwarf_expr_fetch_in_stack_memory): New function.
> ? ? ? ?(add_piece): Set in_stack_memory for non-literal values.
> ? ? ? ?(execute_stack_op, case DW_OP_fbreg): Call dwarf_expr_push ourselves,
> ? ? ? ?mark value as in stack memory.
> ? ? ? ?(execute_stack_op, case DW_OP_call_frame_cfa): Ditto.
> ? ? ? ?(execute_stack_op, cases DW_OP_swap, DW_OP_rot): Update type of
> ? ? ? ?dwarf stack value.
> ? ? ? ?* dwarf2loc.c (read_pieced_value): Call read_stack for values known
> ? ? ? ?to be on the program's stack.
> ? ? ? ?(dwarf2_evaluate_loc_desc, case DWARF_VALUE_MEMORY): Call
> ? ? ? ?set_value_stack only for objects known to be in stack memory.
> ? ? ? ?* dwarf2-frame.c (execute_stack_op): New arg initial_in_stack_memory,
> ? ? ? ?all callers updated.
>

For completeness' sake ...

Yeah, I don't propagate in_stack_memory for DW_OP_dup, etc. etc.
If ya like the basic idea, I'll add in all the other details.


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