Hi Matthias,

On 16/09/16 08:35, Matthias Reis wrote:
> Hi all,
> 
> in the frame of a hobby project 
> (https://ford.biologie.hu-berlin.de/matze/linux-m68k-atarinommu/wikis/home), 
> I did some changes to the kernel to make it boot on MMU-less, original Atari 
> ST machines.
> 
> So far, my kernel manages to mount a root filesystem from fd0 and run busybox.
> 
> However, busybox (nano-X as well), produces a bus error and crashes the whole 
> kernel:

What procedure did you follow to build your apps?
Are you using flat format binaries?


> ==== hatari emulator output:
> M68000 Bus Error reading at address $0 PC=$48f2.
> Bus error exception at 0x48f2!
> ====
> 
> The disassembly from objdump -D shows, that this happens in resume 
> (https://ford.biologie.hu-berlin.de/matze/linux-m68k-atarinommu/blob/master/arch/m68k/kernel/entry.S#L2195):
> 
> === objdump -D vmlinux output:
> 000048cc <resume>:
>     48cc:       2208            movel %a0,%d1
>     48ce:       40e8 0320       movew %sr,%a0@(800)
>     48d2:       48e7 031e       moveml %d6-%d7/%a3-%fp,%sp@-
>     48d6:       214f 0318       movel %sp,%a0@(792)
>     48da:       4e6b            movel %usp,%a3
>     48dc:       214b 031c       movel %a3,%a0@(796)
>     48e0:       2669 031c       moveal %a1@(796),%a3
>     48e4:       4e63            movel %a3,%usp
>     48e6:       2e69 0318       moveal %a1@(792),%sp
>     48ea:       4cdf 78c0       moveml %sp@+,%d6-%d7/%a3-%fp
>     48ee:       46e9 0320       movew %a1@(800),%sr
>     48f2:       4e75            rtsp
> ===
> 
> It can be seen from the register dump given by the hatari debugger, that USP 
> contains 0x0 and the superuser bit (indicated by "S=0") is not set:
> 
> ===  hatari emulator output:
> CPU=$48f2, VBL=6379, FrameCycles=86856, HBL=387, LineCycles=168, DSP=N/A
> $000048f2 : 4e75                               rts
> r
>   D0 00000008   D1 00002200   D2 00005401   D3 00961EC8
>   D4 00000000   D5 00940020   D6 602E0206   D7 00E00030
>   A0 00865B68   A1 00961EEC   A2 0080E000   A3 000026E4
>   A4 000045C0   A5 000045E4   A6 00004794   A7 00000000
> USP  00000000 ISP  00000018
> T=00 S=0 M=0 X=0 N=0 Z=0 V=0 C=0 IMASK=2 STP=0
> Prefetch 42a7 (CLR) 4e75 (RTS) Chip latch 00000000
> 000048F2 4e75                     RTS
> Next PC: 000048f4
> 
> ===
> 
> If I understand correctly, the problem is that RTS sets the PC to USP, so the 
> Atari wants to execute the code at 0x0, which is wrong and not allowed, of 
> course.
> 
> I found the line "p->thread.usp = 0;" in the function copy_thread  
> (https://ford.biologie.hu-berlin.de/matze/linux-m68k-atarinommu/blob/master/arch/m68k/kernel/process.c#L158),
>  which is executed under the condition "unlikely(p->flags & PF_KTHREAD)". 
> Just setting p->thread.usp = usp; did not help and I'm not sure why this 
> should be necessary anyway.

It is unlikely you would need to change anything here. That code works
as is on nommu ColdFire and other 68k nommu parts (68328 for example).


> Another thing I found out is that the crash happens at first call of resume 
> with the superuser bit set to zero. Before that certain call, there are many 
> successful calls in superuser mode.
> 
> Do you have any idea why this might happen? Is it maybe a nommu-related 
> issue? Any speculations are welcome.

So is this crashing at the step of trying to load and run the
first user app?

Regards
Greg



--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to