+
+/* In-place packing routines -- inefficient, but they're called at most once.
+ */
+
+int packA(char *inbuf, uint32_t length, uint32_t buflen)
+{
+ unsigned int i, j = 0;
+ pasc_t pack;
+
+ length = MIN(((length & ~7) +8), buflen);
+
+ for (i = 0; i < length; i+=8)
+ {
+ pack.a = inbuf[i];
+ pack.b = inbuf[i+1];
+ pack.c = inbuf[i+2];
+ pack.d = inbuf[i+3];
+ pack.e = inbuf[i+4];
+ pack.f = inbuf[i+5];
+ pack.g = inbuf[i+6];
+ pack.h = inbuf[i+7];
+ bcopy ((char *) &pack, inbuf + j, 7);
+ j += 7;
+ }
+ return ((length * 7)/8);
+}
+
+void unpackA(char *inbuf, uint32_t length)
+{
+ pasc_t packs;
+ unsigned i = 0;
+ length = (length * 8)/7;
+
+ while (i < length) {
+ packs = *(pasc_t *)&inbuf[i];
+ bcopy(&inbuf[i+7], &inbuf[i+8], MAX(0, (int) (length - i - 8)));
+ inbuf[i++] = packs.a;
+ inbuf[i++] = packs.b;
+ inbuf[i++] = packs.c;
+ inbuf[i++] = packs.d;
+ inbuf[i++] = packs.e;
+ inbuf[i++] = packs.f;
+ inbuf[i++] = packs.g;
+ inbuf[i++] = packs.h;
+ }
+}
+
+extern void *proc_name_address(void *p);
+
+static void
+panic_display_process_name(void) {
+ char proc_name[32] = "Unknown";
+ task_t ctask = 0;
+ void *cbsd_info = 0;
+
+ if (ml_nofault_copy((vm_offset_t)¤t_thread()->task, (vm_offset_t) &ctask, sizeof(task_t)) == sizeof(task_t))
+ if(ml_nofault_copy((vm_offset_t)&ctask->bsd_info, (vm_offset_t)&cbsd_info, sizeof(&ctask->bsd_info)) == sizeof(&ctask->bsd_info))
+ if (cbsd_info && (ml_nofault_copy((vm_offset_t) proc_name_address(cbsd_info), (vm_offset_t) &proc_name, sizeof(proc_name)) > 0))
+ proc_name[sizeof(proc_name) - 1] = '\0';
+ kdb_printf("\nBSD process name corresponding to current thread: %s\n", proc_name);
+}
+
+unsigned panic_active(void) {
+ return ((panicstr != (char *) 0));
+}
+
+void populate_model_name(char *model_string) {
+ strlcpy(model_name, model_string, sizeof(model_name));
+}
+
+static void panic_display_model_name(void) {
+ char tmp_model_name[sizeof(model_name)];
+
+ if (ml_nofault_copy((vm_offset_t) &model_name, (vm_offset_t) &tmp_model_name, sizeof(model_name)) != sizeof(model_name))
+ return;
+
+ model_name[sizeof(model_name) - 1] = '\0';
+
+ if (model_name[0] != 0)
+ kdb_printf("System model name: %s\n", model_name);
+}
+
+extern const char version[];
+extern char osversion[];
+
+__private_extern__ void panic_display_system_configuration(void) {
+ static boolean_t config_displayed = FALSE;
+
+ panic_display_process_name();
+ if (config_displayed == FALSE) {
+ kdb_printf("\nMac OS version:\n%s\n",
+ (osversion[0] != 0) ? osversion : "Not yet set");
+ kdb_printf("\nKernel version:\n%s\n",version);
+ panic_display_model_name();
+ config_displayed = TRUE;
+ }
+}
+
+#if !MACH_KDP
+static struct ether_addr kdp_current_mac_address = {{0, 0, 0, 0, 0, 0}};
+unsigned int not_in_kdp = 1;
+
+/* XXX ugly forward declares to stop warnings */
+void *kdp_get_interface(void);
+void kdp_set_ip_and_mac_addresses(struct in_addr *, struct ether_addr *);
+void kdp_set_gateway_mac(void *);
+void kdp_set_interface(void *);
+void kdp_register_send_receive(void *, void *);
+void kdp_unregister_send_receive(void *, void *);
+void kdp_snapshot_preflight(int, void *, uint32_t, uint32_t);
+int kdp_stack_snapshot_geterror(void);
+int kdp_stack_snapshot_bytes_traced(void);
+
+void *
+kdp_get_interface( void)
+{
+ return(void *)0;
+}
+
+unsigned int
+kdp_get_ip_address(void )
+{ return 0; }
+
+struct ether_addr
+kdp_get_mac_addr(void)
+{
+ return kdp_current_mac_address;
+}
+
+void
+kdp_set_ip_and_mac_addresses(
+ __unused struct in_addr *ipaddr,
+ __unused struct ether_addr *macaddr)
+{}
+
+void
+kdp_set_gateway_mac(__unused void *gatewaymac)
+{}
+
+void
+kdp_set_interface(__unused void *ifp)
+{}
+
+void
+kdp_register_send_receive(__unused void *send, __unused void *receive)
+{}
+
+void
+kdp_unregister_send_receive(__unused void *send, __unused void *receive)
+{}
+
+void
+kdp_snapshot_preflight(__unused int pid, __unused void * tracebuf,
+ __unused uint32_t tracebuf_size, __unused uint32_t options)
+{}
+
+int
+kdp_stack_snapshot_geterror(void)
+{
+ return -1;
+}
+
+int
+kdp_stack_snapshot_bytes_traced(void)
+{
+ return 0;
+}
+
+#endif