Subject: Re: NetBSD/be init does not work
To: None <port-powerpc@NetBSD.ORG>
From: Kazuki Sakamoto <sakamoto@cec.co.jp>
List: port-powerpc
Date: 07/17/1997 11:18:11
> Hmm, don't know why init would get a segmentation violation here. If you
> didn't already, compile init with -g and look where the offending address in
> the code is and how it got there. Depending on your implementation of DDB
> you might also want to set a breakpoint at vm_fault and look why it doesn't
> want to give init access to the page at 67000.
It was found out that SIGSEGV occurred the lib/libc/locale/localeconv.c
following as an examined result.
> > exc_dsi|exc_user=0x6737c dsisr=0x42000000 at 0x5e7b8
localeconv.c line 37
: static struct lconv ret;
:
: if (__mlocale_changed) {
: /* LC_MONETARY */
: ret.int_curr_symbol = _CurrentMonetaryLocale->int_curr_symbol;
And, the direct cause which SIGSEGV occurs is in vm/vm_map.c.
vm/vm_map.c line 2373
: prot = entry->protection;
: if ((fault_type & (prot)) != fault_type)
: RETURN(KERN_PROTECTION_FAILURE);
When SIGSEGV occurs, the value of prot is 0x5(VM_PROT_READ|VM_PROT_EXECUTE),
the value of fault_type is 0x3(VM_PROT_READ|VM_PROT_WRITE).
By way of experiment, I surrounded this with #if 0-#endif :-)
Then, /bin/sh works!
But, I don't think this method to become a fundamental solution.
# I want time more...
Kazuki Sakamoto
sakamoto@cec.co.jp