|
@@ -431,7 +431,7 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
|
|
/* Fall through */
|
|
/* Fall through */
|
|
case jr_op:
|
|
case jr_op:
|
|
if (NO_R6EMU && insn.r_format.func == jr_op)
|
|
if (NO_R6EMU && insn.r_format.func == jr_op)
|
|
- goto sigill_r6;
|
|
|
|
|
|
+ goto sigill_r2r6;
|
|
regs->cp0_epc = regs->regs[insn.r_format.rs];
|
|
regs->cp0_epc = regs->regs[insn.r_format.rs];
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
@@ -446,7 +446,7 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
|
|
switch (insn.i_format.rt) {
|
|
switch (insn.i_format.rt) {
|
|
case bltzl_op:
|
|
case bltzl_op:
|
|
if (NO_R6EMU)
|
|
if (NO_R6EMU)
|
|
- goto sigill_r6;
|
|
|
|
|
|
+ goto sigill_r2r6;
|
|
case bltz_op:
|
|
case bltz_op:
|
|
if ((long)regs->regs[insn.i_format.rs] < 0) {
|
|
if ((long)regs->regs[insn.i_format.rs] < 0) {
|
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
|
@@ -459,7 +459,7 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
|
|
|
|
|
|
case bgezl_op:
|
|
case bgezl_op:
|
|
if (NO_R6EMU)
|
|
if (NO_R6EMU)
|
|
- goto sigill_r6;
|
|
|
|
|
|
+ goto sigill_r2r6;
|
|
case bgez_op:
|
|
case bgez_op:
|
|
if ((long)regs->regs[insn.i_format.rs] >= 0) {
|
|
if ((long)regs->regs[insn.i_format.rs] >= 0) {
|
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
|
epc = epc + 4 + (insn.i_format.simmediate << 2);
|
|
@@ -574,7 +574,7 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
|
|
*/
|
|
*/
|
|
case beql_op:
|
|
case beql_op:
|
|
if (NO_R6EMU)
|
|
if (NO_R6EMU)
|
|
- goto sigill_r6;
|
|
|
|
|
|
+ goto sigill_r2r6;
|
|
case beq_op:
|
|
case beq_op:
|
|
if (regs->regs[insn.i_format.rs] ==
|
|
if (regs->regs[insn.i_format.rs] ==
|
|
regs->regs[insn.i_format.rt]) {
|
|
regs->regs[insn.i_format.rt]) {
|
|
@@ -588,7 +588,7 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
|
|
|
|
|
|
case bnel_op:
|
|
case bnel_op:
|
|
if (NO_R6EMU)
|
|
if (NO_R6EMU)
|
|
- goto sigill_r6;
|
|
|
|
|
|
+ goto sigill_r2r6;
|
|
case bne_op:
|
|
case bne_op:
|
|
if (regs->regs[insn.i_format.rs] !=
|
|
if (regs->regs[insn.i_format.rs] !=
|
|
regs->regs[insn.i_format.rt]) {
|
|
regs->regs[insn.i_format.rt]) {
|
|
@@ -602,7 +602,7 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
|
|
|
|
|
|
case blezl_op: /* not really i_format */
|
|
case blezl_op: /* not really i_format */
|
|
if (!insn.i_format.rt && NO_R6EMU)
|
|
if (!insn.i_format.rt && NO_R6EMU)
|
|
- goto sigill_r6;
|
|
|
|
|
|
+ goto sigill_r2r6;
|
|
case blez_op:
|
|
case blez_op:
|
|
/*
|
|
/*
|
|
* Compact branches for R6 for the
|
|
* Compact branches for R6 for the
|
|
@@ -637,7 +637,7 @@ int __compute_return_epc_for_insn(struct pt_regs *regs,
|
|
|
|
|
|
case bgtzl_op:
|
|
case bgtzl_op:
|
|
if (!insn.i_format.rt && NO_R6EMU)
|
|
if (!insn.i_format.rt && NO_R6EMU)
|
|
- goto sigill_r6;
|
|
|
|
|
|
+ goto sigill_r2r6;
|
|
case bgtz_op:
|
|
case bgtz_op:
|
|
/*
|
|
/*
|
|
* Compact branches for R6 for the
|
|
* Compact branches for R6 for the
|
|
@@ -836,7 +836,7 @@ sigill_dsp:
|
|
current->comm);
|
|
current->comm);
|
|
force_sig(SIGILL, current);
|
|
force_sig(SIGILL, current);
|
|
return -EFAULT;
|
|
return -EFAULT;
|
|
-sigill_r6:
|
|
|
|
|
|
+sigill_r2r6:
|
|
pr_info("%s: R2 branch but r2-to-r6 emulator is not preset - sending SIGILL.\n",
|
|
pr_info("%s: R2 branch but r2-to-r6 emulator is not preset - sending SIGILL.\n",
|
|
current->comm);
|
|
current->comm);
|
|
force_sig(SIGILL, current);
|
|
force_sig(SIGILL, current);
|