kernel: print spurious interrupt message with increasing interval.
[minix.git] / include / arch / i386 / stackframe.h
bloba1b16e58e7d7179b6191f54a71163ee9705affa9
1 #ifndef STACK_FRAME_H
2 #define STACK_FRAME_H
4 typedef unsigned reg_t; /* machine register */
5 typedef reg_t segdesc_t;
7 /* The stack frame layout is determined by the software, but for efficiency
8 * it is laid out so the assembly code to use it is as simple as possible.
9 * 80286 protected mode and all real modes use the same frame, built with
10 * 16-bit registers. Real mode lacks an automatic stack switch, so little
11 * is lost by using the 286 frame for it. The 386 frame differs only in
12 * having 32-bit registers and more segment registers. The same names are
13 * used for the larger registers to avoid differences in the code.
15 struct stackframe_s {
16 u16_t gs; /* last item pushed by save */
17 u16_t fs; /* ^ */
18 u16_t es; /* | */
19 u16_t ds; /* | */
20 reg_t di; /* di through cx are not accessed in C */
21 reg_t si; /* order is to match pusha/popa */
22 reg_t fp; /* bp */
23 reg_t st; /* hole for another copy of sp */
24 reg_t bx; /* | */
25 reg_t dx; /* | */
26 reg_t cx; /* | */
27 reg_t retreg; /* ax and above are all pushed by save */
28 reg_t retadr; /* return address for assembly code save() */
29 reg_t pc; /* ^ last item pushed by interrupt */
30 reg_t cs; /* | */
31 reg_t psw; /* | */
32 reg_t sp; /* | */
33 reg_t ss; /* these are pushed by CPU during interrupt */
36 #endif /* #ifndef STACK_FRAME_H */