2 #include "../port/lib.h"
6 #include "../port/error.h"
15 return (cp[0]<<24) | (cp[1]<<16) | (cp[2]<<8) | cp[3];
20 readn(Chan *c, void *vp, long n)
26 nn = devtab[c->type]->read(c, p, n, c->offset);
36 setbootcmd(int argc, char *argv[])
41 p = buf = smalloc(1024);
44 p = seprint(p, ep, "%q ", argv[i]);
46 ksetenv("bootcmd", buf, 1);
51 rebootcmd(int argc, char *argv[])
55 ulong magic, text, rtext, entry, data, size;
61 c = namec(argv[0], Aopen, OEXEC, 0);
67 readn(c, &exec, sizeof(Exec));
68 magic = l2be(exec.magic);
69 entry = l2be(exec.entry);
70 text = l2be(exec.text);
71 data = l2be(exec.data);
72 if(magic != AOUT_MAGIC)
75 /* round text out to page boundary */
76 rtext = PGROUND(entry+text)-entry;
89 readn(c, p + rtext, data);
91 ksetenv("bootfile", argv[0], 1);
92 setbootcmd(argc-1, argv+1);
94 reboot((void*)entry, p, size);
96 panic("return from reboot!");