10 #include "jdb_kobject.h"
13 class Jdb_kern_info_misc : public Jdb_kern_info_module
17 static Jdb_kern_info_misc k_i INIT_PRIORITY(JDB_MODULE_INIT_PRIO+1);
20 Jdb_kern_info_misc::Jdb_kern_info_misc()
21 : Jdb_kern_info_module('i', "Miscellaneous info")
23 Jdb_kern_info::register_subcmd(this);
28 Jdb_kern_info_misc::show()
30 printf ("clck: %08x.%08x\n",
31 (unsigned) (Kip::k()->clock >> 32),
32 (unsigned) (Kip::k()->clock));
37 class Jdb_kern_info_cpu : public Jdb_kern_info_module
41 static Jdb_kern_info_cpu k_c INIT_PRIORITY(JDB_MODULE_INIT_PRIO+1);
44 Jdb_kern_info_cpu::Jdb_kern_info_cpu()
45 : Jdb_kern_info_module('c', "CPU features")
47 Jdb_kern_info::register_subcmd(this);
52 Jdb_kern_info_cpu::show()
54 const char *perf_type = Perf_cnt::perf_type();
60 if ((hz = Cpu::boot_cpu()->frequency()))
62 unsigned mhz = hz / 1000000;
64 unsigned khz = hz / 1000;
65 snprintf(cpu_mhz, sizeof(cpu_mhz), "%d.%03d MHz", mhz, khz);
68 printf ("CPU: %s %s\n", Cpu::boot_cpu()->model_str(), cpu_mhz);
69 Cpu::boot_cpu()->show_cache_tlb_info(" ");
72 if (Cpu::boot_cpu()->tsc())
74 Unsigned32 hour, min, sec, ns;
75 Cpu::boot_cpu()->tsc_to_s_and_ns(Cpu::boot_cpu()->rdtsc(), &sec, &ns);
80 snprintf(time, sizeof(time), "%02d:%02d:%02d.%06d",
81 hour, min, sec, ns/1000);
84 strcpy(time, "not available");
86 printf("\nPerformance counters: %s"
87 "\nTime stamp counter: %s"
89 perf_type ? perf_type : "no",
93 class Jdb_kern_info_host : public Jdb_kern_info_module
97 static Jdb_kern_info_host k_H INIT_PRIORITY(JDB_MODULE_INIT_PRIO+1);
100 Jdb_kern_info_host::Jdb_kern_info_host()
101 : Jdb_kern_info_module('H', "Host information")
103 Jdb_kern_info::register_subcmd(this);
108 Jdb_kern_info_host::show()
110 for (Kobject_dbg::Iterator i = Kobject_dbg::begin(); i != Kobject_dbg::end(); ++i)
112 Task const *task = Kobject::dcast<Task const *>(Kobject::from_dbg(*i));
118 Jdb_kobject::obj_description(buf, sizeof(buf), true, *i);
119 buf[sizeof(buf) - 1] = 0;
120 printf("%s, host-pid=%d\n", buf, task->pid());
122 snprintf(buf, sizeof(buf), "/proc/%d/maps", task->pid());
123 buf[sizeof(buf) - 1] = 0;
124 int fd = open(buf, O_RDONLY);
130 r = read(fd, buf, sizeof(buf));
132 printf("%.*s", r, buf);
134 while (r == sizeof(buf));