Files
binutils-gdb/libsframe/libsframe.ver
Indu Bhagat 9d1500135a [SFrame-V3] bfd: ld: sframe: avoid unnecessary decoding of SFrame FREs at link time
At link time, in _bfd_elf_merge_section_sframe (), it suffices to bring
over the all per-function stack trace metadata (all FREs) as a blob into
the SFrame encoder object.  There is no need to "decode" each SFrame
FRE, only to add them in a serial fashion.

This is an optimization, and not directly related to any SFrame V3
related changes to the specification.  This should also bring us a step
closer to supporting SFrame for targets which use linker relaxations.
Removing the need to decode the input FREs can allow the linker to
simply use the available set of FREs from (relocated) contents.  To
support targets using linker relaxations in SFrame, other changes in the
SFrame parse functionality time may also be necessary, but this brings
us just a step closer.

Add two new APIs to accomplish this:
 - sframe_decoder_get_fres_buf, and
 - sframe_encoder_add_fres_buf

bfd/
	* elf-sframe.c (_bfd_elf_merge_section_sframe): Get all FRE data
	and add it all in bulk.
libsframe/
	* libsframe.ver: Add new APIs.
	* sframe.c (sframe_buf_fre_entry_size): New internal API to get
	size of one SFrame FRE at the indicated buffer location, without
	fully "decoding" the SFrame FRE.
	(sframe_decoder_get_fres_buf): New definition.
	(sframe_encoder_add_fres_buf): New definition.
include/
	* sframe-api.h (sframe_decoder_get_fres_buf): New declaration.
	(sframe_encoder_add_fres_buf): New declaration.
2026-01-15 17:02:26 -08:00

49 lines
1.3 KiB
Plaintext

LIBSFRAME_0.0 { };
LIBSFRAME_3.0 {
global:
sframe_decoder_free;
sframe_fde_create_func_info;
sframe_calc_fre_type;
sframe_fre_get_base_reg_id;
sframe_get_fre_udata;
sframe_fre_get_cfa_offset;
sframe_fre_get_fp_offset;
sframe_fre_get_ra_offset;
sframe_fre_get_ra_mangled_p;
sframe_fre_get_ra_undefined_p;
sframe_decode;
sframe_decoder_get_flags;
sframe_decoder_get_hdr_size;
sframe_decoder_get_abi_arch;
sframe_decoder_get_version;
sframe_decoder_get_offsetof_fde_start_addr;
sframe_decoder_get_fixed_fp_offset;
sframe_decoder_get_fixed_ra_offset;
sframe_find_fre;
sframe_decoder_get_num_fidx;
sframe_decoder_get_funcdesc_v2;
sframe_decoder_get_funcdesc_v3;
sframe_decoder_get_fre;
sframe_decoder_get_fres_buf;
sframe_encode;
sframe_encoder_free;
sframe_encoder_get_flags;
sframe_encoder_get_hdr_size;
sframe_encoder_get_abi_arch;
sframe_encoder_get_version;
sframe_encoder_get_offsetof_fde_start_addr;
sframe_encoder_get_num_fidx;
sframe_encoder_add_fre;
sframe_encoder_add_funcdesc;
sframe_encoder_add_funcdesc_v2;
sframe_encoder_add_funcdesc_v3;
sframe_encoder_add_fres_buf;
sframe_encoder_write;
dump_sframe;
sframe_errmsg;
local:
*;
} LIBSFRAME_0.0;