uint32_t snapshot_magic;
uint32_t nkern_frames;
uint32_t nuser_frames;
- int32_t pid;
uint64_t wait_event;
- uint64_t continuation;
+ uint64_t continuation;
uint64_t thread_id;
+ uint64_t user_time;
+ uint64_t system_time;
int32_t state;
+ int32_t sched_pri; // scheduled (current) priority
+ int32_t sched_flags; // scheduler flags
+ char ss_flags;
+} __attribute__ ((packed));
+
+struct task_snapshot {
+ uint32_t snapshot_magic;
+ int32_t pid;
+ uint32_t nloadinfos;
+ uint64_t user_time_in_terminated_threads;
+ uint64_t system_time_in_terminated_threads;
+ int suspend_count;
+ int task_size; // pages
+ int faults; // number of page faults
+ int pageins; // number of actual pageins
+ int cow_faults; // number of copy-on-write faults
char ss_flags;
/* We restrict ourselves to a statically defined
* (current as of 2009) length for the
char p_comm[17];
} __attribute__ ((packed));
+
+struct mem_and_io_snapshot {
+ uint32_t snapshot_magic;
+ uint32_t free_pages;
+ uint32_t active_pages;
+ uint32_t inactive_pages;
+ uint32_t purgeable_pages;
+ uint32_t wired_pages;
+ uint32_t speculative_pages;
+ uint32_t throttled_pages;
+ int busy_buffer_count;
+ uint32_t pages_wanted;
+ uint32_t pages_reclaimed;
+ uint8_t pages_wanted_reclaimed_valid; // did mach_vm_pressure_monitor succeed?
+} __attribute__((packed));
+
+
enum {
kUser64_p = 0x1,
kKernel64_p = 0x2,
- kHasDispatchSerial = 0x4
+ kHasDispatchSerial = 0x4,
+ kTerminatedSnapshot = 0x8,
+ kPidSuspended = 0x10, // true for suspended task
+ kFrozen = 0x20 // true for hibernated task (along with pidsuspended)
};
-enum {STACKSHOT_GET_DQ = 1};
-#define STACKSHOT_DISPATCH_OFFSET_MASK 0xffff0000
-#define STACKSHOT_DISPATCH_OFFSET_SHIFT 16
+#define VM_PRESSURE_TIME_WINDOW 5 /* seconds */
+
+enum {
+ STACKSHOT_GET_DQ = 0x1,
+ STACKSHOT_SAVE_LOADINFO = 0x2,
+ STACKSHOT_GET_GLOBAL_MEM_STATS = 0x4
+};
+
+#define STACKSHOT_THREAD_SNAPSHOT_MAGIC 0xfeedface
+#define STACKSHOT_TASK_SNAPSHOT_MAGIC 0xdecafbad
+#define STACKSHOT_MEM_AND_IO_SNAPSHOT_MAGIC 0xbfcabcde
#endif /* __APPLE_API_UNSTABLE */
#endif /* __APPLE_API_PRIVATE */
extern unsigned int systemLogDiags;
extern char debug_buf[];
+extern unsigned int debug_boot_arg;
+extern char kernel_uuid[];
#ifdef MACH_KERNEL_PRIVATE
#define KDP_CUR_DB 0x1
#define KDB_CUR_DB 0x2
-extern unsigned int active_debugger;
+extern unsigned int active_debugger;
extern unsigned int debug_mode;
extern unsigned int disable_debug_output;
-extern unsigned int panicDebugging;
-extern unsigned int logPanicDataToScreen;
+extern unsigned int panicDebugging;
+extern unsigned int logPanicDataToScreen;
extern int db_run_mode;
void panic_display_system_configuration(void);
void panic_display_zprint(void);
-
+#if CONFIG_ZLEAKS
+void panic_display_ztrace(void);
+#endif /* CONFIG_ZLEAKS */
#endif /* MACH_KERNEL_PRIVATE */
#define DB_HALT 0x1
} while (0)
#else /* !DEBUG */
#define DEBUG_KPRINT_SYSCALL_PREDICATE_INTERNAL(mask, namep) (0)
-#define DEBUG_KPRINT_SYSCALL_MASK(mask, fmt, args...) do { } while(0)
+#define DEBUG_KPRINT_SYSCALL_MASK(mask, fmt, args...) do { } while (0) /* kprintf(fmt, args) */
#endif /* !DEBUG */
enum {
#if KERNEL_PRIVATE
void _consume_panic_args(int, ...);
+void panic_context(unsigned int reason, void *ctx, const char *string, ...);
#endif
#if CONFIG_NO_PANIC_STRINGS