signal.inc 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  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. trap_no : dword;
  217. error_code : dword;
  218. oldmask : dword;
  219. arm_r0 : dword;
  220. arm_r1 : dword;
  221. arm_r2 : dword;
  222. arm_r3 : dword;
  223. arm_r4 : dword;
  224. arm_r5 : dword;
  225. arm_r6 : dword;
  226. arm_r7 : dword;
  227. arm_r8 : dword;
  228. arm_r9 : dword;
  229. arm_r10 : dword;
  230. arm_fp : dword;
  231. arm_ip : dword;
  232. arm_sp : dword;
  233. arm_lr : dword;
  234. arm_pc : dword;
  235. arm_cpsr : dword;
  236. fault_address : dword;
  237. end;
  238. {$endif cpuarm}
  239. (*
  240. PSigInfoRec = ^SigInfoRec;
  241. SigInfoRec = record
  242. si_signo: longint;
  243. si_errno: longint;
  244. si_code: longint;
  245. case longint of
  246. 0:
  247. (pad: array[SI_PAD_SIZE] of longint);
  248. 1: { kill }
  249. ( kill: record
  250. pid: longint; { sender's pid }
  251. uid : longint; { sender's uid }
  252. end );
  253. 2: { POSIX.1b timers }
  254. ( timer : record
  255. timer1 : cardinal;
  256. timer2 : cardinal;
  257. end );
  258. 3: { POSIX.1b signals }
  259. ( rt : record
  260. pid : longint; { sender's pid }
  261. uid : longint; { sender's uid }
  262. sigval : longint;
  263. end );
  264. 4: { SIGCHLD }
  265. ( sigchld : record
  266. pid : longint; { which child }
  267. uid : longint; { sender's uid }
  268. status : longint; { exit code }
  269. utime : timeval;
  270. stime : timeval;
  271. end );
  272. 5: { SIGILL, SIGFPE, SIGSEGV, SIGBUS }
  273. ( sigfault : record
  274. addr : pointer;{ faulting insn/memory ref. }
  275. end );
  276. 6:
  277. ( sigpoll : record
  278. band : longint; { POLL_IN, POLL_OUT, POLL_MSG }
  279. fd : longint;
  280. end );
  281. end;
  282. *)
  283. SignalHandler = Procedure(Sig : Longint);cdecl;
  284. PSignalHandler = ^SignalHandler;
  285. SignalRestorer = Procedure;cdecl;
  286. PSignalRestorer = ^SignalRestorer;
  287. TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
  288. SigActionRec = packed record // this is temporary for the migration
  289. {$ifdef posixworkaround}
  290. sa_handler : signalhandler;
  291. {$else}
  292. Handler : record
  293. case byte of
  294. 0: (Sh: SignalHandler);
  295. 1: (Sa: TSigAction);
  296. end;
  297. {$endif}
  298. Sa_Mask : SigSet;
  299. Sa_Flags : Longint;
  300. Sa_restorer : SignalRestorer; { Obsolete - Don't use }
  301. end;
  302. TSigActionRec = SigActionRec;
  303. PSigActionRec = ^SigActionRec;
  304. {
  305. $Log$
  306. Revision 1.14 2003-11-21 00:40:06 florian
  307. * some arm issues fixed
  308. Revision 1.13 2003/11/02 14:53:06 jonas
  309. + sighand and associated record definitions for ppc. Untested.
  310. Revision 1.12 2003/09/14 20:15:01 marco
  311. * Unix reform stage two. Remove all calls from Unix that exist in Baseunix.
  312. Revision 1.11 2003/09/03 14:09:37 florian
  313. * arm fixes to the common rtl code
  314. * some generic math code fixed
  315. * ...
  316. Revision 1.10 2003/08/21 22:24:52 olle
  317. - removed parameter from fpc_iocheck
  318. Revision 1.9 2002/12/24 21:30:20 mazen
  319. - some writeln(s) removed in compiler
  320. + many files added to RTL
  321. * some errors fixed in RTL
  322. Revision 1.8 2002/12/18 16:43:26 marco
  323. * new unix rtl, linux part.....
  324. Revision 1.7 2002/11/12 14:51:44 marco
  325. * signal.
  326. Revision 1.6 2002/09/07 16:01:19 peter
  327. * old logs removed and tabs fixed
  328. Revision 1.5 2002/07/28 20:43:48 florian
  329. * several fixes for linux/powerpc
  330. * several fixes to MT
  331. }