mirror of
https://github.com/bminor/binutils-gdb.git
synced 2025-11-16 12:34:43 +00:00
include: libsframe: Add API to get RA undefined
SFrame FREs without any offsets will later be used to represent an undefined return address (RA) in SFrame. This API can then be used, for instance by libsframe when dumping SFrame stack trace information (e.g. in objdump and readelf), to test for RA undefined. Other users of libsframe need the same capability. include/ * sframe-api.h (sframe_fre_get_ra_undefined_p): New declaration. libsframe/ * libsframe.ver (sframe_fre_get_ra_undefined_p): List new API. * sframe.c (sframe_fre_get_ra_undefined_p): New definition. Signed-off-by: Jens Remus <jremus@linux.ibm.com>
This commit is contained in:
@@ -230,6 +230,12 @@ extern bool
|
||||
sframe_fre_get_ra_mangled_p (sframe_decoder_ctx *dctx,
|
||||
sframe_frame_row_entry *fre, int *errp);
|
||||
|
||||
/* Get whether the RA is undefined (i.e. outermost frame). */
|
||||
|
||||
bool
|
||||
sframe_fre_get_ra_undefined_p (const sframe_decoder_ctx *dctx ATTRIBUTE_UNUSED,
|
||||
const sframe_frame_row_entry *fre, int *errp);
|
||||
|
||||
/* The SFrame Encoder. */
|
||||
|
||||
/* Create an encoder context with the given SFrame format version VER, FLAGS
|
||||
|
||||
@@ -41,3 +41,8 @@ LIBSFRAME_2.0 {
|
||||
local:
|
||||
*;
|
||||
} LIBSFRAME_0.0;
|
||||
|
||||
LIBSFRAME_2.1 {
|
||||
global:
|
||||
sframe_fre_get_ra_undefined_p;
|
||||
} LIBSFRAME_2.0;
|
||||
|
||||
@@ -131,6 +131,12 @@ sframe_get_fre_ra_mangled_p (uint8_t fre_info)
|
||||
return SFRAME_V1_FRE_MANGLED_RA_P (fre_info);
|
||||
}
|
||||
|
||||
static bool
|
||||
sframe_get_fre_ra_undefined_p (uint8_t fre_info)
|
||||
{
|
||||
return SFRAME_V1_FRE_OFFSET_COUNT (fre_info) == 0;
|
||||
}
|
||||
|
||||
/* Access functions for info from function descriptor entry. */
|
||||
|
||||
static uint32_t
|
||||
@@ -777,6 +783,18 @@ sframe_fre_get_ra_mangled_p (sframe_decoder_ctx *dctx ATTRIBUTE_UNUSED,
|
||||
return sframe_get_fre_ra_mangled_p (fre->fre_info);
|
||||
}
|
||||
|
||||
/* Get whether the RA is undefined (i.e. outermost frame). */
|
||||
|
||||
bool
|
||||
sframe_fre_get_ra_undefined_p (const sframe_decoder_ctx *dctx ATTRIBUTE_UNUSED,
|
||||
const sframe_frame_row_entry *fre, int *errp)
|
||||
{
|
||||
if (fre == NULL || !sframe_fre_sanity_check_p (fre))
|
||||
return sframe_set_errno (errp, SFRAME_ERR_FRE_INVAL);
|
||||
|
||||
return sframe_get_fre_ra_undefined_p (fre->fre_info);
|
||||
}
|
||||
|
||||
static int
|
||||
sframe_frame_row_entry_copy (sframe_frame_row_entry *dst,
|
||||
sframe_frame_row_entry *src)
|
||||
|
||||
Reference in New Issue
Block a user