+ v = (caddr_t)(0x80000000 | (firstaddr * NBPG));
+#define valloc(name, type, num) \
+ (name) = (type *)(v); (v) = (caddr_t)((name)+(num))
+#define valloclim(name, type, num, lim) \
+ (name) = (type *)(v); (v) = (caddr_t)((lim) = ((name)+(num)))
+ valloc(buffers, char, BSIZE*nbuf);
+ valloc(buf, struct buf, nbuf);
+ valloc(swbuf, struct buf, nswbuf);
+ valloclim(inode, struct inode, ninode, inodeNINODE);
+ valloclim(file, struct file, nfile, fileNFILE);
+ valloclim(proc, struct proc, nproc, procNPROC);
+ valloclim(text, struct text, ntext, textNTEXT);
+ valloc(cfree, struct cblock, nclist);
+ valloc(callout, struct callout, ncallout);
+ valloc(swapmap, struct map, nproc * 4);
+ valloc(argmap, struct map, 25);
+ valloc(kernelmap, struct map, nproc);
+
+ /*
+ * Now allocate space for core map
+ */
+ ncmap = (physmem*NBPG - ((int)v &~ 0x80000000)) /
+ (NBPG*CLSIZE + sizeof (struct cmap));
+ valloclim(cmap, struct cmap, ncmap, ecmap);
+
+ /*
+ * Clear allocated space, and make r/w entries
+ * for the space in the kernel map.
+ */
+ unixsize = btoc((int)ecmap);
+ if (unixsize >= physmem - 8*UPAGES)
+ panic("no memory");
+ pte = &Sysmap[firstaddr];
+ for (i = firstaddr; i < unixsize; i++) {
+ *(int *)(&Sysmap[i]) = PG_V | PG_KW | i;
+ clearseg(i);
+ }