Thanks, Erik, your guess is absolutely right... Richard, do you mind
updating /n/sources/xen/xen3/9/xen3/main.c?
term% diff -c /n/sources/xen/xen3/9/xen3/main.c
/n/sources/contrib/yk/xen3/main.c
/n/sources/xen/xen3/9/xen3/main.c:8,13 - /n/sources/contrib/yk/xen3/main.c:8,14
#include "init.h"
#include "pool.h"
#include "reboot.h"
+ #include <tos.h>
Mach *m;
/n/sources/xen/xen3/9/xen3/main.c:15,20 -
/n/sources/contrib/yk/xen3/main.c:16,26
#define BOOTARGSLEN (sizeof xenstart->cmd_line)
#define MAXCONF 64
+ enum {
+ /* space for syscall args, return PC, top-of-stack struct */
+ Ustkheadroom = sizeof(Sargs) + sizeof(uintptr) + sizeof(Tos),
+ };
+
char bootdisk[KNAMELEN];
Conf conf;
char *confname[MAXCONF];
/n/sources/xen/xen3/9/xen3/main.c:270,276 -
/n/sources/contrib/yk/xen3/main.c:276,282
uchar *av[32];
uchar **lsp;
- sp = (uchar*)base + BY2PG - MAXSYSARG*BY2WD;
+ sp = (uchar*)base + BY2PG - Ustkheadroom;
ac = 0;
av[ac++] = pusharg("/386/9dos");
2013/9/12 erik quanstrom <[email protected]>:
> On Thu Sep 12 09:49:19 EDT 2013, [email protected] wrote:
>> > The crash seems to be in init, not the kernel. Are you sure
>> > your file system image is good?
>>
>> it doesn't get far enough for "root from:", so it seems to fail
>> somewhere in the initcode blob
>
> this may be related to the change put in for the routerboard.
>
> it increased the size of Tos, and thus shifted everything around
> on the stack. but the old pc kernel didn't account for this, and
> 386 kernels failed with bad arg in syscall. this never affected the
> pae kernel, or the other architectures. here's the fix as it went
> into 9atom.
>
> ; 9fs atom
> ; cd /n/atom/plan9/sys/src/9/pc
> ; history -D main.c
> Aug 3 15:30:45 EDT 2013 main.c 16439 [quanstro]
> Aug 3 15:30:45 EDT 2013 /n/atomdump/2013/0912/plan9/sys/src/9/pc/main.c
> 16439 [quanstro]
> 10a11
>> #include <tos.h>
> 25a27,31
>> enum {
>> /* space for syscall args, return PC, top-of-stack struct */
>> Ustkheadroom = sizeof(Sargs) + sizeof(uintptr) + sizeof(Tos),
>> };
>>
> 294c300
> < sp = (uchar*)base + BY2PG - MAXSYSARG*BY2WD;
> ---
>> sp = (uchar*)base + BY2PG - Ustkheadroom;
>
> - erik
--
- Yaroslav