[Ping][gcc] Enable DW_CFA_val_expression support in dwarf module

Jiong Wang jiong.wang@foss.arm.com
Mon Oct 31 09:20:00 GMT 2016


On 21/10/16 09:30, Jiong Wang wrote:
> Currently, GCC only support DW_CFA_expression in dwarf module, this patch
> extend the support to DW_CFA_val_expression which share the same code
> mostly the same code with DW_CFA_expression.
>
> Meanwhile the existed dwarf expression parser only allows expressions
> which can be represented using GCC RTL.  If one operation doesn't have
> a correspondent GCC RTL operator, then there is no way to attach that
> information in reg-note.
>
> This patch extends the current dwarf expression support to unlimited
> number of operations by using PARALLEL, and unlimited type of operations
> by using UNSPEC.
>
> All DW_OP_* of the expression are grouped together inside the PARALLEL,
> and those operations which don't have RTL mapping are wrapped by
> UNSPEC.  The parsing algorithm is simply something like:
>
>   foreach elem inside PARALLEL
>     if (UNSPEC)
>       {
>         dw_op_code = INTVAL (XVECEXP (elem, 0, 0));
>     oprnd1 = INTVAL (XVECEXP (elem, 0, 1));
>         oprnd2 = INTVAL (XVECEXP (elem, 0, 2));
>       }
>     else
>       call standard RTL parser.
>
> Any comments on the approach?

Ping ~

>
> Thanks.
>
> gcc/
> 2016-10-20  Jiong Wang  <jiong.wang@arm.com>
>
>         * reg-notes.def (CFA_VAL_EXPRESSION): New entry.
>         * dwarf2cfi.c (dwarf2out_frame_debug_cfa_val_expression): New 
> function.
>         (dwarf2out_frame_debug): Support REG_CFA_VAL_EXPRESSION.
>         (output_cfa_loc): Support DW_CFA_val_expression.
>         (output_cfa_loc_raw): Likewise.
>         (output_cfi): Likewise.
>         (output_cfi_directive): Likewise.
>         * dwarf2out.c (dw_cfi_oprnd1_desc): Support 
> DW_CFA_val_expression.
>         (dw_cfi_oprnd2_desc): Likewise.
>         (mem_loc_descriptor): Recognize new pattern generated for value
>         expression.
>



More information about the Gcc-patches mailing list