5 Copyright © 1995-2011, The AROS Development Team. All rights reserved.
8 Desc: Internal description of the ETask structure
12 #include <exec/interrupts.h>
13 #include <exec/tasks.h>
15 #include "mungwallextra.h"
17 /* Known alert context types */
20 #define AT_MUNGWALL 0x02
22 /* Alert data. Can have different contents, depending on what actually happened */
27 struct ExceptionContext acpu
;
28 struct MungwallContext amw
;
34 struct ETask iet_ETask
;
38 APTR iet_RT
; /* Structure for resource tracking */
39 APTR iet_Context
; /* Structure to store CPU registers */
42 ULONG iet_AlertCode
; /* Alert code for crash handler */
43 UBYTE iet_AlertType
; /* Type of the alert context */
44 UBYTE iet_AlertFlags
; /* See below */
45 APTR iet_AlertLocation
; /* Alert location for crash handler */
46 APTR iet_AlertStack
; /* Frame pointer for stack backtrace */
47 struct AlertContext iet_AlertData
; /* Extra data coming with the crash */
50 #define GetIntETask(task) ((struct IntETask *)(((struct Task *) \
51 (task))->tc_UnionETask.tc_ETask))
52 #define IntETask(etask) ((struct IntETask *)(etask))
55 #define AF_Alert 0x01 /* The task is in alert state */
56 #define AF_Location 0x02 /* iet_AlertLocation is filled in */
59 * This function resets crash status of the task:
60 * - AF_Alert flag serves as an actual indicator of crash status.
61 * If we enter Alert() with this flag already set, this is
62 * considered a nested alert and is directed to supervisor-mode routine.
63 * - AF_Location flag can also be set only once. It is either set explicitly
64 * before calling Alert(), or it is set by Alert() routine itself. So we clear
65 * it in order for Alert() to be able to remember it if task ever alerts again.
66 * - iet_AlertType specifies type of alert context (if any). We make sure
67 * it is clear so as next time Alert() will not display old information.
69 static inline void ResetETask(struct IntETask
*etask
)
71 etask
->iet_AlertType
= AT_NONE
;
72 etask
->iet_AlertFlags
= 0;