From: Jens Remus Date: Thu, 4 Jul 2024 08:34:12 +0000 (+0200) Subject: gas: Validate SFrame RA tracking and fixed RA offset X-Git-Tag: binutils-2_43~203 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=68e549ee5497d90a7921b4c676789b55f91ba08b;p=thirdparty%2Fbinutils-gdb.git 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 --- diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c index f83a64518c2..626dc33b71d 100644 --- a/gas/gen-sframe.c +++ b/gas/gen-sframe.c @@ -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.