[PATCH 0/3] MIPS: Get ready for non-executable stack.

From: David Daney
Date: Wed Dec 03 2014 - 18:44:31 EST

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

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


To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/