mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2024-11-28 10:07:37 +01:00
x86_64: Handle edge conditions with zero length frames
When JITs generate code without unwind information, it may be possible to continue unwinding via RBP chaining. However, we currently disallow RBP==RSP condition even though we can make forward progress. Relax the check a bit in the code where we switch from one type of unwinding to another to handle this situation. JIT authors are encouraged to use the dynamic unwind info registration API when the underlying platform supports it. Signed-off-by: Kevin Modzelewski <kmod@dropbox.com>
This commit is contained in:
parent
2cb00c1eac
commit
4509adb853
1 changed files with 1 additions and 1 deletions
|
@ -173,7 +173,7 @@ unw_step (unw_cursor_t *cursor)
|
||||||
anything about new RBP (rbp1) since it may not be a frame
|
anything about new RBP (rbp1) since it may not be a frame
|
||||||
pointer in the frame above. Just check we get the value. */
|
pointer in the frame above. Just check we get the value. */
|
||||||
if (ret < 0
|
if (ret < 0
|
||||||
|| rbp <= c->dwarf.cfa
|
|| rbp < c->dwarf.cfa
|
||||||
|| (rbp - c->dwarf.cfa) > 0x4000)
|
|| (rbp - c->dwarf.cfa) > 0x4000)
|
||||||
{
|
{
|
||||||
rip_loc = DWARF_NULL_LOC;
|
rip_loc = DWARF_NULL_LOC;
|
||||||
|
|
Loading…
Reference in a new issue