]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
gas: Validate SFrame RA tracking and fixed RA offset
authorJens Remus <jremus@linux.ibm.com>
Thu, 4 Jul 2024 08:34:12 +0000 (10:34 +0200)
committerJens Remus <jremus@linux.ibm.com>
Thu, 4 Jul 2024 08:34:12 +0000 (10:34 +0200)
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>
gas/gen-sframe.c

index f83a64518c284d7f9d723bf5a1759fcfb54efba7..626dc33b71dce9dff0386c28f4d43bb507b9bbeb 100644 (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.