Define C structures (struct kernframe, struct trapframe)

for kernel-to-user trapframe.  Use C structs in genassym.cf.
This commit is contained in:
jonathan 1999-02-27 02:54:05 +00:00
parent a76f56098c
commit 63deecd7e6
3 changed files with 62 additions and 54 deletions

View File

@ -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 */

View File

@ -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

View File

@ -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));