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

Commit aa770aa7 authored by Robin Getz's avatar Robin Getz Committed by Bryan Wu
Browse files

Blackfin arch: Fix random crash issue found by Michael.



This is fixes a problem where we could jump to the wrong address. By
doing a "p0 = reti; jump (p0)". If a different, higher level interrupt
came in, just before, rather than returning to the calling function, we
would return to a random place in the kernel.

This very elegant fix from Bernd grabs the return location off the
stack, and places it into P0, so when we do a return, it goes to the
correct place.

Signed-off-by: default avatarRobin Getz <robin.getz@analog.com>
Signed-off-by: default avatarBryan Wu <bryan.wu@analog.com>
parent 7728ec33
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -55,8 +55,10 @@ ENTRY(_ret_from_fork)
	/* do a 'fake' RTI by jumping to [RETI]
	/* do a 'fake' RTI by jumping to [RETI]
	 * to avoid clearing supervisor mode in child
	 * to avoid clearing supervisor mode in child
	 */
	 */
	r0 = [sp + PT_PC];
	[sp + PT_P0] = r0;

	RESTORE_ALL_SYS
	RESTORE_ALL_SYS
	p0 = reti;
	jump (p0);
	jump (p0);
ENDPROC(_ret_from_fork)
ENDPROC(_ret_from_fork)