sps and SunOS 4.1

Rob McMahon cudcv at warwick.ac.uk
Fri Jul 6 02:58:13 AEST 1990


Well folks, it seems I was horribly wrong.  The version of sps I had was not
very much like the one on titan.rice.edu at all, and the patches wouldn't
patch that version.  As recompense I have spent the day doing it right to the
version from titan, here are the changes.  I've still punted on the
NOFILE_IN_U business, but I've written a version of the stream grabbing stuff
which works, and even fixed a bug in the environment printing code.  The only
nasty left is a warning about the inode table not being found.  I'm not clear
enough on what they've done with it to fix that.  Also someone, someday ought
to go chasing the processes' files when they fall off the end of the U area.

Have fun,

Rob

===================================================================
*** /dev/null	Thu Jul  5 17:56:04 1990
--- Makefile.sun.4.1	Thu Jul  5 17:19:29 1990
***************
*** 0 ****
--- 1,52 ----
+ # Makefile for SPS (Sun-2, Sun-3 and Sun-4, SunOS 4.1 Version)
+ 
+ PROG    =       sps
+ OBJS    =       filecount.o findtty.o flagdecode.o flagsetup.o \
+ 		getcmd.o getupage.o globals1.o globals2.o hashuid.o \
+ 		initialise.o initsymbols.o inittty.o main.o mktree.o \
+ 		needed.o openfiles.o percentmem.o prcmd.o prcpu.o \
+ 		prheader.o printall.o printproc.o prsummary.o readstatus.o \
+ 		selectproc.o selecttty.o stream.o termwidth.o ttystatus.o \
+ 		waitingfor.o
+ INCS    =       sps.h
+ #CC	=       gcc
+ #OPT	=	-O -fstrength-reduce -fomit-frame-pointer -fdelayed-branch
+ #READONLY	=
+ #READWRITE	= -fwritable-strings
+ CC      =       cc
+ OPT	=	-O
+ READONLY	= -R
+ READWRITE	=
+ CFLAGS  =       -DSUN -DBSD42 -DNFS -DVPRINTF -DKVM -DSUNOS40 -DSUNOS41 \
+ 		-DOLDSTATS -Isys
+ LIBS    =       -ltermlib -lkvm
+ DIRINSTALL	= /usr/kvm
+ 
+ all:		    $(PROG)
+ .c.o:
+ 		$(CC) $(CFLAGS) -c $(OPT) $(READONLY) $<
+ 	
+ globals1.o stream.o waitingfor.o:
+ 		$(CC) $(CFLAGS) -c $(OPT) $(READWRITE) $*.c
+ 
+ $(OBJS):		sys $(INCS)
+ 
+ sys:
+ 		-mkdir sys
+ 		-ln -s /sys/* sys
+ 		-ln -s /sys/sys sys/h
+ 
+ $(PROG):		$(OBJS)
+ 		$(CC) $(OPT) -o $@ $(OBJS) $(LIBS)
+ 
+ install:		$(PROG)
+ 		strip $(PROG)
+ 		mv $(PROG) $(DIRINSTALL)/$(PROG)
+ 		/etc/chown root $(DIRINSTALL)/$(PROG)
+ 		chgrp kmem $(DIRINSTALL)/$(PROG)
+ 		chmod 2755 $(DIRINSTALL)/$(PROG)
+ 
+ lint:
+ 		lint -x -b $(CFLAGS) *.c $(LIBS)
+ clean:
+ 		rm -f $(OBJS) $(PROG)
===================================================================
RCS file: Makefile.sun.4.0,v
retrieving revision 1.1
diff -c -r1.1 Makefile.sun.4.0
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:28 1990
--- Makefile.sun.4.0	Thu Jul  5 17:21:02 1990
***************
*** 9,15 ****
--- 9,22 ----
  		selectproc.o selecttty.o stream.o termwidth.o ttystatus.o \
  		waitingfor.o
  INCS    =       sps.h
+ #CC	=       gcc
+ #OPT	=	-O -fstrength-reduce -fomit-frame-pointer -fdelayed-branch
+ #READONLY	=
+ #READWRITE	= -fwritable-strings
  CC      =       cc
+ OPT	=	-O
+ READONLY	= -R
+ READWRITE	=
  CFLAGS  =       -DSUN -DBSD42 -DNFS -DVPRINTF -DKVM -DSUNOS40 -DOLDSTATS -Isys
  LIBS    =       -ltermlib -lkvm
  DIRINSTALL	= /usr/kvm
***************
*** 16,25 ****
  
  all:		    $(PROG)
  .c.o:
! 		$(CC) $(CFLAGS) -c -O -R $<
  	
  globals1.o stream.o waitingfor.o:
! 		$(CC) $(CFLAGS) -c -O $<
  
  $(OBJS):		sys $(INCS)
  
--- 23,32 ----
  
  all:		    $(PROG)
  .c.o:
! 		$(CC) $(CFLAGS) -c $(OPT) $(READONLY) $<
  	
  globals1.o stream.o waitingfor.o:
! 		$(CC) $(CFLAGS) -c $(OPT) $(READWRITE) $*.c
  
  $(OBJS):		sys $(INCS)
  
***************
*** 29,35 ****
  		-ln -s /sys/sys sys/h
  
  $(PROG):		$(OBJS)
! 		$(CC) -o $@ $(OBJS) $(LIBS)
  
  install:		$(PROG)
  		strip $(PROG)
--- 36,42 ----
  		-ln -s /sys/sys sys/h
  
  $(PROG):		$(OBJS)
! 		$(CC) $(OPT) -o $@ $(OBJS) $(LIBS)
  
  install:		$(PROG)
  		strip $(PROG)
===================================================================
RCS file: filecount.c,v
retrieving revision 1.1
diff -c -r1.1 filecount.c
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:28 1990
--- filecount.c	Thu Jul  5 10:13:43 1990
***************
*** 13,19 ****
--- 13,24 ----
  	extern union userstate  User ;
  
  	count = 0 ;
+ #ifdef SUNOS41
+ 	/* too hard to do right at the moment ... */
+ 	for ( i = 0, f = User.u_us.u_ofile_arr ; i < NOFILE_IN_U ; i++ )
+ #else /* ! SUNOS41 */
  	for ( i = 0, f = User.u_us.u_ofile ; i < NOFILE ; i++ )
