Sorry this had dropped off my list of patches to review somehow but
anyway here's a first cut review.

On Thu, Mar 21, 2013 at 6:58 AM, Zhenqiang Chen
<zhenqiang.c...@linaro.org> wrote:
> Hi,
>
> When shrink-wrap is enabled, the "returns" from simple-return path and
> normal return path can be merged. The code is like:
>
>      tst ...
>      /  \
>     |  push ...
>     |  ...
>     |  pop ...
>      \  /
>      bx lr
>
> If the dwarf info after "pop ..." is incorrect, the dwarf checks will
> fail at dwarf2cfi.c: function maybe_record_trace_start.
>
>       /* We ought to have the same state incoming to a given trace no
>          matter how we arrive at the trace.  Anything else means we've
>          got some kind of optimization error.  */
>       gcc_checking_assert (cfi_row_equal_p (cur_row, ti->beg_row));
>
> The patch is to add epilogue dwarf info to make sure:
>
> Before "bx lr",
> * All registers saved in stack had been "restored".
> * .cfi_def_cfa_offset 0
> * .cfi_def_cfa_register is sp even if frame_pointer_needed
>
> Boot strapped and no make check regression.

in what configuration - thumb2 / arm / cortex-a15 / cortex-a9 ? what
languages and on what platform ?

>
> Is it OK?


> @@ -25447,9 +25519,15 @@ arm_unwind_emit (FILE * asm_out_file, rtx insn)
>       handled_one = true;
>       break;

> +    /* The INSN is generated in epilogue.  It is set as RTX_FRAME_RELATED_P
> +       to get correct dwarf info for shrink-wrap.  But We should not emit
> +       unwind info for it.  */

s/dwarf/debug frame.

REplace "But We should not emit unwind info for it " with " We should
not emit unwind info for it because these are used either for pretend
arguments or <put the other case here>.  "

I think you are correct that there is no need for unwind information
as we only have unwind information valid at call points and in this
case I wouldn't expect unwind information to need to be exact for
pretend arguments


Ramana

Reply via email to