On Fri, 2007-11-02 at 08:04 -0500, Jason Wessel wrote: > The typical kernel + user space I boot on the prep machine no longer > boots due to an issue accessing the PVR special purpose register. When > the PVR is accessed from user space, it should generate an exception > with the PC set to the instruction that it occurred at when it saves to > the stack. In the latest CVS, it is off by 4 bytes. With out the fix > /sbin/init gets killed because the kernel's trap handler which does the > userspace emulation of the instruction does not clean up the trap. > > I am using the attached patch to work around the problem, but I wonder > if there is a more generic problem that was introduced as a regression > with all ppc merges in the last month or so, given this used to work > fine through the generic handler. > > Any insight into this would certainly be useful.
Seems like I made a mistake for program exception generation while fixing floating-point ones, I'm sorry. Your patch is incorrect but the one attached should fix the problem. Could you please check it in your case ? -- J. Mayer <[EMAIL PROTECTED]> Never organized
Index: target-ppc/helper.c =================================================================== RCS file: /sources/qemu/qemu/target-ppc/helper.c,v retrieving revision 1.85 diff -u -d -d -p -r1.85 helper.c --- target-ppc/helper.c 28 Oct 2007 00:55:05 -0000 1.85 +++ target-ppc/helper.c 2 Nov 2007 13:35:52 -0000 @@ -2146,10 +2145,9 @@ static always_inline void powerpc_excp ( new_msr |= (target_ulong)1 << MSR_HV; #endif msr |= 0x00100000; - if (msr_fe0 != msr_fe1) { - msr |= 0x00010000; - goto store_current; - } + if (msr_fe0 == msr_fe1) + goto store_next; + msr |= 0x00010000; break; case POWERPC_EXCP_INVAL: #if defined (DEBUG_EXCEPTIONS) @@ -2187,7 +2185,7 @@ static always_inline void powerpc_excp ( env->error_code); break; } - goto store_next; + goto store_current; case POWERPC_EXCP_FPU: /* Floating-point unavailable exception */ new_msr &= ~((target_ulong)1 << MSR_RI); #if defined(TARGET_PPC64H)