+ #endif /* SUNOS41 */
  		if ( *f++ )
  			count++ ;
  	return ( count ) ;
===================================================================
RCS file: getcmd.c,v
retrieving revision 1.1
diff -c -r1.1 getcmd.c
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:28 1990
--- getcmd.c	Thu Jul  5 17:12:31 1990
***************
*** 89,96 ****
  	p->pr_csaved = 1 ;
  	sp = argbuf.a_argc ;
  	nbad = 0 ;
! 	for ( ap = argv ; *ap ||
! 	( argv && free( (char*)argv ), argv = 0, Flg.flg_e && *( ap = env ) ) ;
  	*sp++ = ' ' )
  	        for ( cp = *ap++ ; *cp ; *sp++ = *cp++ )
  		{
--- 89,98 ----
  	p->pr_csaved = 1 ;
  	sp = argbuf.a_argc ;
  	nbad = 0 ;
! 	for ( ap = argv ;
! 	      *ap || ( argv &&
! 		      ( free( (char*)argv ), argv = 0,
! 		        Flg.flg_e && *( ap = env ) ) );
  	*sp++ = ' ' )
  	        for ( cp = *ap++ ; *cp ; *sp++ = *cp++ )
  		{
===================================================================
RCS file: getupage.c,v
retrieving revision 1.1
diff -c -r1.1 getupage.c
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:29 1990
--- getupage.c	Thu Jul  5 11:09:09 1990
***************
*** 113,128 ****
          struct user            *upage ;
  	extern union userstate  User ;
  	extern kvm_t           *Flkvm ;
  
! 	if (upage = kvm_getu( Flkvm, &p->pr_p ) )
  	{
! 	        bcopy( (char *) upage, User.u_pg[0], sizeof( struct user ) ) ;
! 		return ( 1 ) ;
  	}
! 	fprintf( stderr,
! 		"sps - Can't read upage of process %d\n",
! 	    p->pr_p.p_pid ) ;
! 	return ( 0 ) ;
  }
  
  # endif
--- 113,143 ----
          struct user            *upage ;
  	extern union userstate  User ;
  	extern kvm_t           *Flkvm ;
+ #ifdef SUNOS41
+ 	static struct sess Sess;
+ #endif
  
! 	if ( (upage = kvm_getu( Flkvm, &p->pr_p )) == NULL )
  	{
! 		fprintf( stderr,
! 			"sps - Can't read upage of process %d\n",
! 			p->pr_p.p_pid ) ;
! 		return ( 0 ) ;
  	}
! 	bcopy( (char *) upage, User.u_pg[0], sizeof( struct user ) ) ;
! #ifdef SUNOS41
! 	if ( kvm_read( Flkvm, p->pr_p.p_sessp, (char *)&Sess, sizeof( Sess ))
! 	     != sizeof(Sess) )
! 	{
! 		fprintf( stderr,
! 			"sps - Can't read session of process %d\n",
! 			p->pr_p.p_pid ) ;
! 		return ( 0 ) ;
! 	}
! 	User.u_us.u_procp = &p->pr_p ;
! 	p->pr_p.p_sessp = &Sess ;
! #endif /* SUNOS41 */
! 	return ( 1 ) ;
  }
  
  # endif
