123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- {
- $Id$
- This file is part of the Free Pascal run time library.
- Copyright (c) 1999-2000 by Jonas Maebe,
- member of the Free Pascal development team.
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
- **********************************************************************}
- {$packrecords C}
- const
- SI_PAD_SIZE = ((128/sizeof(longint)) - 3);
- type
- tfpreg = record
- significand: array[0..3] of word;
- exponent: word;
- end;
- pfpstate = ^tfpstate;
- tfpstate = record
- cw, sw, tag, ipoff, cssel, dataoff, datasel: cardinal;
- st: array[0..7] of tfpreg;
- status: cardinal;
- end;
- PSigContextRec = ^SigContextRec;
- SigContextRec = record
- gs, __gsh: word;
- fs, __fsh: word;
- es, __esh: word;
- ds, __dsh: word;
- edi: cardinal;
- esi: cardinal;
- ebp: cardinal;
- esp: cardinal;
- ebx: cardinal;
- edx: cardinal;
- ecx: cardinal;
- eax: cardinal;
- trapno: cardinal;
- err: cardinal;
- eip: cardinal;
- cs, __csh: word;
- eflags: cardinal;
- esp_at_signal: cardinal;
- ss, __ssh: word;
- fpstate: pfpstate;
- oldmask: cardinal;
- cr2: cardinal;
- end;
- (*
- PSigInfoRec = ^SigInfoRec;
- SigInfoRec = record
- si_signo: longint;
- si_errno: longint;
- si_code: longint;
- case longint of
- 0:
- (pad: array[SI_PAD_SIZE] of longint);
- 1: { kill }
- ( kill: record
- pid: longint; { sender's pid }
- uid : longint; { sender's uid }
- end );
- 2: { POSIX.1b timers }
- ( timer : record
- timer1 : cardinal;
- timer2 : cardinal;
- end );
- 3: { POSIX.1b signals }
- ( rt : record
- pid : longint; { sender's pid }
- uid : longint; { sender's uid }
- sigval : longint;
- end );
- 4: { SIGCHLD }
- ( sigchld : record
- pid : longint; { which child }
- uid : longint; { sender's uid }
- status : longint; { exit code }
- utime : timeval;
- stime : timeval;
- end );
- 5: { SIGILL, SIGFPE, SIGSEGV, SIGBUS }
- ( sigfault : record
- addr : pointer;{ faulting insn/memory ref. }
- end );
- 6:
- ( sigpoll : record
- band : longint; { POLL_IN, POLL_OUT, POLL_MSG }
- fd : longint;
- end );
- end;
- *)
- SignalHandler = Procedure(Sig : Longint);cdecl;
- PSignalHandler = ^SignalHandler;
- SignalRestorer = Procedure;cdecl;
- PSignalRestorer = ^SignalRestorer;
- TSigAction = procedure(Sig: Longint; SigContext: SigContextRec);cdecl;
- SigSet = Longint;
- PSigSet = ^SigSet;
- SigActionRec = packed record
- Handler : record
- case byte of
- 0: (Sh: SignalHandler);
- 1: (Sa: TSigAction);
- end;
- Sa_Mask : SigSet;
- Sa_Flags : Longint;
- Sa_restorer : SignalRestorer; { Obsolete - Don't use }
- end;
- PSigActionRec = ^SigActionRec;
- Procedure SigAction(Signum:Integer;Act,OldAct:PSigActionRec );
- {
- Change action of process upon receipt of a signal.
- Signum specifies the signal (all except SigKill and SigStop).
- If Act is non-nil, it is used to specify the new action.
- If OldAct is non-nil the previous action is saved there.
- }
- Var
- sr : Syscallregs;
- begin
- sr.reg2:=Signum;
- sr.reg3:=Longint(act);
- sr.reg4:=Longint(oldact);
- SysCall(Syscall_nr_sigaction,sr);
- end;
- {
- $Log$
- Revision 1.4 2003-03-29 16:55:56 michael
- + Patch from Mattias Gaertner for single typeinfo
- Revision 1.3 2002/09/07 16:01:20 peter
- * old logs removed and tabs fixed
- }
|