uint64_t e_address;
} LibraryRange;
-LibraryRange framework32;
-LibraryRange framework64;
+LibraryRange framework32 = {0,0};
+LibraryRange framework64 = {0,0};
+LibraryRange framework64h = {0,0};
#define TEXT_R 0
int bias_secs = 0;
long last_time;
int wideflag = 0;
+int include_waited_flag = 0;
int columns = 0;
int one_good_pid = 0; /* Used to fail gracefully when bad pids given */
#define FMT_CHMODAT 44
#define FMT_OPENAT 45
#define FMT_RENAMEAT 46
+#define FMT_IOCTL_SYNCCACHE 47
#define MAX_BSD_SYSCALL 526
myname++;
}
- while ((ch = getopt(argc, argv, "bewf:R:S:E:t:")) != EOF) {
+ while ((ch = getopt(argc, argv, "bewf:R:S:E:t:W")) != EOF) {
- switch(ch) {
+ switch(ch) {
case 'e':
exclude_pids = 1;
columns = MAX_WIDE_MODE_COLS;
break;
+ case 'W':
+ include_waited_flag = 1;
+ break;
+
case 'f':
if (!strcmp(optarg, "network"))
filter_mode |= NETWORK_FILTER;
/* set up signal handlers */
signal(SIGINT, leave);
signal(SIGQUIT, leave);
+ signal(SIGPIPE, leave);
sigaction(SIGHUP, (struct sigaction *)NULL, &osa);
if ((my_buffer = malloc(num_events * sizeof(kd_buf))) == (char *)0)
quit("can't allocate memory for tracing info\n");
- if (ReadSharedCacheMap("/var/db/dyld/dyld_shared_cache_i386.map", &framework32, "/var/db/dyld/dyld_shared_cache_i386")) {
- ReadSharedCacheMap("/var/db/dyld/dyld_shared_cache_x86_64.map", &framework64, "/var/db/dyld/dyld_shared_cache_x86_64");
- } else {
- ReadSharedCacheMap("/var/db/dyld/dyld_shared_cache_ppc.map", &framework32, "/var/db/dyld/dyld_shared_cache_ppc");
- ReadSharedCacheMap("/var/db/dyld/dyld_shared_cache_ppc64.map", &framework64, "/var/db/dyld/dyld_shared_cache_ppc64");
- }
+ ReadSharedCacheMap("/var/db/dyld/dyld_shared_cache_i386.map", &framework32, "/var/db/dyld/dyld_shared_cache_i386");
+
+ if (0 == ReadSharedCacheMap("/var/db/dyld/dyld_shared_cache_x86_64h.map", &framework64h, "/var/db/dyld/dyld_shared_cache_x86_64h")){
+ ReadSharedCacheMap("/var/db/dyld/dyld_shared_cache_x86_64.map", &framework64, "/var/db/dyld/dyld_shared_cache_x86_64");
+ }
+
SortFrameworkAddresses();
cache_disk_names();
setbit(type_filter_bitmap, ENCODE_CSC_LOW(DBG_MACH,DBG_MACH_EXCP_SC)); //0x010c
setbit(type_filter_bitmap, ENCODE_CSC_LOW(DBG_MACH,DBG_MACH_VM)); //0x0130
- setbit(type_filter_bitmap, ENCODE_CSC_LOW(DBG_MACH,DBG_MACH_SCHED)); //0x0140
+
+ if (include_waited_flag)
+ setbit(type_filter_bitmap, ENCODE_CSC_LOW(DBG_MACH,DBG_MACH_SCHED)); //0x0140
setbit(type_filter_bitmap, ENCODE_CSC_LOW(DBG_FSYSTEM,DBG_FSRW)); //0x0301
setbit(type_filter_bitmap, ENCODE_CSC_LOW(DBG_FSYSTEM,DBG_DKRW)); //0x0302
case SPEC_ioctl:
if (kd[i].arg2 == DKIOCSYNCHRONIZECACHE)
- exit_event("IOCTL", thread, type, kd[i].arg1, kd[i].arg2, 0, 0, FMT_IOCTL_SYNC, (double)now);
+ exit_event("IOCTL", thread, type, kd[i].arg1, kd[i].arg2, 0, 0, FMT_IOCTL_SYNCCACHE, (double)now);
else if (kd[i].arg2 == DKIOCUNMAP)
exit_event("IOCTL", thread, type, kd[i].arg1, kd[i].arg2, 0, 0, FMT_IOCTL_UNMAP, (double)now);
+ else if (kd[i].arg2 == DKIOCSYNCHRONIZE && (debugid & DBG_FUNC_ALL) == DBG_FUNC_NONE)
+ exit_event("IOCTL", thread, type, kd[i].arg1, kd[i].arg2, kd[i].arg3, 0, FMT_IOCTL_SYNC, (double)now);
else {
if ((ti = find_event(thread, type)))
delete_event(ti);
command_name = "";
+ // <rdar://problem/19852325> Filter out WindowServer/xcpm iocts in fs_usage
+ if (format == FMT_IOCTL && ti->arg2 == 0xc030581d)
+ return;
+
if (RAW_flag) {
l_usecs = (long long)((now - bias_now) / divisor);
}
case FMT_IOCTL_SYNC:
+ {
+ /*
+ * ioctl
+ */
+ clen += printf(" <DKIOCSYNCHRONIZE> B=%d /dev/%s", arg3, find_disk_name(arg1));
+
+ break;
+ }
+
+ case FMT_IOCTL_SYNCCACHE:
{
/*
* ioctl
if (numFrameworks) {
if ((user_addr >= framework32.b_address && user_addr < framework32.e_address) ||
- (user_addr >= framework64.b_address && user_addr < framework64.e_address)) {
+ (user_addr >= framework64.b_address && user_addr < framework64.e_address) ||
+ (user_addr >= framework64h.b_address && user_addr < framework64h.e_address)) {
start = 0;
last = numFrameworks;