aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gas/gen-sframe.c8
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));