On Oct 18, 2013, at 2:38 AM, Wolfgang Denk wrote: > Default Debian PowerPC doesn't work on e500 because the code contains > "lwsync" instructions, which are unsupported on this core. As a > result, applications using this will crash with an "unhandled signal 4" > "Illegal instruction" error. > > As a work around we add code to emulate this insn. This is expensive > performance-wise, but allows to run standard user land code. > > Signed-off-by: Wolfgang Denk <w...@denx.de> > Cc: Benjamin Herrenschmidt <b...@kernel.crashing.org> > Cc: Scott Wood <scottw...@freescale.com> > --- > I am aware that the clean solution to the problem is to build user > space with compiler options that match the target architecture. > However, sometimes this is just too much effort. > > Also, of course the performance of such an emulation sucks. But the > the occurrence of such instructions is so rare that no significant > slowdown can be oserved. > > I'm not sure if this should / could go into mainline. I'm posting it > primarily so it can be found should anybody else need this. > - wd > > arch/powerpc/kernel/traps.c | 7 +++++++ > 1 file changed, 7 insertions(+) > > diff --git a/arch/powerpc/kernel/traps.c b/arch/powerpc/kernel/traps.c > index f783c93..f330374 100644 > --- a/arch/powerpc/kernel/traps.c > +++ b/arch/powerpc/kernel/traps.c > @@ -986,6 +986,13 @@ static int emulate_instruction(struct pt_regs *regs) > return 0; > } > > + /* Emulating the lwsync insn as a sync insn */ > + if (instword == PPC_INST_LWSYNC) { > + PPC_WARN_EMULATED(lwsync, regs); > + asm volatile("sync" : : : "memory");
Do we really need the inline asm? Doesn't the fact of just taking an exception and returning from it equate to a sync. > + return 0; > + } > + > /* Emulate the mcrxr insn. */ > if ((instword & PPC_INST_MCRXR_MASK) == PPC_INST_MCRXR) { > int shift = (instword >> 21) & 0x1c; > -- > 1.8.3.1 > > _______________________________________________ > Linuxppc-dev mailing list > Linuxppc-dev@lists.ozlabs.org > https://lists.ozlabs.org/listinfo/linuxppc-dev _______________________________________________ Linuxppc-dev mailing list Linuxppc-dev@lists.ozlabs.org https://lists.ozlabs.org/listinfo/linuxppc-dev