[net.sources] Signal bug fix

mef@aplvax.UUCP (06/29/84)

     John Owens has mailed me the following bug fix for VAX FORTH running
under 4.2BSD.  The _SIGNAL code in SYS:ASM will not work.  The following C
program using the sigvec system call will emulate the old version of signals.
The code is from /usr/include/signal.h and /usr/src/lib/libc/gen/signal.c
of a 4.2BSD system.


Program:

/*
 * Signal vector "template" used in sigvec call.
 */
struct	sigvec {
	int	(*sv_handler)();	/* signal handler */
	int	sv_mask;		/* signal mask to apply */
	int	sv_onstack;		/* if non-zero, take on signal stack */
};

#define	BADSIG		(int (*)())-1

int (*
signal(s, a))()
	int s, (*a)();
{
	static struct sigvec osv, sv;

	sv.sv_handler = a;
	sv.sv_mask = sv.sv_onstack = 0;
	if (sigvec(s, &sv, &osv) < 0)
		return (BADSIG);
	return (osv.sv_handler);
}

I have translated this C code into its equivalent assembly language for 
inclusion in SYS:ASM.  Replace _SIGNAL with the following:

-----------------------------------------------------------------------
LABEL _SIGVEC 0 ,			( ENTRY MASK )
 CHMK 6C W$				( SIGVEC CALL )
 BCC 1 FWD
 MNEGL 1 L$   0 REG			( ERROR )
1 L: RET

LABEL SV				( SIGNAL VECTOR; SIGNAL HANDLER, )
 0 , 0 , 0 , 0 , 0 , 0 ,		( SIGNAL MASK, ?		 )

LABEL OSV				( OLD SIGNAL VECTOR; SIGNAL HANDLER, )
 C ALLOT				( SIGNAL MASK, ?		     )

LABEL _SIGNAL 0 ,			( ENTRY MASK )
 MOVL 8 AP X(   SV REL			( MOVE NEW SIGNAL HANDLER TO TEMPLATE )
 PUSHAL OSV REL				( POINTER TO OLD VECTOR AREA )
 PUSHAL SV REL				( POINTER TO NEW VECTOR AREA )
 PUSHL 4 AP X(				( PUSH SIGNAL NUMBER )
 CALLS 3 L$ _SIGVEC REL			( DO SIGVEC CALL )
 TSTL 0 REG
 BLSS 1 FWD				( RETURN -1 IF ERROR )
 MOVL OSV REL   0 REG			( ELSE RETURN OLD SIGNAL HANDLER )
1 L: RET
-----------------------------------------------------------------------------


I haven't tested this code because I don't have a 4.2 system.  I think
it will work.  Let me know either way.  Thanks.



						-John Hayes
						 Johns Hopkins University
						 Applied Physics Lab
						 ... seismo!umcp-cs!aplvax!lwt1