diff options
author | Gregory LEOCADIE <gregory.leocadie@datadoghq.com> | 2022-12-08 14:26:02 +0100 |
---|---|---|
committer | Dave Watson <dade.watson@gmail.com> | 2022-12-28 09:38:29 -0800 |
commit | 5fed3c67c3016cad0b34051106f7d259f95489b0 (patch) | |
tree | a94fcca19482574db81d48541783a4f69fe89792 | |
parent | 226069aac29020103a5b5298e6009e0c51df83ea (diff) | |
download | libunwind-5fed3c67c3016cad0b34051106f7d259f95489b0.tar.gz |
Fix frame categorization
-rw-r--r-- | src/x86_64/Gstash_frame.c | 6 |
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"); } |