Adjust for <m86k/m68k/trap_subr.s>
This commit is contained in:
parent
6a00a9aa75
commit
1b1a15a81f
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: locore.s,v 1.21 1997/04/13 02:45:20 thorpej Exp $ */
|
||||
/* $NetBSD: locore.s,v 1.22 1997/04/25 01:42:51 thorpej Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
|
@ -43,6 +43,7 @@
|
|||
*/
|
||||
|
||||
#include "assym.h"
|
||||
#include <machine/asm.h>
|
||||
#include <machine/trap.h>
|
||||
|
||||
/*
|
||||
|
@ -401,6 +402,7 @@ _proc_trampoline:
|
|||
/*
|
||||
* Trap/interrupt vector routines
|
||||
*/
|
||||
#include <m68k/m68k/trap_subr.s>
|
||||
|
||||
.text
|
||||
.globl _trap, _nofault, _longjmp
|
||||
|
@ -521,35 +523,15 @@ Lmightnotbemerr:
|
|||
jeq Lisberr1 | yes, was not WPE, must be bus err
|
||||
Lismerr:
|
||||
movl #T_MMUFLT,sp@- | show that we are an MMU fault
|
||||
jra Ltrapnstkadj | and deal with it
|
||||
jra _ASM_LABEL(faultstkadj) | and deal with it
|
||||
Lisaerr:
|
||||
movl #T_ADDRERR,sp@- | mark address error
|
||||
jra Ltrapnstkadj | and deal with it
|
||||
jra _ASM_LABEL(faultstkadj) | and deal with it
|
||||
Lisberr1:
|
||||
clrw sp@ | re-clear pad word
|
||||
Lisberr:
|
||||
movl #T_BUSERR,sp@- | mark bus error
|
||||
Ltrapnstkadj:
|
||||
jbsr _trap | handle the error
|
||||
lea sp@(12),sp | pop value args
|
||||
movl sp@(FR_SP),a0 | restore user SP
|
||||
movl a0,usp | from save area
|
||||
movw sp@(FR_ADJ),d0 | need to adjust stack?
|
||||
jne Lstkadj | yes, go to it
|
||||
moveml sp@+,#0x7FFF | no, restore most user regs
|
||||
addql #8,sp | toss SSP and stkadj
|
||||
jra rei | all done
|
||||
Lstkadj:
|
||||
lea sp@(FR_HW),a1 | pointer to HW frame
|
||||
addql #8,a1 | source pointer
|
||||
movl a1,a0 | source
|
||||
addw d0,a0 | + hole size = dest pointer
|
||||
movl a1@-,a0@- | copy
|
||||
movl a1@-,a0@- | 8 bytes
|
||||
movl a0,sp@(FR_SP) | new SSP
|
||||
moveml sp@+,#0x7FFF | restore user registers
|
||||
movl sp@,sp | and our SP
|
||||
jra rei | all done
|
||||
jra _ASM_LABEL(faultstkadj) | and deal with it
|
||||
|
||||
/*
|
||||
* FP exceptions.
|
||||
|
@ -614,84 +596,15 @@ Lfptnull:
|
|||
fmovem fpsr,sp@- | push fpsr as code argument
|
||||
frestore a0@ | restore state
|
||||
movl #T_FPERR,sp@- | push type arg
|
||||
jra Ltrapnstkadj | call trap and deal with stack cleanup
|
||||
jra _ASM_LABEL(faultstkadj) | call trap and deal with stack cleanup
|
||||
#else
|
||||
jra _badtrap | treat as an unexpected trap
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Coprocessor and format errors can generate mid-instruction stack
|
||||
* frames and cause signal delivery hence we need to check for potential
|
||||
* stack adjustment.
|
||||
*/
|
||||
_coperr:
|
||||
clrl sp@- | stack adjust count
|
||||
moveml #0xFFFF,sp@-
|
||||
movl usp,a0 | get and save
|
||||
movl a0,sp@(FR_SP) | the user stack pointer
|
||||
clrl sp@- | no VA arg
|
||||
clrl sp@- | or code arg
|
||||
movl #T_COPERR,sp@- | push trap type
|
||||
jra Ltrapnstkadj | call trap and deal with stack adjustments
|
||||
|
||||
_fmterr:
|
||||
clrl sp@- | stack adjust count
|
||||
moveml #0xFFFF,sp@-
|
||||
movl usp,a0 | get and save
|
||||
movl a0,sp@(FR_SP) | the user stack pointer
|
||||
clrl sp@- | no VA arg
|
||||
clrl sp@- | or code arg
|
||||
movl #T_FMTERR,sp@- | push trap type
|
||||
jra Ltrapnstkadj | call trap and deal with stack adjustments
|
||||
|
||||
/*
|
||||
* Other exceptions only cause four and six word stack frame and require
|
||||
* no post-trap stack adjustment.
|
||||
*/
|
||||
_illinst:
|
||||
clrl sp@-
|
||||
moveml #0xFFFF,sp@-
|
||||
moveq #T_ILLINST,d0
|
||||
jra fault
|
||||
|
||||
_zerodiv:
|
||||
clrl sp@-
|
||||
moveml #0xFFFF,sp@-
|
||||
moveq #T_ZERODIV,d0
|
||||
jra fault
|
||||
|
||||
_chkinst:
|
||||
clrl sp@-
|
||||
moveml #0xFFFF,sp@-
|
||||
moveq #T_CHKINST,d0
|
||||
jra fault
|
||||
|
||||
_trapvinst:
|
||||
clrl sp@-
|
||||
moveml #0xFFFF,sp@-
|
||||
moveq #T_TRAPVINST,d0
|
||||
jra fault
|
||||
|
||||
_privinst:
|
||||
clrl sp@-
|
||||
moveml #0xFFFF,sp@-
|
||||
moveq #T_PRIVINST,d0
|
||||
jra fault
|
||||
|
||||
.globl fault
|
||||
fault:
|
||||
movl usp,a0 | get and save
|
||||
movl a0,sp@(FR_SP) | the user stack pointer
|
||||
clrl sp@- | no VA arg
|
||||
clrl sp@- | or code arg
|
||||
movl d0,sp@- | push trap type
|
||||
jbsr _trap | handle trap
|
||||
lea sp@(12),sp | pop value args
|
||||
movl sp@(FR_SP),a0 | restore
|
||||
movl a0,usp | user SP
|
||||
moveml sp@+,#0x7FFF | restore most user regs
|
||||
addql #8,sp | pop SP and stack adjust
|
||||
jra rei | all done
|
||||
|
||||
.globl _straytrap
|
||||
_badtrap:
|
||||
|
@ -997,8 +910,6 @@ Ldorte:
|
|||
* Primitives
|
||||
*/
|
||||
|
||||
#include <machine/asm.h>
|
||||
|
||||
/*
|
||||
* Use common m68k support routines.
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue