--- Net2/kern/init_main.c 2018/04/24 18:04:25 1.1.1.2 +++ Net2/kern/init_main.c 2018/04/24 18:14:28 1.1.1.4 @@ -30,9 +30,9 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * @(#)init_main.c 7.41 (Berkeley) 5/15/91 + * from: @(#)init_main.c 7.41 (Berkeley) 5/15/91 + * init_main.c,v 1.19.2.5 1993/07/22 10:10:51 mycroft Exp */ -static char rcsid[] = "$Header: /var/lib/cvsd/net2/Net2/kern/init_main.c,v 1.1.1.2 2018/04/24 18:04:25 root Exp $"; #include "param.h" #include "filedesc.h" @@ -49,6 +49,7 @@ static char rcsid[] = "$Header: /var/lib #include "protosw.h" #include "reboot.h" #include "user.h" +#include "utsname.h" #include "ufs/quota.h" @@ -57,10 +58,7 @@ static char rcsid[] = "$Header: /var/lib #include "vm/vm.h" char copyright[] = -"386BSD Release 0.0 by William and Lynne Jolitz\n\ -Copyright (c) 1989,1990,1991,1992 William F. Jolitz. All rights reserved.\n\ -Based on BSD Networking Software, Release 2 by UCB EECS Department \n\ -Copyright (c) 1982,1986,1989,1991 The Regents of the University of California.\nAll rights reserved.\n"; +"Copyright (c) 1982,1986,1989,1991 The Regents of the University of California.\nAll rights reserved.\n\n"; /* * Components of process 0; @@ -79,10 +77,15 @@ struct proc *initproc, *pageproc; int cmask = CMASK; extern struct user *proc0paddr; extern int (*mountroot)(); +extern int cpu; struct vnode *rootvp, *swapdev_vp; int boothowto; +#if __GNUC__ >= 2 +__main() {} +#endif + /* * System startup; initialize the world, create process 0, * mount root filesystem, and fork to create init and pagedaemon. @@ -96,6 +99,7 @@ main() register struct proc *p; register struct filedesc0 *fdp; int s, rval[2]; + char *cp; /* * Initialize curproc before any possible traps/probes @@ -107,6 +111,7 @@ main() * Attempt to find console and initialize * in case of early panic or other messages. */ + startrtclock(); /* XXX -- arguably should go where noted below */ consinit(); printf(copyright); @@ -199,7 +204,7 @@ main() if (bdevvp(swapdev, &swapdev_vp) || bdevvp(rootdev, &rootvp)) panic("can't setup bdevvp's"); - startrtclock(); + /* XXX -- startrtclock(); was here in net/2 */ #if defined(vax) #include "kg.h" #if NKG > 0 @@ -236,8 +241,8 @@ main() #endif /* kick off timeout driven events by calling first time */ - roundrobin(); - schedcpu(); + roundrobin((caddr_t)0); + schedcpu((caddr_t)0); enablertclock(); /* enable realtime clock interrupts */ /* @@ -264,6 +269,30 @@ main() boottime = p->p_stats->p_start = time; /* + * Setup version number for uname syscall + * XXX probably should go elsewhere. + */ + bzero(utsname.sysname, sizeof(utsname.sysname)); + for (cp = version, i= 0; + *cp && *cp != ' ' && i <= sizeof(utsname.sysname); + ) + utsname.sysname[i++] = *cp++; + bzero(utsname.release, sizeof(utsname.release)); + for (cp++, i= 0; *cp && *cp != ' ' && i <= sizeof(utsname.release);) + utsname.release[i++] = *cp++; + bzero(utsname.version, sizeof(utsname.version)); + for (; *cp != '('; cp++); + for (cp++, i= 0; *cp && *cp != ')' && i <= sizeof(utsname.version);) + utsname.version[i++] = *cp++; + for (; *cp != '#'; cp++); + if(i <= sizeof(utsname.version)) + utsname.version[i++] = '#'; + for (cp++; *cp && *cp != ':' && i <= sizeof(utsname.version);) + utsname.version[i++] = *cp++; + strncpy(utsname.machine, MACHINE, sizeof(utsname.machine)); + utsname.machine[sizeof(utsname.machine)-1] = '\0'; + + /* * make init process */ siginit(p); @@ -289,6 +318,8 @@ main() if (boothowto&RB_FASTBOOT) *ip++ = 'f'; #endif + if (ip == initflags + 1) + *ip++ = '-'; *ip++ = '\0'; if (vm_allocate(&p->p_vmspace->vm_map, &addr, @@ -297,11 +328,12 @@ main() panic("init: couldn't allocate at zero"); /* need just enough stack to exec from */ - addr = trunc_page(USRSTACK - PAGE_SIZE); + addr = trunc_page(USRSTACK - MAXSSIZ); if (vm_allocate(&p->p_vmspace->vm_map, &addr, - PAGE_SIZE, FALSE) != KERN_SUCCESS) + MAXSSIZ, FALSE) != KERN_SUCCESS) panic("vm_allocate init stack"); p->p_vmspace->vm_maxsaddr = (caddr_t)addr; + p->p_vmspace->vm_ssize = 1; (void) copyout((caddr_t)icode, (caddr_t)0, (unsigned)szicode); (void) copyout(initflags, (caddr_t)szicode, sizeof(initflags)); return; /* returns to icode */