Subject: Re: The Kernel for powermacs
To: Wolfgang Solfrank <ws@kurt.tools.de>
From: Dan Jacobowitz <youngdrow@geocities.com>
List: port-powerpc
Date: 01/01/1998 14:15:12
>> FFF00400... a memory address?  An exception code? -1047552 in decimal...go
>> figure.  What the heck are default catches anyway?
>
>FFF00400 is the "instruction storage interrupt" vector.  That means, that the
>processor got a page fault when trying to get some instruction and took a
>fault, i.e. jumped to the address 0xfff00400 after disabling the mmu.
>
>However, it shows one of the problems with Apple "OpenFirmware" (note the
>quotes!).  The PowerPC processor binding to IEEE1275 (i.e. OpenFirmware) is
>quite explicit that the firmware is required to copy itself from ROM to RAM
>and thus to change the trap vectors from 0xfff0#### to 0x0000#### (these are
>the only two possible values for the trap vector).  This then allows the
>kernel ("client program" in OpenFirmware speak) to change the trap vector
>for some of the faults leaving alone any other trap vectors.  Since the
>Apple firmware doesn't do that and presumably keeps running from the ROM
>image, overwriting the trap vector for page faults with the ones needed
>by e.g. NetBSD isn't possible.  (Not that this would work with the current
>implementation, as the code for the trap vectors currently assume that they
>are running in low, not in high core).
>
>Hope this makes things a bit clearer (and sorry for the bad news :-().

It certainly did help, and I've been looking/poking at it...
Following later suggestions in this thread I tried the over-simplistic
solution of just changing that bit in the MSR; probably obviously, it
failed, although not quite so obviously it got the exact same error.

One thing here is REALLY confusing me, though.  ofwboot dies with the same
default catch, supporting my growing hunch that it is happening before the
part of initppc() that changes the trap vectors.  ofwboot does not do this
at all yet dies anyway, apparently before reaching main().  Presumably
_start() gets called, and setup() dies - or perhaps the first printf() in
main().

First of all, any way to examine when it died?  I'm going to poke around
for some documentation now and see if I can turn up anything...
Also, what the heck do you think is happening?  It's quite confused me,
because the default catch is apparently coming out of nowhere.  Does
"normal" OF also die with a default catch if left to its own trap vectors?


Dan.

---------------------------------------------------------------------
| Dan Jacobowitz                 | drow@drow.net                    |
|  Administrator Extraordinaire  | Web site coming someday          |
| My opinions are my own -       | Day Job: http://www.wwwcomm.com  |
| My mistakes are someone else's |                                  |
---------------------------------------------------------------------