(* Copyright (C) 1992, Digital Equipment Corporation *) (* All rights reserved. *) (* See the file COPYRIGHT for a full description. *) (* *) UNSAFE MODULE RTThread; IMPORT Usignal, Word; EXCEPTION InternalError; <*FATAL InternalError*> PROCEDURE SP (READONLY s: State): ADDRESS = BEGIN RETURN LOOPHOLE (s.SP, ADDRESS); END SP; PROCEDURE FlushStackCache () = VAR d: State; BEGIN IF Save (d) = 0 THEN Restore (d, 1); END; END FlushStackCache; PROCEDURE UpdateStateForNewSP (VAR s: State; offset: INTEGER) = BEGIN INC (s.SP, offset); END UpdateStateForNewSP; PROCEDURE UpdateFrameForNewSP (<*UNUSED*> a: ADDRESS; <*UNUSED*> offset: INTEGER) = BEGIN END UpdateFrameForNewSP; PROCEDURE setup_sigvtalrm (handler: Usignal.SignalHandler) = VAR sv, osv: Usignal.struct_sigvec; BEGIN sv.sv_handler := handler; sv.sv_mask := Usignal.empty_sv_mask; sv.sv_flags := 0; IF Usignal.sigvec (Usignal.SIGVTALRM, sv, osv) # 0 THEN RAISE InternalError; END; END setup_sigvtalrm; PROCEDURE allow_sigvtalrm () = VAR i : Word.T; BEGIN i := Usignal.sigsetmask (0); i := Word.And (i, Word.Not (Usignal.sigmask (Usignal.SIGVTALRM))); EVAL Usignal.sigsetmask (i); END allow_sigvtalrm; PROCEDURE disallow_sigvtalrm () = VAR i : Word.T; BEGIN i := Usignal.sigsetmask (0); i := Word.Or (i, Usignal.sigmask (Usignal.SIGVTALRM)); EVAL Usignal.sigsetmask (i); END disallow_sigvtalrm; BEGIN END RTThread.