1
0
Fork 0
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:
Kevin Modzelewski 2014-05-18 19:32:28 -07:00 committed by Arun Sharma
parent 2cb00c1eac
commit 4509adb853

View file

@ -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;