diff options
author | Richard Weinberger <richard@nod.at> | 2014-03-02 08:46:11 -0500 |
---|---|---|
committer | Richard Weinberger <richard@sigma-star.at> | 2014-08-06 07:03:09 -0400 |
commit | 129b69df9c9074750245fca8aa92df5cc1a86ef4 (patch) | |
tree | 10c9f8b350d6946a1a38dfade27f42930e1af358 /arch/powerpc | |
parent | e4dc894b61776733629b24507031dd46f5ba5efc (diff) |
powerpc: Use get_signal() signal_setup_done()
Use the more generic functions get_signal() signal_setup_done()
for signal delivery.
This inverts also the return codes of setup_*frame() to follow the
kernel convention.
Signed-off-by: Richard Weinberger <richard@nod.at>
Diffstat (limited to 'arch/powerpc')
-rw-r--r-- | arch/powerpc/kernel/signal.c | 31 | ||||
-rw-r--r-- | arch/powerpc/kernel/signal.h | 14 | ||||
-rw-r--r-- | arch/powerpc/kernel/signal_32.c | 36 | ||||
-rw-r--r-- | arch/powerpc/kernel/signal_64.c | 28 |
4 files changed, 45 insertions, 64 deletions
diff --git a/arch/powerpc/kernel/signal.c b/arch/powerpc/kernel/signal.c index 1c794cef2883..aa9b048c4766 100644 --- a/arch/powerpc/kernel/signal.c +++ b/arch/powerpc/kernel/signal.c | |||
@@ -105,25 +105,23 @@ static void check_syscall_restart(struct pt_regs *regs, struct k_sigaction *ka, | |||
105 | } | 105 | } |
106 | } | 106 | } |
107 | 107 | ||
108 | static int do_signal(struct pt_regs *regs) | 108 | static void do_signal(struct pt_regs *regs) |
109 | { | 109 | { |
110 | sigset_t *oldset = sigmask_to_save(); | 110 | sigset_t *oldset = sigmask_to_save(); |
111 | siginfo_t info; | 111 | struct ksignal ksig; |
112 | int signr; | ||
113 | struct k_sigaction ka; | ||
114 | int ret; | 112 | int ret; |
115 | int is32 = is_32bit_task(); | 113 | int is32 = is_32bit_task(); |
116 | 114 | ||
117 | signr = get_signal_to_deliver(&info, &ka, regs, NULL); | 115 | get_signal(&ksig); |
118 | 116 | ||
119 | /* Is there any syscall restart business here ? */ | 117 | /* Is there any syscall restart business here ? */ |
120 | check_syscall_restart(regs, &ka, signr > 0); | 118 | check_syscall_restart(regs, &ksig.ka, ksig.sig > 0); |
121 | 119 | ||
122 | if (signr <= 0) { | 120 | if (ksig.sig <= 0) { |
123 | /* No signal to deliver -- put the saved sigmask back */ | 121 | /* No signal to deliver -- put the saved sigmask back */ |
124 | restore_saved_sigmask(); | 122 | restore_saved_sigmask(); |
125 | regs->trap = 0; | 123 | regs->trap = 0; |
126 | return 0; /* no signals delivered */ | 124 | return; /* no signals delivered */ |
127 | } | 125 | } |
128 | 126 | ||
129 | #ifndef CONFIG_PPC_ADV_DEBUG_REGS | 127 | #ifndef CONFIG_PPC_ADV_DEBUG_REGS |
@@ -140,23 +138,16 @@ static int do_signal(struct pt_regs *regs) | |||
140 | thread_change_pc(current, regs); | 138 | thread_change_pc(current, regs); |
141 | 139 | ||
142 | if (is32) { | 140 | if (is32) { |
143 | if (ka.sa.sa_flags & SA_SIGINFO) | 141 | if (ksig.ka.sa.sa_flags & SA_SIGINFO) |
144 | ret = handle_rt_signal32(signr, &ka, &info, oldset, | 142 | ret = handle_rt_signal32(&ksig, oldset, regs); |
145 | regs); | ||
146 | else | 143 | else |
147 | ret = handle_signal32(signr, &ka, &info, oldset, | 144 | ret = handle_signal32(&ksig, oldset, regs); |
148 | regs); | ||
149 | } else { | 145 | } else { |
150 | ret = handle_rt_signal64(signr, &ka, &info, oldset, regs); | 146 | ret = handle_rt_signal64(&ksig, oldset, regs); |
151 | } | 147 | } |
152 | 148 | ||
153 | regs->trap = 0; | 149 | regs->trap = 0; |
154 | if (ret) { | 150 | signal_setup_done(ret, &ksig, test_thread_flag(TIF_SINGLESTEP)); |
155 | signal_delivered(signr, &info, &ka, regs, | ||
156 | test_thread_flag(TIF_SINGLESTEP)); | ||
157 | } | ||
158 | |||
159 | return ret; | ||
160 | } | 151 | } |
161 | 152 | ||
162 | void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags) | 153 | void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags) |
diff --git a/arch/powerpc/kernel/signal.h b/arch/powerpc/kernel/signal.h index c69b9aeb9f23..51b274199dd9 100644 --- a/arch/powerpc/kernel/signal.h +++ b/arch/powerpc/kernel/signal.h | |||
@@ -12,15 +12,13 @@ | |||
12 | 12 | ||
13 | extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags); | 13 | extern void do_notify_resume(struct pt_regs *regs, unsigned long thread_info_flags); |
14 | 14 | ||
15 | extern void __user * get_sigframe(struct k_sigaction *ka, unsigned long sp, | 15 | extern void __user *get_sigframe(struct ksignal *ksig, unsigned long sp, |
16 | size_t frame_size, int is_32); | 16 | size_t frame_size, int is_32); |
17 | 17 | ||
18 | extern int handle_signal32(unsigned long sig, struct k_sigaction *ka, | 18 | extern int handle_signal32(struct ksignal *ksig, sigset_t *oldset, |
19 | siginfo_t *info, sigset_t *oldset, | ||
20 | struct pt_regs *regs); | 19 | struct pt_regs *regs); |
21 | 20 | ||
22 | extern int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, | 21 | extern int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset, |
23 | siginfo_t *info, sigset_t *oldset, | ||
24 | struct pt_regs *regs); | 22 | struct pt_regs *regs); |
25 | 23 | ||
26 | extern unsigned long copy_fpr_to_user(void __user *to, | 24 | extern unsigned long copy_fpr_to_user(void __user *to, |
@@ -44,14 +42,12 @@ extern unsigned long copy_transact_vsx_from_user(struct task_struct *task, | |||
44 | 42 | ||
45 | #ifdef CONFIG_PPC64 | 43 | #ifdef CONFIG_PPC64 |
46 | 44 | ||
47 | extern int handle_rt_signal64(int signr, struct k_sigaction *ka, | 45 | extern int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, |
48 | siginfo_t *info, sigset_t *set, | ||
49 | struct pt_regs *regs); | 46 | struct pt_regs *regs); |
50 | 47 | ||
51 | #else /* CONFIG_PPC64 */ | 48 | #else /* CONFIG_PPC64 */ |
52 | 49 | ||
53 | static inline int handle_rt_signal64(int signr, struct k_sigaction *ka, | 50 | static inline int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, |
54 | siginfo_t *info, sigset_t *set, | ||
55 | struct pt_regs *regs) | 51 | struct pt_regs *regs) |
56 | { | 52 | { |
57 | return -EFAULT; | 53 | return -EFAULT; |
diff --git a/arch/powerpc/kernel/signal_32.c b/arch/powerpc/kernel/signal_32.c index 1bc5a1755ed4..aa0af8853d59 100644 --- a/arch/powerpc/kernel/signal_32.c +++ b/arch/powerpc/kernel/signal_32.c | |||
@@ -981,9 +981,8 @@ int copy_siginfo_from_user32(siginfo_t *to, struct compat_siginfo __user *from) | |||
981 | * Set up a signal frame for a "real-time" signal handler | 981 | * Set up a signal frame for a "real-time" signal handler |
982 | * (one which gets siginfo). | 982 | * (one which gets siginfo). |
983 | */ | 983 | */ |
984 | int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, | 984 | int handle_rt_signal32(struct ksignal *ksig, sigset_t *oldset, |
985 | siginfo_t *info, sigset_t *oldset, | 985 | struct pt_regs *regs) |
986 | struct pt_regs *regs) | ||
987 | { | 986 | { |
988 | struct rt_sigframe __user *rt_sf; | 987 | struct rt_sigframe __user *rt_sf; |
989 | struct mcontext __user *frame; | 988 | struct mcontext __user *frame; |
@@ -995,13 +994,13 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, | |||
995 | 994 | ||
996 | /* Set up Signal Frame */ | 995 | /* Set up Signal Frame */ |
997 | /* Put a Real Time Context onto stack */ | 996 | /* Put a Real Time Context onto stack */ |
998 | rt_sf = get_sigframe(ka, get_tm_stackpointer(regs), sizeof(*rt_sf), 1); | 997 | rt_sf = get_sigframe(&ksig->ka, get_tm_stackpointer(regs), sizeof(*rt_sf), 1); |
999 | addr = rt_sf; | 998 | addr = rt_sf; |
1000 | if (unlikely(rt_sf == NULL)) | 999 | if (unlikely(rt_sf == NULL)) |
1001 | goto badframe; | 1000 | goto badframe; |
1002 | 1001 | ||
1003 | /* Put the siginfo & fill in most of the ucontext */ | 1002 | /* Put the siginfo & fill in most of the ucontext */ |
1004 | if (copy_siginfo_to_user(&rt_sf->info, info) | 1003 | if (copy_siginfo_to_user(&rt_sf->info, &ksig->info) |
1005 | || __put_user(0, &rt_sf->uc.uc_flags) | 1004 | || __put_user(0, &rt_sf->uc.uc_flags) |
1006 | || __save_altstack(&rt_sf->uc.uc_stack, regs->gpr[1]) | 1005 | || __save_altstack(&rt_sf->uc.uc_stack, regs->gpr[1]) |
1007 | || __put_user(to_user_ptr(&rt_sf->uc.uc_mcontext), | 1006 | || __put_user(to_user_ptr(&rt_sf->uc.uc_mcontext), |
@@ -1051,15 +1050,15 @@ int handle_rt_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1051 | 1050 | ||
1052 | /* Fill registers for signal handler */ | 1051 | /* Fill registers for signal handler */ |
1053 | regs->gpr[1] = newsp; | 1052 | regs->gpr[1] = newsp; |
1054 | regs->gpr[3] = sig; | 1053 | regs->gpr[3] = ksig->sig; |
1055 | regs->gpr[4] = (unsigned long) &rt_sf->info; | 1054 | regs->gpr[4] = (unsigned long) &rt_sf->info; |
1056 | regs->gpr[5] = (unsigned long) &rt_sf->uc; | 1055 | regs->gpr[5] = (unsigned long) &rt_sf->uc; |
1057 | regs->gpr[6] = (unsigned long) rt_sf; | 1056 | regs->gpr[6] = (unsigned long) rt_sf; |
1058 | regs->nip = (unsigned long) ka->sa.sa_handler; | 1057 | regs->nip = (unsigned long) ksig->ka.sa.sa_handler; |
1059 | /* enter the signal handler in native-endian mode */ | 1058 | /* enter the signal handler in native-endian mode */ |
1060 | regs->msr &= ~MSR_LE; | 1059 | regs->msr &= ~MSR_LE; |
1061 | regs->msr |= (MSR_KERNEL & MSR_LE); | 1060 | regs->msr |= (MSR_KERNEL & MSR_LE); |
1062 | return 1; | 1061 | return 0; |
1063 | 1062 | ||
1064 | badframe: | 1063 | badframe: |
1065 | if (show_unhandled_signals) | 1064 | if (show_unhandled_signals) |
@@ -1069,8 +1068,7 @@ badframe: | |||
1069 | current->comm, current->pid, | 1068 | current->comm, current->pid, |
1070 | addr, regs->nip, regs->link); | 1069 | addr, regs->nip, regs->link); |
1071 | 1070 | ||
1072 | force_sigsegv(sig, current); | 1071 | return 1; |
1073 | return 0; | ||
1074 | } | 1072 | } |
1075 | 1073 | ||
1076 | static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int sig) | 1074 | static int do_setcontext(struct ucontext __user *ucp, struct pt_regs *regs, int sig) |
@@ -1409,8 +1407,7 @@ int sys_debug_setcontext(struct ucontext __user *ctx, | |||
1409 | /* | 1407 | /* |
1410 | * OK, we're invoking a handler | 1408 | * OK, we're invoking a handler |
1411 | */ | 1409 | */ |
1412 | int handle_signal32(unsigned long sig, struct k_sigaction *ka, | 1410 | int handle_signal32(struct ksignal *ksig, sigset_t *oldset, struct pt_regs *regs) |
1413 | siginfo_t *info, sigset_t *oldset, struct pt_regs *regs) | ||
1414 | { | 1411 | { |
1415 | struct sigcontext __user *sc; | 1412 | struct sigcontext __user *sc; |
1416 | struct sigframe __user *frame; | 1413 | struct sigframe __user *frame; |
@@ -1420,7 +1417,7 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1420 | unsigned long tramp; | 1417 | unsigned long tramp; |
1421 | 1418 | ||
1422 | /* Set up Signal Frame */ | 1419 | /* Set up Signal Frame */ |
1423 | frame = get_sigframe(ka, get_tm_stackpointer(regs), sizeof(*frame), 1); | 1420 | frame = get_sigframe(&ksig->ka, get_tm_stackpointer(regs), sizeof(*frame), 1); |
1424 | if (unlikely(frame == NULL)) | 1421 | if (unlikely(frame == NULL)) |
1425 | goto badframe; | 1422 | goto badframe; |
1426 | sc = (struct sigcontext __user *) &frame->sctx; | 1423 | sc = (struct sigcontext __user *) &frame->sctx; |
@@ -1428,7 +1425,7 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1428 | #if _NSIG != 64 | 1425 | #if _NSIG != 64 |
1429 | #error "Please adjust handle_signal()" | 1426 | #error "Please adjust handle_signal()" |
1430 | #endif | 1427 | #endif |
1431 | if (__put_user(to_user_ptr(ka->sa.sa_handler), &sc->handler) | 1428 | if (__put_user(to_user_ptr(ksig->ka.sa.sa_handler), &sc->handler) |
1432 | || __put_user(oldset->sig[0], &sc->oldmask) | 1429 | || __put_user(oldset->sig[0], &sc->oldmask) |
1433 | #ifdef CONFIG_PPC64 | 1430 | #ifdef CONFIG_PPC64 |
1434 | || __put_user((oldset->sig[0] >> 32), &sc->_unused[3]) | 1431 | || __put_user((oldset->sig[0] >> 32), &sc->_unused[3]) |
@@ -1436,7 +1433,7 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1436 | || __put_user(oldset->sig[1], &sc->_unused[3]) | 1433 | || __put_user(oldset->sig[1], &sc->_unused[3]) |
1437 | #endif | 1434 | #endif |
1438 | || __put_user(to_user_ptr(&frame->mctx), &sc->regs) | 1435 | || __put_user(to_user_ptr(&frame->mctx), &sc->regs) |
1439 | || __put_user(sig, &sc->signal)) | 1436 | || __put_user(ksig->sig, &sc->signal)) |
1440 | goto badframe; | 1437 | goto badframe; |
1441 | 1438 | ||
1442 | if (vdso32_sigtramp && current->mm->context.vdso_base) { | 1439 | if (vdso32_sigtramp && current->mm->context.vdso_base) { |
@@ -1471,12 +1468,12 @@ int handle_signal32(unsigned long sig, struct k_sigaction *ka, | |||
1471 | goto badframe; | 1468 | goto badframe; |
1472 | 1469 | ||
1473 | regs->gpr[1] = newsp; | 1470 | regs->gpr[1] = newsp; |
1474 | regs->gpr[3] = sig; | 1471 | regs->gpr[3] = ksig->sig; |
1475 | regs->gpr[4] = (unsigned long) sc; | 1472 | regs->gpr[4] = (unsigned long) sc; |
1476 | regs->nip = (unsigned long) ka->sa.sa_handler; | 1473 | regs->nip = (unsigned long) (unsigned long)ksig->ka.sa.sa_handler; |
1477 | /* enter the signal handler in big-endian mode */ | 1474 | /* enter the signal handler in big-endian mode */ |
1478 | regs->msr &= ~MSR_LE; | 1475 | regs->msr &= ~MSR_LE; |
1479 | return 1; | 1476 | return 0; |
1480 | 1477 | ||
1481 | badframe: | 1478 | badframe: |
1482 | if (show_unhandled_signals) | 1479 | if (show_unhandled_signals) |
@@ -1486,8 +1483,7 @@ badframe: | |||
1486 | current->comm, current->pid, | 1483 | current->comm, current->pid, |
1487 | frame, regs->nip, regs->link); | 1484 | frame, regs->nip, regs->link); |
1488 | 1485 | ||
1489 | force_sigsegv(sig, current); | 1486 | return 1; |
1490 | return 0; | ||
1491 | } | 1487 | } |
1492 | 1488 | ||
1493 | /* | 1489 | /* |
diff --git a/arch/powerpc/kernel/signal_64.c b/arch/powerpc/kernel/signal_64.c index 97c1e4b683fc..115d11041cf7 100644 --- a/arch/powerpc/kernel/signal_64.c +++ b/arch/powerpc/kernel/signal_64.c | |||
@@ -708,20 +708,19 @@ badframe: | |||
708 | return 0; | 708 | return 0; |
709 | } | 709 | } |
710 | 710 | ||
711 | int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | 711 | int handle_rt_signal64(struct ksignal *ksig, sigset_t *set, struct pt_regs *regs) |
712 | sigset_t *set, struct pt_regs *regs) | ||
713 | { | 712 | { |
714 | struct rt_sigframe __user *frame; | 713 | struct rt_sigframe __user *frame; |
715 | unsigned long newsp = 0; | 714 | unsigned long newsp = 0; |
716 | long err = 0; | 715 | long err = 0; |
717 | 716 | ||
718 | frame = get_sigframe(ka, get_tm_stackpointer(regs), sizeof(*frame), 0); | 717 | frame = get_sigframe(&ksig->ka, get_tm_stackpointer(regs), sizeof(*frame), 0); |
719 | if (unlikely(frame == NULL)) | 718 | if (unlikely(frame == NULL)) |
720 | goto badframe; | 719 | goto badframe; |
721 | 720 | ||
722 | err |= __put_user(&frame->info, &frame->pinfo); | 721 | err |= __put_user(&frame->info, &frame->pinfo); |
723 | err |= __put_user(&frame->uc, &frame->puc); | 722 | err |= __put_user(&frame->uc, &frame->puc); |
724 | err |= copy_siginfo_to_user(&frame->info, info); | 723 | err |= copy_siginfo_to_user(&frame->info, &ksig->info); |
725 | if (err) | 724 | if (err) |
726 | goto badframe; | 725 | goto badframe; |
727 | 726 | ||
@@ -736,15 +735,15 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | |||
736 | err |= __put_user(&frame->uc_transact, &frame->uc.uc_link); | 735 | err |= __put_user(&frame->uc_transact, &frame->uc.uc_link); |
737 | err |= setup_tm_sigcontexts(&frame->uc.uc_mcontext, | 736 | err |= setup_tm_sigcontexts(&frame->uc.uc_mcontext, |
738 | &frame->uc_transact.uc_mcontext, | 737 | &frame->uc_transact.uc_mcontext, |
739 | regs, signr, | 738 | regs, ksig->sig, |
740 | NULL, | 739 | NULL, |
741 | (unsigned long)ka->sa.sa_handler); | 740 | (unsigned long)ksig->ka.sa.sa_handler); |
742 | } else | 741 | } else |
743 | #endif | 742 | #endif |
744 | { | 743 | { |
745 | err |= __put_user(0, &frame->uc.uc_link); | 744 | err |= __put_user(0, &frame->uc.uc_link); |
746 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, signr, | 745 | err |= setup_sigcontext(&frame->uc.uc_mcontext, regs, ksig->sig, |
747 | NULL, (unsigned long)ka->sa.sa_handler, | 746 | NULL, (unsigned long)ksig->ka.sa.sa_handler, |
748 | 1); | 747 | 1); |
749 | } | 748 | } |
750 | err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); | 749 | err |= __copy_to_user(&frame->uc.uc_sigmask, set, sizeof(*set)); |
@@ -770,7 +769,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | |||
770 | 769 | ||
771 | /* Set up "regs" so we "return" to the signal handler. */ | 770 | /* Set up "regs" so we "return" to the signal handler. */ |
772 | if (is_elf2_task()) { | 771 | if (is_elf2_task()) { |
773 | regs->nip = (unsigned long) ka->sa.sa_handler; | 772 | regs->nip = (unsigned long) ksig->ka.sa.sa_handler; |
774 | regs->gpr[12] = regs->nip; | 773 | regs->gpr[12] = regs->nip; |
775 | } else { | 774 | } else { |
776 | /* Handler is *really* a pointer to the function descriptor for | 775 | /* Handler is *really* a pointer to the function descriptor for |
@@ -779,7 +778,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | |||
779 | * entry is the TOC value we need to use. | 778 | * entry is the TOC value we need to use. |
780 | */ | 779 | */ |
781 | func_descr_t __user *funct_desc_ptr = | 780 | func_descr_t __user *funct_desc_ptr = |
782 | (func_descr_t __user *) ka->sa.sa_handler; | 781 | (func_descr_t __user *) ksig->ka.sa.sa_handler; |
783 | 782 | ||
784 | err |= get_user(regs->nip, &funct_desc_ptr->entry); | 783 | err |= get_user(regs->nip, &funct_desc_ptr->entry); |
785 | err |= get_user(regs->gpr[2], &funct_desc_ptr->toc); | 784 | err |= get_user(regs->gpr[2], &funct_desc_ptr->toc); |
@@ -789,9 +788,9 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | |||
789 | regs->msr &= ~MSR_LE; | 788 | regs->msr &= ~MSR_LE; |
790 | regs->msr |= (MSR_KERNEL & MSR_LE); | 789 | regs->msr |= (MSR_KERNEL & MSR_LE); |
791 | regs->gpr[1] = newsp; | 790 | regs->gpr[1] = newsp; |
792 | regs->gpr[3] = signr; | 791 | regs->gpr[3] = ksig->sig; |
793 | regs->result = 0; | 792 | regs->result = 0; |
794 | if (ka->sa.sa_flags & SA_SIGINFO) { | 793 | if (ksig->ka.sa.sa_flags & SA_SIGINFO) { |
795 | err |= get_user(regs->gpr[4], (unsigned long __user *)&frame->pinfo); | 794 | err |= get_user(regs->gpr[4], (unsigned long __user *)&frame->pinfo); |
796 | err |= get_user(regs->gpr[5], (unsigned long __user *)&frame->puc); | 795 | err |= get_user(regs->gpr[5], (unsigned long __user *)&frame->puc); |
797 | regs->gpr[6] = (unsigned long) frame; | 796 | regs->gpr[6] = (unsigned long) frame; |
@@ -801,7 +800,7 @@ int handle_rt_signal64(int signr, struct k_sigaction *ka, siginfo_t *info, | |||
801 | if (err) | 800 | if (err) |
802 | goto badframe; | 801 | goto badframe; |
803 | 802 | ||
804 | return 1; | 803 | return 0; |
805 | 804 | ||
806 | badframe: | 805 | badframe: |
807 | if (show_unhandled_signals) | 806 | if (show_unhandled_signals) |
@@ -809,6 +808,5 @@ badframe: | |||
809 | current->comm, current->pid, "setup_rt_frame", | 808 | current->comm, current->pid, "setup_rt_frame", |
810 | (long)frame, regs->nip, regs->link); | 809 | (long)frame, regs->nip, regs->link); |
811 | 810 | ||
812 | force_sigsegv(signr, current); | 811 | return 1; |
813 | return 0; | ||
814 | } | 812 | } |