+struct fake_descriptor64 {
+ uint32_t offset[2]; /* offset [0..31,32..63] */
+ uint32_t lim_or_seg:20; /* limit */
+ /* or segment, for gate */
+ uint32_t size_or_IST:4; /* size/granularity */
+ /* IST for gates */
+ uint32_t access:8; /* access */
+ uint32_t reserved:32; /* reserved/zero */
+};
+#define FAKE_UBER64(addr32) { (uint32_t) (addr32), KERNEL_UBER_BASE_HI32 }
+#define FAKE_COMPAT(addr32) { (uint32_t) (addr32), 0x0 }
+#define UBER64(addr32) ((addr64_t) (uintptr_t)addr32 + KERNEL_UBER_BASE)
+
+/*
+ * Boot-time data for master (or only) CPU
+ */
+extern struct fake_descriptor master_idt[IDTSZ];
+extern struct fake_descriptor master_gdt[GDTSZ];
+extern struct fake_descriptor master_ldt[LDTSZ];
+extern struct i386_tss master_ktss;
+extern struct sysenter_stack master_sstk;
+
+extern struct fake_descriptor64 master_idt64[IDTSZ];
+extern struct fake_descriptor64 kernel_ldt_desc64;
+extern struct fake_descriptor64 kernel_tss_desc64;
+extern struct x86_64_tss master_ktss64;
+
+__BEGIN_DECLS
+
+extern char df_task_stack[];
+extern char df_task_stack_end[];
+extern struct i386_tss master_dftss;
+extern void df_task_start(void);
+
+extern char mc_task_stack[];
+extern char mc_task_stack_end[];
+extern struct i386_tss master_mctss;
+extern void mc_task_start(void);
+
+#if MACH_KDB
+extern char db_stack_store[];
+extern char db_task_stack_store[];
+extern struct i386_tss master_dbtss;
+extern void db_task_start(void);
+#endif /* MACH_KDB */
+
+__END_DECLS
+