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)

Reply via email to