[U-Boot-Users] PPC: problem with syscalls

Hello everybody,
I've a problem with examples/timer.c. I've tried to launch it on my mpc860t board, if I start the timer and if I press a key after one or more interrupts occured, the u-boot crashes. The problem is that an interrupt handler uses a system call (mon_printf) while the main loop is inside a system call (mon_getc). During a system call, the LR and SRRx are saved at a fixed location (0xcf4, 0xcf8 and 0xcfc) then the return address of the mon_printf in the main loop is overridden by the return address of the mon_getc in the interrupt handler. To avoid this problem, I think that we need to use a stack to store the return addresses (and the SRRx) of the system calls.
What's your opinion ?
Best regards

Pierre AUBERT wrote:
Hello everybody,
I've a problem with examples/timer.c. I've tried to launch it on my mpc860t board, if I start the timer and if I press a key after one or more interrupts occured, the u-boot crashes. The problem is that an interrupt handler uses a system call (mon_printf) while the main loop is inside a system call (mon_getc). During a system call, the LR and SRRx are saved at a fixed location (0xcf4, 0xcf8 and 0xcfc) then the return address of the mon_printf in the main loop is overridden by the return address of the mon_getc in the interrupt handler. To avoid this problem, I think that we need to use a stack to store the return addresses (and the SRRx) of the system calls.
Dear Wolfgang,
Please find attached a patch fixing the problem described above. A little stack (located between the end of the syscall exception handler and the beginning of the following exception) is used to save the LR and SRRx. With this patch, examples/timer is running fine.
Best regards.
CHANGELOG: * Patch by Pierre Aubert , 28 Nov 2002 Fix nested syscalls bug in standalone applications.

In message 3DE757B3.F88ACDBA@staubli.com you wrote:
Please find attached a patch fixing the problem described above. A little stack (located between the end of the syscall exception handler and the beginning of the following exception) is used to save the LR and SRRx. With this patch, examples/timer is running fine.
Added (although I still/now think we should implement a portable method instead).
Best regards,
Wolfgang Denk

In message 3DE60E99.1DB09169@staubli.com you wrote:
I've a problem with examples/timer.c. I've tried to launch it on my mpc860t board, if I start the timer and if I press a key after one or more interrupts occured, the u-boot crashes. The problem is that an interrupt handler uses a system call (mon_printf) while the main loop is inside a system call (mon_getc). During a system call, the LR and SRRx are saved at a fixed location (0xcf4, 0xcf8 and 0xcfc) then the return address of the mon_printf in the main loop is overridden by the return address of the mon_getc in the interrupt handler. To avoid this problem, I think that we need to use a stack to store the return addresses (and the SRRx) of the system calls.
What's your opinion ?
We should probably follow Robert Kaiser's advise and use plainold pointer tables as we did before. When I switched to use syscalls it seemed like a good idea, but I was not thinking about other archi- tectures then.
[Sorry it took me so long to repply.]
Best regards,
Wolfgang Denk
participants (2)
-
Pierre AUBERT
-
Wolfgang Denk