#include <sys/kdebug.h>
#endif /*KERNEL_PRIVATE*/
+#include <libutil.h>
+
#include <sys/sysctl.h>
#include <errno.h>
#include <err.h>
#define NUMPARMS 23
struct th_info {
- int thread;
+ uintptr_t thread;
int type;
- int child_thread;
+ uintptr_t child_thread;
int arg1;
double stime;
long *pathptr;
#define DBG_FUNC_ALL (DBG_FUNC_START | DBG_FUNC_END)
#define DBG_FUNC_MASK 0xfffffffc
-#define CPU_NUMBER(ts) ((ts & KDBG_CPU_MASK) >> KDBG_CPU_SHIFT)
+#define CPU_NUMBER(kp) kdbg_get_cpu(kp)
-#define DBG_ZERO_FILL_FAULT 1
-#define DBG_PAGEIN_FAULT 2
-#define DBG_COW_FAULT 3
-#define DBG_CACHE_HIT_FAULT 4
-char *fault_name[5] = {
+char *fault_name[9] = {
"",
"ZeroFill",
"PageIn",
"COW",
"CacheHit",
+ "NoZeroFill",
+ "Guard",
+ "PageInFile",
+ "PageInAnon"
};
char *pc_to_string();
int
-main(argc, argv)
-int argc;
-char *argv[];
+main(int argc, char *argv[])
{
uint64_t start, stop;
uint64_t timestamp1;
void do_kernel_nm();
void open_logfile();
+ if (0 != reexec_to_match_kernel()) {
+ fprintf(stderr, "Could not re-execute: %d\n", errno);
+ exit(1);
+ }
+
my_policy = THREAD_STANDARD_POLICY;
policy_name = "TIMESHARE";
exit(EXIT_FAILURE);
}
- if ((last_decrementer_kd = (kd_buf **)malloc(hi.avail_cpus * sizeof(kd_buf *))) == (kd_buf **)0)
+ if ((last_decrementer_kd = (kd_buf **)malloc(hi.max_cpus * sizeof(kd_buf *))) == (kd_buf **)0)
quit("can't allocate memory for decrementer tracing info\n");
nanosecs_to_sleep = (double)(num_of_usecs_to_sleep * 1000);
}
-void create_map_entry(int thread, char *command)
+void create_map_entry(uintptr_t thread, char *command)
{
int i, n;
kd_threadmap *map;
}
-kd_threadmap *find_thread_map(int thread)
+kd_threadmap *find_thread_map(uintptr_t thread)
{
int i;
kd_threadmap *map;
}
void
-kill_thread_map(int thread)
+kill_thread_map(uintptr_t thread)
{
kd_threadmap *map;
}
-struct th_info *find_thread(int thread, int type1, int type2) {
+struct th_info *find_thread(uintptr_t thread, int type1, int type2) {
struct th_info *ti;
for (ti = th_state; ti < &th_state[cur_max]; ti++) {
end_of_sample = &((kd_buf *)my_buffer)[count];
/* Always reinitialize the DECR_TRAP array */
- for (i=0; i < hi.avail_cpus; i++)
+ for (i=0; i < hi.max_cpus; i++)
last_decrementer_kd[i] = (kd_buf *)my_buffer;
last_mach_sched = (kd_buf *)0;
void print_entry();
thread = kd->arg5;
- cpunum = CPU_NUMBER(kd->timestamp);
+ cpunum = CPU_NUMBER(kd);
debugid = kd->debugid;
type = kd->debugid & DBG_FUNC_MASK;
}
if ((kd->debugid & DBG_FUNC_MASK) == DECR_TRAP)
{
- cpunum = CPU_NUMBER(kd->timestamp);
+ cpunum = CPU_NUMBER(kd);
last_decrementer_kd[cpunum] = kd;
}
else
int cpunum;
char *p;
- cpunum = CPU_NUMBER(kd->timestamp);
+ cpunum = CPU_NUMBER(kd);
if (print_info && fp) {
if ((p = find_code(type))) {
char *p;
uint64_t user_addr;
- cpunum = CPU_NUMBER(kd->timestamp);
+ cpunum = CPU_NUMBER(kd);
ti = find_thread(thread, type, type);
#if 0
if ((p = find_code(type))) {
if (type == INTERRUPT) {
fprintf(fp, "INTERRUPT %-8x %d %s\n", thread, cpunum, command);
- } else if (type == MACH_vmfault && kd->arg4 <= DBG_CACHE_HIT_FAULT) {
+ } else if (type == MACH_vmfault && kd->arg4 <= DBG_PAGEIND_FAULT) {
user_addr = ((uint64_t)kd->arg1 << 32) | (uint32_t)kd->arg2;
- fprintf(fp, "%-28.28s %-8.8s %-16qx %-8x %d %s\n",
+ fprintf(fp, "%-28.28s %-10.10s %-16qx %-8x %d %s\n",
p, fault_name[kd->arg4], user_addr,
thread, cpunum, command);
} else {
if (!fp)
return;
- cpunum = CPU_NUMBER(kd->timestamp);
+ cpunum = CPU_NUMBER(kd);
#if 0
fprintf(fp, "cur_max = %d, type = %x, thread = %x, cpunum = %d\n", cur_max, type, thread, cpunum);
#endif
fprintf(log_fp, "RelTime(Us) Delta debugid arg1 arg2 arg3 arg4 thread cpu command\n\n");
thread = kd_beg->arg5;
- cpunum = CPU_NUMBER(kd_end->timestamp);
+ cpunum = CPU_NUMBER(kd_end);
for (kd_count = 0, kd_start = kd_beg - 1; (kd_start >= (kd_buf *)my_buffer); kd_start--, kd_count++) {
if (kd_count == MAX_LOG_COUNT)
break;
- if (CPU_NUMBER(kd_start->timestamp) != cpunum)
+ if (CPU_NUMBER(kd_start) != cpunum)
continue;
if ((kd_start->debugid & DBG_FUNC_MASK) == DECR_TRAP)
if ((kd_stop->debugid & DBG_FUNC_MASK) == DECR_TRAP)
break;
- if (CPU_NUMBER(kd_stop->timestamp) != cpunum)
+ if (CPU_NUMBER(kd_stop) != cpunum)
continue;
if (kd_stop->arg5 != thread)
int mode;
thread = kd->arg5;
- cpunum = CPU_NUMBER(kd->timestamp);
+ cpunum = CPU_NUMBER(kd);
debugid = kd->debugid;
type = kd->debugid & DBG_FUNC_MASK;
double handle_decrementer(kd_buf *kd)
{
double latency;
- int elapsed_usecs;
+ long elapsed_usecs;
- if ((int)(kd->arg1) >= 0)
+ if ((long)(kd->arg1) >= 0)
latency = 1;
else
latency = (((double)(-1 - kd->arg1)) / divisor);
- elapsed_usecs = (int)latency;
+ elapsed_usecs = (long)latency;
if (elapsed_usecs < 100)
i_usec_10_bins[elapsed_usecs/10]++;