diff options
author | Thomas Bushnell <thomas@gnu.org> | 1997-02-25 21:28:37 +0000 |
---|---|---|
committer | Thomas Bushnell <thomas@gnu.org> | 1997-02-25 21:28:37 +0000 |
commit | f07a4c844da9f0ecae5bbee1ab94be56505f26f7 (patch) | |
tree | 12b07c7e578fc1a5f53dbfde2632408491ff2a70 /i386/util/trap.h |
Initial source
Diffstat (limited to 'i386/util/trap.h')
-rw-r--r-- | i386/util/trap.h | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/i386/util/trap.h b/i386/util/trap.h new file mode 100644 index 0000000..98d586c --- /dev/null +++ b/i386/util/trap.h @@ -0,0 +1,100 @@ +/* + * Mach Operating System + * Copyright (c) 1991,1990,1989 Carnegie Mellon University. + * Copyright (c) 1994 The University of Utah and + * the Center for Software Science (CSS). + * All rights reserved. + * + * Permission to use, copy, modify and distribute this software and its + * documentation is hereby granted, provided that both the copyright + * notice and this permission notice appear in all copies of the + * software, derivative works or modified versions, and any portions + * thereof, and that both notices appear in supporting documentation. + * + * CARNEGIE MELLON, THE UNIVERSITY OF UTAH AND CSS ALLOW FREE USE OF + * THIS SOFTWARE IN ITS "AS IS" CONDITION, AND DISCLAIM ANY LIABILITY + * OF ANY KIND FOR ANY DAMAGES WHATSOEVER RESULTING FROM THE USE OF + * THIS SOFTWARE. + * + * Carnegie Mellon requests users of this software to return to + * + * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU + * School of Computer Science + * Carnegie Mellon University + * Pittsburgh PA 15213-3890 + * + * any improvements or extensions that they make and grant Carnegie Mellon + * the rights to redistribute these changes. + */ +#ifndef _I386_MOSS_TRAP_H_ +#define _I386_MOSS_TRAP_H_ + +#ifndef ASSEMBLER + + +/* This structure corresponds to the state of user registers + as saved upon kernel trap/interrupt entry. + As always, it is only a default implementation; + a well-optimized microkernel will probably want to override it + with something that allows better optimization. */ + +struct trap_state { + + /* Saved segment registers */ + unsigned int gs; + unsigned int fs; + unsigned int es; + unsigned int ds; + + /* PUSHA register state frame */ + unsigned int edi; + unsigned int esi; + unsigned int ebp; + unsigned int cr2; /* we save cr2 over esp for page faults */ + unsigned int ebx; + unsigned int edx; + unsigned int ecx; + unsigned int eax; + + unsigned int trapno; + unsigned int err; + + /* Processor state frame */ + unsigned int eip; + unsigned int cs; + unsigned int eflags; + unsigned int esp; + unsigned int ss; + + /* Virtual 8086 segment registers */ + unsigned int v86_es; + unsigned int v86_ds; + unsigned int v86_fs; + unsigned int v86_gs; +}; + +/* The actual trap_state frame pushed by the processor + varies in size depending on where the trap came from. */ +#define TR_KSIZE ((int)&((struct trap_state*)0)->esp) +#define TR_USIZE ((int)&((struct trap_state*)0)->v86_es) +#define TR_V86SIZE sizeof(struct trap_state) + + +#else ASSEMBLER + +#include <mach/machine/asm.h> + +#define UNEXPECTED_TRAP \ + movw %ss,%ax ;\ + movw %ax,%ds ;\ + movw %ax,%es ;\ + movl %esp,%eax ;\ + pushl %eax ;\ + call EXT(trap_dump_die) ;\ + + +#endif ASSEMBLER + +#include <mach/machine/trap.h> + +#endif _I386_MOSS_TRAP_H_ |