mirror of
https://github.com/tobast/libunwind-eh_elf.git
synced 2025-01-10 19:23:41 +01:00
Prefer to unwind using DWARF info on ARM.
DWARF expressions are more powerful than the ARM specific unwind tables. Therefore DWARF should be the preferred unwind method. Signed-off-by: Ken Werner <ken.werner@linaro.org>
This commit is contained in:
parent
fb325c895e
commit
dcb8d0d90f
1 changed files with 13 additions and 10 deletions
|
@ -76,16 +76,7 @@ unw_step (unw_cursor_t *cursor)
|
|||
|
||||
Debug (1, "(cursor=%p)\n", c);
|
||||
|
||||
if (UNW_TRY_METHOD (UNW_ARM_METHOD_EXIDX))
|
||||
{
|
||||
ret = arm_exidx_step (c);
|
||||
if (ret >= 0)
|
||||
return 1;
|
||||
if (ret == -UNW_ESTOPUNWIND)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Next, try DWARF-based unwinding. */
|
||||
/* First, try DWARF-based unwinding. */
|
||||
if (UNW_TRY_METHOD(UNW_ARM_METHOD_DWARF))
|
||||
{
|
||||
ret = dwarf_step (&c->dwarf);
|
||||
|
@ -101,6 +92,18 @@ unw_step (unw_cursor_t *cursor)
|
|||
}
|
||||
}
|
||||
|
||||
/* Next, try extbl-based unwinding. */
|
||||
if (UNW_TRY_METHOD (UNW_ARM_METHOD_EXIDX))
|
||||
{
|
||||
ret = arm_exidx_step (c);
|
||||
if (ret >= 0)
|
||||
return 1;
|
||||
if (ret == -UNW_ESTOPUNWIND)
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Fall back on APCS frame parsing.
|
||||
Note: This won't work in case the ARM EABI is used. */
|
||||
if (unlikely (ret < 0))
|
||||
{
|
||||
if (UNW_TRY_METHOD(UNW_ARM_METHOD_FRAME))
|
||||
|
|
Loading…
Reference in a new issue