[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