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);
73 if(!(magic == AOUT_MAGIC)){
77 if((I_MAGIC == AOUT_MAGIC) || (S_MAGIC == AOUT_MAGIC))
86 /* round text out to page boundary */
87 rtext = PGROUND(entry+text)-entry;
100 readn(c, p + rtext, data);
102 ksetenv("bootfile", argv[0], 1);
103 setbootcmd(argc-1, argv+1);
105 reboot((void*)entry, p, size);
107 panic("return from reboot!");