[PATCH v3 1/3] include: libsframe: Add API to get total number of FREs

Jan Beulich jbeulich@suse.com
Wed Jul 23 13:42:46 GMT 2025


On 23.07.2025 15:17, Jens Remus wrote:
> This API will be later used by the linker to handle the special case
> of a SFrame section that solely contain FDEs without any FREs.  Such
> FDEs without any FREs will be used to represent RA undefined.
> 
> include/
> 	* sframe-api.h (sframe_encoder_get_num_fres): New declaration.
> 
> libsframe/
> 	* libsframe.ver (sframe_encoder_get_num_fres): List new API.
> 	* sframe.c (sframe_encoder_get_num_fres): New definition.
> 
> Signed-off-by: Jens Remus <jremus@linux.ibm.com>
> ---
> 
> Notes (jremus):
>     Changes in V3:
>     - New patch.
>     
>     Instead of adding a new API, sframe_encoder_write_sframe could directly
>     access ehp->sfh_num_fres.  Thoughts?
> 
>  include/sframe-api.h    |  5 +++++
>  libsframe/libsframe.ver |  1 +
>  libsframe/sframe.c      | 14 ++++++++++++++
>  3 files changed, 20 insertions(+)
> 
> diff --git a/include/sframe-api.h b/include/sframe-api.h
> index 8c26257fb643..fe9cf6d8d3a4 100644
> --- a/include/sframe-api.h
> +++ b/include/sframe-api.h
> @@ -275,6 +275,11 @@ sframe_encoder_get_offsetof_fde_start_addr (sframe_encoder_ctx *encoder,
>  extern uint32_t
>  sframe_encoder_get_num_fidx (sframe_encoder_ctx *encoder);
>  
> +/* Return the number of function row entries in the SFrame encoder
> +   ENCODER.  */
> +extern uint32_t
> +sframe_encoder_get_num_fres (sframe_encoder_ctx *encoder);
> +
>  /* Add an FRE to function at FUNC_IDX'th function descriptor index entry in
>     the encoder context.  */
>  extern int
> diff --git a/libsframe/libsframe.ver b/libsframe/libsframe.ver
> index 8cc80da2f26a..deec457bbdee 100644
> --- a/libsframe/libsframe.ver
> +++ b/libsframe/libsframe.ver
> @@ -31,6 +31,7 @@ LIBSFRAME_2.0 {
>      sframe_encoder_get_version;
>      sframe_encoder_get_offsetof_fde_start_addr;
>      sframe_encoder_get_num_fidx;
> +    sframe_encoder_get_num_fres;
>      sframe_encoder_add_fre;
>      sframe_encoder_add_funcdesc;
>      sframe_encoder_add_funcdesc_v2;
> diff --git a/libsframe/sframe.c b/libsframe/sframe.c
> index 824d1fd7ed99..d84f1c2d0d78 100644
> --- a/libsframe/sframe.c
> +++ b/libsframe/sframe.c
> @@ -1499,6 +1499,20 @@ sframe_encoder_get_num_fidx (sframe_encoder_ctx *encoder)
>    return num_fdes;
>  }
>  
> +/* Return the number of function row entries in the SFrame encoder
> +   ENCODER.  */
> +
> +uint32_t
> +sframe_encoder_get_num_fres (sframe_encoder_ctx *encoder)
> +{
> +  uint32_t num_fres = 0;
> +  sframe_header *ehp = NULL;

Just one nit: What's the point of this initializer? Why can't ...

> +  ehp = sframe_encoder_get_header (encoder);

... this be the initializer right away?

Jan

> +  if (ehp)
> +    num_fres = ehp->sfh_num_fres;
> +  return num_fres;
> +}
> +
>  /* Get the offset of the sfde_func_start_address field (from the start of the
>     on-disk layout of the SFrame section) of the FDE at FUNC_IDX in the encoder
>     context ENCODER.



More information about the Binutils mailing list