diff options
| -rw-r--r-- | arch/arm/kernel/return_address.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/arch/arm/kernel/return_address.c b/arch/arm/kernel/return_address.c index 8085417555dd..fafedd86885d 100644 --- a/arch/arm/kernel/return_address.c +++ b/arch/arm/kernel/return_address.c | |||
| @@ -26,7 +26,7 @@ static int save_return_addr(struct stackframe *frame, void *d) | |||
| 26 | struct return_address_data *data = d; | 26 | struct return_address_data *data = d; |
| 27 | 27 | ||
| 28 | if (!data->level) { | 28 | if (!data->level) { |
| 29 | data->addr = (void *)frame->lr; | 29 | data->addr = (void *)frame->pc; |
| 30 | 30 | ||
| 31 | return 1; | 31 | return 1; |
| 32 | } else { | 32 | } else { |
| @@ -41,7 +41,8 @@ void *return_address(unsigned int level) | |||
| 41 | struct stackframe frame; | 41 | struct stackframe frame; |
| 42 | register unsigned long current_sp asm ("sp"); | 42 | register unsigned long current_sp asm ("sp"); |
| 43 | 43 | ||
| 44 | data.level = level + 1; | 44 | data.level = level + 2; |
| 45 | data.addr = NULL; | ||
| 45 | 46 | ||
| 46 | frame.fp = (unsigned long)__builtin_frame_address(0); | 47 | frame.fp = (unsigned long)__builtin_frame_address(0); |
| 47 | frame.sp = current_sp; | 48 | frame.sp = current_sp; |
