Define C structures (struct kernframe, struct trapframe)
for kernel-to-user trapframe. Use C structs in genassym.cf.
This commit is contained in:
parent
a76f56098c
commit
63deecd7e6
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: locore.h,v 1.18 1999/01/15 22:26:42 castor Exp $ */
|
||||
/* $NetBSD: locore.h,v 1.19 1999/02/27 02:54:05 jonathan Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright 1996 The Board of Trustees of The Leland Stanford
|
||||
@ -229,6 +229,32 @@ extern int mips3_L1TwoWayCache;
|
||||
extern int mips3_cacheflush_bug;
|
||||
#endif /* MIPS3 */
|
||||
|
||||
/*
|
||||
* trapframe argument passed to trap()
|
||||
*/
|
||||
struct trapframe {
|
||||
mips_reg_t tf_regs[17];
|
||||
mips_reg_t tf_ra;
|
||||
mips_reg_t tf_sr;
|
||||
mips_reg_t tf_mullo;
|
||||
mips_reg_t tf_mulhi;
|
||||
mips_reg_t tf_epc; /* may be changed by trap() call */
|
||||
};
|
||||
|
||||
/*
|
||||
* Stack frame for kernel traps. four args passed in registers.
|
||||
* A trapframe is pointed to by the 5th arg, and a dummy sixth argument
|
||||
* is used to avoid alignment problems
|
||||
*/
|
||||
|
||||
struct kernframe {
|
||||
register_t cf_args[4 + 1];
|
||||
register_t cf_pad; /* (for 8 word alignment) */
|
||||
register_t cf_sp;
|
||||
register_t cf_ra;
|
||||
struct trapframe cf_frame;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
#endif /* _MIPS_LOCORE_H */
|
||||
|
@ -1,4 +1,4 @@
|
||||
# $NetBSD: genassym.cf,v 1.8 1999/01/31 00:55:42 castor Exp $
|
||||
# $NetBSD: genassym.cf,v 1.9 1999/02/27 02:54:05 jonathan Exp $
|
||||
#
|
||||
# Copyright (c) 1997
|
||||
# Jonathan Stone. All rights reserved.
|
||||
@ -168,48 +168,39 @@ define FRAME_FP29 sizeof(mips_fpreg_t) * 29
|
||||
define FRAME_FP30 sizeof(mips_fpreg_t) * 30
|
||||
define FRAME_FP31 sizeof(mips_fpreg_t) * 31
|
||||
|
||||
#
|
||||
# trapframe synthesized on stack and pointed by 5th arg {
|
||||
# register_t cf_args[4 + 2]; arg0 - arg3 and arg4 and arg5 (ignored)
|
||||
# register_t cf_sp; frame pointer on trap
|
||||
# register_t cf_ra; return address on trap
|
||||
# mips_reg_t tf_regs[17]; - trapframe begin here
|
||||
# mips_reg_t tf_ra; -
|
||||
# mips_reg_t tf_sr; -
|
||||
# mips_reg_t tf_mullo; -
|
||||
# mips_reg_t tf_mulhi; -
|
||||
# mips_reg_t tf_epc; - might be modified prior to return
|
||||
# };
|
||||
|
||||
#define KERNFRAME_SIZ sizeof(struct kernframe)
|
||||
define KERNFRAME_SIZ (sizeof(register_t) * (6 + 2 ) + sizeof(mips_reg_t) * (17 + 5))
|
||||
define KERNFRAME_ARG5 sizeof(register_t) * 4
|
||||
define KERNFRAME_ARG6 sizeof(register_t) * 5
|
||||
define KERNFRAME_SP sizeof(register_t) * 6
|
||||
define KERNFRAME_RA sizeof(register_t) * 7
|
||||
define TF_BASE sizeof(register_t) * 8
|
||||
define TF_REG_AST sizeof(mips_reg_t) * 0
|
||||
define TF_REG_V0 sizeof(mips_reg_t) * 1
|
||||
define TF_REG_V1 sizeof(mips_reg_t) * 2
|
||||
define TF_REG_A0 sizeof(mips_reg_t) * 3
|
||||
define TF_REG_A1 sizeof(mips_reg_t) * 4
|
||||
define TF_REG_A2 sizeof(mips_reg_t) * 5
|
||||
define TF_REG_A3 sizeof(mips_reg_t) * 6
|
||||
define TF_REG_T0 sizeof(mips_reg_t) * 7
|
||||
define TF_REG_T1 sizeof(mips_reg_t) * 8
|
||||
define TF_REG_T2 sizeof(mips_reg_t) * 9
|
||||
define TF_REG_T3 sizeof(mips_reg_t) * 10
|
||||
define TF_REG_T4 sizeof(mips_reg_t) * 11
|
||||
define TF_REG_T5 sizeof(mips_reg_t) * 12
|
||||
define TF_REG_T6 sizeof(mips_reg_t) * 13
|
||||
define TF_REG_T7 sizeof(mips_reg_t) * 14
|
||||
define TF_REG_T8 sizeof(mips_reg_t) * 15
|
||||
define TF_REG_T9 sizeof(mips_reg_t) * 16
|
||||
define TF_REG_RA sizeof(mips_reg_t) * 17
|
||||
define TF_REG_SR sizeof(mips_reg_t) * 18
|
||||
define TF_REG_MULLO sizeof(mips_reg_t) * 19
|
||||
define TF_REG_MULHI sizeof(mips_reg_t) * 20
|
||||
define TF_REG_EPC sizeof(mips_reg_t) * 21
|
||||
#define KERNFRAME_SIZ (sizeof(register_t) * (6 + 2 ) + sizeof(mips_reg_t) * (17 + 5))
|
||||
define KERNFRAME_SIZ sizeof(struct kernframe)
|
||||
define KERNFRAME_ARG5 offsetof(struct kernframe, cf_args[4])
|
||||
define KERNFRAME_ARG6 offsetof(struct kernframe, cf_args[5])
|
||||
define KERNFRAME_SP offsetof(struct kernframe, cf_sp)
|
||||
define KERNFRAME_RA offsetof(struct kernframe, cf_ra)
|
||||
|
||||
# offset of trapframe in struct kernframe
|
||||
define TF_BASE offsetof(struct kernframe, cf_frame)
|
||||
|
||||
define TF_REG_AST offsetof(struct trapframe, tf_regs[0])
|
||||
define TF_REG_V0 offsetof(struct trapframe, tf_regs[1])
|
||||
define TF_REG_V1 offsetof(struct trapframe, tf_regs[2])
|
||||
define TF_REG_A0 offsetof(struct trapframe, tf_regs[3])
|
||||
define TF_REG_A1 offsetof(struct trapframe, tf_regs[4])
|
||||
define TF_REG_A2 offsetof(struct trapframe, tf_regs[5])
|
||||
define TF_REG_A3 offsetof(struct trapframe, tf_regs[6])
|
||||
define TF_REG_T0 offsetof(struct trapframe, tf_regs[7])
|
||||
define TF_REG_T1 offsetof(struct trapframe, tf_regs[8])
|
||||
define TF_REG_T2 offsetof(struct trapframe, tf_regs[9])
|
||||
define TF_REG_T3 offsetof(struct trapframe, tf_regs[10])
|
||||
define TF_REG_T4 offsetof(struct trapframe, tf_regs[11])
|
||||
define TF_REG_T5 offsetof(struct trapframe, tf_regs[12])
|
||||
define TF_REG_T6 offsetof(struct trapframe, tf_regs[13])
|
||||
define TF_REG_T7 offsetof(struct trapframe, tf_regs[14])
|
||||
define TF_REG_T8 offsetof(struct trapframe, tf_regs[15])
|
||||
define TF_REG_T9 offsetof(struct trapframe, tf_regs[16])
|
||||
define TF_REG_RA offsetof(struct trapframe, tf_ra)
|
||||
define TF_REG_SR offsetof(struct trapframe, tf_sr)
|
||||
define TF_REG_MULLO offsetof(struct trapframe, tf_mullo)
|
||||
define TF_REG_MULHI offsetof(struct trapframe, tf_mulhi)
|
||||
define TF_REG_EPC offsetof(struct trapframe, tf_epc)
|
||||
|
||||
define CTXSWFRAME_SIZ sizeof(mips_reg_t) * 12
|
||||
define SF_REG_ST sizeof(mips_reg_t) * 11
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* $NetBSD: trap.c,v 1.102 1999/01/29 02:18:42 nisimura Exp $ */
|
||||
/* $NetBSD: trap.c,v 1.103 1999/02/27 02:54:05 jonathan Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1988 University of Utah.
|
||||
@ -43,7 +43,7 @@
|
||||
*/
|
||||
|
||||
#include <sys/cdefs.h> /* RCS ID & Copyright macro defns */
|
||||
__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.102 1999/01/29 02:18:42 nisimura Exp $");
|
||||
__KERNEL_RCSID(0, "$NetBSD: trap.c,v 1.103 1999/02/27 02:54:05 jonathan Exp $");
|
||||
|
||||
#include "opt_cputype.h" /* which mips CPU levels do we support? */
|
||||
#include "opt_inet.h"
|
||||
@ -168,15 +168,6 @@ const char *trap_type[] = {
|
||||
"r4000 virtual coherency data",
|
||||
};
|
||||
|
||||
struct trapframe {
|
||||
mips_reg_t tf_regs[17];
|
||||
mips_reg_t tf_ra;
|
||||
mips_reg_t tf_sr;
|
||||
mips_reg_t tf_mullo;
|
||||
mips_reg_t tf_mulhi;
|
||||
mips_reg_t tf_epc;
|
||||
};
|
||||
|
||||
void userret __P((struct proc *, unsigned, u_quad_t));
|
||||
void trap __P((unsigned, unsigned, unsigned, unsigned, struct trapframe *));
|
||||
void syscall __P((unsigned, unsigned, unsigned));
|
||||
|
Loading…
x
Reference in New Issue
Block a user