From: David Daney <david.daney@xxxxxxxxxx> Currently the MIPS FPU emulator uses eXecute Out of Line (XOL) on the stack to handle instructions in the delay slots of FPU branches. Because of this MIPS cannot have a non-executable stack. A previous patch set from Leonid Yegoshin attempts to address the problem by moving the XOL location to a thread private mapping of a dedicated page. I present here an alternative: Add an instruction set emulator and use it to execute the FPU delay slot instructions. The benefit of this approach is that we don't have to allocate a page per user-space thread for XOL, and we keep the TLB handling code slightly simpler as a result. Currently this is a proof of concept, as it doesn't yet handle MIPS64 nor microMIPS instructions. But it is sufficient to run the entire Debian distribution on a FPU-less CPU. Comments welcome. David Daney (3): MIPS: Add FPU emulator counter for non-FPU instructions emulated. MIPS: Add full ISA emulator. MIPS: Use full instruction emulation for FPU emulator delay slot emulation. arch/mips/include/asm/fpu_emulator.h | 1 + arch/mips/kernel/Makefile | 3 +- arch/mips/kernel/insn-emul.c | 815 +++++++++++++++++++++++++++++++++++ arch/mips/math-emu/cp1emu.c | 13 +- arch/mips/math-emu/me-debugfs.c | 1 + 5 files changed, 830 insertions(+), 3 deletions(-) create mode 100644 arch/mips/kernel/insn-emul.c -- 1.7.11.7