]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/debug.c
xnu-517.9.5.tar.gz
[apple/xnu.git] / osfmk / kern / debug.c
index f698c52cf454fbe2f3ebe0a5bd4b8b342e4d5c96..5fedc28cc041e4ef8f3f57dfc1117c48be0f7014 100644 (file)
@@ -3,22 +3,19 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
+ * The contents of this file constitute Original Code as defined in and
+ * are subject to the Apple Public Source License Version 1.1 (the
+ * "License").  You may not use this file except in compliance with the
+ * License.  Please obtain a copy of the License at
+ * http://www.apple.com/publicsource and read it before using this file.
  * 
  * 
- * This file contains Original Code and/or Modifications of Original Code
- * as defined in and that are subject to the Apple Public Source License
- * Version 2.0 (the 'License'). You may not use this file except in
- * compliance with the License. Please obtain a copy of the License at
- * http://www.opensource.apple.com/apsl/ and read it before using this
- * file.
- * 
- * The Original Code and all software distributed under the License are
- * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * This Original Code and all software distributed under the License are
+ * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
- * Please see the License for the specific language governing rights and
- * limitations under the License.
+ * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
+ * License for the specific language governing rights and limitations
+ * under the License.
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
@@ -79,16 +76,16 @@ unsigned int        active_debugger = 0;
 unsigned int   debug_mode=0;
 unsigned int   disableDebugOuput = TRUE;
 unsigned int   systemLogDiags = FALSE;
 unsigned int   debug_mode=0;
 unsigned int   disableDebugOuput = TRUE;
 unsigned int   systemLogDiags = FALSE;
-unsigned int   panicDebugging = FALSE;
+unsigned int    logPanicDataToScreen = FALSE;
 #ifdef __ppc__
 #ifdef __ppc__
-       unsigned int    logPanicDataToScreen = FALSE;
+        unsigned int   panicDebugging = FALSE;
 #else
 #else
-       unsigned int    logPanicDataToScreen = TRUE;
+        unsigned int   panicDebugging = TRUE;
 #endif
 
 int mach_assert = 1;
 
 #endif
 
 int mach_assert = 1;
 
-const char             *panicstr;
+const char             *panicstr = (char *) 0;
 decl_simple_lock_data(,panic_lock)
 int                    paniccpu;
 volatile int           panicwait;
 decl_simple_lock_data(,panic_lock)
 int                    paniccpu;
 volatile int           panicwait;
@@ -148,6 +145,7 @@ panic(const char *str, ...)
        thread_t thread;
 
        s = splhigh();
        thread_t thread;
 
        s = splhigh();
+       disable_preemption();
 
 #ifdef __ppc__
        lastTrace = LLTraceSet(0);              /* Disable low-level tracing */
 
 #ifdef __ppc__
        lastTrace = LLTraceSet(0);              /* Disable low-level tracing */
@@ -157,8 +155,6 @@ panic(const char *str, ...)
        save_waits[cpu_number()] = thread->wait_queue;  /* Save the old value */
        thread->wait_queue = 0;                 /* Clear the wait so we do not get double panics when we try locks */
 
        save_waits[cpu_number()] = thread->wait_queue;  /* Save the old value */
        thread->wait_queue = 0;                 /* Clear the wait so we do not get double panics when we try locks */
 
-       mp_disable_preemption();
-       
        if( logPanicDataToScreen )
                disableDebugOuput = FALSE;
                
        if( logPanicDataToScreen )
                disableDebugOuput = FALSE;
                
@@ -179,8 +175,6 @@ restart:
                        nestedpanic +=1;
                        PANIC_UNLOCK();
                        Debugger("double panic");
                        nestedpanic +=1;
                        PANIC_UNLOCK();
                        Debugger("double panic");
-                       mp_enable_preemption();
-                       splx(s);
                        printf("double panic:  We are hanging here...\n");
                        while(1);
                        /* NOTREACHED */
                        printf("double panic:  We are hanging here...\n");
                        while(1);
                        /* NOTREACHED */
@@ -208,11 +202,12 @@ restart:
        PANIC_LOCK();
        panicstr = (char *)0;
        PANIC_UNLOCK();
        PANIC_LOCK();
        panicstr = (char *)0;
        PANIC_UNLOCK();
-       mp_enable_preemption();
-       splx(s);
        thread->wait_queue = save_waits[cpu_number()];  /* Restore the wait queue */
        thread->wait_queue = save_waits[cpu_number()];  /* Restore the wait queue */
-       if (return_on_panic)
+       if (return_on_panic) {
+               enable_preemption();
+               splx(s);
                return;
                return;
+       }
        kdb_printf("panic: We are hanging here...\n");
        while(1);
        /* NOTREACHED */
        kdb_printf("panic: We are hanging here...\n");
        while(1);
        /* NOTREACHED */