Re: MVME177 panic: pmap_enter_ptpage (PR #45915 on 6.x)
[email protected] (Christos Zoulas) Thu, 19 Sep 2013 21:23:54 +0000 (UTC)
| Newsgroups | gmane.os.netbsd.ports.m68k,gmane.os.netbsd.ports.mvme68k |
|---|---|
| Message-ID | <[email protected]> |
In article <[email protected]>, Izumi Tsutsui <[email protected]> wrote: >Hi, > >> The kernel you built for me booted right up. That patch seems good. >Thank you. >> (dmesg below) > >Thanks. >I've committed the fix and will send a pullup request for >netbsd-6 branches later. > >> I tried the netboot too but it didn't work. It was a bit odd. Part >> of it was dumped >> to the console. It looks like starting at offset 0x4F7A (20,346) it >> dumped to the >> console. >> >> Here's the first bit of console output: >> Network Boot File load in progress... To abort hit <BREAK> >> >> Bytes Received =&23784, Bytes Loaded =&23784 >> Bytes/Second =&23784, Elapsed Time =1 Second(s) >> [a bunch of unprintable...]NOp @Nu>> %s MVME%x netboot (via %s) [%s] > : > >After a few hours analysis, this seems caused by a bug of >gcc-4.5.x's __asm() statement. > >Could you try the following netboot binary built from the same sources >but using gcc-4.1.3 from 5.x? >ftp://ftp.netbsd.org/pub/NetBSD/misc/tsutsui/mvme68k/netbsd-6_20130917/netboot-gcc413.bin > >mvme68k bootloaders uses "MVMEPROM_OUTSTR" function for putchar(): >http://nxr.netbsd.org/xref/src/sys/arch/mvme68k/stand/libbug/putchar.c?r=1.2#22 >http://nxr.netbsd.org/xref/src/sys/arch/mvme68k/stand/libbug/outstr.c?r=1.3#12 >http://nxr.netbsd.org/xref/src/sys/arch/mvme68k/include/prom.h?r=1.17#152 > >The OUTSTR call takes two pointer args, start and end addresses >of strings. 6.x's gcc-4.5.x seems to pass an incorrect start address >so a bunch of garbages are put onto the screen. > >gcc-4.1.3 in 5.x generates the following insns from >the mvmeprom_outstr() source: >--- > movel %sp@(4),%d1 > movel %sp@(8),%d0 > movel %d0,%sp@- > movel %d1,%sp@- > trap #15 > .short MVMEPROM_OUTSTR > rts >--- > >but gcc-4.5.3 in 6.x emits: >--- > movel %sp@(8),%d0 > movel %d0,%sp@- > movel %sp@(4),%d0 > movel %d0,%sp@- > trap #15 > .short MVMEPROM_OUTSTR > rts >--- >so the second args are taken from a wrong (post-decremented) %sp address. >Disabling optimization (passing -O0 instead of -Os) doesn't help. > >Does anyone have suggestion how this should be fixed? >Rewrite outstr (and the similar outln) functions in asm? Has this been fixed in 4.8? Can it be fixed in 4.5? christos