]> git.saurik.com Git - apple/xnu.git/blobdiff - pexpert/gen/pe_gen.c
xnu-3247.1.106.tar.gz
[apple/xnu.git] / pexpert / gen / pe_gen.c
index 15eaf656dbbd46905a58d72d8ba58ae21f4d7695..5bab0cc1401fdf2d028bc3c6d88219f9a818e569 100644 (file)
 #include <kern/debug.h>
 
 static int DEBUGFlag;
+static uint32_t gPEKernelConfigurationBitmask;
 
 int32_t gPESerialBaud = -1;
 
 void pe_init_debug(void)
 {
-  if (!PE_parse_boot_argn("debug", &DEBUGFlag, sizeof (DEBUGFlag)))
-    DEBUGFlag = 0;
+       boolean_t boot_arg_value;
+
+       if (!PE_parse_boot_argn("debug", &DEBUGFlag, sizeof (DEBUGFlag)))
+               DEBUGFlag = 0;
+
+       gPEKernelConfigurationBitmask = 0;
+
+       if (!PE_parse_boot_argn("assertions", &boot_arg_value, sizeof(boot_arg_value))) {
+#if MACH_ASSERT
+               boot_arg_value = TRUE;
+#else
+               boot_arg_value = FALSE;
+#endif
+       }
+       gPEKernelConfigurationBitmask |= (boot_arg_value ? kPEICanHasAssertions : 0);
+
+       if (!PE_parse_boot_argn("statistics", &boot_arg_value, sizeof(boot_arg_value))) {
+#if DEVELOPMENT || DEBUG
+               boot_arg_value = TRUE;
+#else
+               boot_arg_value = FALSE;
+#endif
+       }
+       gPEKernelConfigurationBitmask |= (boot_arg_value ? kPEICanHasStatistics : 0);
+
+#if SECURE_KERNEL
+       boot_arg_value = FALSE;
+#else
+       if (!PE_i_can_has_debugger(NULL)) {
+               boot_arg_value = FALSE;
+       } else if (!PE_parse_boot_argn("diagnostic_api", &boot_arg_value, sizeof(boot_arg_value)))  {
+               boot_arg_value = TRUE;
+       }
+#endif
+       gPEKernelConfigurationBitmask |= (boot_arg_value ? kPEICanHasDiagnosticAPI : 0);
+
 }
 
 void PE_enter_debugger(const char *cause)
@@ -50,6 +85,12 @@ void PE_enter_debugger(const char *cause)
     Debugger(cause);
 }
 
+uint32_t
+PE_i_can_has_kernel_configuration(void)
+{
+       return gPEKernelConfigurationBitmask;
+}
+
 /* extern references */
 extern void vcattach(void);