aboutsummaryrefslogtreecommitdiff
path: root/sysdeps/linux-gnu/arm/regs.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/linux-gnu/arm/regs.c')
-rw-r--r--sysdeps/linux-gnu/arm/regs.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/sysdeps/linux-gnu/arm/regs.c b/sysdeps/linux-gnu/arm/regs.c
index 819754f..b1c4ae6 100644
--- a/sysdeps/linux-gnu/arm/regs.c
+++ b/sysdeps/linux-gnu/arm/regs.c
@@ -39,5 +39,10 @@ void *get_stack_pointer(struct process *proc)
* a CISC architecture; in our case, we don't need that */
void *get_return_addr(struct process *proc, void *stack_pointer)
{
- return (void *)ptrace(PTRACE_PEEKUSER, proc->pid, off_lr, 0);
+ long addr = ptrace(PTRACE_PEEKUSER, proc->pid, off_lr, 0);
+
+ proc->thumb_mode = addr & 1;
+ if (proc->thumb_mode)
+ addr &= ~1;
+ return (void *)addr;
}