home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / warptlk3.zip / TOOLKIT / INC / BSEXCPT.INC < prev    next >
Text File  |  1995-08-24  |  11KB  |  306 lines

  1. ;*************************** START OF SPECIFICATION ************************ *                                                                         *
  2. ;* Source File Name: BSEXCPT.H                                             *
  3. ;*                                                                         *
  4. ;* Descriptive Name: Thread Exception Constants and Structure Definitions. *
  5. ;*                                                                         *
  6. ;* Copyright (c) IBM Corporation 1987,1991                                 *
  7. ;* Copyright (c) Microsoft Corporation 1987,1991                           *
  8. ;*                                                                         *
  9. ;* Function: This file provides constants and data structure definitions   *
  10. ;*      required by application programs to use 32-bit thread exceptions   *
  11. ;*      management facility.                                               *
  12. ;*                                                                         *
  13. ;***************************  END OF SPECIFICATION ************************  
  14. ;* User Exception Handler Return Codes:
  15. ;  
  16. XCPT_CONTINUE_SEARCH    EQU    00000000H       ;  Exception not handled     
  17. XCPT_CONTINUE_EXECUTION    EQU    0FFFFFFFFH       ;  Exception handled         
  18. XCPT_CONTINUE_STOP    EQU    00716668H       ;  Exception handled by      
  19.                                                 ;  debugger (via DosDebug)   
  20. ;* fHandlerFlags values (see ExceptionReportRecord):
  21. ;*
  22. ;* The user may only set (but not clear) the EH_NONCONTINUABLE flag.
  23. ;* All other flags are set by the system.
  24. ;*
  25. ;  
  26. EH_NONCONTINUABLE    EQU    1H           ;  Noncontinuable exception           
  27. EH_UNWINDING    EQU    2H                ;  Unwind is in progress              
  28. EH_EXIT_UNWIND    EQU    4H              ;  Exit unwind is in progress         
  29. EH_STACK_INVALID    EQU    8H            ;  Stack out of limits or unaligned   
  30. EH_NESTED_CALL    EQU    10H             ;  Nested exception handler call      
  31. ;* Unwind all exception handlers (see DosUnwindException API)
  32. ;  
  33. UNWIND_ALL    EQU    0 
  34. ;*   Exception values are 32-bit values laid out as follows:
  35. ;*
  36. ;*   3 3 2 2 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 1 1 1
  37. ;*   1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0
  38. ;*   +---+-+-------------------------+-------------------------------+
  39. ;*   |Sev|C|       Facility          |               Code            |
  40. ;*   +---+-+-------------------------+-------------------------------+
  41. ;*
  42. ;*   where
  43. ;*
  44. ;*       Sev - is the severity code
  45. ;*           00 - Success
  46. ;*           01 - Informational
  47. ;*           10 - Warning
  48. ;*           11 - Error
  49. ;*
  50. ;*       C - is the Customer code flag
  51. ;*
  52. ;*       Facility - is the facility code
  53. ;*
  54. ;*       Code - is the facility's status code
  55. ;*
  56. ;*   Exceptions specific to OS/2 2.0 (e.g. XCPT_SIGNAL) will be marked
  57. ;*   with a facility code of 1.
  58. ;*
  59. ;*   System defined exceptions have a facility code of zero.
  60. ;*
  61. ;*   Each exception may also have several pieces of additional information.
  62. ;*   These are stored in the ExceptionInfo fields of the
  63. ;*   ExceptionReportRecord. They are documented here with the exceptions
  64. ;*   only for ease of reference.
  65. ;  
  66. XCPT_FATAL_EXCEPTION    EQU    0C0000000H 
  67. XCPT_SEVERITY_CODE    EQU    0C0000000H 
  68. XCPT_CUSTOMER_CODE    EQU    20000000H 
  69. XCPT_FACILITY_CODE    EQU    1FFF0000H 
  70. XCPT_EXCEPTION_CODE    EQU    0000FFFFH 
  71. ;* Violation flags in ExceptionInfo
  72. ;  
  73. XCPT_UNKNOWN_ACCESS    EQU    00000000H       ;  Unknown access            
  74. XCPT_READ_ACCESS    EQU    00000001H       ;  Read access               
  75. XCPT_WRITE_ACCESS    EQU    00000002H       ;  Write access              
  76. XCPT_EXECUTE_ACCESS    EQU    00000004H       ;  Execute access            
  77. XCPT_SPACE_ACCESS    EQU    00000008H       ;  Address space access      
  78. XCPT_LIMIT_ACCESS    EQU    00000010H       ;  Address space limit       
  79.                                                 ;  violation                 
  80. XCPT_DATA_UNKNOWN    EQU    0FFFFFFFFH 
  81. ;* Signal numbers for XCPT_SIGNAL
  82. ;  
  83. XCPT_SIGNAL_INTR    EQU    1 
  84. XCPT_SIGNAL_KILLPROC    EQU    3 
  85. XCPT_SIGNAL_BREAK    EQU    4 
  86. ;* Portable non-fatal software generated exceptions
  87. ;  
  88. XCPT_GUARD_PAGE_VIOLATION    EQU    80000001H 
  89.       ;  ExceptionInfo[ 0 ] - Access Code: XCPT_READ_ACCESS
  90. ;                                          XCPT_WRITE_ACCESS   
  91.       ;  ExceptionInfo[ 1 ] - FaultAddr   
  92. XCPT_UNABLE_TO_GROW_STACK    EQU    80010001H 
  93. ;* Portable fatal hardware generated exceptions
  94. ;  
  95. XCPT_DATATYPE_MISALIGNMENT    EQU    0C000009EH 
  96.       ;  ExceptionInfo[ 0 ] - Access Code: XCPT_READ_ACCESS
  97. ;                                          XCPT_WRITE_ACCESS   
  98.       ;  ExceptionInfo[ 1 ] - Alignment   
  99.       ;  ExceptionInfo[ 2 ] - FaultAddr   
  100. XCPT_BREAKPOINT    EQU    0C000009FH 
  101. XCPT_SINGLE_STEP    EQU    0C00000A0H 
  102. XCPT_ACCESS_VIOLATION    EQU    0C0000005H 
  103.       ;  ExceptionInfo[ 0 ] - Access Code: XCPT_READ_ACCESS
  104. ;                                          XCPT_WRITE_ACCESS
  105. ;                                          XCPT_SPACE_ACCESS
  106. ;                                          XCPT_LIMIT_ACCESS
  107. ;                                          XCPT_UNKNOWN_ACCESS   
  108.       ;  ExceptionInfo[ 1 ] - FaultAddr (XCPT_READ_ACCESS/XCPT_WRITE_ACCESS)
  109. ;                             Selector  (XCPT_SPACE_ACCESS)
  110. ;                             -1        (XCPT_LIMIT_ACCESS)   
  111. XCPT_ILLEGAL_INSTRUCTION    EQU    0C000001CH 
  112. XCPT_FLOAT_DENORMAL_OPERAND    EQU    0C0000094H 
  113. XCPT_FLOAT_DIVIDE_BY_ZERO    EQU    0C0000095H 
  114. XCPT_FLOAT_INEXACT_RESULT    EQU    0C0000096H 
  115. XCPT_FLOAT_INVALID_OPERATION    EQU    0C0000097H 
  116. XCPT_FLOAT_OVERFLOW    EQU    0C0000098H 
  117. XCPT_FLOAT_STACK_CHECK    EQU    0C0000099H 
  118. XCPT_FLOAT_UNDERFLOW    EQU    0C000009AH 
  119. XCPT_INTEGER_DIVIDE_BY_ZERO    EQU    0C000009BH 
  120. XCPT_INTEGER_OVERFLOW    EQU    0C000009CH 
  121. XCPT_PRIVILEGED_INSTRUCTION    EQU    0C000009DH 
  122. ;* Portable fatal software generated exceptions
  123. ;  
  124. XCPT_IN_PAGE_ERROR    EQU    0C0000006H 
  125.       ;  ExceptionInfo[ 0 ] - FaultAddr   
  126. XCPT_PROCESS_TERMINATE    EQU    0C0010001H 
  127. XCPT_ASYNC_PROCESS_TERMINATE    EQU    0C0010002H 
  128.       ;  ExceptionInfo[ 0 ] - TID of 'terminator' thread   
  129. XCPT_NONCONTINUABLE_EXCEPTION    EQU    0C0000024H 
  130. XCPT_INVALID_DISPOSITION    EQU    0C0000025H 
  131. ;* Non-portable fatal exceptions
  132. ;  
  133. XCPT_INVALID_LOCK_SEQUENCE    EQU    0C000001DH 
  134. XCPT_ARRAY_BOUNDS_EXCEEDED    EQU    0C0000093H 
  135. XCPT_B1NPX_ERRATA_02    EQU    0C0010004H 
  136. ;* Misc exceptions
  137. ;  
  138. XCPT_UNWIND    EQU    0C0000026H 
  139. XCPT_BAD_STACK    EQU    0C0000027H 
  140. XCPT_INVALID_UNWIND_TARGET    EQU    0C0000028H 
  141. ;* Signal Exceptions
  142. ;  
  143. XCPT_SIGNAL    EQU    0C0010003H 
  144.       ;  ExceptionInfo[ 0 ] - Signal Number   
  145. ;* ContextRecord
  146. ;*
  147. ;* This is the machine specific register contents for the thread
  148. ;* at the time of the exception. Note that only the register sets
  149. ;* specified by ContextFlags contain valid data. Conversely, only
  150. ;* registers specified in ContextFlags will be restored if an exception
  151. ;* is handled.
  152. ;  
  153. ;* The following flags control the contents of the ContextRecord.
  154. ;  
  155. CONTEXT_CONTROL    EQU    00000001H   ;  SS:ESP, CS:EIP, EFLAGS,      
  156.                                              ;  EBP                          
  157. CONTEXT_INTEGER    EQU    00000002H   ;  EAX, EBX, ECX, EDX, ESI,     
  158.                                              ;  EDI                          
  159. CONTEXT_SEGMENTS    EQU    00000004H   ;  DS, ES, FS, GS               
  160. CONTEXT_FLOATING_POINT    EQU    00000008H   ;  Numeric coprocessor state    
  161. CONTEXT_FULL    EQU    (CONTEXT_CONTROL  OR  CONTEXT_INTEGER  OR                        CONTEXT_SEGMENTS  OR  CONTEXT_FLOATING_POINT)
  162.  
  163. _fpreg    STRUC
  164. losig    DD    ?
  165. hisig    DD    ?
  166. signexp    DW    ?
  167. _fpreg    ENDS
  168.  
  169. FPREG struc
  170. db size _fpreg dup(?)
  171. FPREG ends
  172.  
  173.  
  174. _CONTEXT    STRUC
  175.   ; 
  176. ;  * The flags values within this flag control the contents of
  177. ;  * a ContextRecord.
  178. ;  *
  179. ;  * If the ContextRecord is used as an input parameter, then
  180. ;  * for each portion of the ContextRecord controlled by a flag
  181. ;  * whose value is set, it is assumed that that portion of the
  182. ;  * ContextRecord contains valid context. If the ContextRecord
  183. ;  * is being used to modify a thread's context, then only that
  184. ;  * portion of the thread's context will be modified.
  185. ;  *
  186. ;  * If the ContextRecord is used as an Input/Output parameter to
  187. ;  * capture the context of a thread, then only those portions of the
  188. ;  * thread's context corresponding to set flags will be returned.
  189. ;    
  190. ContextFlags    DD    ?
  191.   ; 
  192. ;  * This section is specified/returned if the ContextFlags
  193. ;  * contains the flag CONTEXT_FLOATING_POINT.
  194. ;    
  195. ctx_env    DD    7 DUP (?)
  196. ctx_stack    DB    SIZE _fpreg * 8 DUP (?)
  197.   ; 
  198. ;  * This section is specified/returned if the ContextFlags
  199. ;  * contains the flag CONTEXT_SEGMENTS.
  200. ;    
  201. ctx_SegGs    DD    ?
  202. ctx_SegFs    DD    ?
  203. ctx_SegEs    DD    ?
  204. ctx_SegDs    DD    ?
  205.   ; 
  206. ;  * This section is specified/returned if the ContextFlags
  207. ;  * contains the flag CONTEXT_INTEGER.
  208. ;    
  209. ctx_RegEdi    DD    ?
  210. ctx_RegEsi    DD    ?
  211. ctx_RegEax    DD    ?
  212. ctx_RegEbx    DD    ?
  213. ctx_RegEcx    DD    ?
  214. ctx_RegEdx    DD    ?
  215.   ; 
  216. ;  * This section is specified/returned if the ContextFlags
  217. ;  * contains the flag CONTEXT_CONTROL.
  218. ;    
  219. ctx_RegEbp    DD    ?
  220. ctx_RegEip    DD    ?
  221. ctx_SegCs    DD    ?
  222. ctx_EFlags    DD    ?
  223. ctx_RegEsp    DD    ?
  224. ctx_SegSs    DD    ?
  225. _CONTEXT    ENDS
  226.  
  227. CONTEXTRECORD struc
  228. db size _CONTEXT dup(?)
  229. CONTEXTRECORD ends
  230.  
  231. PCONTEXTRECORD struc
  232.     dd ?
  233. PCONTEXTRECORD ends
  234.  
  235. ;* ExceptionReportRecord
  236. ;*
  237. ;* This structure contains machine independant information about an
  238. ;* exception/unwind. No system exception will ever have more than
  239. ;* EXCEPTION_MAXIMUM_PARAMETERS parameters. User exceptions are not
  240. ;* bound to this limit.
  241. ;  
  242. EXCEPTION_MAXIMUM_PARAMETERS    EQU    4  ;  Enough for all system exceptions   
  243.  
  244. _EXCEPTIONREPORTRECORD    STRUC
  245. ExceptionNum    DD    ?                ;  Exception number                  
  246. fHandlerFlags    DD    ?               ;  Exception attributes              
  247. NestedExceptionReportRecord    DD    ?
  248.                                         ;  Preceding exception's report      
  249.                                         ;  record if nested exception        
  250. ExceptionAddress    DD    ?            ;  Exception address                 
  251. cParameters    DD    ?                 ;  Size of exception specific        
  252.                                         ;  information                       
  253. ExceptionInfo    DD    EXCEPTION_MAXIMUM_PARAMETERS DUP (?)
  254.                                         ;  Exception specfic information     
  255. _EXCEPTIONREPORTRECORD    ENDS
  256.  
  257. EXCEPTIONREPORTRECORD struc
  258. db size _EXCEPTIONREPORTRECORD dup(?)
  259. EXCEPTIONREPORTRECORD ends
  260.  
  261. PEXCEPTIONREPORTRECORD struc
  262.     dd ?
  263. PEXCEPTIONREPORTRECORD ends
  264.  
  265. ;* ExceptionRegistrationRecord
  266. ;*
  267. ;* These are linked together to form a chain of exception handlers that
  268. ;* will be dispatched to upon receipt of an exception.
  269. ;  
  270.  
  271. _EXCEPTIONREGISTRATIONRECORD    STRUC
  272. prev_structure      DD      ?
  273. ExceptionHandler    DD      ?
  274. _EXCEPTIONREGISTRATIONRECORD    ENDS
  275.  
  276. EXCEPTIONREGISTRATIONRECORD struc
  277.         db size _EXCEPTIONREGISTRATIONRECORD dup(?)
  278. EXCEPTIONREGISTRATIONRECORD ends
  279.  
  280. PEXCEPTIONREGISTRATIONRECORD struc
  281.         dd ?
  282. PEXCEPTIONREGISTRATIONRECORD ends
  283.  
  284.  
  285. ;* End of exception chain marker.
  286. ;  
  287. END_OF_CHAIN    EQU     -1
  288.  
  289.