Date: 2007-07-23 21:30:35 +0200 (Mon, 23 Jul 2007)
New Revision: 485
x86 - Fixed crash that occurs after a long sequence of memory mapping
operations, caused by an error in the early init code. One of the
pages that is used by the memory management code was on the free list.
--- cpu/x86/pc/paging.bth 2007-07-23 06:51:54 UTC (rev 484)
+++ cpu/x86/pc/paging.bth 2007-07-23 19:30:35 UTC (rev 485)
@@ -147,11 +147,6 @@
- si mem-info-pa 1 la+ #) mov \ Report top of page table area
-\ di mem-info-pa 2 la+ #) mov \ Report top of page table area
\ Page Directory Entry
/ptab # si sub
@@ -175,6 +170,10 @@
+ si mem-info-pa 1 la+ #) mov \ Report top of page table area
ascii P report
\ enable paging
bx cr3 mov \ Set Page Directory Base Register
On 7/19/07, spectral(a)op.pl <spectral(a)op.pl> wrote:
> Unhandled Exception 0x00000007
> PC = 0xffd0a55c NPC = 0xffd09374
> Stopping execution
> So this is my report, I hope it can be of some use. I'll try to boot sparc version of OpenSolaris soon and I'l let you know how it went.
Thanks for the report. Exception 7 is unaligned access, support for
detection of unaligned accesses in QEMU was improved recently.
The exception happens inside OpenBIOS:
0xffd0a55c is in lstore (kernel/forth.c:649).
645 static void lstore(void)
647 const u32 *aaddr = (u32 *)cell2pointer(POP());
648 const u32 longval = POP();
649 write_long(aaddr, longval);
Maybe write_long should handle unaligned addresses?
Date: 2007-07-22 10:49:28 +0200 (Sun, 22 Jul 2007)
New Revision: 483
serial driver - Fixed a bug caused by a name conflict between
x86 "msr@" and PowerPC "msr@", which are not compatible.
The net result was that the OFW "com1" driver did not work
at all on x86.
--- dev/16550pkg/16550.fth 2007-07-22 01:17:56 UTC (rev 482)
+++ dev/16550pkg/16550.fth 2007-07-22 08:49:28 UTC (rev 483)
@@ -12,12 +12,14 @@
0 instance value uart-base \ Virtual address of UART; set later
: uart-base-adr ( -- adr )
- [ifdef] msr@
- msr@ h# 30 and 0= if h# fff and io-base + then
+\ The following code is a PowerPC-specific hack that
+\ handles the case where memory mapping is turned off
+\ (in which case the 0x30 bit in MSR is 0). Note that
+\ the PowerPC msr@ is not compatible with the x86 msr@.
+\ [ifdef] msr@
+\ msr@ h# 30 and 0= if h# fff and io-base + then
: uart@ ( reg# -- byte ) uart-base-adr + rb@ ; \ Read from a UART register
: uart! ( byte reg# -- ) uart-base-adr + rb! ; \ Write to a UART register