[binutils-gdb] gas: sframe: reset fp_reg to SFRAME_FRE_REG_INVALID
Indu Bhagat
ibhagat@sourceware.org
Wed Dec 24 09:07:38 GMT 2025
https://sourceware.org/git/gitweb.cgi?p=binutils-gdb.git;h=dce9415745899866ae85ee8d71c30bb00af339a0
commit dce9415745899866ae85ee8d71c30bb00af339a0
Author: Indu Bhagat <indu.bhagat@oracle.com>
Date: Wed Dec 24 01:06:28 2025 -0800
gas: sframe: reset fp_reg to SFRAME_FRE_REG_INVALID
It makes sense to keep all internal state related to registers
(cfa_base_reg, fp_reg) reset to SFRAME_FRE_REG_INVALID.
While at it, also make sure fp_reg state is copied over when intializing
an SFrame FRE.
gas/
* gen-sframe.c (sframe_row_entry_new): Reset to
SFRAME_FRE_REG_INVALID.
(sframe_row_entry_initialize): Copy over fp_reg too.
(sframe_xlate_do_offset): Adjust accordingly.
Diff:
---
gas/gen-sframe.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c
index 9c93f98a30c..0ac0f7e0a4b 100644
--- a/gas/gen-sframe.c
+++ b/gas/gen-sframe.c
@@ -525,9 +525,10 @@ static struct sframe_row_entry*
sframe_row_entry_new (void)
{
struct sframe_row_entry *fre = XCNEW (struct sframe_row_entry);
- /* Reset cfa_base_reg to SFRAME_FRE_REG_INVALID. A value of 0 may imply a
+ /* Reset all regs to SFRAME_FRE_REG_INVALID. A value of 0 may imply a
valid register for a supported arch. */
fre->cfa_base_reg = SFRAME_FRE_REG_INVALID;
+ fre->fp_reg = SFRAME_FRE_REG_INVALID;
fre->merge_candidate = true;
/* Reset the mangled RA status bit to zero by default. We will
initialize it in sframe_row_entry_initialize () with the sticky
@@ -1012,6 +1013,7 @@ sframe_row_entry_initialize (struct sframe_row_entry *cur_fre,
cur_fre->cfa_base_reg = prev_fre->cfa_base_reg;
cur_fre->cfa_offset = prev_fre->cfa_offset;
cur_fre->fp_loc = prev_fre->fp_loc;
+ cur_fre->fp_reg = prev_fre->fp_reg;
cur_fre->fp_offset = prev_fre->fp_offset;
cur_fre->ra_loc = prev_fre->ra_loc;
cur_fre->ra_offset = prev_fre->ra_offset;
@@ -1233,7 +1235,7 @@ sframe_xlate_do_offset (struct sframe_xlate_ctx *xlate_ctx,
/* Ignore SP reg, as it can be recovered from the CFA tracking info. */
if (cfi_insn->u.ri.reg == SFRAME_CFA_FP_REG)
{
- gas_assert (!cur_fre->fp_reg);
+ gas_assert (cur_fre->fp_reg == SFRAME_FRE_REG_INVALID);
sframe_fre_set_fp_track (cur_fre, cfi_insn->u.ri.offset);
cur_fre->merge_candidate = false;
}
More information about the Binutils-cvs
mailing list