-#define CPUDEBUGGEROP PROCESSOR_DATA(current_processor(), debugger_state).db_current_op
-#define CPUDEBUGGERMSG PROCESSOR_DATA(current_processor(), debugger_state).db_message
-#define CPUPANICSTR PROCESSOR_DATA(current_processor(), debugger_state).db_panic_str
-#define CPUPANICARGS PROCESSOR_DATA(current_processor(), debugger_state).db_panic_args
-#define CPUPANICOPTS PROCESSOR_DATA(current_processor(), debugger_state).db_panic_options
-#define CPUPANICDATAPTR PROCESSOR_DATA(current_processor(), debugger_state).db_panic_data_ptr
-#define CPUDEBUGGERSYNC PROCESSOR_DATA(current_processor(), debugger_state).db_proceed_on_sync_failure
-#define CPUDEBUGGERCOUNT PROCESSOR_DATA(current_processor(), debugger_state).db_entry_count
-#define CPUDEBUGGERRET PROCESSOR_DATA(current_processor(), debugger_state).db_op_return
-#define CPUPANICCALLER PROCESSOR_DATA(current_processor(), debugger_state).db_panic_caller
+struct debugger_state {
+ uint64_t db_panic_options;
+ debugger_op db_current_op;
+ boolean_t db_proceed_on_sync_failure;
+ const char *db_message;
+ const char *db_panic_str;
+ va_list *db_panic_args;
+ void *db_panic_data_ptr;
+ unsigned long db_panic_caller;
+ /* incremented whenever we panic or call Debugger (current CPU panic level) */
+ uint32_t db_entry_count;
+ kern_return_t db_op_return;
+};
+static struct debugger_state PERCPU_DATA(debugger_state);
+
+/* __pure2 is correct if this function is called with preemption disabled */
+static inline __pure2 struct debugger_state *
+current_debugger_state(void)
+{
+ return PERCPU_GET(debugger_state);
+}
+
+#define CPUDEBUGGEROP current_debugger_state()->db_current_op
+#define CPUDEBUGGERMSG current_debugger_state()->db_message
+#define CPUPANICSTR current_debugger_state()->db_panic_str
+#define CPUPANICARGS current_debugger_state()->db_panic_args
+#define CPUPANICOPTS current_debugger_state()->db_panic_options
+#define CPUPANICDATAPTR current_debugger_state()->db_panic_data_ptr
+#define CPUDEBUGGERSYNC current_debugger_state()->db_proceed_on_sync_failure
+#define CPUDEBUGGERCOUNT current_debugger_state()->db_entry_count
+#define CPUDEBUGGERRET current_debugger_state()->db_op_return
+#define CPUPANICCALLER current_debugger_state()->db_panic_caller