mirror of
https://github.com/bminor/binutils-gdb.git
synced 2026-02-05 13:01:29 +00:00
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.
49 lines
1.3 KiB
Plaintext
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;
|