signal.inc 9.3 KB

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