|
@@ -14,9 +14,7 @@ CONST
|
|
|
Version* = "LinuxG32";
|
|
|
|
|
|
libcname* = "libc.so.6";
|
|
|
- libmname* = "libm.so.6";
|
|
|
libX11name* = "libX11.so.6";
|
|
|
- libXextname* = "libXext.so.6";
|
|
|
libpthreadname = "libpthread.so.0";
|
|
|
|
|
|
LittleEndian* = TRUE; (** byte order of basic types *)
|
|
@@ -126,18 +124,18 @@ CONST
|
|
|
SIG_UNBLOCK=1;
|
|
|
SIG_SETMASK=2;
|
|
|
|
|
|
- SA_NOCLDSTOP = 0x00000001;
|
|
|
- SA_SIGINFO = 0x00000004;
|
|
|
- SA_ONSTACK = 0x08000000;
|
|
|
- SA_RESTART = 0x10000000;
|
|
|
- SA_NODEFER = 0x40000000;
|
|
|
- SA_RESETHAND = 0x80000000;
|
|
|
+ SA_NOCLDSTOP = 0x00000001;
|
|
|
+ SA_SIGINFO = 0x00000004;
|
|
|
+ SA_ONSTACK = 0x08000000;
|
|
|
+ SA_RESTART = 0x10000000;
|
|
|
+ SA_NODEFER = 0x40000000;
|
|
|
+ SA_RESETHAND = 0x80000000;
|
|
|
|
|
|
- PTHREAD_CANCEL_ENABLE = 0;
|
|
|
- PTHREAD_CANCEL_DISABLE = 1;
|
|
|
+ PTHREAD_CANCEL_ENABLE = 0;
|
|
|
+ PTHREAD_CANCEL_DISABLE = 1;
|
|
|
|
|
|
- PTHREAD_CANCEL_ASYNCHRONOUS =0;
|
|
|
- PTHREAD_CANCEL_DEFERRED = 1;
|
|
|
+ PTHREAD_CANCEL_ASYNCHRONOUS = 0;
|
|
|
+ PTHREAD_CANCEL_DEFERRED = 1;
|
|
|
|
|
|
(*--------------------------- Threads -------------------------------*)
|
|
|
|
|
@@ -145,10 +143,7 @@ TYPE
|
|
|
Thread_t* = ADDRESS;
|
|
|
Mutex_t* = ADDRESS;
|
|
|
MutexType = ARRAY 8 OF ADDRESS;
|
|
|
- (*
|
|
|
- Mutex = ARRAY 8 OF ADDRESS;
|
|
|
- Mutex_t* = POINTER TO Mutex;
|
|
|
- *)
|
|
|
+
|
|
|
Condition_t* = ADDRESS;
|
|
|
ConditionType = ARRAY 12 OF WORD;
|
|
|
|
|
@@ -156,6 +151,11 @@ TYPE
|
|
|
SignalHandler = PROCEDURE ( sig: LONGINT; scp, ucp, dum: ADDRESS );
|
|
|
|
|
|
MutexAttributeType = ARRAY 1 OF WORD;
|
|
|
+
|
|
|
+ pid_t *= LONGINT;
|
|
|
+ path_t *= ARRAY OF CHAR;
|
|
|
+ arg_t *= ARRAY OF CHAR;
|
|
|
+ argv_t *= ARRAY OF arg_t;
|
|
|
|
|
|
|
|
|
CONST
|
|
@@ -240,28 +240,12 @@ CONST
|
|
|
CS7* = {5};
|
|
|
CS8* = {4,5};
|
|
|
CSTOPB* = {6};
|
|
|
- CREAD* = {7};
|
|
|
+ CREAD* = {7};
|
|
|
PARENB* = {8};
|
|
|
PARODD* = {9};
|
|
|
HUPCL* = {10};
|
|
|
CLOCAL* = {11};
|
|
|
|
|
|
- (*
|
|
|
- PTRACE_TRACEME = 0;
|
|
|
- PTRACE_PEEKTEXT = 1;
|
|
|
- PTRACE_PEEKDATA = 2;
|
|
|
- PTRACE_PEEKUSR = 3;
|
|
|
- PTRACE_POKETEXT = 4;
|
|
|
- PTRACE_POKEDATA = 5;
|
|
|
- PTRACE_POKEUSR = 6;
|
|
|
- PTRACE_CONT = 7;
|
|
|
- PTRACE_KILL = 8;
|
|
|
- PTRACE_SINGLESTEP = 9;
|
|
|
- PTRACE_ATTACH = 16;
|
|
|
- PTRACE_DETACH = 17;
|
|
|
- PTRACE_GETREGS = 12;
|
|
|
- PTRACE_SETREGS = 13;
|
|
|
- *)
|
|
|
|
|
|
TYPE
|
|
|
Termios* = RECORD
|
|
@@ -356,7 +340,7 @@ TYPE
|
|
|
r_ds- : ADDRESS;
|
|
|
r_di- : ADDRESS;
|
|
|
r_si- : ADDRESS;
|
|
|
- r_bp * : ADDRESS;
|
|
|
+ r_bp * : ADDRESS;
|
|
|
r_sp_x- : ADDRESS;
|
|
|
r_bx- : ADDRESS;
|
|
|
r_dx- : ADDRESS;
|
|
@@ -364,10 +348,10 @@ TYPE
|
|
|
r_ax- : ADDRESS;
|
|
|
r_trapno- : LONGINT;
|
|
|
r_err- : LONGINT;
|
|
|
- r_pc * : ADDRESS;
|
|
|
+ r_pc* : ADDRESS;
|
|
|
r_cs- : ADDRESS;
|
|
|
r_flags- : LONGINT;
|
|
|
- r_sp * : ADDRESS; (* sp at error (signal) *)
|
|
|
+ r_sp* : ADDRESS; (* sp at error (signal) *)
|
|
|
r_ss- : LONGINT;
|
|
|
fpc- : ADDRESS; (* FPcontext *)
|
|
|
oldmask- : LONGINT;
|
|
@@ -384,13 +368,6 @@ TYPE
|
|
|
reserved2-: ARRAY 4 OF WORD;
|
|
|
END;
|
|
|
|
|
|
- PtraceRegsStruct = RECORD
|
|
|
- ebx, ecx, edx, esi, edi, ebp, eax: WORD;
|
|
|
- DS, ES, FS, GS, AX, IP, CS: WORD;
|
|
|
- flags: SET;
|
|
|
- esp: WORD;
|
|
|
- ss: WORD;
|
|
|
- END;
|
|
|
|
|
|
Sigaction = RECORD
|
|
|
sa_handler: ADDRESS;
|
|
@@ -550,35 +527,6 @@ VAR
|
|
|
|
|
|
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- (*
|
|
|
- mtxInit: PROCEDURE {REALTIME, C} ( dummy: LONGINT ): Unix.Mutex_t;
|
|
|
- mtxDestroy: PROCEDURE {REALTIME, C} ( mtx: Unix.Mutex_t );
|
|
|
- mtxLock: PROCEDURE {REALTIME, C} ( mtx: Unix.Mutex_t );
|
|
|
- mtxUnlock: PROCEDURE {REALTIME, C} ( mtx: Unix.Mutex_t );
|
|
|
-
|
|
|
- conInit: PROCEDURE {REALTIME, C} ( dummy: LONGINT ): Unix.Condition_t;
|
|
|
- conDestroy: PROCEDURE {REALTIME, C} ( cond: Unix.Condition_t );
|
|
|
- conWait: PROCEDURE {REALTIME, C} ( cond: Unix.Condition_t; mtx: Unix.Mutex_t );
|
|
|
- conSignal: PROCEDURE {REALTIME, C} ( cond: Unix.Condition_t );
|
|
|
-
|
|
|
- thrStart: PROCEDURE {REALTIME, C} ( p: PROCEDURE; stackLen: LONGINT ): Unix.Thread_t;
|
|
|
- thrThis: PROCEDURE {REALTIME, C} ( dummy: LONGINT ): Unix.Thread_t;
|
|
|
- thrSleep: PROCEDURE {REALTIME, C} ( ms: LONGINT );
|
|
|
- thrYield: PROCEDURE {REALTIME, C} ( dummy: LONGINT );
|
|
|
- thrExit: PROCEDURE {REALTIME, C} ( dummy: LONGINT );
|
|
|
- thrSuspend: PROCEDURE {REALTIME, C} ( t: Unix.Thread_t );
|
|
|
- thrResume: PROCEDURE {REALTIME, C} ( t: Unix.Thread_t );
|
|
|
- thrSetPriority: PROCEDURE {REALTIME, C} ( t: Unix.Thread_t; prio: LONGINT );
|
|
|
- thrGetPriority: PROCEDURE {REALTIME, C} ( t: Unix.Thread_t ): LONGINT;
|
|
|
- thrKill: PROCEDURE {REALTIME, C} ( t: Unix.Thread_t );
|
|
|
- *)
|
|
|
-
|
|
|
- TYPE
|
|
|
-
|
|
|
-
|
|
|
PROCEDURE getnprocs* (): LONGINT;
|
|
|
BEGIN
|
|
|
RETURN sysconf(0x54); (*0x53 for number of processors configured, 0x54 for number of processors online *)
|
|
@@ -769,48 +717,31 @@ VAR
|
|
|
|
|
|
PROCEDURE ThrKill*(thr: Thread_t);
|
|
|
BEGIN
|
|
|
- IF (thr # mainthread) THEN
|
|
|
- pthread_detach( thr );
|
|
|
- IF (thr = pthread_self()) THEN
|
|
|
- pthread_exit( 0 );
|
|
|
+ IF (thr # mainthread) THEN
|
|
|
+ pthread_detach( thr );
|
|
|
+ IF (thr = pthread_self()) THEN
|
|
|
+ pthread_exit( 0 );
|
|
|
ELSE
|
|
|
- pthread_cancel( thr );
|
|
|
- END
|
|
|
- END;
|
|
|
+ pthread_cancel( thr );
|
|
|
+ END
|
|
|
+ END;
|
|
|
END ThrKill;
|
|
|
|
|
|
- (* did not work
|
|
|
- PROCEDURE TraceThread*(p: Thread_t);
|
|
|
- VAR regs: PtraceRegsStruct; res: WORD;
|
|
|
- BEGIN
|
|
|
- res := ptrace(PTRACE_ATTACH, p , NIL, NIL);
|
|
|
- IF res < 0 THEN Perror("attach") END;
|
|
|
- TRACE(res);
|
|
|
- res := ptrace(PTRACE_GETREGS,p,NIL, ADDRESS OF regs);
|
|
|
- IF res < 0 THEN Perror("getregs") END;
|
|
|
- TRACE(res);
|
|
|
- TRACE(regs.ebx, regs.ecx, regs.edx, regs.eax);
|
|
|
- TRACE(regs.ebp, regs.esp, regs.IP, regs.flags);
|
|
|
- res := ptrace(PTRACE_DETACH, p, NIL, NIL);
|
|
|
- END TraceThread;
|
|
|
- *)
|
|
|
-
|
|
|
-
|
|
|
- PROCEDURE {C} resume_handler(sig: LONGINT);
|
|
|
+
|
|
|
+ PROCEDURE {C} resume_handler( sig: LONGINT );
|
|
|
BEGIN
|
|
|
END resume_handler;
|
|
|
|
|
|
- PROCEDURE ThrResume*(thr: Thread_t);
|
|
|
- VAR n: LONGINT; res: LONGINT;
|
|
|
+ PROCEDURE ThrResume*( thr: Thread_t );
|
|
|
+ VAR res: LONGINT;
|
|
|
BEGIN
|
|
|
- res := pthread_mutex_lock( ADDRESS OF suspend_mutex );
|
|
|
- resume_done := 0; n := 1;
|
|
|
- res := pthread_kill( thr, T_SIGRESUME );
|
|
|
+ res := pthread_mutex_lock( ADDRESS OF suspend_mutex );
|
|
|
+ resume_done := 0;
|
|
|
+ res := pthread_kill( thr, T_SIGRESUME );
|
|
|
|
|
|
- (* WHILE (resume_done # 1) & (n < 50) DO ThrSleep(1); INC(n) END; *)
|
|
|
WHILE (resume_done # 1) DO ThrSleep(1); END;
|
|
|
|
|
|
- res := pthread_mutex_unlock( ADDRESS OF suspend_mutex );
|
|
|
+ res := pthread_mutex_unlock( ADDRESS OF suspend_mutex );
|
|
|
END ThrResume;
|
|
|
|
|
|
VAR suspendHandler*: PROCEDURE(c: Ucontext);
|
|
@@ -818,7 +749,7 @@ VAR
|
|
|
PROCEDURE {C} suspend_handler(sig: LONGINT; scp: ADDRESS; ucp: ADDRESS);
|
|
|
VAR block: Sigset_t; res: LONGINT;
|
|
|
BEGIN
|
|
|
- IF suspendHandler # NIL THEN suspendHandler(S.VAL(Ucontext,ucp)) END;
|
|
|
+ IF suspendHandler # NIL THEN suspendHandler( S.VAL( Ucontext, ucp) ) END;
|
|
|
res := sigfillset( ADDRESS OF block );
|
|
|
sigdelset( ADDRESS OF block, T_SIGRESUME );
|
|
|
suspend_done := 1; (*this is ok because ThrSuspend is protected by a mutex, so no race condidtion. It may alert the ThrSuspend too early though!*)
|
|
@@ -842,34 +773,34 @@ VAR
|
|
|
|
|
|
|
|
|
|
|
|
- PROCEDURE ThrInitialize*(VAR low, high: LONGINT): BOOLEAN;
|
|
|
+ PROCEDURE ThrInitialize*( VAR low, high: LONGINT ): BOOLEAN;
|
|
|
VAR
|
|
|
param: Sched_param;
|
|
|
- BEGIN
|
|
|
+ BEGIN
|
|
|
(*struct sched_param param;*)
|
|
|
|
|
|
ASSERT(pthread_mutex_init( ADDRESS OF suspend_mutex, NIL ) = 0);
|
|
|
- mainthread := pthread_self();
|
|
|
- high := sched_get_priority_max(SCHED_OTHER);
|
|
|
- low := sched_get_priority_min(SCHED_OTHER);
|
|
|
+ mainthread := pthread_self();
|
|
|
+ high := sched_get_priority_max(SCHED_OTHER);
|
|
|
+ low := sched_get_priority_min(SCHED_OTHER);
|
|
|
|
|
|
- param.sched_priority := high;
|
|
|
+ param.sched_priority := high;
|
|
|
IF pthread_setschedparam( mainthread, SCHED_OTHER, ADDRESS OF param)#0 THEN
|
|
|
Perror("ThrInitialize: setparam");
|
|
|
END;
|
|
|
|
|
|
- sigemptyset( ADDRESS OF sasuspend.sa_mask );
|
|
|
- sigaddset( ADDRESS OF sasuspend.sa_mask, T_SIGRESUME );
|
|
|
- sasuspend.sa_flags := SA_SIGINFO + (*SA_ONSTACK +*) SA_NODEFER;;
|
|
|
- sasuspend.sa_handler := suspend_handler;
|
|
|
- ASSERT(sigaction( T_SIGSUSPEND, ADDRESS OF sasuspend, NIL ) = 0);
|
|
|
+ sigemptyset( ADDRESS OF sasuspend.sa_mask );
|
|
|
+ sigaddset( ADDRESS OF sasuspend.sa_mask, T_SIGRESUME );
|
|
|
+ sasuspend.sa_flags := SA_SIGINFO + (*SA_ONSTACK +*) SA_NODEFER;;
|
|
|
+ sasuspend.sa_handler := suspend_handler;
|
|
|
+ ASSERT(sigaction( T_SIGSUSPEND, ADDRESS OF sasuspend, NIL ) = 0);
|
|
|
|
|
|
- sigemptyset( ADDRESS OF saresume.sa_mask );
|
|
|
- saresume.sa_flags := 0;
|
|
|
- saresume.sa_handler := resume_handler;
|
|
|
- ASSERT(sigaction( T_SIGRESUME, ADDRESS OF saresume, NIL ) = 0);
|
|
|
+ sigemptyset( ADDRESS OF saresume.sa_mask );
|
|
|
+ saresume.sa_flags := 0;
|
|
|
+ saresume.sa_handler := resume_handler;
|
|
|
+ ASSERT(sigaction( T_SIGRESUME, ADDRESS OF saresume, NIL ) = 0);
|
|
|
|
|
|
- RETURN TRUE;
|
|
|
+ RETURN TRUE;
|
|
|
END ThrInitialize;
|
|
|
|
|
|
PROCEDURE CopyContext*(CONST from: McontextDesc; VAR to: McontextDesc);
|
|
@@ -914,7 +845,7 @@ VAR
|
|
|
WHILE p[j] # 0X DO INC( j ) END;
|
|
|
p[j] := '/'; k := 0;
|
|
|
REPEAT INC( j ); p[j] := libname[k]; INC( k ) UNTIL p[j] = 0X;
|
|
|
- h := Glue.dlopen( ADDRESSOF( p ), mode ); INC( i )
|
|
|
+ h := Glue.dlopen( ADDRESSOF( p ), mode ); INC( i );
|
|
|
END
|
|
|
END;
|
|
|
IF h = 0 THEN
|
|
@@ -986,16 +917,7 @@ VAR
|
|
|
sigstk.flags := {};
|
|
|
END CreateSignalStack;
|
|
|
|
|
|
- (*
|
|
|
-static void sighandler( int sig, siginfo_t *scp, void *ucp ) {
|
|
|
|
|
|
- if (debug | (AosTrap == NULL)) {
|
|
|
- printf("\nhandler for signal %d got called, ucp = %p\n", sig, ucp);
|
|
|
- if (AosTrap == NULL) exit(1);
|
|
|
- }
|
|
|
- AosTrap(0, ucp, scp, sig); /* rev. order: Oberon <--> C */
|
|
|
-}
|
|
|
- *)
|
|
|
|
|
|
VAR trap: SignalHandler;
|
|
|
|
|
@@ -1035,33 +957,13 @@ static void sighandler( int sig, siginfo_t *scp, void *ucp ) {
|
|
|
END InstallHandler;
|
|
|
|
|
|
PROCEDURE fstat* ( fd: LONGINT; VAR buf: Status ): LONGINT;
|
|
|
- VAR res: LONGINT;
|
|
|
BEGIN
|
|
|
- (*
|
|
|
- dev- : DevT;
|
|
|
- unused1- : LONGINT;
|
|
|
- ino- : LONGINT;
|
|
|
- mode- : LONGINT;
|
|
|
- nlink- : LONGINT;
|
|
|
- uid- : LONGINT;
|
|
|
- gid- : LONGINT;
|
|
|
- rdev- : DevT;
|
|
|
- unused2- : LONGINT;
|
|
|
- size- : LONGINT;
|
|
|
- blksize- : LONGINT;
|
|
|
- blocks- : LONGINT;
|
|
|
- atime- : Timeval;
|
|
|
- mtime- : Timeval;
|
|
|
- ctime- : Timeval;
|
|
|
- unused- : ARRAY 2 OF LONGINT;
|
|
|
- *)
|
|
|
- res := fxstat(3, fd, buf);
|
|
|
- RETURN res;
|
|
|
+ RETURN fxstat( 3, fd, buf );
|
|
|
END fstat;
|
|
|
|
|
|
PROCEDURE stat* ( path: ADDRESS; VAR buf: Status ): LONGINT;
|
|
|
BEGIN
|
|
|
- RETURN xstat( 3, path, buf );
|
|
|
+ RETURN xstat( 3, path, buf );
|
|
|
END stat;
|
|
|
|
|
|
|
|
@@ -1083,13 +985,9 @@ static void sighandler( int sig, siginfo_t *scp, void *ucp ) {
|
|
|
|
|
|
TYPE OberonXErrorHandler* = PROCEDURE (disp, err: ADDRESS): LONGINT;
|
|
|
TYPE OberonXIOErrorHandler* = PROCEDURE (disp: ADDRESS): LONGINT;
|
|
|
- VAR oberonXErrorHandler:OberonXErrorHandler;
|
|
|
+ VAR oberonXErrorHandler: OberonXErrorHandler;
|
|
|
VAR oberonXIOErrorHandler: OberonXIOErrorHandler;
|
|
|
|
|
|
- TYPE pid_t *= LONGINT;
|
|
|
- TYPE path_t *= ARRAY OF CHAR;
|
|
|
- TYPE arg_t *= ARRAY OF CHAR;
|
|
|
- TYPE argv_t *= ARRAY OF arg_t;
|
|
|
|
|
|
PROCEDURE {C} X11ErrorHandler(d: ADDRESS; err: ADDRESS): WORD;
|
|
|
VAR res: LONGINT;
|
|
@@ -1127,70 +1025,71 @@ static void sighandler( int sig, siginfo_t *scp, void *ucp ) {
|
|
|
argv := Glue.argv;
|
|
|
environ := Glue.environ;
|
|
|
|
|
|
- libraryPaths[0] := "/lib/i386-linux-gnu";
|
|
|
+ libraryPaths[0] := "/lib/i386-linux-gnu/i686/cmov";
|
|
|
libraryPaths[1] := "/usr/lib/i386-linux-gnu";
|
|
|
- libraryPaths[2] := "/lib";
|
|
|
- libraryPaths[3] := "/usr/lib";
|
|
|
- noPaths := 4;
|
|
|
+ libraryPaths[2] := "/lib/i386-linux-gnu";
|
|
|
+ libraryPaths[3] := "/lib";
|
|
|
+ libraryPaths[4] := "/usr/lib";
|
|
|
+ noPaths := 5;
|
|
|
|
|
|
libc := Dlopen( libcname, 2 );
|
|
|
- libp := Dlopen( libpthreadname, 2);
|
|
|
-
|
|
|
- Dlsym( libc, "exit", ADDRESSOF( exit ) );
|
|
|
-
|
|
|
- Dlsym( libc, "ptrace", ADDRESSOF(ptrace));
|
|
|
- Dlsym( libc, "getcontext", ADDRESSOF(getcontext));
|
|
|
- Dlsym( libc, "sysconf", ADDRESSOF(sysconf));
|
|
|
-
|
|
|
- Dlsym( libc, "pthread_mutex_init", ADDRESSOF(pthread_mutex_init));
|
|
|
- Dlsym( libc, "pthread_mutex_destroy", ADDRESSOF(pthread_mutex_destroy));
|
|
|
- Dlsym( libc, "pthread_mutex_lock", ADDRESSOF(pthread_mutex_lock));
|
|
|
- Dlsym( libc, "pthread_mutex_unlock", ADDRESSOF(pthread_mutex_unlock));
|
|
|
-
|
|
|
- Dlsym( libp, "pthread_mutexattr_init", ADDRESSOF(pthread_mutexattr_init));
|
|
|
- Dlsym( libp, "pthread_mutexattr_settype", ADDRESSOF(pthread_mutexattr_settype));
|
|
|
-
|
|
|
-
|
|
|
- Dlsym( libc, "pthread_cond_init", ADDRESSOF(pthread_cond_init));
|
|
|
- Dlsym( libc, "pthread_cond_destroy", ADDRESSOF(pthread_cond_destroy));
|
|
|
- Dlsym( libc, "pthread_cond_wait", ADDRESSOF(pthread_cond_wait));
|
|
|
- Dlsym( libc, "pthread_cond_signal", ADDRESSOF(pthread_cond_signal));
|
|
|
-
|
|
|
- Dlsym( libp, "pthread_create", ADDRESSOF(pthread_create));
|
|
|
- Dlsym( libp, "pthread_exit", ADDRESSOF(pthread_exit));
|
|
|
- Dlsym( libp, "pthread_detach", ADDRESSOF(pthread_detach));
|
|
|
- Dlsym( libp, "pthread_cancel", ADDRESSOF(pthread_cancel));
|
|
|
- Dlsym( libp, "pthread_kill", ADDRESSOF(pthread_kill));
|
|
|
-
|
|
|
- Dlsym( libp, "pthread_sigmask", ADDRESSOF(pthread_sigmask));
|
|
|
- Dlsym( libp, "pthread_setcancelstate", ADDRESSOF(pthread_setcancelstate));
|
|
|
- Dlsym( libp, "pthread_setcanceltype", ADDRESSOF(pthread_setcanceltype));
|
|
|
- Dlsym( libp, "pthread_attr_init", ADDRESSOF(pthread_attr_init));
|
|
|
- Dlsym( libp, "pthread_attr_setscope", ADDRESSOF(pthread_attr_setscope));
|
|
|
- Dlsym( libp, "pthread_attr_setdetachstate", ADDRESSOF(pthread_attr_setdetachstate));
|
|
|
- Dlsym( libp, "pthread_attr_setstacksize", ADDRESSOF(pthread_attr_setstacksize));
|
|
|
- Dlsym( libp, "pthread_self", ADDRESSOF(pthread_self));
|
|
|
-
|
|
|
- Dlsym( libc, "posix_spawnp", ADDRESSOF(posix_spawnp));
|
|
|
- Dlsym( libc, "posix_spawn", ADDRESSOF(posix_spawn));
|
|
|
-
|
|
|
- Dlsym( libc, "waitpid", ADDRESSOF(waitpid));
|
|
|
- Dlsym( libc, "pipe", ADDRESSOF(pipe));
|
|
|
- Dlsym( libc, "dup2",ADDRESSOF(dup2));
|
|
|
- Dlsym( libc, "dup", ADDRESSOF(dup));
|
|
|
-
|
|
|
- Dlsym( libc, "sched_get_priority_max", ADDRESSOF(sched_get_priority_max));
|
|
|
- Dlsym( libc, "sched_get_priority_min", ADDRESSOF(sched_get_priority_min));
|
|
|
- Dlsym( libc, "pthread_setschedparam", ADDRESSOF(pthread_setschedparam));
|
|
|
- Dlsym( libc, "pthread_getschedparam", ADDRESSOF(pthread_getschedparam));
|
|
|
- Dlsym( libc, "sigaction", ADDRESSOF(sigaction));
|
|
|
- Dlsym( libc, "sigemptyset", ADDRESSOF(sigemptyset));
|
|
|
- Dlsym( libc, "sigfillset", ADDRESSOF(sigfillset));
|
|
|
- Dlsym( libc, "sigaddset", ADDRESSOF(sigaddset));
|
|
|
- Dlsym( libc, "sigdelset", ADDRESSOF(sigdelset));
|
|
|
- Dlsym( libc, "nanosleep", ADDRESSOF(nanosleep));
|
|
|
- Dlsym( libc, "sigaltstack", ADDRESSOF(sigaltstack));
|
|
|
- Dlsym( libc, "sigsuspend", ADDRESSOF(sigsuspend));
|
|
|
+ libp := Dlopen( libpthreadname, 2 );
|
|
|
+
|
|
|
+ Dlsym( libc, "exit", ADDRESSOF(exit) );
|
|
|
+
|
|
|
+ Dlsym( libc, "ptrace", ADDRESSOF(ptrace) );
|
|
|
+ Dlsym( libc, "getcontext", ADDRESSOF(getcontext) );
|
|
|
+ Dlsym( libc, "sysconf", ADDRESSOF(sysconf) );
|
|
|
+
|
|
|
+ Dlsym( libc, "pthread_mutex_init", ADDRESSOF(pthread_mutex_init) );
|
|
|
+ Dlsym( libc, "pthread_mutex_destroy", ADDRESSOF(pthread_mutex_destroy) );
|
|
|
+ Dlsym( libc, "pthread_mutex_lock", ADDRESSOF(pthread_mutex_lock) );
|
|
|
+ Dlsym( libc, "pthread_mutex_unlock", ADDRESSOF(pthread_mutex_unlock) );
|
|
|
+
|
|
|
+ Dlsym( libp, "pthread_mutexattr_init", ADDRESSOF(pthread_mutexattr_init) );
|
|
|
+ Dlsym( libp, "pthread_mutexattr_settype", ADDRESSOF(pthread_mutexattr_settype) );
|
|
|
+
|
|
|
+
|
|
|
+ Dlsym( libc, "pthread_cond_init", ADDRESSOF(pthread_cond_init) );
|
|
|
+ Dlsym( libc, "pthread_cond_destroy", ADDRESSOF(pthread_cond_destroy) );
|
|
|
+ Dlsym( libc, "pthread_cond_wait", ADDRESSOF(pthread_cond_wait) );
|
|
|
+ Dlsym( libc, "pthread_cond_signal", ADDRESSOF(pthread_cond_signal) );
|
|
|
+
|
|
|
+ Dlsym( libp, "pthread_create", ADDRESSOF(pthread_create) );
|
|
|
+ Dlsym( libp, "pthread_exit", ADDRESSOF(pthread_exit) );
|
|
|
+ Dlsym( libp, "pthread_detach", ADDRESSOF(pthread_detach) );
|
|
|
+ Dlsym( libp, "pthread_cancel", ADDRESSOF(pthread_cancel) );
|
|
|
+ Dlsym( libp, "pthread_kill", ADDRESSOF(pthread_kill) );
|
|
|
+
|
|
|
+ Dlsym( libp, "pthread_sigmask", ADDRESSOF(pthread_sigmask) );
|
|
|
+ Dlsym( libp, "pthread_setcancelstate", ADDRESSOF(pthread_setcancelstate) );
|
|
|
+ Dlsym( libp, "pthread_setcanceltype", ADDRESSOF(pthread_setcanceltype) );
|
|
|
+ Dlsym( libp, "pthread_attr_init", ADDRESSOF(pthread_attr_init) );
|
|
|
+ Dlsym( libp, "pthread_attr_setscope", ADDRESSOF(pthread_attr_setscope) );
|
|
|
+ Dlsym( libp, "pthread_attr_setdetachstate", ADDRESSOF(pthread_attr_setdetachstate) );
|
|
|
+ Dlsym( libp, "pthread_attr_setstacksize", ADDRESSOF(pthread_attr_setstacksize) );
|
|
|
+ Dlsym( libp, "pthread_self", ADDRESSOF(pthread_self) );
|
|
|
+
|
|
|
+ Dlsym( libc, "posix_spawnp", ADDRESSOF(posix_spawnp) );
|
|
|
+ Dlsym( libc, "posix_spawn", ADDRESSOF(posix_spawn) );
|
|
|
+
|
|
|
+ Dlsym( libc, "waitpid", ADDRESSOF(waitpid) );
|
|
|
+ Dlsym( libc, "pipe", ADDRESSOF(pipe) );
|
|
|
+ Dlsym( libc, "dup2",ADDRESSOF(dup2) );
|
|
|
+ Dlsym( libc, "dup", ADDRESSOF(dup) );
|
|
|
+
|
|
|
+ Dlsym( libc, "sched_get_priority_max", ADDRESSOF(sched_get_priority_max) );
|
|
|
+ Dlsym( libc, "sched_get_priority_min", ADDRESSOF(sched_get_priority_min) );
|
|
|
+ Dlsym( libc, "pthread_setschedparam", ADDRESSOF(pthread_setschedparam) );
|
|
|
+ Dlsym( libc, "pthread_getschedparam", ADDRESSOF(pthread_getschedparam) );
|
|
|
+ Dlsym( libc, "sigaction", ADDRESSOF(sigaction) );
|
|
|
+ Dlsym( libc, "sigemptyset", ADDRESSOF(sigemptyset) );
|
|
|
+ Dlsym( libc, "sigfillset", ADDRESSOF(sigfillset) );
|
|
|
+ Dlsym( libc, "sigaddset", ADDRESSOF(sigaddset) );
|
|
|
+ Dlsym( libc, "sigdelset", ADDRESSOF(sigdelset) );
|
|
|
+ Dlsym( libc, "nanosleep", ADDRESSOF(nanosleep) );
|
|
|
+ Dlsym( libc, "sigaltstack", ADDRESSOF(sigaltstack) );
|
|
|
+ Dlsym( libc, "sigsuspend", ADDRESSOF(sigsuspend) );
|
|
|
|
|
|
Dlsym( libc, "read", ADDRESSOF( read ) );
|
|
|
Dlsym( libc, "write", ADDRESSOF( write ) );
|
|
@@ -1263,7 +1162,7 @@ static void sighandler( int sig, siginfo_t *scp, void *ucp ) {
|
|
|
(* load X11 related libaries only on demand *)
|
|
|
PROCEDURE LinkToX*;
|
|
|
BEGIN
|
|
|
- libx := Dlopen( libX11name, 2);
|
|
|
+ libx := Dlopen( libX11name, 2 );
|
|
|
|
|
|
Dlsym( libx, "XSetErrorHandler", ADDRESS OF xSetErrorHandler);
|
|
|
Dlsym( libx, "XSetIOErrorHandler", ADDRESS OF xSetIOErrorHandler);
|