home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 14 Text / 14-Text.zip / os2trap.inf (.txt) < prev    next >
OS/2 Help File  |  1998-10-12  |  21KB  |  429 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Disclaimer ΓòÉΓòÉΓòÉ
  3.  
  4. The information contained in this file was obtained from a Bulletin Board 
  5. System owned and operated by IBM. However, this is no guarantee of its 
  6. accuracy. As a result, I can make no warranty of its usefulness to you. 
  7.  
  8. Moreover, there is the possibility that IBM will change these codes over time, 
  9. although the probability of this is infinitessimal. 
  10.  
  11. Notwithstanding the above, I have found the information useful. 
  12.  
  13. David W. Noon. 
  14.  
  15.  
  16. ΓòÉΓòÉΓòÉ 2. An Overview of Traps, by Denis Tonn ΓòÉΓòÉΓòÉ
  17.  
  18. There has been a lot of queries and discussion about "Traps" under OS/2. Rather 
  19. than try and explain each time the topic comes up, I have put together the 
  20. following that hopefully will help users understand the basics. The following 
  21. is essentially accurate, although incomplete in minor details and (hopefully!) 
  22. substantially simplified. 
  23.  
  24.  
  25. ΓòÉΓòÉΓòÉ 2.1. What is a "Trap"? ΓòÉΓòÉΓòÉ
  26.  
  27. There is a class of CPU detected conditions on Intel processors called "Machine 
  28. Exceptions". These exceptions are grouped into different "types", and one of 
  29. these types is called TRAP. Other types are INT, FAULT, ABORT, and DR6. Because 
  30. the majority of the types of Machine Exceptions are of type TRAP, common usage 
  31. is to call all exceptions "Traps". 
  32.  
  33.  
  34. ΓòÉΓòÉΓòÉ 2.2. What causes a "Trap"? ΓòÉΓòÉΓòÉ
  35.  
  36. Rather than try and detail all possible causes, I will try and focus on a few 
  37. of the more common ones encountered. For full details on all possible causes, 
  38. refer to the Intel Programmer's Reference. 
  39.  
  40. A little background is required before getting into possible causes and what is 
  41. "important" about the types of information displayed. 
  42.  
  43. The current Intel CPU's have something called "protected mode" that they can 
  44. run in. This mode sets up some "tables" that the CPU refers to for access to 
  45. memory addresses. These tables include information about any application's 
  46. ability to "access" a particular address. Addresses can be "protected" from 
  47. particular kinds of access. Some addresses can be marked as read only (cannot 
  48. be written to), some addresses are reserved for higher privileged code (Priv 
  49. level 0 or Ring 0 as it is usually called). The address can even be marked as 
  50. totally invalid (no access allowed at all). 
  51.  
  52. When the CPU encounters any problems with access to an address it will generate 
  53. an exception and transfer control to a "vector" which is usually the address of 
  54. OS supplied code which then attempts to "handle" the exception in some fashion. 
  55.  
  56.  
  57. ΓòÉΓòÉΓòÉ 2.3. Trap D ΓòÉΓòÉΓòÉ
  58.  
  59. In it's essence, a Trap D is a violation of any of the protection implemented 
  60. in the Descriptor Table(s). The CPU will detect this violation and generate a 
  61. Machine Exception D (this is type FAULT, so "Trap D" is a misnomer). The 
  62. operating system will gain control (the CPU does this automatically) and can 
  63. take actions at this point in time. I will discuss the possible actions a 
  64. little further down, focusing specifically on OS/2. 
  65.  
  66.  
  67. ΓòÉΓòÉΓòÉ 2.4. Trap C ΓòÉΓòÉΓòÉ
  68.  
  69. This is a "special case" of an Exception D (also of type FAULT) relating to the 
  70. use of CPU registers called the Stack Selector and Stack Pointer. Suffice it to 
  71. say that the code has run out of temporary storage space addressed by these 2 
  72. registers. Again, the CPU will transfer control to the OS when it encounters 
  73. this condition. 
  74.  
  75.  
  76. ΓòÉΓòÉΓòÉ 2.5. Trap E ΓòÉΓòÉΓòÉ
  77.  
  78. Similar to Trap D (it's also of type FAULT), but relating to the protection 
  79. mechanisms implemented in another set of tables called "Page Tables". This is a 
  80. second level of "virtual addressing and protection" implemented in 386 (and up) 
  81. Intel CPU's. Again, the OS is given control when the CPU encounters a problem 
  82. using an address through the page tables. 
  83.  
  84. Interestingly, this is the mechanism that OS/2 2.0 (and higher) uses to 
  85. implement "memory overcommit" which allows you to run programs which would use 
  86. more RAM than you actually have installed. In essence, OS/2 uses swapper.dat as 
  87. a "temporary" place to to store the "memory" that the programs are accessing 
  88. and moves it into (and out of) RAM as required. When the "memory at this 
  89. address" is stored in swapper.dat, the page table entry (that the CPU uses) 
  90. will be marked as "not resident" (essentially invalid as far as the CPU is 
  91. concerned) and OS/2 will swap it in as required. More on this later.. 
  92.  
  93.  
  94. ΓòÉΓòÉΓòÉ 2.6. Trap 8 ΓòÉΓòÉΓòÉ
  95.  
  96. If the CPU cannot "transfer control" to an OS supplied vector to "handle" one 
  97. of the above exceptions, then it generates an Exception 8 (ABORT). This is a 
  98. pretty catastrophic condition as far as the system is concerned, and the OS 
  99. supplied handler for Trap 8 will halt the system completely. 
  100.  
  101.  
  102. ΓòÉΓòÉΓòÉ 2.7. Trap 3 ΓòÉΓòÉΓòÉ
  103.  
  104. This is a special Trap (and yes, it is of type "Trap") that is used by 
  105. programmers to debug their code. Sometimes these are "left in" accidentally or 
  106. purposely, as a "die now" case when the code cannot logically do anything else. 
  107.  
  108.  
  109. ΓòÉΓòÉΓòÉ 2.8. OK, how does OS/2 handle CPU generated exceptions? ΓòÉΓòÉΓòÉ
  110.  
  111. Keep in mind that OS/2 will gain control after the CPU detects these 
  112. conditions. The first thing OS/2 will do is take a look at the "cause" of the 
  113. CPU detected "trap". If it can do anything about correcting the condition, it 
  114. will do so. 
  115.  
  116. If this is a Trap E caused by the fact that the memory at this "address" is out 
  117. on the disk, then it will find (or make) a spare RAM page to bring the "memory" 
  118. into, update the page tables for this address to point to this RAM location, 
  119. and cause the CPU to restart the instruction that "failed". In this case, 
  120. neither the application nor the user even knows that a "trap" occurred. Most 
  121. Trap E's are handled in this fashion. 
  122.  
  123. If it cannot "fix" the "failing address" in the above fashion because it does 
  124. not "know" what should be at this address or if the app has never "allocated" 
  125. the address, it then passes control to any registered "exception handlers" that 
  126. then take a crack at "fixing" the address somehow. If any of these manage to 
  127. fix it up, then OS/2 restarts the instruction just as in the previous case. 
  128. Again, the user usually does not know that a "trap" occurred, although possibly 
  129. an application level exception handler might have taken note of it. It is quite 
  130. possible to have one of these exception handlers subsequently cause a "trap", 
  131. and then we start at the top of this flow with the "new" trap information. 
  132.  
  133. If neither the OS swap handler nor an exception handler can do anything to "fix 
  134. up" the memory address, then OS/2 has no choice but to "kill" the process 
  135. involved. If it is an application that contains the failing instruction, then 
  136. OS/2 will pop up an "exception screen" telling the user what happened and 
  137. offering to give more information (registers) before "ending" the application. 
  138. This is an "application trap" and is usually accompanied by a sys317x message. 
  139.  
  140. The same situation(s) could occur in privilege level 0 code (kernel, device 
  141. driver, file system driver, etc) and in that case there is no "process" that 
  142. can be "ended" so the whole system will "halt" giving the user information 
  143. (registers) on the screen as a last gasp before it "halts". This is called an 
  144. Internal Process Error (IPE) or as some choose to call it "the black screen of 
  145. death with meaningless numbers displayed". The system may be "dead", but the 
  146. numbers and letters can be quite meaningful to those with the right knowledge 
  147. and tools. 
  148.  
  149. Note:  There is a "halt" routine in the kernel, and it can be called from 
  150. various places, including the routine that formats and displays the register 
  151. information from traps. This halt routine will "report" the location that 
  152. called it. In the case of "traps" the halt routine will always report the 
  153. address of the "register display" routine. Useful, but the "address" displayed 
  154. is redundant. The halt routine also displays the level of the system and CPU 
  155. type. If there is formatted register information then that is usually the 
  156. "cause" of the problem and should not be ignored when reporting such. 
  157.  
  158. No matter if the "trap failure" is in application or privileged code, it is 
  159. important to gather all the information available. It is the starting point for 
  160. the programmer to locate the problem. It may not be enough to fully "find" the 
  161. problem, but you have to start somewhere. General users should not be making 
  162. decisions on what is "important" from these displays, since the process of 
  163. problem analysis may use none, any, or all of this information. 
  164.  
  165.  
  166. ΓòÉΓòÉΓòÉ 2.9. Hardware or Software, and what do I do? ΓòÉΓòÉΓòÉ
  167.  
  168. All the previous discussion seems to be oriented to a "software" explanation of 
  169. the causes of "traps". This is because a "trap" is detected by the CPU during 
  170. it's execution of CPU instructions. It presupposes that the tables, 
  171. instructions, data/code pointers, etc are operating correctly in the hardware, 
  172. which it generally does. But if the hardware has a flaw that causes any of 
  173. these values to be "incorrect" then the symptoms will be exactly the same (as 
  174. far as the CPU is concerned) as if it was a "software" failure. Sometimes an 
  175. external piece of hardware can cause a condition (status) that the software 
  176. "driver" never expected (because it will never occur on correctly working 
  177. hardware) which in turn causes the "driver" to "trap" (possibility of trap 3). 
  178.  
  179. There are all kinds of possibilities and even "combinations" of software and 
  180. hardware that can be related to a "trap". There is no hard and fast rule to 
  181. know which is the problem. But there is some methodology that can be applied to 
  182. make "guesses" about the causes, which can then be "tested" with some 
  183. "actions". 
  184.  
  185.      If you have 2 systems with the same hardware and same software setup, and 
  186.       it fails on one but not the other then you are probably looking at a 
  187.       hardware failure. 
  188.  
  189.      If you have multiple systems of different hardware and setups displaying 
  190.       the same types of failures, it is probably software. (The difficulty 
  191.       arises in defining what "same types of failures" means. This presupposes 
  192.       a solid understanding of "failure types" beyond the scope of this simple 
  193.       explanation. It is a lot more than a simple "trap D" type of 
  194.       description.) 
  195.  
  196.      If the symptom seems to "make sense" from a (larger) software point of 
  197.       view, then pursue it as such. If the symptoms do not make "software 
  198.       sense", or if you have a range of symptoms that do not seem to follow a 
  199.       discernible pattern then suspect hardware. 
  200.  
  201.      Do NOT assume that hardware is working correctly because it runs 
  202.       diagnostics or worked with another OS/driver/version/etc. Any changes to 
  203.       a system can expose potential hardware problems and diagnostics rarely 
  204.       find intermittent problems. 
  205.  
  206.      Always keep in mind that you may be going down the wrong path in your 
  207.       diagnosis and "double check" yourself fairly frequently. 
  208.  
  209.      Gather as much information as you can about the problem, including full 
  210.       "trap register" data. Document step by step descriptions of the way you 
  211.       "create" the problem if at all possible. Document as much about your 
  212.       hardware as you can. Document as much about your system setup as you can. 
  213.       Be prepared to offer any (or all) this information to anyone that is 
  214.       assisting you. You don't have to offer it all at once, but be prepared to 
  215.       do so. 
  216.  
  217.      Test any "guesses" with actions. If you suspect any hardware, swap or 
  218.       replace it. Try slowing down memory access timing, or turning off CPU 
  219.       cache (BIOS setup). DMA and Bus timing can also be involved. If you 
  220.       suspect software, then replace it with the latest versions and see if it 
  221.       still fails. Gather the same data (as above) and report your problem. If 
  222.       others with the same (or similar) hardware and software setups cannot 
  223.       duplicate your symptoms than either you need to supply more data to them 
  224.       or you possibly have a hardware problem. 
  225.  
  226.      If the problem is a trap that generates an IPE (and a halted system) then 
  227.       it may be possible for an analyst to get a pretty good idea of the 
  228.       problem purely from the full data on the "trap screen". All of the data 
  229.       may be significant, so don't "skip anything". If the full screen of data 
  230.       is available, then an analyst can usually decide if the trap was detected 
  231.       inside OS/2 code or in a device/FS driver. 
  232.  
  233.      In many cases, the trap screen alone may not be enough and further data 
  234.       gathering is required. System traces, a system Dump, or installation of a 
  235.       special "debug kernel" for "live debugging" of the problem are 
  236.       possibilities. 
  237.  
  238.  There is much more that could be discussed or recommended for any particular 
  239.  problem, but the above should suffice to get most people started in a logical 
  240.  approach to finding the cause of a trap. Remember that anyone trying to assist 
  241.  you cannot just "pull a rabbit out of the hat", they have to have some solid 
  242.  data to work with for a starting point. Frequently others have encountered the 
  243.  same problem and have already found the solution. Other people can try the 
  244.  same "tests" that you are doing which will give you an idea if the problem is 
  245.  widespread (software) or unique to you (probably hardware). The more complete 
  246.  you make your description, the more "accurate" the advice you will receive. 
  247.  
  248.  Oh, one last part to all this. An application (and the system for that matter) 
  249.  consists of multiple modules all working together. You may have a case of one 
  250.  module trying to "use" information supplied by a different module and thereby 
  251.  generating a "trap". The "failing module" is not the one that used the bad 
  252.  information (from the popup screen), but the one that generated it. Deep 
  253.  analysis of this kind of problem cannot be done from trap screen data alone 
  254.  and usually requires further data gathering (as described above). 
  255.  
  256.  
  257. ΓòÉΓòÉΓòÉ 3. Trap Errors ΓòÉΓòÉΓòÉ
  258.  
  259. The next sections classify and explain the Trap codes reported by OS/2. 
  260.  
  261.  
  262. ΓòÉΓòÉΓòÉ 3.1. Summary of Trap Errors in OS/2 ΓòÉΓòÉΓòÉ
  263.  
  264. The following is a summary of each trap code, listed in numerical order. 
  265.  
  266.                     ΓöîΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓö¼ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÉ
  267.                     ΓöéDecimalΓöéHex ΓöéDescription                        Γöé
  268.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  269.                     Γöé00     Γöé0000ΓöéDivide by zero error               Γöé
  270.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  271.                     Γöé01     Γöé0001ΓöéDebug Exception                    Γöé
  272.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  273.                     Γöé02     Γöé0002ΓöéNon-Maskable Interrupt (NMI)       Γöé
  274.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  275.                     Γöé03     Γöé0003ΓöéDebug Breakpoint                   Γöé
  276.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  277.                     Γöé04     Γöé0004ΓöéOverflow Detected                  Γöé
  278.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  279.                     Γöé05     Γöé0005ΓöéBound Range Exceeded               Γöé
  280.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  281.                     Γöé06     Γöé0006ΓöéInvalid Opcode Instruction         Γöé
  282.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  283.                     Γöé07     Γöé0007ΓöéCoprocessor not Available          Γöé
  284.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  285.                     Γöé08     Γöé0008ΓöéDouble Fault                       Γöé
  286.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  287.                     Γöé09     Γöé0009ΓöéCoprocessor Segment Overrun        Γöé
  288.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  289.                     Γöé10     Γöé000AΓöéInvalid Task State Segment         Γöé
  290.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  291.                     Γöé11     Γöé000BΓöéSegment not Available              Γöé
  292.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  293.                     Γöé12     Γöé000CΓöéStack Fault                        Γöé
  294.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  295.                     Γöé13     Γöé000DΓöéGeneral Protection Fault           Γöé
  296.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  297.                     Γöé14     Γöé000EΓöéPage Fault                         Γöé
  298.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  299.                     Γöé15     Γöé000FΓöéReserved by Intel                  Γöé
  300.                     Γö£ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓö╝ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöñ
  301.                     Γöé16     Γöé0010ΓöéCoprocessor Error                  Γöé
  302.                     ΓööΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓö┤ΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÇΓöÿ
  303.  
  304.  
  305. ΓòÉΓòÉΓòÉ 3.2. Explanations of Trap Codes ΓòÉΓòÉΓòÉ
  306.  
  307. A trap 0000 occurs when a program attempts to divide a number by zero or the 
  308. result of the operation is too large for the overflow register to handle it. 
  309. [SYS1930] 
  310.  
  311. A trap 0001 is caused when a program enables the single step interrupt when not 
  312. being run by a debugger. [SYS1931] 
  313.  
  314. A trap 0002 is caused when an Non-Masked Interrupt (NMI) is generated by the 
  315. system for a catastrophic error. Four possible causes of this are: 
  316.  
  317.      Error  Cause 
  318.      110    Planar parity error: memory or system board 
  319.      111    I/O parity error: memory adapter or memory 
  320.      112    Watchdog time-out: any adapter, system board 
  321.      113    DMA arbitration time-out: any adapter, system board 
  322.  
  323.  A trap 0003 is caused when the program called an INT3 without being run by 
  324.  debug. This happened because debugging code was left in the program either 
  325.  accidentally or by design. [SYS1933] 
  326.  
  327.  A trap 0004 is caused when a program started an INTO instruction without 
  328.  registering an overflow exception handler. [SYS1934] 
  329.  
  330.  A trap 0005 is caused when a program started a BOUND instruction without 
  331.  registering a bound exception handler. [SYS1935] 
  332.  
  333.  A trap 0006 is caused when a program started an invalid instruction without 
  334.  registering an invalid opcode exception handler. [SYS1936] 
  335.  
  336.  A trap 0007 is caused when a program called for a numeric coprocessor 
  337.  instruction without a coprocessor in the system and without registering a 
  338.  processor extension not available exception handler. [SYS1937] 
  339.  
  340.  A trap 0008 is caused when the processor detects an exception while processing 
  341.  another exception. [SYS1938] 
  342.  
  343.  A trap 0009 is caused when a program runs a numeric coprocessor instruction 
  344.  that tries to read or write past the end of the storage segment. [SYS1939] 
  345.  
  346.  A trap 000A is caused when a program attempts a task switch to an invalid task 
  347.  switch segment. [SYS1940] 
  348.  
  349.  A trap 000B is caused when a program attempts to reference a memory segment 
  350.  that isn't present. [SYS1941] 
  351.  
  352.  A trap 000C is caused when a program attempts to push more data onto the stack 
  353.  than it can hold, call too many subroutines, take more data off the stack than 
  354.  was pushed onto it or return more subroutines than were called. [SYS1942] 
  355.  
  356.  A trap 000D is caused (but not limited to) when a program references storage 
  357.  outside the limit of the memory segment, references a storage segment that is 
  358.  restricted to privileged code, references storage with a selector value of 
  359.  zero, writing read-only memory or code segment, reading from an execute-only 
  360.  code segment or loading an invalid value into a selector register. [SYS1943] 
  361.  
  362.  A trap 000E is caused when a page being referenced is not present in memory, 
  363.  the procedure referencing the page doesn't have enough privilege to access the 
  364.  page or the address range was allocated but no storage is committed. 
  365.  
  366.  A trap 000F is reserved by Intel. It's not for our use. 
  367.  
  368.  A trap 0010 is caused when the processor detects an error from the 
  369.  coprocessor, either by hardware or software. 
  370.  
  371.  
  372. ΓòÉΓòÉΓòÉ 3.3. Internal Processing Errors ΓòÉΓòÉΓòÉ
  373.  
  374. Although not exactly a trap error, an Internal Processing Error (IPE) is 
  375. associated with a SYS1915 error, which can be caused by the same conditions as 
  376. a trap error and subsequently are solved in the same manner. 
  377.  
  378. The key to determining the type of error is in interpreting the error message. 
  379. A message "The system has detected an internal processing error at location 
  380. ##0160:FFF6FC01-000D:00015C01....." would tell you that you should follow the 
  381. trouble shooting procedures for a trap 000D error. Locate the error message by 
  382. finding the three zeros followed by a letter or number (...01-000D:00...). In 
  383. the IPE message, it will generally fall after the first cluster of digits. 
  384.  
  385. OS/2 FixPak14 added to the information available for a Trap 0002 by giving 
  386. additional information in the ErrCode field. This is explained in the 
  387. following. 
  388.  
  389. PROBLEM CONCLUSION: This problem has been corrected in FixPak 14 for Warp. The 
  390. ERRCD field will now contain the values from the hardware port 0x61 and on EISA 
  391. bus will also read port 0x461. The following codes represent the indicated 
  392. actions needed: 
  393.  
  394.  0000  Software caused NMI 
  395.  0001  RAM error, check memory (parity error) 
  396.  0002  Adapter caused error (I/O channel check) 
  397.  0003  Check bus mastering adapters, update adapter drivers. Also disable bus 
  398.        mastering on failing adapters as a problem determination tool to figure 
  399.        out which adapter is causing the failure. Contact the adapter vendor for 
  400.        further assistance. (DMA timeout) 
  401.  0004  A device driver or Dos application disabled interrupts too long. Contact 
  402.        appropriate software vendor for updated software (Watchdog timeout). 
  403.  0005  Contact application or device driver hardware vendor (software generated 
  404.        NMI). 
  405.  0006  see error code 0003. 
  406.  0007  see error code 0004. 
  407.  0008  see error code 0002. 
  408.  0009  see error code 0001. 
  409.  
  410.  
  411. ΓòÉΓòÉΓòÉ 3.3.1. Related Error Messages ΓòÉΓòÉΓòÉ
  412.  
  413. The following built in OS/2 error messages can be queried to see additional 
  414. help for the error codes: 
  415.  
  416.           For this ERRCD:     Type HELP <number> to get more help 
  417.           0000                1944 
  418.           0001                1945 
  419.           0002                1946 
  420.           0003                1947 
  421.           0004                1948 
  422.           0005                3140 
  423.           0006                3141 
  424.           0007                3142 
  425.           0008                3143 
  426.           0009                3144 
  427.  
  428.  (Example: Typing HELP 1945 from an OS/2 command prompt will provide additional 
  429.  useful information about the failure that occurred.)