signal.inc 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228
  1. {
  2. $Id$
  3. This file is part of the Free Pascal run time library.
  4. Copyright (c) 1999-2000 by Jonas Maebe,
  5. member of the Free Pascal development team.
  6. See the file COPYING.FPC, included in this distribution,
  7. for details about the copyright.
  8. This program is distributed in the hope that it will be useful,
  9. but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  11. **********************************************************************}
  12. {$packrecords C}
  13. {********************
  14. Signal
  15. ********************}
  16. Const
  17. { For sending a signal }
  18. SA_NOCLDSTOP = 1;
  19. SA_SHIRQ = $04000000;
  20. SA_STACK = $08000000;
  21. SA_RESTART = $10000000;
  22. SA_INTERRUPT = $20000000;
  23. SA_NOMASK = $40000000;
  24. SA_ONESHOT = $80000000;
  25. SIG_BLOCK = 0;
  26. SIG_UNBLOCK = 1;
  27. SIG_SETMASK = 2;
  28. SIG_DFL = 0 ;
  29. SIG_IGN = 1 ;
  30. SIG_ERR = -1 ;
  31. SIGHUP = 1;
  32. SIGINT = 2;
  33. SIGQUIT = 3;
  34. SIGILL = 4;
  35. SIGTRAP = 5;
  36. SIGABRT = 6;
  37. SIGIOT = 6;
  38. SIGBUS = 7;
  39. SIGFPE = 8;
  40. SIGKILL = 9;
  41. SIGUSR1 = 10;
  42. SIGSEGV = 11;
  43. SIGUSR2 = 12;
  44. SIGPIPE = 13;
  45. SIGALRM = 14;
  46. SIGTerm = 15;
  47. SIGSTKFLT = 16;
  48. SIGCHLD = 17;
  49. SIGCONT = 18;
  50. SIGSTOP = 19;
  51. SIGTSTP = 20;
  52. SIGTTIN = 21;
  53. SIGTTOU = 22;
  54. SIGURG = 23;
  55. SIGXCPU = 24;
  56. SIGXFSZ = 25;
  57. SIGVTALRM = 26;
  58. SIGPROF = 27;
  59. SIGWINCH = 28;
  60. SIGIO = 29;
  61. SIGPOLL = SIGIO;
  62. SIGPWR = 30;
  63. SIGUNUSED = 31;
  64. const
  65. SI_PAD_SIZE = ((128 div sizeof(longint)) - 3);
  66. type
  67. tfpreg = record
  68. significand: array[0..3] of word;
  69. exponent: word;
  70. end;
  71. pfpstate = ^tfpstate;
  72. tfpstate = record
  73. cw, sw, tag, ipoff, cssel, dataoff, datasel: cardinal;
  74. st: array[0..7] of tfpreg;
  75. status: cardinal;
  76. end;
  77. {$ifdef i386}
  78. PSigContextRec = ^SigContextRec;
  79. SigContextRec = record
  80. gs, __gsh: word;
  81. fs, __fsh: word;
  82. es, __esh: word;
  83. ds, __dsh: word;
  84. edi: cardinal;
  85. esi: cardinal;
  86. ebp: cardinal;
  87. esp: cardinal;
  88. ebx: cardinal;
  89. edx: cardinal;
  90. ecx: cardinal;
  91. eax: cardinal;
  92. trapno: cardinal;
  93. err: cardinal;
  94. eip: cardinal;
  95. cs, __csh: word;
  96. eflags: cardinal;
  97. esp_at_signal: cardinal;
  98. ss, __ssh: word;
  99. fpstate: pfpstate;
  100. oldmask: cardinal;
  101. cr2: cardinal;
  102. end;
  103. {$endif i386}
  104. {$Ifdef m68k}
  105. PSigContextRec = ^SigContextRec;
  106. SigContextRec = record
  107. { dummy for now PM }
  108. end;
  109. {$endif m68k}
  110. {$ifdef powerpc}
  111. PSigContextRec = ^SigContextRec;
  112. SigContextRec = record
  113. { dummy for now PM }
  114. end;
  115. {$endif powerpc}
  116. (*
  117. PSigInfoRec = ^SigInfoRec;
  118. SigInfoRec = record
  119. si_signo: longint;
  120. si_errno: longint;
  121. si_code: longint;
  122. case longint of
  123. 0:
  124. (pad: array[SI_PAD_SIZE] of longint);
  125. 1: { kill }
  126. ( kill: record
  127. pid: longint; { sender's pid }
  128. uid : longint; { sender's uid }
  129. end );
  130. 2: { POSIX.1b timers }
  131. ( timer : record
  132. timer1 : cardinal;
  133. timer2 : cardinal;
  134. end );
  135. 3: { POSIX.1b signals }
  136. ( rt : record
  137. pid : longint; { sender's pid }
  138. uid : longint; { sender's uid }
  139. sigval : longint;
  140. end );
  141. 4: { SIGCHLD }
  142. ( sigchld : record
  143. pid : longint; { which child }
  144. uid : longint; { sender's uid }
  145. status : longint; { exit code }
  146. utime : timeval;
  147. stime : timeval;
  148. end );
  149. 5: { SIGILL, SIGFPE, SIGSEGV, SIGBUS }
  150. ( sigfault : record
  151. addr : pointer;{ faulting insn/memory ref. }
  152. end );
  153. 6:
  154. ( sigpoll : record
  155. band : longint; { POLL_IN, POLL_OUT, POLL_MSG }
  156. fd : longint;
  157. end );
  158. end;
  159. *)
  160. SignalHandler = Procedure(Sig : Longint);cdecl;
  161. PSignalHandler = ^SignalHandler;
  162. SignalRestorer = Procedure;cdecl;
  163. PSignalRestorer = ^SignalRestorer;
  164. TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
  165. SigSet = Longint;
  166. PSigSet = ^SigSet;
  167. SigActionRec = packed record
  168. Handler : record
  169. case byte of
  170. 0: (Sh: SignalHandler);
  171. 1: (Sa: TSigAction);
  172. end;
  173. Sa_Mask : SigSet;
  174. Sa_Flags : Longint;
  175. Sa_restorer : SignalRestorer; { Obsolete - Don't use }
  176. end;
  177. PSigActionRec = ^SigActionRec;
  178. {
  179. $Log$
  180. Revision 1.5 2002-07-28 20:43:48 florian
  181. * several fixes for linux/powerpc
  182. * several fixes to MT
  183. Revision 1.4 2001/06/27 21:37:38 peter
  184. * v10 merges
  185. Revision 1.3 2001/04/04 22:50:59 peter
  186. * use div instead of / in constant
  187. Revision 1.2 2000/09/11 14:05:31 marco
  188. * FreeBSD support and removed old signalhandling
  189. Revision 1.1.2.1 2000/09/10 16:17:25 marco
  190. * added (moved from sockets.pp and i386/signal.inc)
  191. Revision 1.1 2000/07/13 06:30:55 michael
  192. + Initial import
  193. Revision 1.2 2000/03/31 23:11:23 pierre
  194. * TSigAction Context param is the full record not a pointer
  195. Revision 1.1 2000/03/31 13:24:28 jonas
  196. * signal handling using sigaction when compiled with -dnewsignal
  197. (allows multiple signals to be received in one run)
  198. }