gas: Validate SFrame RA tracking and fixed RA offset

Verify all architectures participating in SFrame generation do define
the mandatory SFrame return address (RA) tracking predicate function
sframe_ra_tracking_p. Do so by explicitly not testing for the macro
SFRAME_FRE_RA_TRACKING as otherwise required.

Verify that architectures not using SFrame RA tracking specify a valid
fixed RA offset.

gas/
	* gen-sframe.c (output_sframe_internal): Validate SFrame
	RA tracking and fixed RA offset.

Signed-off-by: Jens Remus <jremus@linux.ibm.com>
This commit is contained in:
Jens Remus 2024-07-04 10:34:12 +02:00
parent cd1fab1330
commit 68e549ee54

View File

@ -667,12 +667,16 @@ output_sframe_internal (void)
-fno-omit-frame-pointer is used. */
out_one (fixed_fp_offset);
/* Offset for the return address from CFA is fixed for some ABIs
(e.g., AMD64), output a SFRAME_CFA_FIXED_RA_INVALID otherwise. */
#ifdef sframe_ra_tracking_p
/* All ABIs participating in SFrame generation must define
sframe_ra_tracking_p.
When RA tracking (in FREs) is not needed (e.g., AMD64), SFrame assumes
the RA is going to be at a fixed offset from CFA. Check that the fixed RA
offset is appropriately defined in all cases. */
if (!sframe_ra_tracking_p ())
fixed_ra_offset = sframe_cfa_ra_offset ();
#endif
{
fixed_ra_offset = sframe_cfa_ra_offset ();
gas_assert (fixed_ra_offset != SFRAME_CFA_FIXED_RA_INVALID);
}
out_one (fixed_ra_offset);
/* None of the AMD64, or AARCH64 ABIs need the auxiliary header.