2
0

signal.inc 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  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. SigSet = array[0..wordsinsigset-1] of Longint;
  78. sigset_t= SigSet;
  79. PSigSet = ^SigSet;
  80. psigset_t=psigset;
  81. TSigSet = SigSet;
  82. {$ifdef cpui386}
  83. PSigContextRec = ^SigContextRec;
  84. SigContextRec = record
  85. gs, __gsh: word;
  86. fs, __fsh: word;
  87. es, __esh: word;
  88. ds, __dsh: word;
  89. edi: cardinal;
  90. esi: cardinal;
  91. ebp: cardinal;
  92. esp: cardinal;
  93. ebx: cardinal;
  94. edx: cardinal;
  95. ecx: cardinal;
  96. eax: cardinal;
  97. trapno: cardinal;
  98. err: cardinal;
  99. eip: cardinal;
  100. cs, __csh: word;
  101. eflags: cardinal;
  102. esp_at_signal: cardinal;
  103. ss, __ssh: word;
  104. fpstate: pfpstate;
  105. oldmask: cardinal;
  106. cr2: cardinal;
  107. end;
  108. {$endif cpui386}
  109. {$Ifdef cpum68k}
  110. PSigContextRec = ^SigContextRec;
  111. SigContextRec = record
  112. { dummy for now PM }
  113. end;
  114. {$endif cpum68k}
  115. {$ifdef cpupowerpc}
  116. { from include/ppc/ptrace.h }
  117. pptregs = ^tptregs;
  118. tptregs = record
  119. gpr: array[0..31] of cardinal;
  120. nip: cardinal;
  121. msr: cardinal;
  122. orig_gpr3: cardinal; { Used for restarting system calls }
  123. ctr: cardinal;
  124. link: cardinal;
  125. xer: cardinal;
  126. ccr: cardinal;
  127. mq: cardinal; { 601 only (not used at present) }
  128. { Used on APUS to hold IPL value. }
  129. trap: cardinal; { Reason for being here }
  130. dar: cardinal; { Fault registers }
  131. dsisr: cardinal;
  132. result: cardinal; { Result of a system call }
  133. end;
  134. { from include/asm/ppc/siginfo.h }
  135. psiginfo = ^tsiginfo;
  136. tsiginfo = record
  137. si_signo : longint;
  138. si_errno : longint;
  139. si_code : longint;
  140. _sifields : record
  141. case longint of
  142. 0 : ( _pad : array[0..(SI_PAD_SIZE)-1] of longint );
  143. 1 : ( _kill : record
  144. _pid : pid_t;
  145. _uid : uid_t;
  146. end );
  147. 2 : ( _timer : record
  148. _timer1 : dword;
  149. _timer2 : dword;
  150. end );
  151. 3 : ( _rt : record
  152. _pid : pid_t;
  153. _uid : uid_t;
  154. _sigval : pointer;
  155. end );
  156. 4 : ( _sigchld : record
  157. _pid : pid_t;
  158. _uid : uid_t;
  159. _status : longint;
  160. _utime : clock_t;
  161. _stime : clock_t;
  162. end );
  163. 5 : ( _sigfault : record
  164. _addr : pointer;
  165. end );
  166. 6 : ( _sigpoll : record
  167. _band : longint;
  168. _fd : longint;
  169. end );
  170. end;
  171. end;
  172. { from include/asm-ppc/signal.h }
  173. stack_t = record
  174. ss_sp: pointer;
  175. ss_flags: longint;
  176. ss_size: size_t;
  177. end;
  178. { from include/asm-ppc/sigcontext.h }
  179. tsigcontext_struct = record
  180. _unused: array[0..3] of dword;
  181. signal: longint;
  182. handler: dword;
  183. oldmask: dword;
  184. pt_regs: pptregs;
  185. end;
  186. { from include/asm-ppc/ucontext.h }
  187. pucontext = ^tucontext;
  188. tucontext = record
  189. uc_flags : dword;
  190. uc_link : pucontext;
  191. uc_stack : stack_t;
  192. uc_mcontext : tsigcontext_struct;
  193. uc_sigmask : sigset_t;
  194. end;
  195. { from arch/ppc/kernel/signal.c, the type of the actual parameter passed }
  196. { to the sigaction handler }
  197. t_rt_sigframe = record
  198. _unused: array[0..1] of cardinal;
  199. pinfo: psiginfo;
  200. puc: pointer;
  201. siginfo: tsiginfo;
  202. uc: tucontext;
  203. end;
  204. PSigContextRec = ^SigContextRec;
  205. SigContextRec = t_rt_sigframe;
  206. {$endif cpupowerpc}
  207. {$ifdef cpusparc}
  208. PSigContextRec = ^SigContextRec;
  209. SigContextRec = record
  210. { dummy for now PM }
  211. end;
  212. {$endif cpusparc}
  213. {$ifdef cpuarm}
  214. PSigContextRec = ^SigContextRec;
  215. SigContextRec = record
  216. { dummy for now PM }
  217. end;
  218. {$endif cpuarm}
  219. (*
  220. PSigInfoRec = ^SigInfoRec;
  221. SigInfoRec = record
  222. si_signo: longint;
  223. si_errno: longint;
  224. si_code: longint;
  225. case longint of
  226. 0:
  227. (pad: array[SI_PAD_SIZE] of longint);
  228. 1: { kill }
  229. ( kill: record
  230. pid: longint; { sender's pid }
  231. uid : longint; { sender's uid }
  232. end );
  233. 2: { POSIX.1b timers }
  234. ( timer : record
  235. timer1 : cardinal;
  236. timer2 : cardinal;
  237. end );
  238. 3: { POSIX.1b signals }
  239. ( rt : record
  240. pid : longint; { sender's pid }
  241. uid : longint; { sender's uid }
  242. sigval : longint;
  243. end );
  244. 4: { SIGCHLD }
  245. ( sigchld : record
  246. pid : longint; { which child }
  247. uid : longint; { sender's uid }
  248. status : longint; { exit code }
  249. utime : timeval;
  250. stime : timeval;
  251. end );
  252. 5: { SIGILL, SIGFPE, SIGSEGV, SIGBUS }
  253. ( sigfault : record
  254. addr : pointer;{ faulting insn/memory ref. }
  255. end );
  256. 6:
  257. ( sigpoll : record
  258. band : longint; { POLL_IN, POLL_OUT, POLL_MSG }
  259. fd : longint;
  260. end );
  261. end;
  262. *)
  263. SignalHandler = Procedure(Sig : Longint);cdecl;
  264. PSignalHandler = ^SignalHandler;
  265. SignalRestorer = Procedure;cdecl;
  266. PSignalRestorer = ^SignalRestorer;
  267. TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
  268. SigActionRec = packed record // this is temporary for the migration
  269. {$ifdef posixworkaround}
  270. sa_handler : signalhandler;
  271. {$else}
  272. Handler : record
  273. case byte of
  274. 0: (Sh: SignalHandler);
  275. 1: (Sa: TSigAction);
  276. end;
  277. {$endif}
  278. Sa_Mask : SigSet;
  279. Sa_Flags : Longint;
  280. Sa_restorer : SignalRestorer; { Obsolete - Don't use }
  281. end;
  282. TSigActionRec = SigActionRec;
  283. PSigActionRec = ^SigActionRec;
  284. {
  285. $Log$
  286. Revision 1.13 2003-11-02 14:53:06 jonas
  287. + sighand and associated record definitions for ppc. Untested.
  288. Revision 1.12 2003/09/14 20:15:01 marco
  289. * Unix reform stage two. Remove all calls from Unix that exist in Baseunix.
  290. Revision 1.11 2003/09/03 14:09:37 florian
  291. * arm fixes to the common rtl code
  292. * some generic math code fixed
  293. * ...
  294. Revision 1.10 2003/08/21 22:24:52 olle
  295. - removed parameter from fpc_iocheck
  296. Revision 1.9 2002/12/24 21:30:20 mazen
  297. - some writeln(s) removed in compiler
  298. + many files added to RTL
  299. * some errors fixed in RTL
  300. Revision 1.8 2002/12/18 16:43:26 marco
  301. * new unix rtl, linux part.....
  302. Revision 1.7 2002/11/12 14:51:44 marco
  303. * signal.
  304. Revision 1.6 2002/09/07 16:01:19 peter
  305. * old logs removed and tabs fixed
  306. Revision 1.5 2002/07/28 20:43:48 florian
  307. * several fixes for linux/powerpc
  308. * several fixes to MT
  309. }