Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1117,10 +1117,10 @@ ENTRY(sys_rt_sigreturn)
ENTRY(sys_or1k_atomic)
	/* FIXME: This ignores r3 and always does an XCHG */
	DISABLE_INTERRUPTS(r17,r19)
	l.lwz	r30,0(r4)
	l.lwz	r28,0(r5)
	l.sw	0(r4),r28
	l.sw	0(r5),r30
	l.lwz	r29,0(r4)
	l.lwz	r27,0(r5)
	l.sw	0(r4),r27
	l.sw	0(r5),r29
	ENABLE_INTERRUPTS(r17)
	l.jr	r9
	 l.or	r11,r0,r0