===================================================================
RCS file: globals2.c,v
retrieving revision 1.1
diff -c -r1.1 globals2.c
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:29 1990
--- globals2.c	Thu Jul  5 15:44:40 1990
***************
*** 74,81 ****
--- 74,85 ----
  	{ "_segvn_ops",	0,  (caddr_t*)&Info.i_segvn_ops,(char*)0	},
  	{ "_pty_softc",	0,  (caddr_t*)&Info.i_ptybase,	(char*)0	},
  	{ "_npty",	1,  (caddr_t*)&Info.i_npty,	(char*)0	},
+ # ifndef SUNOS41
  	{ "_streams",	0,  (caddr_t*)&Info.i_streams,	(char*)0	},
  	{ "_streamsNSTREAMS",1,(caddr_t*)&Info.i_streamsNSTREAMS,(char*)0},
+ # else
+ 	{ "_allstream",	0,  (caddr_t*)&Info.i_allstream,(char*)0	},
+ # endif
  	{ "_Sysbase",	1,  (caddr_t*)&Info.i_sysbase,	(char*)0	},
  # endif
  	/* Kernel addresses associated with process wait states.
===================================================================
RCS file: main.c,v
retrieving revision 1.1
diff -c -r1.1 main.c
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:30 1990
--- main.c	Thu Jul  5 10:55:59 1990
***************
*** 26,31 ****
--- 26,35 ----
     <dupuy at ncs.columbia.edu> and Charlie Kim <cck at cunixc.cc.columbia.edu>.
     Ultrix 2.x support by Rob Lehman at CUCCA. */
  
+ /* First attempt at SunOS 4.1 support by Rob McMahon <cudcv at warwick.ac.uk>
+    							-  5 Jul 1990
+  */
+ 
  main ( argc,argv )
  
  int                             argc ;
===================================================================
RCS file: sps.h,v
retrieving revision 1.1
diff -c -r1.1 sps.h
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:30 1990
--- sps.h	Thu Jul  5 15:44:28 1990
***************
*** 22,30 ****
  ** in a hash table, this should probably be at least double the number
  ** of actual users defined in /etc/passwd or by the Yellow Pages.)
  */
! # define	MAXUSERS	100
  /* Maximum # ttys to be considered, plus 1 for the console ... */
! # define	MAXTTYS		65
  
  
  /* Maximum user name length ... */
--- 22,30 ----
  ** in a hash table, this should probably be at least double the number
  ** of actual users defined in /etc/passwd or by the Yellow Pages.)
  */
! # define	MAXUSERS	5000
  /* Maximum # ttys to be considered, plus 1 for the console ... */
! # define	MAXTTYS		129
  
  
  /* Maximum user name length ... */
