https://sourceware.org/bugzilla/show_bug.cgi?id=32879

Jens Remus <jremus at linux dot ibm.com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jremus at linux dot ibm.com

--- Comment #1 from Jens Remus <jremus at linux dot ibm.com> ---
>From a s390x perspective there are a few issues with the tentative patch:

1. On s390x the initial CFA offset at function entry is 160 instead of 0. 
Assuming a value of 0 is therefore wrong.

2. Using the register 6 as CFA base register in the test does not work for all
architectures.  At least on s390x this is none of SP and FP and therefore the
test fails with:
Warning: skipping SFrame FDE; non-SP/FP register 6 in .cfi_def_cfa_register


A solution for the first issue may be to use the CFA offset of the current FRE,
if there is no last FRE (= previous FRE?):

> diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c
> @@ -1024,6 +1024,7 @@ sframe_xlate_do_def_cfa_register (struct 
> sframe_xlate_ctx *xlate_ctx,
>    struct sframe_row_entry *last_fre = xlate_ctx->last_fre;
>    /* Get the scratchpad FRE.  This FRE will eventually get linked in.  */
>    struct sframe_row_entry *cur_fre = xlate_ctx->cur_fre;
> +  offsetT cfa_offset = 0;

  offsetT cfa_offset;

>  
>    gas_assert (cur_fre);
>    /* Define the current CFA rule to use the provided register (but to
> @@ -1038,7 +1039,9 @@ sframe_xlate_do_def_cfa_register (struct 
> sframe_xlate_ctx *xlate_ctx,
>        return SFRAME_XLATE_ERR_NOTREPRESENTED; /* Not represented.  */
>      }
>    sframe_fre_set_cfa_base_reg (cur_fre, cfi_insn->u.r);
> -  sframe_fre_set_cfa_offset (cur_fre, last_fre->cfa_offset);
> +  if (last_fre)
> +    cfa_offset = last_fre->cfa_offset;

  else
    cfa_offset = cur_fre->cfa_offset;

> +  sframe_fre_set_cfa_offset (cur_fre, cfa_offset);
>    cur_fre->merge_candidate = false;
>  
>    return SFRAME_XLATE_OK;


At least that causes the correct initial CFA offset of 160 to be picked up on
s390x.  But maybe cur_fre->merge_candidate needs to be factored in as well, if
both last_fre and curr_fre exist?

-- 
You are receiving this mail because:
You are on the CC list for the bug.

Reply via email to