diff options
Diffstat (limited to 'arch/hexagon/kernel/traps.c')
-rw-r--r-- | arch/hexagon/kernel/traps.c | 13 |
1 files changed, 1 insertions, 12 deletions
diff --git a/arch/hexagon/kernel/traps.c b/arch/hexagon/kernel/traps.c index be5e2dd9c9d3..d59ee62f772d 100644 --- a/arch/hexagon/kernel/traps.c +++ b/arch/hexagon/kernel/traps.c | |||
@@ -356,7 +356,6 @@ long sys_syscall(void) | |||
356 | 356 | ||
357 | void do_trap0(struct pt_regs *regs) | 357 | void do_trap0(struct pt_regs *regs) |
358 | { | 358 | { |
359 | unsigned long syscallret = 0; | ||
360 | syscall_fn syscall; | 359 | syscall_fn syscall; |
361 | 360 | ||
362 | switch (pt_cause(regs)) { | 361 | switch (pt_cause(regs)) { |
@@ -396,21 +395,11 @@ void do_trap0(struct pt_regs *regs) | |||
396 | } else { | 395 | } else { |
397 | syscall = (syscall_fn) | 396 | syscall = (syscall_fn) |
398 | (sys_call_table[regs->syscall_nr]); | 397 | (sys_call_table[regs->syscall_nr]); |
399 | syscallret = syscall(regs->r00, regs->r01, | 398 | regs->r00 = syscall(regs->r00, regs->r01, |
400 | regs->r02, regs->r03, | 399 | regs->r02, regs->r03, |
401 | regs->r04, regs->r05); | 400 | regs->r04, regs->r05); |
402 | } | 401 | } |
403 | 402 | ||
404 | /* | ||
405 | * If it was a sigreturn system call, don't overwrite | ||
406 | * r0 value in stack frame with return value. | ||
407 | * | ||
408 | * __NR_sigreturn doesn't seem to exist in new unistd.h | ||
409 | */ | ||
410 | |||
411 | if (regs->syscall_nr != __NR_rt_sigreturn) | ||
412 | regs->r00 = syscallret; | ||
413 | |||
414 | /* allow strace to get the syscall return state */ | 403 | /* allow strace to get the syscall return state */ |
415 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACE))) | 404 | if (unlikely(test_thread_flag(TIF_SYSCALL_TRACE))) |
416 | tracehook_report_syscall_exit(regs, 0); | 405 | tracehook_report_syscall_exit(regs, 0); |