Brian Hall wrote:
>
> I haven't changed anything in main(). After the command options are parsed
> out,
> around main.c:198: (dies in register_cmds() )
>
> init_liballoc(0, 0, 0);
> kl_init_kern_info();
> register_cmds(cmdset);
> arch_init(ofp);
>
> Are you saying that init_liballoc() needs different arguments now? I followed
> the call sequence down for init_liballoc, and it appeared that values other
> than zero were assigned along the way. Changing to init_liballoc(100,100,100)
> had no effect (same traceback on the segfault). Upping that to 1000 didn't
> help.
The parameters to init_liballoc() are OK. Based on this, I would guess that
some memory is getting stomped on in or below the kl_init_kern_info() function
call. You might check the block of memory causing the SEGV after returning
from the init_liballoc() call and before the kl_init_kern_info() call. See if it
looks OK at that point (I would guess the contents of this memory is change by
the time you get to register_cmds()). If that's the case, then walk through the
kl_init_kern_info() function and see where the memory contents changes. From
looking at the kl_init_kern_info() function, I can't see where the problem
might
occur (it basically just does symbol lookups and reads in the contents of
memory
into some local variables). Since the Alpha is 64 bit, I assume that the amount
of
memory being read in for these values is 8 bytes instead of 4 (and that the
local
variables, NUM_PHYSPAGES and MEM_MAP have been changed also). Little things like
that might be a factor. Anyway, that's how I would approach narrowing it down.
Tom
|