#include <kern/kern_cdata.h>
#include <kern/kcdata.h>
-typedef struct kcdata_item *task_crashinfo_item_t;
+typedef struct kcdata_item *task_crashinfo_item_t;
/* Deprecated: use the KCDATA_* macros for all future use */
-#define CRASHINFO_ITEM_TYPE(item) KCDATA_ITEM_TYPE(item)
-#define CRASHINFO_ITEM_SIZE(item) KCDATA_ITEM_SIZE(item)
-#define CRASHINFO_ITEM_DATA_PTR(item) KCDATA_ITEM_DATA_PTR(item)
+#define CRASHINFO_ITEM_TYPE(item) KCDATA_ITEM_TYPE(item)
+#define CRASHINFO_ITEM_SIZE(item) KCDATA_ITEM_SIZE(item)
+#define CRASHINFO_ITEM_DATA_PTR(item) KCDATA_ITEM_DATA_PTR(item)
#define CRASHINFO_ITEM_NEXT_HEADER(item) KCDATA_ITEM_NEXT_HEADER(item)
-#define CRASHINFO_ITEM_FOREACH(head) KCDATA_ITEM_FOREACH(head)
+#define CRASHINFO_ITEM_FOREACH(head) KCDATA_ITEM_FOREACH(head)
#ifndef KERNEL
extern kern_return_t task_deliver_crash_notification(task_t, thread_t, exception_type_t, mach_exception_subcode_t);
/* In the corpseinfo kcd_user_flags */
-#define CORPSE_CRASHINFO_HAS_REF 0x1
-#define CORPSE_CRASHINFO_USER_FAULT 0x2
+__options_closed_decl(corpse_flags_t, uint16_t, {
+ CORPSE_CRASHINFO_HAS_REF = 0x1,
+ CORPSE_CRASHINFO_USER_FAULT = 0x2
+});
extern kcdata_descriptor_t task_get_corpseinfo(task_t task);
extern kcdata_descriptor_t task_crashinfo_alloc_init(
- mach_vm_address_t crash_data_p,
- unsigned size, uint32_t kc_u_flags, unsigned kc_flags);
+ mach_vm_address_t crash_data_p,
+ unsigned size, corpse_flags_t kc_u_flags, unsigned kc_flags);
extern kern_return_t task_crashinfo_destroy(kcdata_descriptor_t data);
extern void corpses_init(void);
-extern unsigned long total_corpses_count(void);
+extern unsigned long total_corpses_count(void) __attribute__((pure));
extern boolean_t corpses_enabled(void);
extern kern_return_t task_generate_corpse_internal(
- task_t task,
- task_t *corpse_task,
- thread_t *thread,
- exception_type_t etype,
- mach_exception_data_type_t code,
- mach_exception_data_type_t subcode,
- void *reason);
+ task_t task,
+ task_t *corpse_task,
+ thread_t *thread,
+ exception_type_t etype,
+ mach_exception_data_type_t code,
+ mach_exception_data_type_t subcode,
+ void *reason);
extern void task_clear_corpse(task_t task);
extern kern_return_t task_duplicate_map_and_threads(
- task_t task,
- void *p,
- task_t new_task,
- thread_t *thread,
- uint64_t **udata_buffer,
- int *size,
- int *num_udata);
+ task_t task,
+ void *p,
+ task_t new_task,
+ thread_t *thread,
+ uint64_t **udata_buffer,
+ int *size,
+ int *num_udata);
extern kern_return_t task_enqueue_exception_with_corpse(
task_t task,