Add support for splitting the register windows on entry to the

kernel from usermode.  The remaining user windows are spilled
to the pcb as necessary.  The user land window fault handlers
fill directly from the pcb on return.
Add system call entry points.

Submitted by:	tmm
This commit is contained in:
Jake Burkholder 2001-08-20 23:40:31 +00:00
parent b3ef0bf465
commit e2aceedd5a
4 changed files with 1115 additions and 403 deletions

View File

@ -71,6 +71,16 @@ struct frame {
#define f_fp f_in[6]
#define f_pc f_in[7]
/*
* Frame used for pcb_wscratch.
*/
struct wsframe {
u_long wsf_local[8];
u_long wsf_in[8];
u_long wsf_sp;
u_long wsf_inuse;
};
int kdb_trap(struct trapframe *tf);
#endif /* !_MACHINE_FRAME_H_ */

View File

@ -30,14 +30,28 @@
#define _MACHINE_PCB_H_
#include <machine/fp.h>
#include <machine/pstate.h>
#include <machine/frame.h>
/*
* XXX: MAXWIN should probably be done dynamically, pcb_wscratch is therefore
* at the end of the pcb.
*/
#define MAXWIN 8
/* Used in pcb_fcwp to mark the wscratch stack as empty. */
#define PCB_CWP_EMPTY 0xff
/* NOTE: pcb_fpstate must be aligned on a 64 byte boundary. */
struct pcb {
struct fpstate pcb_fpstate;
u_long pcb_fp;
u_long pcb_pc;
u_long pcb_y;
caddr_t pcb_onfault;
u_long pcb_inwinop;
u_long pcb_cwp;
u_long pcb_ws_inuse;
struct wsframe pcb_wscratch[MAXWIN];
};
struct md_coredump {

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff