Commit 207e715f authored by Jonas Bonn's avatar Jonas Bonn

openrisc: use scratch regs in atomic syscall

The function sys_or1k_atomic was using call-saved registers without
restoring their value before returning.  This is a faux pas: either
we need to restore their values or use scratch regs; the latter is
less code so that's the route this patch takes.

Thanks to David Hennerström for doing most of the heavy-lifting in
tracking this one down.
Reported-by: default avatarDavd Hennerström <david.hennerstrom@aacmicrotec.com>
Signed-off-by: default avatarJonas Bonn <jonas@southpole.se>
parent 7b903e6c
...@@ -1117,10 +1117,10 @@ ENTRY(sys_rt_sigreturn) ...@@ -1117,10 +1117,10 @@ ENTRY(sys_rt_sigreturn)
ENTRY(sys_or1k_atomic) ENTRY(sys_or1k_atomic)
/* FIXME: This ignores r3 and always does an XCHG */ /* FIXME: This ignores r3 and always does an XCHG */
DISABLE_INTERRUPTS(r17,r19) DISABLE_INTERRUPTS(r17,r19)
l.lwz r30,0(r4) l.lwz r29,0(r4)
l.lwz r28,0(r5) l.lwz r27,0(r5)
l.sw 0(r4),r28 l.sw 0(r4),r27
l.sw 0(r5),r30 l.sw 0(r5),r29
ENABLE_INTERRUPTS(r17) ENABLE_INTERRUPTS(r17)
l.jr r9 l.jr r9
l.or r11,r0,r0 l.or r11,r0,r0
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment