Skip to contentSkip to conversation

PPC: problem with syscalls

U-Boot-Users Pierre AUBERT 2 participants 4 messages Nov 28, 2002 – Dec 6, 2002

lore
Share & tools
lore
#0 lore raw

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

#1 lore raw
Quoted 15 lines · Pierre AUBERT

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.

-------------- next part --------------
A non-text attachment was scrubbed...
Name: syscalls.patch
Type: application/octet-stream
Size: 7657 bytes
Desc: not available
Url : http://lists.denx.de/pipermail/u-boot/attachments/20021129/736d50b2/attachment.obj

#2 lore raw
Quoted 5 lines · In message <[email protected]> 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

Signature · 4 lines
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
"If you own a machine, you are in turn owned by it,  and  spend  your
time serving it..."    - Marion Zimmer Bradley, _The Forbidden Tower_
#3 lore raw
In reply to Pierre AUBERT
Quoted 14 lines · In message <[email protected]> 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.

Quoted 1 line

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

Signature · 5 lines
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-4596-87  Fax: (+49)-8142-4596-88  Email: wd at denx.de
In an infinite universe all things are possible, including the possi-
bility that the universe does not exist.
                        - Terry Pratchett, _The Dark Side of the Sun_