Lines Matching +full:1 +full:- +full:5

1 // SPDX-License-Identifier: GPL-2.0
33 /* Work-around for some SRMs which mishandle opDEC faults. */
42 " br $16, 1f\n" in opDEC_check()
50 "1: lda $17, 3\n" in opDEC_check()
52 /* With that in place, the fault from the round-to-minf fp in opDEC_check()
60 : "$0", "$1", "$16", "$17", "$22", "$23", "$24", "$25"); in opDEC_check()
70 regs->pc, regs->r26, regs->ps, print_tainted()); in dik_show_regs()
71 printk("pc is at %pSR\n", (void *)regs->pc); in dik_show_regs()
72 printk("ra is at %pSR\n", (void *)regs->r26); in dik_show_regs()
74 regs->r0, regs->r1, regs->r2); in dik_show_regs()
76 regs->r3, regs->r4, regs->r5); in dik_show_regs()
78 regs->r6, regs->r7, regs->r8); in dik_show_regs()
89 regs->r16, regs->r17, regs->r18); in dik_show_regs()
91 regs->r19, regs->r20, regs->r21); in dik_show_regs()
93 regs->r22, regs->r23, regs->r24); in dik_show_regs()
95 regs->r25, regs->r27, regs->r28); in dik_show_regs()
96 printk("gp = %016lx sp = %p\n", regs->gp, regs+1); in dik_show_regs()
115 for (i = -6; i < 2; i++) { in dik_show_code()
160 if (((long) stack & (THREAD_SIZE-1)) == 0) in show_stack()
178 if (regs->ps & 8) in die_if_kernel()
183 printk("%s(%d): %s %ld\n", current->comm, task_pid_nr(current), str, err); in die_if_kernel()
186 dik_show_trace((unsigned long *)(regs+1), KERN_DEFAULT); in die_if_kernel()
187 dik_show_code((unsigned int *)regs->pc); in die_if_kernel()
192 while (1); in die_if_kernel()
216 if (summary & 1) { in do_entArith()
217 /* Software-completion summary bit is set, so try to in do_entArith()
221 si_code = alpha_fp_emul(regs->pc - 4); in do_entArith()
229 send_sig_fault_trapno(SIGFPE, si_code, (void __user *) regs->pc, 0, current); in do_entArith()
247 current_thread_info()->pcb.flags |= 1; in do_entIF()
248 __reload_thread(&current_thread_info()->pcb); in do_entIF()
252 if (type == 1) { in do_entIF()
254 = (const unsigned int *) regs->pc; in do_entIF()
256 (const char *)(data[1] | (long)data[2] << 32), in do_entIF()
265 = (unsigned int *) regs->pc - 1; in do_entIF()
269 regs->r0 = 0; in do_entIF()
274 die_if_kernel((type == 1 ? "Kernel Bug" : "Instruction fault"), in do_entIF()
281 regs->pc -= 4; /* make pc point to former bpt */ in do_entIF()
284 send_sig_fault(SIGTRAP, TRAP_BRKPT, (void __user *)regs->pc, in do_entIF()
288 case 1: /* bugcheck */ in do_entIF()
290 (void __user *) regs->pc, 0, current); in do_entIF()
294 switch ((long) regs->r16) { in do_entIF()
351 send_sig_fault_trapno(signo, code, (void __user *) regs->pc, in do_entIF()
352 regs->r16, current); in do_entIF()
360 the opDEC properly - they return the PC of the in do_entIF()
367 regs->pc += opDEC_fix; in do_entIF()
372 si_code = alpha_fp_emul(regs->pc - 4); in do_entIF()
377 (void __user *) regs->pc, in do_entIF()
384 case 5: /* illoc */ in do_entIF()
385 default: /* unexpected instruction-fault type */ in do_entIF()
389 send_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc, current); in do_entIF()
404 force_sig_fault(SIGILL, ILL_ILLOPC, (void __user *)regs->pc); in do_entDbg()
411 * fp-regs), and it needs to have them in order for simpler access.
413 * Due to the non-standard register layout (and because we don't want
414 * to handle floating-point regs), user-mode unaligned accesses are
418 * on a gp-register unaligned load/store, something is _very_ wrong
440 unsigned long pc = regs->pc - 4; in do_entUna()
441 unsigned long *_regs = regs->regs; in do_entUna()
455 "1: ldq_u %1,0(%3)\n" in do_entUna()
456 "2: ldq_u %2,1(%3)\n" in do_entUna()
457 " extwl %1,%3,%1\n" in do_entUna()
460 EXC(1b,3b,%1,%0) in do_entUna()
471 "1: ldq_u %1,0(%3)\n" in do_entUna()
473 " extll %1,%3,%1\n" in do_entUna()
476 EXC(1b,3b,%1,%0) in do_entUna()
487 "1: ldq_u %1,0(%3)\n" in do_entUna()
489 " extql %1,%3,%1\n" in do_entUna()
492 EXC(1b,3b,%1,%0) in do_entUna()
506 "1: ldq_u %2,1(%5)\n" in do_entUna()
507 "2: ldq_u %1,0(%5)\n" in do_entUna()
508 " inswh %6,%5,%4\n" in do_entUna()
509 " inswl %6,%5,%3\n" in do_entUna()
510 " mskwh %2,%5,%2\n" in do_entUna()
511 " mskwl %1,%5,%1\n" in do_entUna()
513 " or %1,%3,%1\n" in do_entUna()
514 "3: stq_u %2,1(%5)\n" in do_entUna()
515 "4: stq_u %1,0(%5)\n" in do_entUna()
516 "5:\n" in do_entUna()
517 EXC(1b,5b,%2,%0) in do_entUna()
518 EXC(2b,5b,%1,%0) in do_entUna()
519 EXC(3b,5b,$31,%0) in do_entUna()
520 EXC(4b,5b,$31,%0) in do_entUna()
530 "1: ldq_u %2,3(%5)\n" in do_entUna()
531 "2: ldq_u %1,0(%5)\n" in do_entUna()
532 " inslh %6,%5,%4\n" in do_entUna()
533 " insll %6,%5,%3\n" in do_entUna()
534 " msklh %2,%5,%2\n" in do_entUna()
535 " mskll %1,%5,%1\n" in do_entUna()
537 " or %1,%3,%1\n" in do_entUna()
538 "3: stq_u %2,3(%5)\n" in do_entUna()
539 "4: stq_u %1,0(%5)\n" in do_entUna()
540 "5:\n" in do_entUna()
541 EXC(1b,5b,%2,%0) in do_entUna()
542 EXC(2b,5b,%1,%0) in do_entUna()
543 EXC(3b,5b,$31,%0) in do_entUna()
544 EXC(4b,5b,$31,%0) in do_entUna()
554 "1: ldq_u %2,7(%5)\n" in do_entUna()
555 "2: ldq_u %1,0(%5)\n" in do_entUna()
556 " insqh %6,%5,%4\n" in do_entUna()
557 " insql %6,%5,%3\n" in do_entUna()
558 " mskqh %2,%5,%2\n" in do_entUna()
559 " mskql %1,%5,%1\n" in do_entUna()
561 " or %1,%3,%1\n" in do_entUna()
562 "3: stq_u %2,7(%5)\n" in do_entUna()
563 "4: stq_u %1,0(%5)\n" in do_entUna()
564 "5:\n" in do_entUna()
565 EXC(1b,5b,%2,%0) in do_entUna()
566 EXC(2b,5b,%1,%0) in do_entUna()
567 EXC(3b,5b,$31,%0) in do_entUna()
568 EXC(4b,5b,$31,%0) in do_entUna()
591 regs->pc = newpc; in do_entUna()
601 current->comm, task_pid_nr(current)); in do_entUna()
604 pc, una_reg(26), regs->ps); in do_entUna()
606 una_reg(0), una_reg(1), una_reg(2)); in do_entUna()
608 una_reg(3), una_reg(4), una_reg(5)); in do_entUna()
624 printk("gp = %016lx sp = %p\n", regs->gp, regs+1); in do_entUna()
627 dik_show_trace((unsigned long *)(regs+1), KERN_DEFAULT); in do_entUna()
632 while (1); in do_entUna()
638 * Convert an s-floating point value in memory format to the
640 * needs to be remapped to preserve non-finite values
641 * (infinities, not-a-numbers, denormals).
668 * Convert an s-floating point value in register format to the
674 return ((s_reg >> 62) << 30) | ((s_reg << 5) >> 34); in s_reg_to_mem()
678 * Handle user-level unaligned fault. Handling user-level unaligned
687 * particular, load-linked/store-conditionally and floating point
697 #define OP_INT_MASK ( 1L << 0x28 | 1L << 0x2c /* ldl stl */ \
698 | 1L << 0x29 | 1L << 0x2d /* ldq stq */ \
699 | 1L << 0x0c | 1L << 0x0d /* ldwu stw */ \
700 | 1L << 0x0a | 1L << 0x0e ) /* ldbu stb */
702 #define OP_WRITE_MASK ( 1L << 0x26 | 1L << 0x27 /* sts stt */ \
703 | 1L << 0x2c | 1L << 0x2d /* stl stq */ \
704 | 1L << 0x0d | 1L << 0x0e ) /* stw stb */
706 #define R(x) ((size_t) &((struct pt_regs *)0)->x)
711 -56, -48, -40, -32, -24, -16, -8,
724 static DEFINE_RATELIMIT_STATE(ratelimit, 5 * HZ, 5); in do_entUnaUser()
734 if (!(current_thread_info()->status & TS_UAC_NOPRINT)) { in do_entUnaUser()
737 current->comm, task_pid_nr(current), in do_entUnaUser()
738 regs->pc - 4, va, opcode, reg); in do_entUnaUser()
741 if ((current_thread_info()->status & TS_UAC_SIGBUS)) in do_entUnaUser()
744 if ((current_thread_info()->status & TS_UAC_NOFIX)) in do_entUnaUser()
753 ++unaligned[1].count; in do_entUnaUser()
754 unaligned[1].va = (unsigned long)va; in do_entUnaUser()
755 unaligned[1].pc = regs->pc - 4; in do_entUnaUser()
757 if ((1L << opcode) & OP_INT_MASK) { in do_entUnaUser()
778 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
779 "2: ldq_u %2,1(%3)\n" in do_entUnaUser()
780 " extwl %1,%3,%1\n" in do_entUnaUser()
783 EXC(1b,3b,%1,%0) in do_entUnaUser()
794 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
796 " extll %1,%3,%1\n" in do_entUnaUser()
799 EXC(1b,3b,%1,%0) in do_entUnaUser()
810 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
812 " extql %1,%3,%1\n" in do_entUnaUser()
815 EXC(1b,3b,%1,%0) in do_entUnaUser()
826 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
828 " extll %1,%3,%1\n" in do_entUnaUser()
831 EXC(1b,3b,%1,%0) in do_entUnaUser()
842 "1: ldq_u %1,0(%3)\n" in do_entUnaUser()
844 " extql %1,%3,%1\n" in do_entUnaUser()
847 EXC(1b,3b,%1,%0) in do_entUnaUser()
861 "1: ldq_u %2,1(%5)\n" in do_entUnaUser()
862 "2: ldq_u %1,0(%5)\n" in do_entUnaUser()
863 " inswh %6,%5,%4\n" in do_entUnaUser()
864 " inswl %6,%5,%3\n" in do_entUnaUser()
865 " mskwh %2,%5,%2\n" in do_entUnaUser()
866 " mskwl %1,%5,%1\n" in do_entUnaUser()
868 " or %1,%3,%1\n" in do_entUnaUser()
869 "3: stq_u %2,1(%5)\n" in do_entUnaUser()
870 "4: stq_u %1,0(%5)\n" in do_entUnaUser()
871 "5:\n" in do_entUnaUser()
872 EXC(1b,5b,%2,%0) in do_entUnaUser()
873 EXC(2b,5b,%1,%0) in do_entUnaUser()
874 EXC(3b,5b,$31,%0) in do_entUnaUser()
875 EXC(4b,5b,$31,%0) in do_entUnaUser()
889 "1: ldq_u %2,3(%5)\n" in do_entUnaUser()
890 "2: ldq_u %1,0(%5)\n" in do_entUnaUser()
891 " inslh %6,%5,%4\n" in do_entUnaUser()
892 " insll %6,%5,%3\n" in do_entUnaUser()
893 " msklh %2,%5,%2\n" in do_entUnaUser()
894 " mskll %1,%5,%1\n" in do_entUnaUser()
896 " or %1,%3,%1\n" in do_entUnaUser()
897 "3: stq_u %2,3(%5)\n" in do_entUnaUser()
898 "4: stq_u %1,0(%5)\n" in do_entUnaUser()
899 "5:\n" in do_entUnaUser()
900 EXC(1b,5b,%2,%0) in do_entUnaUser()
901 EXC(2b,5b,%1,%0) in do_entUnaUser()
902 EXC(3b,5b,$31,%0) in do_entUnaUser()
903 EXC(4b,5b,$31,%0) in do_entUnaUser()
917 "1: ldq_u %2,7(%5)\n" in do_entUnaUser()
918 "2: ldq_u %1,0(%5)\n" in do_entUnaUser()
919 " insqh %6,%5,%4\n" in do_entUnaUser()
920 " insql %6,%5,%3\n" in do_entUnaUser()
921 " mskqh %2,%5,%2\n" in do_entUnaUser()
922 " mskql %1,%5,%1\n" in do_entUnaUser()
924 " or %1,%3,%1\n" in do_entUnaUser()
925 "3: stq_u %2,7(%5)\n" in do_entUnaUser()
926 "4: stq_u %1,0(%5)\n" in do_entUnaUser()
927 "5:\n" in do_entUnaUser()
928 EXC(1b,5b,%2,%0) in do_entUnaUser()
929 EXC(2b,5b,%1,%0) in do_entUnaUser()
930 EXC(3b,5b,$31,%0) in do_entUnaUser()
931 EXC(4b,5b,$31,%0) in do_entUnaUser()
950 regs->pc -= 4; /* make pc point to faulting insn */ in do_entUnaUser()
958 struct mm_struct *mm = current->mm; in do_entUnaUser()
970 regs->pc -= 4; in do_entUnaUser()
978 /* Tell PAL-code what global pointer we want in the kernel. */ in trap_init()
987 wrent(entArith, 1); in trap_init()
991 wrent(entSys, 5); in trap_init()