diff options
-rw-r--r-- | gas/gen-sframe.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/gas/gen-sframe.c b/gas/gen-sframe.c index 1da7a77..20ba9e0 100644 --- a/gas/gen-sframe.c +++ b/gas/gen-sframe.c @@ -1138,6 +1138,7 @@ sframe_xlate_do_val_offset (struct sframe_xlate_ctx *xlate_ctx ATTRIBUTE_UNUSED, #ifdef SFRAME_FRE_RA_TRACKING || (sframe_ra_tracking_p () && cfi_insn->u.r == SFRAME_CFA_RA_REG) #endif + /* Ignore SP reg, as it can be recovered from the CFA tracking info. */ ) { as_warn (_("skipping SFrame FDE due to .cfi_val_offset specifying %s register"), @@ -1157,14 +1158,15 @@ sframe_xlate_do_register (struct sframe_xlate_ctx *xlate_ctx ATTRIBUTE_UNUSED, struct cfi_insn_data *cfi_insn) { /* Previous value of register1 is register2. However, if the specified - register1 is not interesting (SP, FP, or RA reg), the current DW_CFA_register + register1 is not interesting (FP or RA reg), the current DW_CFA_register instruction can be safely skipped without sacrificing the asynchronicity of stack trace information. */ - if (cfi_insn->u.rr.reg1 == SFRAME_CFA_SP_REG + if (cfi_insn->u.rr.reg1 == SFRAME_CFA_FP_REG #ifdef SFRAME_FRE_RA_TRACKING || (sframe_ra_tracking_p () && cfi_insn->u.rr.reg1 == SFRAME_CFA_RA_REG) #endif - || cfi_insn->u.rr.reg1 == SFRAME_CFA_FP_REG) + /* Ignore SP reg, as it can be recovered from the CFA tracking info. */ + ) { as_warn (_("skipping SFrame FDE due to .cfi_register specifying %s register"), sframe_register_name (cfi_insn->u.rr.reg1)); |