aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/traps.c
diff options
context:
space:
mode:
Diffstat (limited to 'arch/ia64/kernel/traps.c')
-rw-r--r--arch/ia64/kernel/traps.c18
1 files changed, 0 insertions, 18 deletions
diff --git a/arch/ia64/kernel/traps.c b/arch/ia64/kernel/traps.c
index fba5fdd1f968..d3e0ecb56d62 100644
--- a/arch/ia64/kernel/traps.c
+++ b/arch/ia64/kernel/traps.c
@@ -132,24 +132,6 @@ __kprobes ia64_bad_break (unsigned long break_num, struct pt_regs *regs)
132 siginfo_t siginfo; 132 siginfo_t siginfo;
133 int sig, code; 133 int sig, code;
134 134
135 /* break.b always sets cr.iim to 0, which causes problems for
136 * debuggers. Get the real break number from the original instruction,
137 * but only for kernel code. User space break.b is left alone, to
138 * preserve the existing behaviour. All break codings have the same
139 * format, so there is no need to check the slot type.
140 */
141 if (break_num == 0 && !user_mode(regs)) {
142 struct ia64_psr *ipsr = ia64_psr(regs);
143 unsigned long *bundle = (unsigned long *)regs->cr_iip;
144 unsigned long slot;
145 switch (ipsr->ri) {
146 case 0: slot = (bundle[0] >> 5); break;
147 case 1: slot = (bundle[0] >> 46) | (bundle[1] << 18); break;
148 default: slot = (bundle[1] >> 23); break;
149 }
150 break_num = ((slot >> 36 & 1) << 20) | (slot >> 6 & 0xfffff);
151 }
152
153 /* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */ 135 /* SIGILL, SIGFPE, SIGSEGV, and SIGBUS want these field initialized: */
154 siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri); 136 siginfo.si_addr = (void __user *) (regs->cr_iip + ia64_psr(regs)->ri);
155 siginfo.si_imm = break_num; 137 siginfo.si_imm = break_num;