1
0
Fork 0
mirror of https://github.com/tobast/libunwind-eh_elf.git synced 2024-11-21 15:17:39 +01:00

ARM: fix with-signal-frame local unw_resume()

Make sure that the `sigcontext_addr' cursor member is pointing to the
`struct sigcontext' as expected in arm_local_resume().
This commit is contained in:
Tommi Rantala 2012-08-10 11:39:17 +03:00
parent 14fc15928b
commit 5738bac171

View file

@ -1,6 +1,7 @@
/* libunwind - a platform-independent unwind library
Copyright (C) 2008 CodeSourcery
Copyright 2011 Linaro Limited
Copyright (C) 2012 Tommi Rantala <tt.rantala@gmail.com>
This file is part of libunwind.
@ -111,7 +112,6 @@ unw_handle_signal_frame (unw_cursor_t *cursor)
c->sigcontext_format = ARM_SCF_LINUX_OLD_SIGFRAME;
sc_addr = sp_addr;
}
c->sigcontext_addr = sp_addr;
}
else if (ret == 2)
{
@ -120,18 +120,19 @@ unw_handle_signal_frame (unw_cursor_t *cursor)
if (sp == sp_addr + 8)
{
c->sigcontext_format = ARM_SCF_LINUX_OLD_RT_SIGFRAME;
c->sigcontext_addr = sp_addr + 8 + sizeof (siginfo_t);
sc_addr = sp_addr + 8 + sizeof (siginfo_t) + LINUX_UC_MCONTEXT_OFF;
}
else
{
c->sigcontext_format = ARM_SCF_LINUX_RT_SIGFRAME;
c->sigcontext_addr = sp_addr + sizeof (siginfo_t);
sc_addr = sp_addr + sizeof (siginfo_t) + LINUX_UC_MCONTEXT_OFF;
}
sc_addr = c->sigcontext_addr + LINUX_UC_MCONTEXT_OFF;
}
else
return -UNW_EUNSPEC;
c->sigcontext_addr = sc_addr;
/* Update the dwarf cursor.
Set the location of the registers to the corresponding addresses of the
uc_mcontext / sigcontext structure contents. */