***************
*** 146,153 ****
--- 146,157 ----
  	struct seg_ops		*i_segvn_ops ;	/* ptr to vnode segment ops */
  	struct pty		*i_ptybase ;
  	int			i_npty ;
+ # ifndef SUNOS41
  	struct stdata		*i_streams ;	/* streams list */
  	struct stdata		*i_streamsNSTREAMS ;
+ # else
+ 	struct stdata		*i_allstream ;	/* streams list */
+ # endif
  	caddr_t			i_sysbase ;
  # endif
  } ;
===================================================================
RCS file: stream.c,v
retrieving revision 1.1
diff -c -r1.1 stream.c
*** /tmp/,RCSt1a02918	Thu Jul  5 17:47:30 1990
--- stream.c	Thu Jul  5 16:40:25 1990
***************
*** 8,13 ****
--- 8,82 ----
  # include <h/vnode.h>
  
  static struct stdata    *pstreams ;
+ 
+ # ifdef SUNOS41
+ 
+ init_streams_tab()
+ {
+ 	struct stdata	*s, *nexts, *p ;
+ 	struct vnode		*v ;
+ 	extern struct info      Info ;
+ 
+ 	if ( pstreams )
+ 	{
+ 		for ( s = pstreams ; s ; s = nexts )
+ 		{
+ 			if ( s->sd_vnode != 0 )
+ 				free( (char *)s->sd_vnode ) ;
+ 			nexts = s->sd_next ;
+ 			free( (char *)s ) ;
+ 		}
+ 		pstreams = 0;
+ 	}
+ 
+ 	if ( getkmem( (long)Info.i_allstream, (char *)&p, sizeof( p ))
+ 	     != sizeof( struct stdata * ) )
+ 		return( 0 );
+ 	s = pstreams = (struct stdata *)getcore( sizeof( struct stdata ) ) ;
+ 	while ( p )
+ 	{
+ 		if ( getkmem( (long)p, (char *)s, sizeof( struct stdata ) )
+ 		     != sizeof( struct stdata ) )
+ 			return ( 0 );
+ 		if ( s->sd_vnode != 0 )
+ 		{
+ 			if ( ( v = (struct vnode*)getcore( sizeof( *v ) ) )
+ 			&& getkmem( (long)s->sd_vnode, (char*)v, sizeof( *v ) )
+ 			!= sizeof( *v ) )
+ 			{
+ 				s->sd_vnode = 0 ;
+ 			}
+ 
+ 			s->sd_vnode = v ;
+ 		}
+ 		p = s->sd_next ;
+ 		if ( p )
+ 		{
+ 			s->sd_next = (struct stdata *)
+ 				getcore( sizeof( struct stdata ) ) ;
+ 		}
+ 		s = s->sd_next ;
+ 	}
+ 	return( 1 ) ;
+ }
+ 
+ struct stdata *getstdata ( st, dev )
+ 
+ struct streamtab       *st ;
+ dev_t			dev ;
+ 
+ {
+ 	register struct stdata	*s ;
+ 
+ 	for ( s = pstreams ; s ; s = s->sd_next )
+ 		if ( s->sd_strtab == st && s->sd_vnode
+ 		     && s->sd_vnode->v_rdev == dev )
+ 			return( s );
+ 	return( 0 ) ;
+ }
+ 
+ #else /* ! SUNOS41 */
+ 		
  static struct stdata    *pstreamsNSTREAMS ;
  
  init_streams_tab()
***************
*** 68,73 ****
--- 137,144 ----
  
  	return( 0 ) ;
  }
+ 
+ #endif /* SUNOS41 */
  
  /* 1 if `w' is in the address range defined by `a1' and `a2' ... */
  # define        INRANGE( w, a1, a2 ) \
--
UUCP:   ...!mcsun!ukc!warwick!cudcv	PHONE:  +44 203 523037
JANET:  cudcv at uk.ac.warwick             INET:   cudcv at warwick.ac.uk
Rob McMahon, Computing Services, Warwick University, Coventry CV4 7AL, England



More information about the Comp.sources.bugs mailing list