]> git.saurik.com Git - apple/xnu.git/blobdiff - osfmk/kern/debug.c
xnu-517.tar.gz
[apple/xnu.git] / osfmk / kern / debug.c
index 7793cb8c242faad5624b14f803c3fe7c41ab2b1f..d5ddb8b1a59d2ceb2bec39888b10c2df61837d51 100644 (file)
@@ -3,19 +3,22 @@
  *
  * @APPLE_LICENSE_HEADER_START@
  * 
- * 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.
+ * Copyright (c) 1999-2003 Apple Computer, Inc.  All Rights Reserved.
  * 
- * This Original Code and all software distributed under the License are
- * distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY KIND, EITHER
+ * 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
  * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
- * FITNESS FOR A PARTICULAR PURPOSE OR NON-INFRINGEMENT.  Please see the
- * License for the specific language governing rights and limitations
- * under the License.
+ * 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.
  * 
  * @APPLE_LICENSE_HEADER_END@
  */
@@ -76,16 +79,16 @@ unsigned int        active_debugger = 0;
 unsigned int   debug_mode=0;
 unsigned int   disableDebugOuput = TRUE;
 unsigned int   systemLogDiags = FALSE;
-unsigned int   panicDebugging = FALSE;
+unsigned int    logPanicDataToScreen = FALSE;
 #ifdef __ppc__
-       unsigned int    logPanicDataToScreen = FALSE;
+        unsigned int   panicDebugging = FALSE;
 #else
-       unsigned int    logPanicDataToScreen = TRUE;
+        unsigned int   panicDebugging = TRUE;
 #endif
 
 int mach_assert = 1;
 
-const char             *panicstr;
+const char             *panicstr = (char *) 0;
 decl_simple_lock_data(,panic_lock)
 int                    paniccpu;
 volatile int           panicwait;
@@ -145,6 +148,7 @@ panic(const char *str, ...)
        thread_t thread;
 
        s = splhigh();
+       disable_preemption();
 
 #ifdef __ppc__
        lastTrace = LLTraceSet(0);              /* Disable low-level tracing */
@@ -154,8 +158,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 */
 
-       mp_disable_preemption();
-       
        if( logPanicDataToScreen )
                disableDebugOuput = FALSE;
                
@@ -176,8 +178,6 @@ restart:
                        nestedpanic +=1;
                        PANIC_UNLOCK();
                        Debugger("double panic");
-                       mp_enable_preemption();
-                       splx(s);
                        printf("double panic:  We are hanging here...\n");
                        while(1);
                        /* NOTREACHED */
@@ -205,11 +205,12 @@ restart:
        PANIC_LOCK();
        panicstr = (char *)0;
        PANIC_UNLOCK();
-       mp_enable_preemption();
-       splx(s);
        thread->wait_queue = save_waits[cpu_number()];  /* Restore the wait queue */
-       if (return_on_panic)
+       if (return_on_panic) {
+               enable_preemption();
+               splx(s);
                return;
+       }
        kdb_printf("panic: We are hanging here...\n");
        while(1);
        /* NOTREACHED */