Re: Crash in entry.S:resume on Atari ST

2016-09-16 Thread Andreas Schwab
On Sep 16 2016, Matthias Reis  wrote:

> === objdump -D vmlinux output:
> 48cc :
> 48cc:   2208movel %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:   4e6bmovel %usp,%a3
> 48dc:   214b 031c   movel %a3,%a0@(796)
> 48e0:   2669 031c   moveal %a1@(796),%a3
> 48e4:   4e63movel %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:   4e75rtsp
> ===
>
> 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
> $48f2 : 4e75   rts
> r
>   D0 0008   D1 2200   D2 5401   D3 00961EC8
>   D4    D5 00940020   D6 602E0206   D7 00E00030
>   A0 00865B68   A1 00961EEC   A2 0080E000   A3 26E4
>   A4 45C0   A5 45E4   A6 4794   A7 
> USP   ISP  0018
> T=00 S=0 M=0 X=0 N=0 Z=0 V=0 C=0 IMASK=2 STP=0

Given the value of SSP and the values loaded into D6/D7 (which match the
ROM shadow at address 0), it is clear that SP was 0 at $48ea.  So it
looks like A1 is just pointing at a block of zeros, not at a valid task
struct.

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Crash in entry.S:resume on Atari ST

2016-09-16 Thread Matthias Reis
Hi Greg,

On Fri, Sep 16, 2016 at 04:39:06PM +1000, Greg Ungerer wrote:
> What procedure did you follow to build your apps?

In short, I used the -m68000 gcc switch and set the following options:

uClibc .config:
TARGET_ARCH="m68k"
# UCLIBC_FORMAT_FLAT is not set
UCLIBC_FORMAT_FLAT_SEP_DATA=y
# UCLIBC_FORMAT_SHARED_FLAT is not set

busybox .config:
CONFIG_STATIC=y
# CONFIG_PIE is not set
CONFIG_NOMMU=y


The full details can be found under:
https://ford.biologie.hu-berlin.de/matze/linux-m68k-atarinommu/uploads/22f7c78b30c92605adcc8dc40af3220e/build-binutils-gcc-uClibc-busybox.tar.bz2

In the tarball, you can there is a script that should include all steps,
including the ./configure options, as well as all .config's.

> Are you using flat format binaries?

$ ./flthdr ../busybox/busybox_unstripped
../busybox/busybox_unstripped
 Magic:bFLT
 Rev:  4
 Build Date:   Mon Sep  5 16:26:38 2016
 Entry:0x44
 Data Start:   0x20eb4
 Data End: 0x25238
 BSS End:  0x27ae0
 Stack Size:   0x3e80
 Reloc Start:  0x25238
 Reloc Count:  0x73
 Flags:0x2 ( Has-PIC-GOT )

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

It happens after run_init_process() is called.

Thanks!

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


Re: Crash in entry.S:resume on Atari ST

2016-09-16 Thread Andreas Schwab
On Sep 16 2016, Matthias Reis  wrote:

> === objdump -D vmlinux output:
> 48cc :
> 48cc:   2208movel %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:   4e6bmovel %usp,%a3
> 48dc:   214b 031c   movel %a3,%a0@(796)
> 48e0:   2669 031c   moveal %a1@(796),%a3
> 48e4:   4e63movel %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:   4e75rtsp
> ===
>
> 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:

SR should never contain S=0 at this point, as returning from kernel
context always happens with RTE (via resume_userspace).

Andreas.

-- 
Andreas Schwab, sch...@linux-m68k.org
GPG Key fingerprint = 58CA 54C7 6D53 942B 1756  01D3 44D5 214B 8276 4ED5
"And now for something completely different."
--
To unsubscribe from this list: send the line "unsubscribe linux-m68k" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: Crash in entry.S:resume on Atari ST

2016-09-16 Thread Greg Ungerer
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:
> 48cc :
> 48cc:   2208movel %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:   4e6bmovel %usp,%a3
> 48dc:   214b 031c   movel %a3,%a0@(796)
> 48e0:   2669 031c   moveal %a1@(796),%a3
> 48e4:   4e63movel %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:   4e75rtsp
> ===
> 
> 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
> $48f2 : 4e75   rts
> r
>   D0 0008   D1 2200   D2 5401   D3 00961EC8
>   D4    D5 00940020   D6 602E0206   D7 00E00030
>   A0 00865B68   A1 00961EEC   A2 0080E000   A3 26E4
>   A4 45C0   A5 45E4   A6 4794   A7 
> USP   ISP  0018
> 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 
> 48F2 4e75 RTS
> Next PC: 48f4
> 
> ===
> 
> 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html