summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGregory LEOCADIE <gregory.leocadie@datadoghq.com>2022-12-08 14:26:02 +0100
committerDave Watson <dade.watson@gmail.com>2022-12-28 09:38:29 -0800
commit5fed3c67c3016cad0b34051106f7d259f95489b0 (patch)
treea94fcca19482574db81d48541783a4f69fe89792
parent226069aac29020103a5b5298e6009e0c51df83ea (diff)
downloadlibunwind-5fed3c67c3016cad0b34051106f7d259f95489b0.tar.gz
Fix frame categorization
-rw-r--r--src/x86_64/Gstash_frame.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/src/x86_64/Gstash_frame.c b/src/x86_64/Gstash_frame.c
index d8f086e9..6b980a98 100644
--- a/src/x86_64/Gstash_frame.c
+++ b/src/x86_64/Gstash_frame.c
@@ -71,11 +71,13 @@ tdep_stash_frame (struct dwarf_cursor *d, struct dwarf_reg_state *rs)
&& DWARF_GET_LOC(d->loc[rs->ret_addr_column]) == d->cfa-8
&& (rs->reg.where[RBP] == DWARF_WHERE_UNDEF
|| rs->reg.where[RBP] == DWARF_WHERE_SAME
+ || rs->reg.where[RBP] == DWARF_WHERE_CFA
|| (rs->reg.where[RBP] == DWARF_WHERE_CFAREL
&& labs((long) rs->reg.val[RBP]) < (1 << 14)
&& rs->reg.val[RBP]+1 != 0))
&& (rs->reg.where[RSP] == DWARF_WHERE_UNDEF
|| rs->reg.where[RSP] == DWARF_WHERE_SAME
+ || rs->reg.where[RSP] == DWARF_WHERE_CFA
|| (rs->reg.where[RSP] == DWARF_WHERE_CFAREL
&& labs((long) rs->reg.val[RSP]) < (1 << 14)
&& rs->reg.val[RSP]+1 != 0)))
@@ -88,6 +90,10 @@ tdep_stash_frame (struct dwarf_cursor *d, struct dwarf_reg_state *rs)
f->rbp_cfa_offset = rs->reg.val[RBP];
if (rs->reg.where[RSP] == DWARF_WHERE_CFAREL)
f->rsp_cfa_offset = rs->reg.val[RSP];
+ if (rs->reg.where[RBP] == DWARF_WHERE_CFA)
+ f->rbp_cfa_offset = 0;
+ if (rs->reg.where[RSP] == DWARF_WHERE_CFA)
+ f->rsp_cfa_offset = 0;
Debug (4, " standard frame\n");
}