mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-01-10 19:43:29 +00:00
xtensa: fix fast_syscall_spill_registers
The original implementation could clobber registers under certain conditions. The Xtensa processor architecture uses windowed registers and the original implementation was using a4 as a temporary register, which under certain conditions could be register a0 of the oldest window frame, and didn't always restore the content correctly. By moving the _spill_registers routine inside the fast system call, it frees up one more register (the return address is not required anymore) for the spill routine. Signed-off-by: Chris Zankel <chris@zankel.net>
This commit is contained in:
parent
6b5a1f74e5
commit
c0e50d4112
@ -235,7 +235,7 @@ ENTRY(_DoubleExceptionVector)
|
|||||||
|
|
||||||
/* Check for overflow/underflow exception, jump if overflow. */
|
/* Check for overflow/underflow exception, jump if overflow. */
|
||||||
|
|
||||||
_bbci.l a0, 6, _DoubleExceptionVector_WindowOverflow
|
bbci.l a0, 6, _DoubleExceptionVector_WindowOverflow
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restart window underflow exception.
|
* Restart window underflow exception.
|
||||||
|
@ -122,9 +122,7 @@ EXPORT_SYMBOL(insw);
|
|||||||
EXPORT_SYMBOL(insl);
|
EXPORT_SYMBOL(insl);
|
||||||
|
|
||||||
extern long common_exception_return;
|
extern long common_exception_return;
|
||||||
extern long _spill_registers;
|
|
||||||
EXPORT_SYMBOL(common_exception_return);
|
EXPORT_SYMBOL(common_exception_return);
|
||||||
EXPORT_SYMBOL(_spill_registers);
|
|
||||||
|
|
||||||
#ifdef CONFIG_FUNCTION_TRACER
|
#ifdef CONFIG_FUNCTION_TRACER
|
||||||
EXPORT_SYMBOL(_mcount);
|
EXPORT_SYMBOL(_mcount);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user