From 63deecd7e6135afbeef1ef4a8b3c6b0cf5c83f11 Mon Sep 17 00:00:00 2001 From: jonathan Date: Sat, 27 Feb 1999 02:54:05 +0000 Subject: [PATCH] Define C structures (struct kernframe, struct trapframe) for kernel-to-user trapframe. Use C structs in genassym.cf. --- sys/arch/mips/include/locore.h | 28 ++++++++++++- sys/arch/mips/mips/genassym.cf | 75 +++++++++++++++------------------- sys/arch/mips/mips/trap.c | 13 +----- 3 files changed, 62 insertions(+), 54 deletions(-) diff --git a/sys/arch/mips/include/locore.h b/sys/arch/mips/include/locore.h index 5658e9f85bd8..1cd087cabd45 100644 --- a/sys/arch/mips/include/locore.h +++ b/sys/arch/mips/include/locore.h @@ -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 */ diff --git a/sys/arch/mips/mips/genassym.cf b/sys/arch/mips/mips/genassym.cf index 7a2d120f7b1b..1e6fa81d7e2b 100644 --- a/sys/arch/mips/mips/genassym.cf +++ b/sys/arch/mips/mips/genassym.cf @@ -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 diff --git a/sys/arch/mips/mips/trap.c b/sys/arch/mips/mips/trap.c index ea39f9f75b94..3852ebedacba 100644 --- a/sys/arch/mips/mips/trap.c +++ b/sys/arch/mips/mips/trap.c @@ -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 /* 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));