/*
- * Copyright (c) 1999-2016 Apple Inc. All rights reserved.
+ * Copyright (c) 1999-2018 Apple Inc. All rights reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
#if defined(__i386__) || defined(__x86_64__)
{"i386", CPU_TYPE_I386},
{"x86_64", CPU_TYPE_X86_64},
+#elif defined(__arm64__)
+ {"arm64", CPU_TYPE_ARM64},
#elif defined(__arm__)
{"arm", CPU_TYPE_ARM},
#else
* the arch command is running. NULL means unsupported.
*/
#if defined(__i386__) || defined(__x86_64__)
-#define NATIVE_32 "i386"
-#define NATIVE_64 "x86_64"
+ #define NATIVE_32 "i386"
+ #define NATIVE_64 "x86_64"
+#elif defined(__arm64__)
+ #define NATIVE_64 "arm64"
+ #define NATIVE_32 NULL
#elif defined(__arm__)
-#define NATIVE_32 "arm"
-#define NATIVE_64 NULL
+ #define NATIVE_32 "arm"
+ #define NATIVE_64 NULL
#else
-#error "Unsupported architecture"
+ #error "Unsupported architecture"
#endif
+
bool unrecognizednative32seen = false;
bool unrecognizednative64seen = false;
typedef struct th_info {
struct th_info *next;
- uintptr_t thread;
+ uint64_t thread;
/* this is needed for execve()/posix_spawn(), because the command name at the end probe is the new name, which we don't want */
char command[MAXCOMLEN + 1];
* (e.g., one absolute, one relative). traditional fs_usage behavior was to display the
* *first* lookup, so we need to save it off once we see it.
*/
- unsigned long vnodeid; /* the vp of the VFS_LOOKUP we're currently in, 0 if we are not in one */
+ uint64_t vnodeid; /* the vp of the VFS_LOOKUP we're currently in, 0 if we are not in one */
char pathname[MAXPATHLEN];
char pathname2[MAXPATHLEN];
char *newest_pathname; /* points to pathname2 if it's filled, otherwise pathname if it's filled, otherwise NULL */
int pid;
int type;
- unsigned long arg1;
- unsigned long arg2;
- unsigned long arg3;
- unsigned long arg4;
- unsigned long arg5;
- unsigned long arg6;
- unsigned long arg7;
- unsigned long arg8;
+ uint64_t arg1;
+ uint64_t arg2;
+ uint64_t arg3;
+ uint64_t arg4;
+ uint64_t arg5;
+ uint64_t arg6;
+ uint64_t arg7;
+ uint64_t arg8;
int waited;
uint64_t stime;
} *th_info_t;
struct diskio {
struct diskio *next;
struct diskio *prev;
- unsigned long type;
- unsigned long bp;
- unsigned long dev;
- unsigned long blkno;
- unsigned long iosize;
- unsigned long io_errno;
- unsigned long is_meta;
+ uint64_t type;
+ uint64_t bp;
+ uint64_t dev;
+ uint64_t blkno;
+ uint64_t iosize;
+ uint64_t io_errno;
+ uint64_t is_meta;
uint64_t vnodeid;
- uintptr_t issuing_thread;
+ uint64_t issuing_thread;
pid_t issuing_pid;
- uintptr_t completion_thread;
+ uint64_t completion_thread;
char issuing_command[MAXCOMLEN + 1];
uint64_t issued_time;
uint64_t completed_time;
#define HASH_MASK (HASH_SIZE - 1)
void setup_ktrace_callbacks(void);
-void extend_syscall(uintptr_t thread, int type, ktrace_event_t event);
+void extend_syscall(uint64_t thread, int type, ktrace_event_t event);
/* printing routines */
-bool check_filter_mode(pid_t pid, th_info_t ti, unsigned long type, int error, int retval, char *sc_name);
-void format_print(th_info_t ti, char *sc_name, ktrace_event_t event, unsigned long type, int format, uint64_t now, uint64_t stime, int waited, const char *pathname, struct diskio *dio);
-int print_open(ktrace_event_t event, uintptr_t flags);
+bool check_filter_mode(pid_t pid, th_info_t ti, uint64_t type, int error, int retval, char *sc_name);
+void format_print(th_info_t ti, char *sc_name, ktrace_event_t event, uint64_t type, int format, uint64_t now, uint64_t stime, int waited, const char *pathname, struct diskio *dio);
+int print_open(ktrace_event_t event, uint64_t flags);
/* metadata info hash routines */
void meta_add_name(uint64_t blockno, const char *pathname);
/* event ("thread info") routines */
void event_enter(int type, ktrace_event_t event);
void event_exit(char *sc_name, int type, ktrace_event_t event, int format);
-th_info_t event_find(uintptr_t thread, int type);
+th_info_t event_find(uint64_t thread, int type);
void event_delete(th_info_t ti_to_delete);
void event_delete_all(void);
-void event_mark_thread_waited(uintptr_t);
+void event_mark_thread_waited(uint64_t);
/* network fd set routines */
-void fd_set_is_network(pid_t pid, unsigned long fd, bool set);
-bool fd_is_network(pid_t pid, unsigned long fd);
+void fd_set_is_network(pid_t pid, uint64_t fd, bool set);
+bool fd_is_network(pid_t pid, uint64_t fd);
void fd_clear_pid(pid_t pid);
void fd_clear_all(void);
void lookup_name(uint64_t user_addr, char **type, char **name);
/* disk I/O tracking routines */
-struct diskio *diskio_start(unsigned long type, unsigned long bp, unsigned long dev, unsigned long blkno, unsigned long iosize, ktrace_event_t event);
-struct diskio *diskio_find(unsigned long bp);
-struct diskio *diskio_complete(unsigned long bp, unsigned long io_errno, unsigned long resid, uintptr_t thread, uint64_t curtime, struct timeval curtime_wall);
+struct diskio *diskio_start(uint64_t type, uint64_t bp, uint64_t dev, uint64_t blkno, uint64_t iosize, ktrace_event_t event);
+struct diskio *diskio_find(uint64_t bp);
+struct diskio *diskio_complete(uint64_t bp, uint64_t io_errno, uint64_t resid, uint64_t thread, uint64_t curtime, struct timeval curtime_wall);
void diskio_print(struct diskio *dio);
void diskio_free(struct diskio *dio);
/* disk name routines */
#define NFS_DEV -1
#define CS_DEV -2
-char *generate_cs_disk_name(unsigned long dev, char *s);
-char *find_disk_name(unsigned long dev);
+char *generate_cs_disk_name(uint64_t dev, char *s);
+char *find_disk_name(uint64_t dev);
void cache_disk_names(void);
#define CLASS_MASK 0xff000000
#define BSC_pwrite_nocancel 0x040c067c
#define BSC_aio_suspend_nocancel 0x40c0694
#define BSC_guarded_open_np 0x040c06e4
+#define BSC_guarded_open_dprotected_np 0x040c0790
#define BSC_guarded_close_np 0x040c06e8
+#define BSC_guarded_write_np 0x040c0794
+#define BSC_guarded_pwrite_np 0x040c0798
+#define BSC_guarded_writev_np 0x040c079c
#define BSC_fsgetpath 0x040c06ac
#define FMT_OPENAT 45
#define FMT_RENAMEAT 46
#define FMT_IOCTL_SYNCCACHE 47
+#define FMT_GUARDED_OPEN 48
#define DBG_FUNC_ALL (DBG_FUNC_START | DBG_FUNC_END)
NORMAL_SYSCALL(posix_spawn),
SYSCALL_WITH_NOCANCEL(open, FMT_OPEN),
SYSCALL(open_extended, FMT_OPEN),
- SYSCALL(guarded_open_np, FMT_OPEN),
+ SYSCALL(guarded_open_np, FMT_GUARDED_OPEN),
SYSCALL_NAMED(open_dprotected_np, open_dprotected, FMT_OPEN),
+ SYSCALL(guarded_open_dprotected_np, FMT_GUARDED_OPEN),
SYSCALL(dup, FMT_FD_2),
SYSCALL(dup2, FMT_FD_2),
SYSCALL_WITH_NOCANCEL(close, FMT_FD),
SYSCALL(guarded_close_np, FMT_FD),
SYSCALL_WITH_NOCANCEL(read, FMT_FD_IO),
SYSCALL_WITH_NOCANCEL(write, FMT_FD_IO),
+ SYSCALL(guarded_write_np, FMT_FD_IO),
+ SYSCALL(guarded_pwrite_np, FMT_FD_IO),
+ SYSCALL(guarded_writev_np, FMT_FD_IO),
SYSCALL(fgetxattr, FMT_FD),
SYSCALL(fsetxattr, FMT_FD),
SYSCALL(fremovexattr, FMT_FD),
get_screenwidth();
s = ktrace_session_create();
- assert(s);
+ assert(s != NULL);
+ (void)ktrace_ignore_process_filter_for_event(s, P_WrData);
+ (void)ktrace_ignore_process_filter_for_event(s, P_RdData);
+ (void)ktrace_ignore_process_filter_for_event(s, P_WrMeta);
+ (void)ktrace_ignore_process_filter_for_event(s, P_RdMeta);
+ (void)ktrace_ignore_process_filter_for_event(s, P_PgOut);
+ (void)ktrace_ignore_process_filter_for_event(s, P_PgIn);
while ((ch = getopt(argc, argv, "bewf:R:S:E:t:W")) != -1) {
switch (ch) {
* is all we really need.
*/
void
-extend_syscall(uintptr_t thread, int type, ktrace_event_t event)
+extend_syscall(uint64_t thread, int type, ktrace_event_t event)
{
th_info_t ti;
#pragma mark printing routines
static void
-get_mode_nibble(char *buf, unsigned long smode, unsigned long special, char x_on, char x_off)
+get_mode_nibble(char *buf, uint64_t smode, uint64_t special, char x_on, char x_off)
{
if (smode & 04)
buf[0] = 'r';
}
static void
-get_mode_string(unsigned long mode, char *buf)
+get_mode_string(uint64_t mode, char *buf)
{
memset(buf, '-', 9);
buf[9] = '\0';
* filters may be combined; default is all filters on (except cachehit)
*/
bool
-check_filter_mode(pid_t pid, th_info_t ti, unsigned long type, int error, int retval, char *sc_name)
+check_filter_mode(pid_t pid, th_info_t ti, uint64_t type, int error, int retval, char *sc_name)
{
bool ret = false;
int network_fd_isset = 0;
- unsigned long fd;
+ uint64_t fd;
/* cachehit is special -- it's not on by default */
if (sc_name[0] == 'C' && !strcmp(sc_name, "CACHE_HIT")) {
}
int
-print_open(ktrace_event_t event, uintptr_t flags)
+print_open(ktrace_event_t event, uint64_t flags)
{
char mode[] = "______";
*/
void
format_print(th_info_t ti, char *sc_name, ktrace_event_t event,
- unsigned long type, int format, uint64_t now, uint64_t stime,
+ uint64_t type, int format, uint64_t now, uint64_t stime,
int waited, const char *pathname, struct diskio *dio)
{
uint64_t secs, usecs;
int len = 0;
int clen = 0;
size_t tlen = 0;
- unsigned long class;
+ uint64_t class;
uint64_t user_addr;
uint64_t user_size;
char *framework_name;
char *framework_type;
char *p1;
char *p2;
- char buf[MAXWIDTH];
+ char buf[2 * PATH_MAX + 64];
char cs_diskname[32];
- unsigned long threadid;
+ uint64_t threadid;
struct timeval now_walltime;
static char timestamp[32];
if (event->arg1)
clen += printf(" F=%-3d[%3d]", (int)ti->arg1, (int)event->arg1);
else
- clen += printf(" F=%-3d B=0x%-6lx", (int)ti->arg1, event->arg2);
+ clen += printf(" F=%-3d B=0x%-6" PRIx64, (int)ti->arg1, (uint64_t)event->arg2);
break;
/*
* pageout
*/
- clen += printf(" B=0x%-8lx", event->arg1);
+ clen += printf(" B=0x%-8" PRIx64, (uint64_t)event->arg1);
break;
case FMT_HFS_update:
* physical disk I/O
*/
if (dio->io_errno) {
- clen += printf(" D=0x%8.8lx [%3d]", dio->blkno, (int)dio->io_errno);
+ clen += printf(" D=0x%8.8" PRIx64 " [%3d]", dio->blkno, (int)dio->io_errno);
} else {
if (BC_flag)
- clen += printf(" D=0x%8.8lx B=0x%-6lx BC:%s /dev/%s ", dio->blkno, dio->iosize, BC_STR(dio->bc_info), find_disk_name(dio->dev));
+ clen += printf(" D=0x%8.8" PRIx64 " B=0x%-6" PRIx64 " BC:%s /dev/%s ", dio->blkno, dio->iosize, BC_STR(dio->bc_info), find_disk_name(dio->dev));
else
- clen += printf(" D=0x%8.8lx B=0x%-6lx /dev/%s ", dio->blkno, dio->iosize, find_disk_name(dio->dev));
+ clen += printf(" D=0x%8.8" PRIx64 " B=0x%-6" PRIx64 " /dev/%s ", dio->blkno, dio->iosize, find_disk_name(dio->dev));
if (dio->is_meta) {
if (!(type & P_DISKIO_READ)) {
* physical disk I/O
*/
if (dio->io_errno)
- clen += printf(" D=0x%8.8lx [%3lu]", dio->blkno, dio->io_errno);
+ clen += printf(" D=0x%8.8" PRIx64 " [%3" PRIu64 "]", dio->blkno, dio->io_errno);
else
- clen += printf(" D=0x%8.8lx B=0x%-6lx /dev/%s", dio->blkno, dio->iosize, generate_cs_disk_name(dio->dev, cs_diskname));
+ clen += printf(" D=0x%8.8" PRIx64 " B=0x%-6" PRIx64 " /dev/%s", dio->blkno, dio->iosize, generate_cs_disk_name(dio->dev, cs_diskname));
break;
/*
* ioctl
*/
- clen += printf(" <DKIOCSYNCHRONIZE> B=%lu /dev/%s", event->arg3, find_disk_name(event->arg1));
+ clen += printf(" <DKIOCSYNCHRONIZE> B=%" PRIu64 " /dev/%s", (uint64_t)event->arg3, find_disk_name(event->arg1));
break;
}
case FMT_UNMAP_INFO:
{
- clen += printf(" D=0x%8.8lx B=0x%-6lx /dev/%s", event->arg2, event->arg3, find_disk_name(event->arg1));
+ clen += printf(" D=0x%8.8" PRIx64 " B=0x%-6" PRIx64 " /dev/%s", (uint64_t)event->arg2, (uint64_t)event->arg3, find_disk_name(event->arg1));
break;
}
clen += printf("[%3d] ", (int)event->arg1);
} else {
if (format == FMT_PREAD)
- clen += printf(" B=0x%-8lx ", event->arg2);
+ clen += printf(" B=0x%-8" PRIx64 " ", (uint64_t)event->arg2);
else
clen += printf(" ");
}
/*
* fchmod, fchmod_extended, chmod, chmod_extended
*/
- unsigned long mode;
+ uint64_t mode;
if (format == FMT_FCHMOD || format == FMT_FCHMOD_EXT) {
if (event->arg1)
case FMT_MOUNT:
{
if (event->arg1)
- clen += printf(" [%3d] <FLGS=0x%lx> ", (int)event->arg1, ti->arg3);
+ clen += printf(" [%3d] <FLGS=0x%" PRIx64 "> ", (int)event->arg1, ti->arg3);
else
- clen += printf(" <FLGS=0x%lx> ", ti->arg3);
+ clen += printf(" <FLGS=0x%" PRIx64 "> ", ti->arg3);
nopadding = 1;
break;
nopadding = 1;
break;
+ case FMT_GUARDED_OPEN:
+ clen += print_open(event, ti->arg4);
+ nopadding = 1;
+ break;
+
case FMT_SOCKET:
{
/*
}
if (event->arg1)
- clen += printf(" [%3d] <%s, %s, 0x%lx>", (int)event->arg1, domain, type, ti->arg3);
+ clen += printf(" [%3d] <%s, %s, 0x%" PRIx64 ">", (int)event->arg1, domain, type, ti->arg3);
else
- clen += printf(" F=%-3d <%s, %s, 0x%lx>", (int)event->arg2, domain, type, ti->arg3);
+ clen += printf(" F=%-3d <%s, %s, 0x%" PRIx64 ">", (int)event->arg2, domain, type, ti->arg3);
break;
}
op = "UNKNOWN";
if (event->arg1)
- clen += printf(" [%3d] P=0x%8.8lx <%s>", (int)event->arg1, ti->arg2, op);
+ clen += printf(" [%3d] P=0x%8.8" PRIx64 " <%s>", (int)event->arg1, ti->arg2, op);
else
- clen += printf(" P=0x%8.8lx <%s>", ti->arg2, op);
+ clen += printf(" P=0x%8.8" PRIx64 " <%s>", ti->arg2, op);
break;
}
* aio_return [errno] AIOCBP IOSIZE
*/
if (event->arg1)
- clen += printf(" [%3d] P=0x%8.8lx", (int)event->arg1, ti->arg1);
+ clen += printf(" [%3d] P=0x%8.8" PRIx64, (int)event->arg1, ti->arg1);
else
- clen += printf(" P=0x%8.8lx B=0x%-8lx", ti->arg1, event->arg2);
+ clen += printf(" P=0x%8.8" PRIx64 " B=0x%-8" PRIx64, ti->arg1, (uint64_t)event->arg2);
break;
*/
if (ti->arg2) {
if (event->arg1)
- clen += printf(" [%3d] P=0x%8.8lx", (int)event->arg1, ti->arg2);
+ clen += printf(" [%3d] P=0x%8." PRIx64, (int)event->arg1, ti->arg2);
else
- clen += printf(" P=0x%8.8lx", ti->arg2);
+ clen += printf(" P=0x%8.8" PRIx64, ti->arg2);
} else {
if (event->arg1)
clen += printf(" F=%-3d[%3d]", (int)ti->arg1, (int)event->arg1);
* aio_error, aio_read, aio_write [errno] AIOCBP
*/
if (event->arg1)
- clen += printf(" [%3d] P=0x%8.8lx", (int)event->arg1, ti->arg1);
+ clen += printf(" [%3d] P=0x%8.8" PRIx64, (int)event->arg1, ti->arg1);
else
- clen += printf(" P=0x%8.8lx", ti->arg1);
+ clen += printf(" P=0x%8.8" PRIx64, ti->arg1);
break;
p2 = " ";
if (columns > MAXCOLS || wideflag)
- printf("%s%s %3llu.%06llu%s %s.%lu\n", p1, pathname, secs, usecs, p2, command_name, threadid);
+ printf("%s%s %3llu.%06llu%s %s.%" PRIu64 "\n", p1, pathname, secs, usecs, p2, command_name, threadid);
else
printf("%s%s %3llu.%06llu%s %-12.12s\n", p1, pathname, secs, usecs, p2, command_name);
{
th_info_t ti;
int hashid;
- unsigned long eventid;
+ uint64_t eventid;
if ((ti = th_info_freelist))
th_info_freelist = ti->next;
}
th_info_t
-event_find(uintptr_t thread, int type)
+event_find(uint64_t thread, int type)
{
th_info_t ti;
int hashid;
}
void
-event_mark_thread_waited(uintptr_t thread)
+event_mark_thread_waited(uint64_t thread)
{
th_info_t ti;
int hashid;
}
void
-fd_set_is_network(pid_t pid, unsigned long fd, bool set)
+fd_set_is_network(pid_t pid, uint64_t fd, bool set)
{
struct pid_fd_set *pfs;
if (!set) return;
- newsize = MAX((fd + CHAR_BIT) / CHAR_BIT, 2 * pfs->setsize);
+ newsize = MAX(((size_t)fd + CHAR_BIT) / CHAR_BIT, 2 * pfs->setsize);
pfs->set = reallocf(pfs->set, newsize);
assert(pfs->set != NULL);
}
bool
-fd_is_network(pid_t pid, unsigned long fd)
+fd_is_network(pid_t pid, uint64_t fd)
{
struct pid_fd_set *pfs;
struct diskio *busy_diskios = NULL;
struct diskio *
-diskio_start(unsigned long type, unsigned long bp, unsigned long dev,
- unsigned long blkno, unsigned long iosize, ktrace_event_t event)
+diskio_start(uint64_t type, uint64_t bp, uint64_t dev,
+ uint64_t blkno, uint64_t iosize, ktrace_event_t event)
{
const char *command;
struct diskio *dio;
}
struct diskio *
-diskio_find(unsigned long bp)
+diskio_find(uint64_t bp)
{
struct diskio *dio;
}
struct diskio *
-diskio_complete(unsigned long bp, unsigned long io_errno, unsigned long resid,
- uintptr_t thread, uint64_t curtime, struct timeval curtime_wall)
+diskio_complete(uint64_t bp, uint64_t io_errno, uint64_t resid,
+ uint64_t thread, uint64_t curtime, struct timeval curtime_wall)
{
struct diskio *dio;
{
char *p = NULL;
int len = 0;
- unsigned long type;
+ uint64_t type;
int format = FMT_DISKIO;
char buf[64];
buf[len] = 0;
- if (check_filter_mode(-1, NULL, type, 0, 0, buf))
- format_print(NULL, buf, NULL, type, format, dio->completed_time, dio->issued_time, 1, "", dio);
+ if (check_filter_mode(-1, NULL, type, 0, 0, buf)) {
+ const char *pathname = ktrace_get_path_for_vp(s, dio->vnodeid);
+ format_print(NULL, buf, NULL, type, format, dio->completed_time,
+ dio->issued_time, 1, pathname ? pathname : "", dio);
+ }
}
#pragma mark disk name routines
}
char *
-find_disk_name(unsigned long dev)
+find_disk_name(uint64_t dev)
{
struct diskrec *dnp;
int i;
}
char *
-generate_cs_disk_name(unsigned long dev, char *s)
+generate_cs_disk_name(uint64_t dev, char *s)
{
if (dev == -1)
return "UNKNOWN";
- sprintf(s, "disk%lus%lu", (dev >> 16) & 0xffff, dev & 0xffff);
+ sprintf(s, "disk%" PRIu64 "s%" PRIu64, (dev >> 16) & 0xffff, dev & 0xffff);
return (s);
}
/*
- * Copyright (c) 2016 Apple Inc. All rights reserved.
+ * Copyright (c) 2016-2018 Apple Inc. All rights reserved.
*/
#include "options.h"
/*
* The shared cache must both contain the magic ID and
* match the uuid we discovered via dyld's information.
+ * Assumes that the dyld_cache_header grows in a binary compatible fashion.
*/
bool
get_uuid_from_shared_cache_mapping(const void *addr, size_t size, uuid_t out)
const struct copied_dyld_cache_header *ch = addr;
if (size < sizeof (*ch))
return false;
- static const char prefix[] = "dyld_v1 ";
+ static const char prefix[] = "dyld_v";
if (strncmp(ch->magic, prefix, strlen(prefix)) != 0)
return false;
uuid_copy(out, ch->uuid);
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.security.cs.debugger.root</key>
+ <true/>
+</dict>
+</plist>
if (OPTIONS_DEBUG(opt, 2)) {
hsize_str_t hstr;
- printr(r, "subregion %llx-%llx %7s %12s\t%s [%s off %zd for %zd nsects %u flags %x]\n",
+ printr(r, "subregion %llx-%llx %7s %12s\t%s [%s off %lu for %lu nsects %u flags %x]\n",
S_ADDR(s), S_ENDADDR(s),
str_hsize(hstr, S_SIZE(s)),
sc->segname,
S_FILENAME(s),
str_prot(sc->initprot),
- sc->fileoff, sc->filesize,
+ (unsigned long)sc->fileoff,
+ (unsigned long)sc->filesize,
sc->nsects, sc->flags);
}
break;
#include <libutil.h>
#include <errno.h>
#include <err.h>
+#include <inttypes.h>
#include <sys/types.h>
#include <sys/param.h>
struct event {
event_t ev_next;
- uintptr_t ev_thread;
+ uint64_t ev_thread;
uint32_t ev_type;
uint64_t ev_timestamp;
};
struct lookup {
lookup_t lk_next;
- uintptr_t lk_thread;
- uintptr_t lk_dvp;
- long *lk_pathptr;
- long lk_pathname[NUMPARMS + 1];
+ uint64_t lk_thread;
+ uint64_t lk_dvp;
+ int64_t *lk_pathptr;
+ int64_t lk_pathname[NUMPARMS + 1];
};
struct threadmap {
threadmap_t tm_next;
- uintptr_t tm_thread;
- uintptr_t tm_pthread;
+ uint64_t tm_thread;
+ uint64_t tm_pthread;
char tm_command[MAXCOMLEN + 1];
char tm_orig_command[MAXCOMLEN + 1];
};
struct threadrun {
threadrun_t tr_next;
- uintptr_t tr_thread;
+ uint64_t tr_thread;
kd_buf *tr_entry;
uint64_t tr_timestamp;
int tr_priority;
struct thread_entry {
thread_entry_t te_next;
- uintptr_t te_thread;
+ uint64_t te_thread;
};
#define HASH_SIZE 1024
static double handle_decrementer(kd_buf *, int);
static kd_buf *log_decrementer(kd_buf *kd_beg, kd_buf *kd_end, kd_buf *end_of_sample, double i_latency);
static void read_command_map(void);
-static void enter_syscall(FILE *fp, kd_buf *kd, uintptr_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info);
-static void exit_syscall(FILE *fp, kd_buf *kd, uintptr_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info);
-static void print_entry(FILE *fp, kd_buf *kd, uintptr_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, kd_buf *kd_note);
+static void enter_syscall(FILE *fp, kd_buf *kd, uint64_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info);
+static void exit_syscall(FILE *fp, kd_buf *kd, uint64_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info);
+static void print_entry(FILE *fp, kd_buf *kd, uint64_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, kd_buf *kd_note);
static void log_info(uint64_t now, uint64_t idelta, uint64_t start_bias, kd_buf *kd, kd_buf *kd_note);
static char *find_code(int);
-static void pc_to_string(char *pcstring, uintptr_t pc, int max_len, int mode);
+static void pc_to_string(char *pcstring, uint64_t pc, int max_len, int mode);
static void getdivisor(void);
static int sample_sc(void);
static void init_code_file(void);
static void do_kernel_nm(void);
static void open_logfile(const char*);
-static int binary_search(kern_sym_t *list, int low, int high, uintptr_t addr);
+static int binary_search(kern_sym_t *list, int low, int high, uint64_t addr);
-static void create_map_entry(uintptr_t, char *);
-static void check_for_thread_update(uintptr_t thread, int debugid_base, kd_buf *kbufp, char **command);
-static void log_scheduler(kd_buf *kd_start, kd_buf *kd_stop, kd_buf *end_of_sample, int s_priority, double s_latency, uintptr_t thread);
-static int check_for_scheduler_latency(int type, uintptr_t *thread, uint64_t now, kd_buf *kd, kd_buf **kd_start, int *priority, double *latency);
+static void create_map_entry(uint64_t, char *);
+static void check_for_thread_update(uint64_t thread, int debugid_base, kd_buf *kbufp, char **command);
+static void log_scheduler(kd_buf *kd_start, kd_buf *kd_stop, kd_buf *end_of_sample, int s_priority, double s_latency, uint64_t thread);
+static int check_for_scheduler_latency(int type, uint64_t *thread, uint64_t now, kd_buf *kd, kd_buf **kd_start, int *priority, double *latency);
static void open_rawfile(const char *path);
static void screen_update(FILE *);
}
void
-create_map_entry(uintptr_t thread, char *command)
+create_map_entry(uint64_t thread, char *command)
{
threadmap_t tme;
}
static void
-delete_thread_entry(uintptr_t thread)
+delete_thread_entry(uint64_t thread)
{
threadmap_t tme;
}
static void
-find_and_insert_tmp_map_entry(uintptr_t pthread, char *command)
+find_and_insert_tmp_map_entry(uint64_t pthread, char *command)
{
threadmap_t tme;
}
static void
-create_tmp_map_entry(uintptr_t thread, uintptr_t pthread)
+create_tmp_map_entry(uint64_t thread, uint64_t pthread)
{
threadmap_t tme;
}
static threadmap_t
-find_thread_entry(uintptr_t thread)
+find_thread_entry(uint64_t thread)
{
threadmap_t tme;
}
static void
-find_thread_name(uintptr_t thread, char **command)
+find_thread_name(uint64_t thread, char **command)
{
threadmap_t tme;
}
static void
-add_thread_entry_to_list(thread_entry_t *list, uintptr_t thread)
+add_thread_entry_to_list(thread_entry_t *list, uint64_t thread)
{
thread_entry_t te;
}
static void
-exec_thread_entry(uintptr_t thread, char *command)
+exec_thread_entry(uint64_t thread, char *command)
{
threadmap_t tme;
}
static void
-record_thread_entry_for_gc(uintptr_t thread)
+record_thread_entry_for_gc(uint64_t thread)
{
add_thread_entry_to_list(&thread_delete_list, thread);
}
}
static void
-insert_run_event(uintptr_t thread, int priority, kd_buf *kd, uint64_t now)
+insert_run_event(uint64_t thread, int priority, kd_buf *kd, uint64_t now)
{
threadrun_t trp;
}
static threadrun_t
-find_run_event(uintptr_t thread)
+find_run_event(uint64_t thread)
{
threadrun_t trp;
int hashid = thread & HASH_MASK;
}
static void
-delete_run_event(uintptr_t thread)
+delete_run_event(uint64_t thread)
{
threadrun_t trp = 0;
threadrun_t trp_prev;
static void
-insert_start_event(uintptr_t thread, int type, uint64_t now)
+insert_start_event(uint64_t thread, int type, uint64_t now)
{
event_t evp;
static uint64_t
-consume_start_event(uintptr_t thread, int type, uint64_t now)
+consume_start_event(uint64_t thread, int type, uint64_t now)
{
event_t evp;
event_t evp_prev;
}
static int
-thread_in_user_mode(uintptr_t thread, char *command)
+thread_in_user_mode(uint64_t thread, char *command)
{
event_t evp;
}
static lookup_t
-handle_lookup_event(uintptr_t thread, int debugid, kd_buf *kdp)
+handle_lookup_event(uint64_t thread, int debugid, kd_buf *kdp)
{
lookup_t lkp;
boolean_t first_record = FALSE;
}
static void
-delete_lookup_event(uintptr_t thread, lookup_t lkp_to_delete)
+delete_lookup_event(uint64_t thread, lookup_t lkp_to_delete)
{
lookup_t lkp;
lookup_t lkp_prev;
for (kd = (kd_buf *)my_buffer; kd < end_of_sample; kd++) {
kd_buf *kd_start;
- uintptr_t thread = kd->arg5;
+ uint64_t thread = kd->arg5;
int type = kd->debugid & DBG_FUNC_MASK;
(void)check_for_thread_update(thread, type, kd, NULL);
}
void
-enter_syscall(FILE *fp, kd_buf *kd, uintptr_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info)
+enter_syscall(FILE *fp, kd_buf *kd, uint64_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info)
{
char *p;
double timestamp;
pc_to_string(&pcstring[0], kd->arg2, 58, mode);
- fprintf(fp, "%9.1f %8.1f\t\tINTERRUPT[%2lx] @ %-58.58s %8lx %2d %s\n",
- timestamp, delta, kd->arg1, &pcstring[0], thread, cpunum, command);
+ fprintf(fp, "%9.1f %8.1f\t\tINTERRUPT[%2" PRIx64 "] @ %-58.58s %8" PRIx64 " %2d %s\n",
+ timestamp, delta, (uint64_t)kd->arg1, &pcstring[0], thread, cpunum, command);
} else if (type == MACH_vmfault) {
- fprintf(fp, "%9.1f %8.1f\t\t%-28.28s %8lx %2d %s\n",
+ fprintf(fp, "%9.1f %8.1f\t\t%-28.28s %8" PRIx64 " %2d %s\n",
timestamp, delta, p, thread, cpunum, command);
} else {
- fprintf(fp, "%9.1f %8.1f\t\t%-28.28s %-16lx %-16lx %-16lx %-16lx %8lx %2d %s\n",
- timestamp, delta, p, kd->arg1, kd->arg2, kd->arg3, kd->arg4,
+ fprintf(fp, "%9.1f %8.1f\t\t%-28.28s %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %8" PRIx64 " %2d %s\n",
+ timestamp, delta, p, (uint64_t)kd->arg1, (uint64_t)kd->arg2, (uint64_t)kd->arg3, (uint64_t)kd->arg4,
thread, cpunum, command);
}
} else {
- fprintf(fp, "%9.1f %8.1f\t\t%-8x %-16lx %-16lx %-16lx %-16lx %8lx %2d %s\n",
- timestamp, delta, type, kd->arg1, kd->arg2, kd->arg3, kd->arg4,
+ fprintf(fp, "%9.1f %8.1f\t\t%-8x %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %8" PRIx64 " %2d %s\n",
+ timestamp, delta, type, (uint64_t)kd->arg1, (uint64_t)kd->arg2, (uint64_t)kd->arg3, (uint64_t)kd->arg4,
thread, cpunum, command);
}
}
}
void
-exit_syscall(FILE *fp, kd_buf *kd, uintptr_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info)
+exit_syscall(FILE *fp, kd_buf *kd, uint64_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, int print_info)
{
char *p;
uint64_t user_addr;
if ((p = find_code(type))) {
if (type == INTERRUPT) {
- fprintf(fp, "INTERRUPT %8lx %2d %s\n", thread, cpunum, command);
+ fprintf(fp, "INTERRUPT %8" PRIx64 " %2d %s\n", thread, cpunum, command);
} 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 %-10.10s %-16qx %8lx %2d %s\n",
+ fprintf(fp, "%-28.28s %-10.10s %-16qx %8" PRIx64 " %2d %s\n",
p, fault_name[kd->arg4], user_addr,
thread, cpunum, command);
} else {
- fprintf(fp, "%-28.28s %-16lx %-16lx %8lx %2d %s\n",
- p, kd->arg1, kd->arg2,
+ fprintf(fp, "%-28.28s %-16" PRIx64 " %-16" PRIx64 " %8" PRIx64 " %2d %s\n",
+ p, (uint64_t)kd->arg1, (uint64_t)kd->arg2,
thread, cpunum, command);
}
} else {
- fprintf(fp, "%-8x %-16lx %-16lx %8lx %2d %s\n",
- type, kd->arg1, kd->arg2,
+ fprintf(fp, "%-8x %-16" PRIx64 " %-16" PRIx64 " %8" PRIx64 " %2d %s\n",
+ type, (uint64_t)kd->arg1, (uint64_t)kd->arg2,
thread, cpunum, command);
}
}
}
void
-print_entry(FILE *fp, kd_buf *kd, uintptr_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, kd_buf *kd_note)
+print_entry(FILE *fp, kd_buf *kd, uint64_t thread, int type, char *command, uint64_t now, uint64_t idelta, uint64_t start_bias, kd_buf *kd_note)
{
char *p;
} else {
fprintf(fp, "%9.1f %8.1f\t\t", timestamp, delta);
}
- fprintf(fp, "%-28.28s %-16lx %-16lx %-16lx %-16lx %8lx %2d %s\n",
- p, kd->arg1, kd->arg2, kd->arg3, kd->arg4, thread, cpunum, command);
+ fprintf(fp, "%-28.28s %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %8" PRIx64 " %2d %s\n",
+ p, (uint64_t)kd->arg1, (uint64_t)kd->arg2, (uint64_t)kd->arg3, (uint64_t)kd->arg4, thread, cpunum, command);
} else {
- fprintf(fp, "%9.1f %8.1f\t\t%-8x %-16lx %-16lx %-16lx %-16lx %8lx %2d %s\n",
- timestamp, delta, type, kd->arg1, kd->arg2, kd->arg3, kd->arg4,
+ fprintf(fp, "%9.1f %8.1f\t\t%-8x %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %8" PRIx64 " %2d %s\n",
+ timestamp, delta, type, (uint64_t)kd->arg1, (uint64_t)kd->arg2, (uint64_t)kd->arg3, (uint64_t)kd->arg4,
thread, cpunum, command);
}
}
void
-check_for_thread_update(uintptr_t thread, int debugid_base, kd_buf *kbufp, char **command)
+check_for_thread_update(uint64_t thread, int debugid_base, kd_buf *kbufp, char **command)
{
if (debugid_base == TRACE_DATA_NEWTHREAD) {
/*
{
lookup_t lkp;
int mode;
- uintptr_t reason;
+ uint64_t reason;
char *p;
char *command;
char *command1;
double delta;
char joe[32];
- uintptr_t thread = kd->arg5;
+ uint64_t thread = kd->arg5;
int cpunum = CPU_NUMBER(kd);
int debugid = kd->debugid;
int type = kd->debugid & DBG_FUNC_MASK;
case CQ_action:
pc_to_string(&pcstring[0], kd->arg1, 84, KERNEL_MODE);
- fprintf(log_fp, "%9.1f %8.1f\t\tCQ_action @ %-84.84s %8lx %2d %s\n",
+ fprintf(log_fp, "%9.1f %8.1f\t\tCQ_action @ %-84.84s %8" PRIx64 " %2d %s\n",
timestamp, delta, &pcstring[0], thread, cpunum, command);
break;
case TES_action:
pc_to_string(&pcstring[0], kd->arg1, 83, KERNEL_MODE);
- fprintf(log_fp, "%9.1f %8.1f\t\tTES_action @ %-83.83s %8lx %2d %s\n",
+ fprintf(log_fp, "%9.1f %8.1f\t\tTES_action @ %-83.83s %8" PRIx64 " %2d %s\n",
timestamp, delta, &pcstring[0], thread, cpunum, command);
break;
case IES_action:
pc_to_string(&pcstring[0], kd->arg1, 83, KERNEL_MODE);
- fprintf(log_fp, "%9.1f %8.1f\t\tIES_action @ %-83.83s %8lx %2d %s\n",
+ fprintf(log_fp, "%9.1f %8.1f\t\tIES_action @ %-83.83s %8" PRIx64 " %2d %s\n",
timestamp, delta, &pcstring[0], thread, cpunum, command);
break;
case IES_filter:
pc_to_string(&pcstring[0], kd->arg1, 83, KERNEL_MODE);
- fprintf(log_fp, "%9.1f %8.1f\t\tIES_filter @ %-83.83s %8lx %2d %s\n",
+ fprintf(log_fp, "%9.1f %8.1f\t\tIES_filter @ %-83.83s %8" PRIx64 " %2d %s\n",
timestamp, delta, &pcstring[0], thread, cpunum, command);
break;
pc_to_string(&pcstring[0], kd->arg2, 84, mode);
- fprintf(log_fp, "%9.1f %8.1f[%.1f]%s\tDECR_TRAP @ %-84.84s %8lx %2d %s\n",
+ fprintf(log_fp, "%9.1f %8.1f[%.1f]%s\tDECR_TRAP @ %-84.84s %8" PRIx64 " %2d %s\n",
timestamp, delta, i_latency, p, &pcstring[0], thread, cpunum, command);
break;
case DECR_SET:
- fprintf(log_fp, "%9.1f %8.1f[%.1f] \t%-28.28s %8lx %2d %s\n",
+ fprintf(log_fp, "%9.1f %8.1f[%.1f] \t%-28.28s %8" PRIx64 " %2d %s\n",
timestamp, delta, (double)kd->arg1/divisor, "DECR_SET", thread, cpunum, command);
break;
if (command1 == EMPTYSTRING) {
command1 = command_buf;
- sprintf(command1, "%-8lx", kd->arg2);
+ sprintf(command1, "%-8" PRIx64, (uint64_t)kd->arg2);
}
if (thread_in_user_mode(kd->arg2, command1)) {
p = "U";
}
if (sched_reason[0] == '?') {
- sprintf(joe, "%lx", reason);
+ sprintf(joe, "%" PRIx64, reason);
sched_reason = joe;
}
- sprintf(sched_info, "%16.16s @ pri %3lu --> %16.16s @ pri %3lu%s", command, kd->arg3, command1, kd->arg4, p);
+ sprintf(sched_info, "%16.16s @ pri %3" PRIu64 " --> %16.16s @ pri %3" PRIu64 "%s", command, (uint64_t)kd->arg3, command1, (uint64_t)kd->arg4, p);
- fprintf(log_fp, "%9.1f %8.1f\t\t%-10.10s[%s] %s %8lx %2d\n",
+ fprintf(log_fp, "%9.1f %8.1f\t\t%-10.10s[%s] %s %8" PRIx64 " %2d\n",
timestamp, delta, "MACH_SCHED", sched_reason, sched_info, thread, cpunum);
break;
clen = 0;
}
- fprintf(log_fp, "%9.1f %8.1f\t\t%-14.14s %-59s %-16lx %8lx %2d %s\n",
+ fprintf(log_fp, "%9.1f %8.1f\t\t%-14.14s %-59s %-16" PRIx64 " %8" PRIx64 " %2d %s\n",
timestamp, delta, "VFS_LOOKUP",
&p[clen], lkp->lk_dvp, thread, cpunum, command);
last_timestamp = now;
} else {
int debugid = kd->debugid;
- uintptr_t thread = kd->arg5;
+ uint64_t thread = kd->arg5;
int type = kd->debugid & DBG_FUNC_MASK;
if ((type >> 24) == DBG_TRACE) {
double sample_timestamp;
char buf1[128];
- uintptr_t thread = kd_beg->arg5;
+ uint64_t thread = kd_beg->arg5;
int cpunum = CPU_NUMBER(kd_end);
for (kd_count = 0, kd_start = kd_beg - 1; (kd_start >= (kd_buf *)my_buffer); kd_start--, kd_count++) {
void
-log_scheduler(kd_buf *kd_beg, kd_buf *kd_end, kd_buf *end_of_sample, int s_priority, double s_latency, uintptr_t thread)
+log_scheduler(kd_buf *kd_beg, kd_buf *kd_end, kd_buf *end_of_sample, int s_priority, double s_latency, uint64_t thread)
{
kd_buf *kd_start, *kd_stop;
uint64_t now;
}
int
-check_for_scheduler_latency(int type, uintptr_t *thread, uint64_t now, kd_buf *kd, kd_buf **kd_start, int *priority, double *latency)
+check_for_scheduler_latency(int type, uint64_t *thread, uint64_t now, kd_buf *kd, kd_buf **kd_start, int *priority, double *latency)
{
int found_latency = 0;
}
void
-pc_to_string(char *pcstring, uintptr_t pc, int max_len, int mode)
+pc_to_string(char *pcstring, uint64_t pc, int max_len, int mode)
{
int ret;
size_t len;
if (mode == USER_MODE) {
- sprintf(pcstring, "%-16lx [usermode addr]", pc);
+ sprintf(pcstring, "%-16" PRIx64 " [usermode addr]", pc);
return;
}
ret = binary_search(kern_sym_tbl, 0, kern_sym_count-1, pc);
if (ret == -1 || kern_sym_tbl[ret].k_sym_name == NULL) {
- sprintf(pcstring, "%-16lx", pc);
+ sprintf(pcstring, "%-16" PRIx64, pc);
return;
}
if ((len = kern_sym_tbl[ret].k_sym_len) > (max_len - 8)) {
memcpy(pcstring, kern_sym_tbl[ret].k_sym_name, len);
- sprintf(&pcstring[len], "+0x%-5lx", pc - (uintptr_t)kern_sym_tbl[ret].k_sym_addr);
+ sprintf(&pcstring[len], "+0x%-5" PRIx64, pc - (uint64_t)kern_sym_tbl[ret].k_sym_addr);
}
* Return -1 if not found, else return index
*/
int
-binary_search(kern_sym_t *list, int low, int high, uintptr_t addr)
+binary_search(kern_sym_t *list, int low, int high, uint64_t addr)
{
int mid;
}
if (low + 1 == high) {
- if ((uintptr_t)list[low].k_sym_addr <= addr && addr < (uintptr_t)list[high].k_sym_addr) {
+ if ((uint64_t)list[low].k_sym_addr <= addr && addr < (uint64_t)list[high].k_sym_addr) {
/*
* We have a range match
*/
return low;
}
- if ((uintptr_t)list[high].k_sym_addr <= addr) {
+ if ((uint64_t)list[high].k_sym_addr <= addr) {
return high;
}
/*
}
mid = (low + high) / 2;
- if (addr < (uintptr_t)list[mid].k_sym_addr) {
+ if (addr < (uint64_t)list[mid].k_sym_addr) {
return binary_search(list, low, mid, addr);
}
KQTYPE_DYNAMIC
};
+#define POLICY_TIMESHARE 1
+#define POLICY_RR 2
+#define POLICY_FIFO 4
+
static int
process_kqueue(int pid, const char *procname, enum kqtype type, uint64_t kqid,
struct proc_fdinfo *fdlist, int nfds)
printf("%-10s ", " "); // evst
} else {
printf("%-8s ", " "); // fdtype
- printf("%-7s ", " "); // fflags
+ char policy_type;
+ switch (kqinfo.kqdi_pol) {
+ case POLICY_RR:
+ policy_type = 'R';
+ break;
+ case POLICY_FIFO:
+ policy_type = 'F';
+ case POLICY_TIMESHARE:
+ case 0:
+ default:
+ policy_type = '-';
+ break;
+ }
+ snprintf(tmpstr, 4, "%c%c%c", (kqinfo.kqdi_pri == 0)?'-':'P', policy_type, (kqinfo.kqdi_cpupercent == 0)?'-':'%');
+ printf("%-7s ", tmpstr); // fflags
printf("%-15s ", " "); // flags
printf("%-17s ", " "); // evst
}
- int qos = MAX(MAX(kqinfo.kqdi_events_qos, kqinfo.kqdi_async_qos),
+ if (!raw && kqinfo.kqdi_pri != 0) {
+ printf("%3d ", kqinfo.kqdi_pri); //qos
+ } else {
+ int qos = MAX(MAX(kqinfo.kqdi_events_qos, kqinfo.kqdi_async_qos),
kqinfo.kqdi_sync_waiter_qos);
- printf("%3s ", thread_qos_name(qos));
+ printf("%3s ", thread_qos_name(qos)); //qos
+ }
printf("%-18s ", " "); // data
printf("%-18s ", " "); // udata
printf("%#18llx ", kqinfo.kqdi_servicer); // ext0
kern_return_t get_ipc_info_from_lsmp_spaceinfo(mach_port_t port_name, ipc_info_name_t *out_sendright);
/* basic util functions */
-uint32_t print_hex_data(char *outstr, size_t maxlen, char *prefix, char *desc, void *addr, int len);
+uint32_t print_hex_data(char *outstr, uint32_t maxlen, char *prefix, char *desc, void *addr, int len);
#endif
if (psettaskinfo[i].pid == lsmp_config.pid)
taskinfo = &psettaskinfo[i];
-
- ret = KERN_SUCCESS;
}
JSON_OBJECT_BEGIN(lsmp_config.json_output);
JSON_OBJECT_BEGIN(json);
uint32_t len = 0;
- len += safesize(snprintf(&voucher_outstr[len], maxlen - len, VOUCHER_DETAIL_PREFIX "Key: %u, ", recipe->key));
- len += safesize(snprintf(&voucher_outstr[len], maxlen - len, "Command: %u, ", recipe->command));
- len += safesize(snprintf(&voucher_outstr[len], maxlen - len, "Previous voucher: 0x%x, ", recipe->previous_voucher));
- len += safesize(snprintf(&voucher_outstr[len], maxlen - len, "Content size: %u\n", recipe->content_size));
+ len += snprintf(&voucher_outstr[len], safesize(maxlen - len), VOUCHER_DETAIL_PREFIX "Key: %u, ", recipe->key);
+ len += snprintf(&voucher_outstr[len], safesize(maxlen - len), "Command: %u, ", recipe->command);
+ len += snprintf(&voucher_outstr[len], safesize(maxlen - len), "Previous voucher: 0x%x, ", recipe->previous_voucher);
+ len += snprintf(&voucher_outstr[len], safesize(maxlen - len), "Content size: %u\n", recipe->content_size);
JSON_OBJECT_SET(json, key, %u, recipe->key);
JSON_OBJECT_SET(json, command, %u, recipe->command);
switch (recipe->key) {
case MACH_VOUCHER_ATTR_KEY_ATM:
JSON_OBJECT_SET(json, ATM_ID, %llu, *(uint64_t *)(uintptr_t)recipe->content);
- len += safesize(snprintf(&voucher_outstr[len], maxlen - len, VOUCHER_DETAIL_PREFIX "ATM ID: %llu", *(uint64_t *)(uintptr_t)recipe->content));
+ len += snprintf(&voucher_outstr[len], safesize(maxlen - len), VOUCHER_DETAIL_PREFIX "ATM ID: %llu", *(uint64_t *)(uintptr_t)recipe->content);
break;
case MACH_VOUCHER_ATTR_KEY_IMPORTANCE:
// content may not be valid JSON, exclude
// JSON_OBJECT_SET(json, importance_info, "%s", (char *)recipe->content);
- len += safesize(snprintf(&voucher_outstr[len], maxlen - len, VOUCHER_DETAIL_PREFIX "IMPORTANCE INFO: %s", (char *)recipe->content));
+ len += snprintf(&voucher_outstr[len], safesize(maxlen - len), VOUCHER_DETAIL_PREFIX "IMPORTANCE INFO: %s", (char *)recipe->content);
break;
case MACH_VOUCHER_ATTR_KEY_BANK:
// content may not be valid JSON, exclude
// JSON_OBJECT_SET(json, resource_accounting_info, "%s", (char *)recipe->content);
- len += safesize(snprintf(&voucher_outstr[len], maxlen - len, VOUCHER_DETAIL_PREFIX "RESOURCE ACCOUNTING INFO: %s", (char *)recipe->content));
+ len += snprintf(&voucher_outstr[len], safesize(maxlen - len), VOUCHER_DETAIL_PREFIX "RESOURCE ACCOUNTING INFO: %s", (char *)recipe->content);
break;
default:
- len += print_hex_data(&voucher_outstr[len], maxlen - len, VOUCHER_DETAIL_PREFIX, "Recipe Contents", (void *)recipe->content, MIN(recipe->content_size, lsmp_config.voucher_detail_length));
+ len += print_hex_data(&voucher_outstr[len], safesize(maxlen - len), VOUCHER_DETAIL_PREFIX, "Recipe Contents", (void *)recipe->content, MIN(recipe->content_size, lsmp_config.voucher_detail_length));
break;
}
(mach_voucher_attr_raw_recipe_array_t)&voucher_contents[0],
&recipe_size);
if (kr != KERN_SUCCESS && kr != KERN_NOT_SUPPORTED) {
- plen += safesize(snprintf(&voucher_outstr[plen], detail_maxlen - plen, VOUCHER_DETAIL_PREFIX "Voucher: 0x%x Failed to get contents %s\n", v_kobject, mach_error_string(kr)));
+ plen += snprintf(&voucher_outstr[plen], safesize(detail_maxlen - plen), VOUCHER_DETAIL_PREFIX "Voucher: 0x%x Failed to get contents %s\n", v_kobject, mach_error_string(kr));
return voucher_outstr;
}
if (recipe_size == 0) {
- plen += safesize(snprintf(&voucher_outstr[plen], detail_maxlen - plen, VOUCHER_DETAIL_PREFIX "Voucher: 0x%x has no contents\n", v_kobject));
+ plen += snprintf(&voucher_outstr[plen], safesize(detail_maxlen - plen), VOUCHER_DETAIL_PREFIX "Voucher: 0x%x has no contents\n", v_kobject);
return voucher_outstr;
}
- plen += safesize(snprintf(&voucher_outstr[plen], detail_maxlen - plen, VOUCHER_DETAIL_PREFIX "Voucher: 0x%x\n", v_kobject));
+ plen += snprintf(&voucher_outstr[plen], safesize(detail_maxlen - plen), VOUCHER_DETAIL_PREFIX "Voucher: 0x%x\n", v_kobject);
unsigned int used_size = 0;
mach_voucher_attr_recipe_t recipe = NULL;
while (recipe_size > used_size) {
recipe = (mach_voucher_attr_recipe_t)&voucher_contents[used_size];
if (recipe->key) {
- plen += show_recipe_detail(recipe, &voucher_outstr[plen], detail_maxlen - plen, json);
+ plen += show_recipe_detail(recipe, &voucher_outstr[plen], safesize(detail_maxlen - plen), json);
}
used_size += sizeof(mach_voucher_attr_recipe_data_t) + recipe->content_size;
}
} else {
- plen += safesize(snprintf(&voucher_outstr[plen], detail_maxlen - plen, VOUCHER_DETAIL_PREFIX "Invalid voucher: 0x%x\n", voucher));
+ plen += snprintf(&voucher_outstr[plen], safesize(detail_maxlen - plen), VOUCHER_DETAIL_PREFIX "Invalid voucher: 0x%x\n", voucher);
}
return voucher_outstr;
int j, k, port_status_flag_idx;
kern_return_t ret;
boolean_t send = FALSE;
- boolean_t sendonce = FALSE;
boolean_t dnreq = FALSE;
int sendrights = 0;
unsigned int kotype = 0;
allTaskInfos[j].processName);
}
- k2nnode = k2n_table_lookup_next(k2nnode, k2nnode->info_name->iin_name);
+ k2nnode = k2n_table_lookup_next(k2nnode, entry->iin_object);
}
}
return;
}
if (entry->iin_type & MACH_PORT_TYPE_SEND_ONCE) {
- sendonce = TRUE;
counts->sendoncecount++;
}
JSON_OBJECT_END(json); // non-kobject
}
-uint32_t print_hex_data(char *outstr, size_t maxlen, char *prefix, char *desc, void *addr, int len) {
+uint32_t print_hex_data(char *outstr, uint32_t maxlen, char *prefix, char *desc, void *addr, int len) {
int i;
unsigned char buff[17];
unsigned char *pc = addr;
uint32_t plen = 0;
if (desc != NULL)
- plen += safesize(snprintf(&outstr[len], maxlen - plen, "%s%s:\n", prefix, desc));
+ plen += snprintf(&outstr[plen], safesize(maxlen - plen), "%s%s:\n", prefix, desc);
for (i = 0; i < len; i++) {
if ((i % 16) == 0) {
if (i != 0)
- plen += safesize(snprintf(&outstr[len], maxlen - plen, " %s\n", buff));
+ plen += snprintf(&outstr[plen], safesize(maxlen - plen), " %s\n", buff);
- plen += safesize(snprintf(&outstr[len], maxlen - plen, "%s %04x ", prefix, i));
+ plen += snprintf(&outstr[plen], safesize(maxlen - plen), "%s %04x ", prefix, i);
}
- plen += safesize(snprintf(&outstr[len], maxlen - plen, " %02x", pc[i]));
+ plen += snprintf(&outstr[plen], safesize(maxlen - plen), " %02x", pc[i]);
if ((pc[i] < 0x20) || (pc[i] > 0x7e))
buff[i % 16] = '.';
}
while ((i % 16) != 0) {
- plen += safesize(snprintf(&outstr[len], maxlen - plen, " "));
+ plen += snprintf(&outstr[plen], safesize(maxlen - plen), " ");
i++;
}
- plen += safesize(snprintf(&outstr[len], maxlen - plen, " %s\n", buff));
+ plen += snprintf(&outstr[plen], safesize(maxlen - plen), " %s\n", buff);
return plen;
}
return (uint64_t)kobject * 2654435761 >> 32;
}
-struct k2n_table_node *k2n_table_lookup_next(struct k2n_table_node *node, natural_t kobject) {
+static struct k2n_table_node *k2n_table_lookup_next_internal(struct k2n_table_node *node, natural_t kobject) {
while (node) {
if (kobject == node->kobject)
return node;
return NULL;
}
+struct k2n_table_node *k2n_table_lookup_next(struct k2n_table_node *node, natural_t kobject) {
+ if (!node) {
+ return NULL;
+ }
+ return k2n_table_lookup_next_internal(node->next, kobject);
+}
+
struct k2n_table_node *k2n_table_lookup(struct k2n_table_node **table, natural_t kobject) {
uint32_t hv;
struct k2n_table_node *node;
node = table[hv & K2N_TABLE_MASK];
- return k2n_table_lookup_next(node, kobject);
+ return k2n_table_lookup_next_internal(node, kobject);
}
static void k2n_table_enter(struct k2n_table_node **table, natural_t kobject, ipc_info_name_t *info_name) {
node->kobject = kobject;
node->info_name = info_name;
+ assert(kobject == info_name->iin_object);
node->next = table[hv & K2N_TABLE_MASK];
table[hv & K2N_TABLE_MASK] = node;
out_string[0]='\0';
if (b & MACH_EXCEPTION_CODES)
- strncat(out_string, "MACH +", len);
+ strlcat(out_string, "MACH +", len);
switch (b & ~MACH_EXCEPTION_CODES) {
case EXCEPTION_DEFAULT:
- strncat(out_string, " DEFAULT", len);
+ strlcat(out_string, " DEFAULT", len);
break;
case EXCEPTION_STATE:
- strncat(out_string, " STATE", len);
+ strlcat(out_string, " STATE", len);
break;
case EXCEPTION_STATE_IDENTITY:
- strncat(out_string, " IDENTITY", len);
+ strlcat(out_string, " IDENTITY", len);
break;
default:
- strncat(out_string, " UNKNOWN", len);
+ strlcat(out_string, " UNKNOWN", len);
}
}
out_string[0]='\0';
if (m & (1<<EXC_BAD_ACCESS))
- strncat(out_string, " BAD_ACCESS", len);
+ strlcat(out_string, " BAD_ACCESS", len);
if (m & (1<<EXC_BAD_INSTRUCTION))
- strncat(out_string," BAD_INSTRUCTION", len);
+ strlcat(out_string," BAD_INSTRUCTION", len);
if (m & (1<<EXC_ARITHMETIC))
- strncat(out_string," ARITHMETIC", len);
+ strlcat(out_string," ARITHMETIC", len);
if (m & (1<<EXC_EMULATION))
- strncat(out_string," EMULATION", len);
+ strlcat(out_string," EMULATION", len);
if (m & (1<<EXC_SOFTWARE))
- strncat(out_string," SOFTWARE", len);
+ strlcat(out_string," SOFTWARE", len);
if (m & (1<<EXC_BREAKPOINT))
- strncat(out_string," BREAKPOINT", len);
+ strlcat(out_string," BREAKPOINT", len);
if (m & (1<<EXC_SYSCALL))
- strncat(out_string," SYSCALL", len);
+ strlcat(out_string," SYSCALL", len);
if (m & (1<<EXC_MACH_SYSCALL))
- strncat(out_string," MACH_SYSCALL", len);
+ strlcat(out_string," MACH_SYSCALL", len);
if (m & (1<<EXC_RPC_ALERT))
- strncat(out_string," RPC_ALERT", len);
+ strlcat(out_string," RPC_ALERT", len);
if (m & (1<<EXC_CRASH))
- strncat(out_string," CRASH", len);
+ strlcat(out_string," CRASH", len);
if (m & (1<<EXC_RESOURCE))
- strncat(out_string," RESOURCE", len);
+ strlcat(out_string," RESOURCE", len);
if (m & (1<<EXC_GUARD))
- strncat(out_string," GUARD", len);
+ strlcat(out_string," GUARD", len);
}
kern_return_t print_task_exception_info(my_per_task_info_t *taskinfo, JSON_t json)
header_required = FALSE;
}
get_exc_behavior_string(taskinfo->exceptionInfo.behaviors[i], behavior_string, sizeof(behavior_string));
- get_exc_mask_string(taskinfo->exceptionInfo.masks[i], mask_string, 200);
+ get_exc_mask_string(taskinfo->exceptionInfo.masks[i], mask_string, sizeof(mask_string));
JSON_OBJECT_BEGIN(json);
JSON_OBJECT_SET(json, port, "0x%08x", taskinfo->exceptionInfo.ports[i]);
unsigned long phys_mem = 0; /* amount of physical memory in bytes */
unsigned int phys_pages = 0; /* number of physical memory pages */
int sleep_seconds = 1;
+int requested_hysteresis_seconds = 0;
boolean_t quiet_mode_on = FALSE;
boolean_t simulate_mode_on = FALSE;
" -p <percent-free> - allocate memory until percent free is this (or less)\n"
" -s <seconds> - how long to sleep between checking for a set percent level\n"
" -w <percent-free> - don't allocate, just wait until percent free is this then exit\n"
+ " -y <seconds> - Hysteresis Interval: how long to wait after requested percntage free is reached, before exiting program. Requires the usage of the -p option\n"
" -v <print VM stats> - print VM statistics every sampling interval\n"
" -Q <quiet mode> - reduces the tool's output\n"
" -S - simulate the system's memory pressure level without applying any real pressure\n"
{
int total_pages_allocated = 0;
+ int current_stable_timer = 0; /* in seconds */
unsigned int current_percent = 0;
boolean_t page_op = PAGE_OP_FREE;
unsigned int pages_to_process = 0;
printf(".");
fflush(stdout);
}
+
+ /* Stability has been reached; Increment current_stable_timer by sleep_seconds */
+
+ if (current_stable_timer <= requested_hysteresis_seconds){
+ current_stable_timer += sleep_seconds;
+ /* Debug only */
+ /* printf("\n Percentage Free stable for %d seconds", current_stable_timer); */
+ } else {
+ printf ("\n Maintained memory pressure to %d percent free for more than %d seconds. Stopping pressure now.", current_percent, requested_hysteresis_seconds);
+ return;
+ }
+
print_vm_stats_on_page_processing = FALSE;
}
unsigned int print_vm_stats = 0;
char level[10];
- while ((opt = getopt(argc, argv, "hl:p:s:w:vQS")) != -1) {
+ while ((opt = getopt(argc, argv, "hl:p:s:w:y:vQS")) != -1) {
switch (opt) {
case 'h':
usage();
case 'w':
wait_percent_free = atoi(optarg);
break;
+ case 'y':
+ requested_hysteresis_seconds = atoi(optarg);
+ break;
case 'v':
print_vm_stats = 1;
break;
return 0;
}
+ if (requested_hysteresis_seconds > 0) {
+ if (desired_percent == 0) {
+ printf("Hysteresis time may only be specified in conjunction with a non-zero value for the -p option. \n");
+ usage();
+ }
+ }
+
phys_mem = read_sysctl_int("hw.physmem");
phys_pages = (unsigned int) (phys_mem / PAGE_SIZE);
static void print_usage()
{
- printf("usage: mslutil pid [--disable] | [--enable malloc | vm | full | lite]\n");
+ printf("usage: mslutil pid [--disable] | [--enable malloc | vm | full | lite | vmlite]\n");
}
static int send_msl_command(uint64_t pid, uint64_t flavor)
} else if (strcmp(argv[3], "vm") == 0) {
flavor = MEMORYSTATUS_ENABLE_MSL_VM;
} else if (strcmp(argv[3], "lite") == 0) {
- flavor = MEMORYSTATUS_ENABLE_MSL_LITE;
+ flavor = MEMORYSTATUS_ENABLE_MSL_LITE_FULL;
+ } else if (strcmp(argv[3], "vmlite") == 0) {
+ flavor = MEMORYSTATUS_ENABLE_MSL_LITE_VM;
}
if (flavor == 0) {
aname = strdup(uname);
}
- master_mode = (getuid() == 0);
+ master_mode = (geteuid() == 0);
change_pass_on_self = (strcmp(aname, uname) == 0);
if (locn) {
printf("Changing password for %s.\n", uname);
+ bool isSecureToken = false;
+ if (master_mode) {
+ CFArrayRef authorityValues = NULL;
+ authorityValues = ODRecordCopyValues(rec, kODAttributeTypeAuthenticationAuthority, &error);
+ if (authorityValues != NULL) {
+ isSecureToken = CFArrayContainsValue(authorityValues, CFRangeMake(0, CFArrayGetCount(authorityValues)), (const void *)CFSTR(";SecureToken;"));
+ CFRelease(authorityValues);
+ }
+ }
+
/*
- * Prompt for password if not super-user, or if changing a remote node.
+ * Prompt for password if not super-user, or if changing a remote node, or if changing a record that uses SecureToken.
*/
- int needs_auth = (!master_mode || CFStringCompareWithOptions(location, CFSTR("/Local/"), CFRangeMake(0, 7), 0) != kCFCompareEqualTo);
+ int needs_auth = (!master_mode || CFStringCompareWithOptions(location, CFSTR("/Local/"), CFRangeMake(0, 7), 0) != kCFCompareEqualTo || isSecureToken);
if (needs_auth) {
char prompt[BUFSIZ];
if (p) {
oldpass = CFStringCreateWithCString(NULL, p, kCFStringEncodingUTF8);
memset(p, 0, strlen(p));
+
+ if (!change_pass_on_self) {
+ if (!ODRecordSetNodeCredentials(rec, authname, oldpass, &error)) {
+ show_error(error);
+ exit(1);
+ }
+ CFRelease(oldpass);
+ oldpass = NULL;
+ }
}
}
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.private.opendirectoryd.identity</key>
+ <true/>
+</dict>
+</plist>
.Nm
.Ar verb
.Ar policy
-.Ar uuid
+.Ar uuid | path
.Sh DESCRIPTION
.Nm
sets policy for a specific UUID or mach-o file with the kernel
void
usage(void)
{
- fprintf(stderr, "usage: %s <verb> <policy> <uuid>\n", getprogname());
+ fprintf(stderr, "usage: %s <verb> <policy> <uuid | path>\n", getprogname());
fprintf(stderr, "Verbs:\n");
fprintf(stderr, "\tclear\tClear all policies for a given UUID\n");
fprintf(stderr, "\tadd\tAdd a specific policy\n");
};
struct th_info {
- uintptr_t thread;
+ uint64_t thread;
int depth;
int vfslookup;
int curpri;
- long *pathptr;
- long pathname[NUMPARMS + 1];
+ int64_t *pathptr;
+ int64_t pathname[NUMPARMS + 1];
struct entry th_entry[MAX_NESTED];
};
exit(1);
}
- if (0 != reexec_to_match_kernel()) {
+#if !defined(__arm64__)
+ if (0 != reexec_to_match_kernel()) {
fprintf(stderr, "Could not re-execute: %d\n", errno);
exit(1);
}
+#endif
/* get our name */
if (argc > 0) {
}
static struct th_info *
-find_thread(uintptr_t thread)
+find_thread(uint64_t thread)
{
struct th_info *ti;
if ((unsigned long)(((double)now - te->otime) / divisor) > 5000000) {
ti->thread = 0;
ti->vfslookup = 0;
- ti->pathptr = (long *)NULL;
+ ti->pathptr = (int64_t *)NULL;
ti->pathname[0] = 0;
num_of_threads--;
}
th_state[i].depth = 0;
th_state[i].thread = 0;
th_state[i].vfslookup = 0;
- th_state[i].pathptr = (long *)NULL;
+ th_state[i].pathptr = (int64_t *)NULL;
th_state[i].pathname[0] = 0;
}
num_of_threads = 0;
for (i = 0; i < count; i++) {
int debugid, baseid;
- uintptr_t thread;
+ uint64_t thread;
int type, code;
uint64_t now;
struct th_info *ti, *switched_out, *switched_in;
baseid = debugid & 0xffff0000;
if (type == vfs_lookup) {
- long *sargptr;
+ int64_t *sargptr;
if ((ti = find_thread(thread)) == (struct th_info *)0)
continue;
fprintf (stderr, " -b : get bootprofile\n");
fprintf (stderr, " -c : get coalition data\n");
fprintf (stderr, " -i : get instructions and cycles\n");
- fprintf (stderr, " -t : enable tailspin mode\n");
fprintf (stderr, " -g : get thread group data\n");
fprintf (stderr, " -s : fork a sleep process\n");
fprintf (stderr, " -L : disable loadinfo\n");
uint32_t iostats = 0;
uint32_t active_kernel_threads_only = 0;
- uint32_t tailspin = 0;
uint32_t bootprofile = 0;
uint32_t thread_group = 0;
uint32_t coalition = 0;
case 'g':
thread_group |= STACKSHOT_THREAD_GROUP;
break;
- case 't':
- tailspin |= STACKSHOT_TAILSPIN;
- break;
case 'd':
delta = TRUE;
break;
perror("stackshot_config_create");
return 1;
}
- flags = flags | loadinfo | STACKSHOT_SAVE_IMP_DONATION_PIDS | STACKSHOT_GET_DQ | STACKSHOT_KCDATA_FORMAT |
- tailspin | bootprofile | active_kernel_threads_only | iostats | thread_group | coalition | instrs_cycles;
+ flags = flags | loadinfo | STACKSHOT_SAVE_IMP_DONATION_PIDS | STACKSHOT_GET_DQ | STACKSHOT_KCDATA_FORMAT | STACKSHOT_THREAD_WAITINFO |
+ bootprofile | active_kernel_threads_only | iostats | thread_group | coalition | instrs_cycles;
int err = stackshot_config_set_flags(config, flags);
if (err != 0) {
1812F1A31C8F923900F3DC9E /* PBXTargetDependency */,
1812F1A51C8F923900F3DC9E /* PBXTargetDependency */,
1812F1A71C8F923900F3DC9E /* PBXTargetDependency */,
+ F2291F681FFEBC4F00161936 /* PBXTargetDependency */,
1812F1A91C8F923900F3DC9E /* PBXTargetDependency */,
1812F1AB1C8F923900F3DC9E /* PBXTargetDependency */,
1812F1AD1C8F923900F3DC9E /* PBXTargetDependency */,
1523FE6F1595069900661E82 /* PBXTargetDependency */,
BA0A861A1396B41F00D2272C /* PBXTargetDependency */,
BA0A861613968ECA00D2272C /* PBXTargetDependency */,
+ F2291F641FFEBC4000161936 /* PBXTargetDependency */,
BA959E8813968D8A00CA9C60 /* PBXTargetDependency */,
BA959E8A13968D8A00CA9C60 /* PBXTargetDependency */,
BA959E8C13968D8A00CA9C60 /* PBXTargetDependency */,
1523FE711595069F00661E82 /* PBXTargetDependency */,
BA0A861C1396B42600D2272C /* PBXTargetDependency */,
BA0A861813968ED500D2272C /* PBXTargetDependency */,
+ F2291F661FFEBC4700161936 /* PBXTargetDependency */,
BA959E9213968DA900CA9C60 /* PBXTargetDependency */,
BA959E9413968DA900CA9C60 /* PBXTargetDependency */,
BA959E9613968DA900CA9C60 /* PBXTargetDependency */,
78DE9DFE1B504D7F00FE6DF5 /* wait4path.c in Sources */ = {isa = PBXBuildFile; fileRef = 78DE9DFC1B504D7F00FE6DF5 /* wait4path.c */; };
78DE9E001B504DE500FE6DF5 /* wait4path.version in Sources */ = {isa = PBXBuildFile; fileRef = 78DE9DFD1B504D7F00FE6DF5 /* wait4path.version */; };
78DE9EE61B505F1800FE6DF5 /* wait4path.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 78DE9EE51B505EBF00FE6DF5 /* wait4path.1 */; };
- 8EC391681C973400001E28E6 /* proc_uuid_policy.c in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC391671C973400001E28E6 /* proc_uuid_policy.c */; };
8EC391691C973405001E28E6 /* proc_uuid_policy.c in Sources */ = {isa = PBXBuildFile; fileRef = 8EC391671C973400001E28E6 /* proc_uuid_policy.c */; };
- 8EC3916B1C97341E001E28E6 /* proc_uuid_policy.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC3916A1C97341E001E28E6 /* proc_uuid_policy.1 */; };
8EC3916C1C973429001E28E6 /* proc_uuid_policy.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 8EC3916A1C97341E001E28E6 /* proc_uuid_policy.1 */; };
97999D321AE84CE400E8B10F /* lskq.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = 97999D301AE84C7600E8B10F /* lskq.1 */; };
97999D331AE84D0A00E8B10F /* lskq.c in Sources */ = {isa = PBXBuildFile; fileRef = 97999D311AE84C7600E8B10F /* lskq.c */; };
C96F50BD15BDFEFB008682F7 /* lsmp.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = C96F50AC15BDCBF0008682F7 /* lsmp.1 */; };
C96F50BE15BDFF03008682F7 /* lsmp.c in Sources */ = {isa = PBXBuildFile; fileRef = C96F50AD15BDCE8E008682F7 /* lsmp.c */; };
C9779F6E159A2A0C009436FD /* libutil.dylib in Frameworks */ = {isa = PBXBuildFile; fileRef = BA4B7A091373BA4600003422 /* libutil.dylib */; };
+ C99490E42090F55E00246D9D /* zprint.lua in CopyFiles */ = {isa = PBXBuildFile; fileRef = C99490E32090F55D00246D9D /* zprint.lua */; };
+ C99490E52090F56F00246D9D /* zprint.lua in CopyFiles */ = {isa = PBXBuildFile; fileRef = C99490E32090F55D00246D9D /* zprint.lua */; };
C9D64CD11B91065D00CFA43B /* system_cmds.plist in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9D64CCF1B91063200CFA43B /* system_cmds.plist */; };
C9D64CD31B91067500CFA43B /* system_cmds.plist in CopyFiles */ = {isa = PBXBuildFile; fileRef = C9D64CCF1B91063200CFA43B /* system_cmds.plist */; };
C9E0691A1C58BD7E00C956EB /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = BA9B766D13739D27001BB39F /* CoreFoundation.framework */; };
C9E0691C1C58BDA000C956EB /* CoreSymbolication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9E0691B1C58BDA000C956EB /* CoreSymbolication.framework */; };
C9E0691E1C58BDB800C956EB /* IOKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9E0691D1C58BDB800C956EB /* IOKit.framework */; };
+ F2291F551FFEBB6A00161936 /* CoreSymbolication.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = C9E0691B1C58BDA000C956EB /* CoreSymbolication.framework */; };
+ F2291F601FFEBB9E00161936 /* zlog.c in Sources */ = {isa = PBXBuildFile; fileRef = F2291F5F1FFEBB9E00161936 /* zlog.c */; };
+ F27B70282044CB40003C04FC /* CoreFoundation.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = F27B70272044CB40003C04FC /* CoreFoundation.framework */; };
+ F27B702B2045038B003C04FC /* SymbolicationHelper.c in Sources */ = {isa = PBXBuildFile; fileRef = F27B70292045038B003C04FC /* SymbolicationHelper.c */; };
+ F29F5A5B203E12BC005B0099 /* entitlements.plist in CopyFiles */ = {isa = PBXBuildFile; fileRef = F29F5A5A203E12BB005B0099 /* entitlements.plist */; };
+ F29F5A5F203E5347005B0099 /* zlog.1 in CopyFiles */ = {isa = PBXBuildFile; fileRef = F29F5A5C203E4403005B0099 /* zlog.1 */; };
/* End PBXBuildFile section */
/* Begin PBXBuildRule section */
remoteGlobalIDString = C96F50AE15BDCEC3008682F7;
remoteInfo = lsmp;
};
+ F2291F631FFEBC4000161936 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BA2DE9181372FA9100D1913C /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F2291F501FFEBB6A00161936;
+ remoteInfo = zlog;
+ };
+ F2291F651FFEBC4700161936 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BA2DE9181372FA9100D1913C /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F2291F501FFEBB6A00161936;
+ remoteInfo = zlog;
+ };
+ F2291F671FFEBC4F00161936 /* PBXContainerItemProxy */ = {
+ isa = PBXContainerItemProxy;
+ containerPortal = BA2DE9181372FA9100D1913C /* Project object */;
+ proxyType = 1;
+ remoteGlobalIDString = F2291F501FFEBB6A00161936;
+ remoteInfo = zlog;
+ };
/* End PBXContainerItemProxy section */
/* Begin PBXCopyFilesBuildPhase section */
);
runOnlyForDeploymentPostprocessing = 1;
};
+ C99490E22090F53B00246D9D /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/local/share/recon;
+ dstSubfolderSpec = 0;
+ files = (
+ C99490E52090F56F00246D9D /* zprint.lua in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
C9D64CD01B91064700CFA43B /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
buildActionMask = 8;
dstPath = /AppleInternal/CoreOS/BATS/unit_tests;
dstSubfolderSpec = 0;
files = (
- 8EC391681C973400001E28E6 /* proc_uuid_policy.c in CopyFiles */,
+ F29F5A5B203E12BC005B0099 /* entitlements.plist in CopyFiles */,
+ C99490E42090F55E00246D9D /* zprint.lua in CopyFiles */,
C9D64CD31B91067500CFA43B /* system_cmds.plist in CopyFiles */,
- 8EC3916B1C97341E001E28E6 /* proc_uuid_policy.1 in CopyFiles */,
+ );
+ runOnlyForDeploymentPostprocessing = 1;
+ };
+ F29F5A5E203E532B005B0099 /* CopyFiles */ = {
+ isa = PBXCopyFilesBuildPhase;
+ buildActionMask = 8;
+ dstPath = /usr/local/share/man/man1;
+ dstSubfolderSpec = 0;
+ files = (
+ F29F5A5F203E5347005B0099 /* zlog.1 in CopyFiles */,
);
runOnlyForDeploymentPostprocessing = 1;
};
/* Begin PBXFileReference section */
08ADC98B1E70715D0001CB70 /* ktrace.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = ktrace.framework; path = System/Library/PrivateFrameworks/ktrace.framework; sourceTree = SDKROOT; };
08CE3D291E6E22A200DF1B78 /* stackshot */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = stackshot; sourceTree = BUILT_PRODUCTS_DIR; };
- 08CE3D301E6E22B000DF1B78 /* stackshot */ = {isa = PBXFileReference; lastKnownFileType = folder; path = stackshot; sourceTree = "<group>"; };
08CE3D321E6E22DE00DF1B78 /* stackshot.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = stackshot.c; path = stackshot.tproj/stackshot.c; sourceTree = "<group>"; };
08DC48851A12C21B008AAF38 /* kpgo */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = kpgo; sourceTree = BUILT_PRODUCTS_DIR; };
08DC488D1A12C2C6008AAF38 /* kpgo.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = kpgo.c; sourceTree = "<group>"; };
1523FE631595048900661E82 /* ltop */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = ltop; sourceTree = BUILT_PRODUCTS_DIR; };
1523FE6A1595056C00661E82 /* ltop.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = ltop.1; sourceTree = "<group>"; };
1523FE6B1595056C00661E82 /* ltop.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = ltop.c; sourceTree = "<group>"; };
- 1821B00B1C88BEE2000BAA0C /* usage.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = usage.cpp; sourceTree = "<group>"; };
- 1821B00C1C88BEE2000BAA0C /* usage.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = usage.hpp; sourceTree = "<group>"; };
- 18380CDC1C596E8900DC6B89 /* eostrace.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = eostrace.c; sourceTree = "<group>"; };
- 18410FED1CC881FD00385C96 /* entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = entitlements.plist; sourceTree = "<group>"; };
- 1845E41418EB95810010F451 /* TraceFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TraceFile.cpp; sourceTree = "<group>"; };
- 1845E41518EB95810010F451 /* TraceFile.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TraceFile.hpp; sourceTree = "<group>"; };
- 18597EC818CBC2A300531A50 /* kdprof.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = kdprof.1; sourceTree = "<group>"; };
- 18597ECC18CBC35700531A50 /* Action.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Action.hpp; sourceTree = "<group>"; };
- 18597ECD18CBC35700531A50 /* CollectAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CollectAction.hpp; sourceTree = "<group>"; };
- 18597ECE18CBC35700531A50 /* CollectAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = CollectAction.cpp; sourceTree = "<group>"; };
- 18597ECF18CBC35700531A50 /* DisableAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DisableAction.hpp; sourceTree = "<group>"; };
- 18597ED018CBC35700531A50 /* DisableAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DisableAction.cpp; sourceTree = "<group>"; };
- 18597ED118CBC35700531A50 /* EnableAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = EnableAction.hpp; sourceTree = "<group>"; };
- 18597ED218CBC35700531A50 /* EnableAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EnableAction.cpp; sourceTree = "<group>"; };
- 18597ED318CBC35700531A50 /* EventPrinting.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = EventPrinting.hpp; sourceTree = "<group>"; };
- 18597ED418CBC35700531A50 /* EventPrinting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = EventPrinting.cpp; sourceTree = "<group>"; };
- 18597ED518CBC35700531A50 /* global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = global.h; sourceTree = "<group>"; };
- 18597ED618CBC35700531A50 /* Globals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Globals.hpp; sourceTree = "<group>"; };
- 18597ED718CBC35700531A50 /* Globals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Globals.cpp; sourceTree = "<group>"; };
- 18597ED818CBC35700531A50 /* InitializeAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = InitializeAction.hpp; sourceTree = "<group>"; };
- 18597ED918CBC35700531A50 /* InitializeAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InitializeAction.cpp; sourceTree = "<group>"; };
- 18597EDA18CBC35700531A50 /* kdprof.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = kdprof.cpp; sourceTree = "<group>"; };
- 18597EDB18CBC35700531A50 /* NoWrapAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = NoWrapAction.hpp; sourceTree = "<group>"; };
- 18597EDC18CBC35700531A50 /* NoWrapAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = NoWrapAction.cpp; sourceTree = "<group>"; };
- 18597EDD18CBC35700531A50 /* PrintStateAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = PrintStateAction.hpp; sourceTree = "<group>"; };
- 18597EDE18CBC35700531A50 /* PrintStateAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PrintStateAction.cpp; sourceTree = "<group>"; };
- 18597EDF18CBC35700531A50 /* RemoveAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = RemoveAction.hpp; sourceTree = "<group>"; };
- 18597EE018CBC35700531A50 /* RemoveAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RemoveAction.cpp; sourceTree = "<group>"; };
- 18597EE118CBC35700531A50 /* SaveTraceAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SaveTraceAction.hpp; sourceTree = "<group>"; };
- 18597EE218CBC35700531A50 /* SaveTraceAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SaveTraceAction.cpp; sourceTree = "<group>"; };
- 18597EE318CBC35700531A50 /* SleepAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SleepAction.hpp; sourceTree = "<group>"; };
- 18597EE418CBC35700531A50 /* SleepAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SleepAction.cpp; sourceTree = "<group>"; };
- 18597EE518CBC35700531A50 /* SummaryPrinting.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = SummaryPrinting.hpp; sourceTree = "<group>"; };
- 18597EE618CBC35700531A50 /* SummaryPrinting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = SummaryPrinting.cpp; sourceTree = "<group>"; };
- 18597EE718CBC35700531A50 /* TraceFileAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TraceFileAction.hpp; sourceTree = "<group>"; };
- 18597EE818CBC35700531A50 /* TraceFileAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TraceFileAction.cpp; sourceTree = "<group>"; };
- 185B9771191022B200FCB84C /* VoucherContentSysctl.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = VoucherContentSysctl.cpp; sourceTree = "<group>"; };
- 185B97731910475500FCB84C /* WriteTraceFileAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WriteTraceFileAction.cpp; sourceTree = "<group>"; };
- 185B97741910475500FCB84C /* WriteTraceFileAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = WriteTraceFileAction.hpp; sourceTree = "<group>"; };
- 185F75141CC2EFC600B0EA9E /* TypeFilterAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TypeFilterAction.cpp; sourceTree = "<group>"; };
- 185F75151CC2EFC600B0EA9E /* TypeFilterAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TypeFilterAction.hpp; sourceTree = "<group>"; };
- 185F75171CC337D400B0EA9E /* Machine.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Machine.cpp; sourceTree = "<group>"; };
- 185F75191CC34EBE00B0EA9E /* WriteTraceFileAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = WriteTraceFileAction.cpp; sourceTree = "<group>"; };
- 185F751A1CC34EBE00B0EA9E /* WriteTraceFileAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = WriteTraceFileAction.hpp; sourceTree = "<group>"; };
- 18624C851BF6400200FA0575 /* TypeSummary.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = TypeSummary.hpp; sourceTree = "<group>"; };
- 18624C861BF64ED700FA0575 /* CPUTypeSummary.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = CPUTypeSummary.hpp; sourceTree = "<group>"; };
- 18624C871BF6503600FA0575 /* ProcessTypeSummary.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ProcessTypeSummary.hpp; sourceTree = "<group>"; };
- 18624C881BF651EC00FA0575 /* ThreadTypeSummary.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = ThreadTypeSummary.hpp; sourceTree = "<group>"; };
- 186288CF1CC5DA71002950E0 /* UUIDMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UUIDMap.cpp; sourceTree = "<group>"; };
- 186288D01CC5DA71002950E0 /* UUIDMap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UUIDMap.hpp; sourceTree = "<group>"; };
- 1865513A18CA70B5003B92A7 /* CPPUtil.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = CPPUtil.h; sourceTree = "<group>"; };
- 1865513B18CA70B5003B92A7 /* UtilAbsInterval.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilAbsInterval.cpp; sourceTree = "<group>"; };
- 1865513C18CA70B5003B92A7 /* UtilAbsInterval.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilAbsInterval.hpp; sourceTree = "<group>"; };
- 1865513D18CA70B5003B92A7 /* UtilAbsTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilAbsTime.cpp; sourceTree = "<group>"; };
- 1865513E18CA70B5003B92A7 /* UtilAbsTime.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilAbsTime.hpp; sourceTree = "<group>"; };
- 1865513F18CA70B5003B92A7 /* UtilAssert.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilAssert.hpp; sourceTree = "<group>"; };
- 1865514018CA70B5003B92A7 /* UtilBase.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilBase.hpp; sourceTree = "<group>"; };
- 1865514118CA70B5003B92A7 /* UtilException.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilException.hpp; sourceTree = "<group>"; };
- 1865514218CA70B5003B92A7 /* UtilFileDescriptor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilFileDescriptor.hpp; sourceTree = "<group>"; };
- 1865514318CA70B5003B92A7 /* UtilLog.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilLog.cpp; sourceTree = "<group>"; };
- 1865514418CA70B5003B92A7 /* UtilLog.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilLog.hpp; sourceTree = "<group>"; };
- 1865514518CA70B5003B92A7 /* UtilMakeUnique.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilMakeUnique.hpp; sourceTree = "<group>"; };
- 1865514618CA70B5003B92A7 /* UtilMappedFile.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilMappedFile.cpp; sourceTree = "<group>"; };
- 1865514718CA70B5003B92A7 /* UtilMappedFile.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilMappedFile.hpp; sourceTree = "<group>"; };
- 1865514818CA70B5003B92A7 /* UtilMemoryBuffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilMemoryBuffer.hpp; sourceTree = "<group>"; };
- 1865514918CA70B5003B92A7 /* UtilNanoInterval.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilNanoInterval.hpp; sourceTree = "<group>"; };
- 1865514A18CA70B5003B92A7 /* UtilNanoTime.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilNanoTime.cpp; sourceTree = "<group>"; };
- 1865514B18CA70B5003B92A7 /* UtilNanoTime.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilNanoTime.hpp; sourceTree = "<group>"; };
- 1865514C18CA70B5003B92A7 /* UtilPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilPath.cpp; sourceTree = "<group>"; };
- 1865514D18CA70B5003B92A7 /* UtilPath.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilPath.hpp; sourceTree = "<group>"; };
- 1865514E18CA70B5003B92A7 /* UtilPrettyPrinting.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilPrettyPrinting.cpp; sourceTree = "<group>"; };
- 1865514F18CA70B5003B92A7 /* UtilPrettyPrinting.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilPrettyPrinting.hpp; sourceTree = "<group>"; };
- 1865515018CA70B5003B92A7 /* UtilString.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilString.cpp; sourceTree = "<group>"; };
- 1865515118CA70B5003B92A7 /* UtilString.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilString.hpp; sourceTree = "<group>"; };
- 1865515218CA70B5003B92A7 /* UtilTerminalColor.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilTerminalColor.cpp; sourceTree = "<group>"; };
- 1865515318CA70B5003B92A7 /* UtilTerminalColor.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilTerminalColor.hpp; sourceTree = "<group>"; };
- 1865515418CA70B5003B92A7 /* UtilTime.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilTime.hpp; sourceTree = "<group>"; };
- 1865515518CA70B5003B92A7 /* UtilTimer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = UtilTimer.cpp; sourceTree = "<group>"; };
- 1865515618CA70B5003B92A7 /* UtilTimer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilTimer.hpp; sourceTree = "<group>"; };
- 1865515718CA70B5003B92A7 /* UtilTRange.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilTRange.hpp; sourceTree = "<group>"; };
- 1865515818CA70B5003B92A7 /* UtilTRangeValue.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = UtilTRangeValue.hpp; sourceTree = "<group>"; };
- 1865518018CA7104003B92A7 /* msa.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; path = msa.1; sourceTree = "<group>"; };
- 1865518C18CA72F7003B92A7 /* Action.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Action.hpp; sourceTree = "<group>"; };
- 1865518E18CA72F7003B92A7 /* EventProcessing.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = EventProcessing.hpp; sourceTree = "<group>"; };
- 1865518F18CA72F7003B92A7 /* EventRingBuffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = EventRingBuffer.hpp; sourceTree = "<group>"; };
- 1865519018CA72F7003B92A7 /* global.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = global.h; sourceTree = "<group>"; };
- 1865519118CA72F7003B92A7 /* Globals.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Globals.cpp; sourceTree = "<group>"; };
- 1865519218CA72F7003B92A7 /* Globals.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Globals.hpp; sourceTree = "<group>"; };
- 1865519418CA72F7003B92A7 /* LiveTraceAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = LiveTraceAction.cpp; sourceTree = "<group>"; };
- 1865519518CA72F7003B92A7 /* LiveTraceAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = LiveTraceAction.hpp; sourceTree = "<group>"; };
- 1865519618CA72F7003B92A7 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = main.cpp; sourceTree = "<group>"; };
- 1865519718CA72F7003B92A7 /* Printing.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Printing.cpp; sourceTree = "<group>"; };
- 1865519818CA72F7003B92A7 /* Printing.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Printing.hpp; sourceTree = "<group>"; };
- 1865519918CA72F7003B92A7 /* ReadTraceFileAction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ReadTraceFileAction.cpp; sourceTree = "<group>"; };
- 1865519A18CA72F7003B92A7 /* ReadTraceFileAction.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ReadTraceFileAction.hpp; sourceTree = "<group>"; };
- 1873F11E1CC52204008950A8 /* BinaryDataTraceEncoder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = BinaryDataTraceEncoder.hpp; sourceTree = "<group>"; };
- 1873F1211CC551DD008950A8 /* DeviceMap.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = DeviceMap.cpp; sourceTree = "<group>"; };
- 1873F1221CC551DD008950A8 /* DeviceMap.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = DeviceMap.hpp; sourceTree = "<group>"; };
- 1873F1261CC587E2008950A8 /* BinaryDataTraceDecoder.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = BinaryDataTraceDecoder.hpp; sourceTree = "<group>"; };
- 1875DF421C443513004AC849 /* KDState.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KDState.cpp; sourceTree = "<group>"; };
- 1888DB65191A8A4400A0541E /* PrintBuffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = PrintBuffer.hpp; sourceTree = "<group>"; };
- 188959FC1958D287004576E8 /* TaskRequestedPolicy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TaskRequestedPolicy.hpp; sourceTree = "<group>"; };
189337C21CC7CB4800B2A6A4 /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = System/Library/Frameworks/CoreFoundation.framework; sourceTree = SDKROOT; };
- 189337C41CC7DA8700B2A6A4 /* UtilCoreSymbolication.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = UtilCoreSymbolication.hpp; sourceTree = "<group>"; };
- 189632961C5FD38E00FA9646 /* eostrace.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = eostrace.h; sourceTree = "<group>"; };
- 18C65BAD1CC1868D005194F4 /* TypeFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TypeFilter.cpp; sourceTree = "<group>"; };
- 18C65BAE1CC1868D005194F4 /* TypeFilter.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TypeFilter.hpp; sourceTree = "<group>"; };
- 18C8728718EA128B00F86DD9 /* CPUActivity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPUActivity.hpp; sourceTree = "<group>"; };
- 18C8728818EA128B00F86DD9 /* CPUSummary.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = CPUSummary.hpp; sourceTree = "<group>"; };
- 18C8728918EA128B00F86DD9 /* IOActivity.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = IOActivity.hpp; sourceTree = "<group>"; };
- 18C8728A18EA128B00F86DD9 /* KDBG.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = KDBG.cpp; sourceTree = "<group>"; };
- 18C8728B18EA128B00F86DD9 /* KDBG.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = KDBG.hpp; sourceTree = "<group>"; };
- 18C8728C18EA128B00F86DD9 /* KDCPUMapEntry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = KDCPUMapEntry.hpp; sourceTree = "<group>"; };
- 18C8728D18EA128B00F86DD9 /* KDebug.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = KDebug.h; sourceTree = "<group>"; };
- 18C8728E18EA128B00F86DD9 /* KDEvent.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = KDEvent.hpp; sourceTree = "<group>"; };
- 18C8728F18EA128B00F86DD9 /* KDState.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = KDState.hpp; sourceTree = "<group>"; };
- 18C8729018EA128B00F86DD9 /* KDThreadMapEntry.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = KDThreadMapEntry.hpp; sourceTree = "<group>"; };
- 18C8729118EA128B00F86DD9 /* Kernel.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = Kernel.cpp; sourceTree = "<group>"; };
- 18C8729218EA128B00F86DD9 /* Kernel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Kernel.hpp; sourceTree = "<group>"; };
- 18C8729318EA128B00F86DD9 /* Machine.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Machine.hpp; sourceTree = "<group>"; };
- 18C8729418EA128B00F86DD9 /* Machine.impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = Machine.impl.hpp; sourceTree = "<group>"; };
- 18C8729518EA128B00F86DD9 /* Machine.mutable-impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = "Machine.mutable-impl.hpp"; sourceTree = "<group>"; };
- 18C8729618EA128B00F86DD9 /* MachineCPU.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineCPU.hpp; sourceTree = "<group>"; };
- 18C8729718EA128B00F86DD9 /* MachineCPU.impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineCPU.impl.hpp; sourceTree = "<group>"; };
- 18C8729818EA128B00F86DD9 /* MachineCPU.mutable-impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = "MachineCPU.mutable-impl.hpp"; sourceTree = "<group>"; };
- 18C8729918EA128B00F86DD9 /* MachineMachMsg.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineMachMsg.hpp; sourceTree = "<group>"; };
- 18C8729A18EA128B00F86DD9 /* MachineProcess.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineProcess.hpp; sourceTree = "<group>"; };
- 18C8729B18EA128B00F86DD9 /* MachineProcess.impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineProcess.impl.hpp; sourceTree = "<group>"; };
- 18C8729C18EA128B00F86DD9 /* MachineProcess.mutable-impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = "MachineProcess.mutable-impl.hpp"; sourceTree = "<group>"; };
- 18C8729D18EA128B00F86DD9 /* MachineThread.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineThread.hpp; sourceTree = "<group>"; };
- 18C8729E18EA128B00F86DD9 /* MachineThread.impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineThread.impl.hpp; sourceTree = "<group>"; };
- 18C8729F18EA128B00F86DD9 /* MachineThread.mutable-impl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = "MachineThread.mutable-impl.hpp"; sourceTree = "<group>"; };
- 18C872A018EA128B00F86DD9 /* MachineVoucher.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MachineVoucher.hpp; sourceTree = "<group>"; };
- 18C872A118EA128B00F86DD9 /* MetaTypes.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = MetaTypes.hpp; sourceTree = "<group>"; };
- 18C872A218EA128B00F86DD9 /* NurseryMachMsg.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = NurseryMachMsg.hpp; sourceTree = "<group>"; };
- 18C872A318EA128B00F86DD9 /* ProcessSummary.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ProcessSummary.hpp; sourceTree = "<group>"; };
- 18C872A418EA128B00F86DD9 /* ThreadSummary.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ThreadSummary.hpp; sourceTree = "<group>"; };
- 18C872A518EA128B00F86DD9 /* TraceCodes.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TraceCodes.cpp; sourceTree = "<group>"; };
- 18C872A618EA128B00F86DD9 /* TraceCodes.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TraceCodes.hpp; sourceTree = "<group>"; };
- 18C872A718EA128B00F86DD9 /* TraceDataHeader.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = TraceDataHeader.hpp; sourceTree = "<group>"; };
- 18C872A818EA128B00F86DD9 /* VoucherInterval.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = VoucherInterval.hpp; sourceTree = "<group>"; };
- 18D0E13119101CD200F93974 /* VoucherContentSysctl.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = VoucherContentSysctl.hpp; sourceTree = "<group>"; };
- 18D6F9AF1C5A8EF000F472A7 /* eostraced.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = eostraced.c; sourceTree = "<group>"; };
- 18D6F9B11C5A8EFB00F472A7 /* com.apple.eostraced.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = com.apple.eostraced.plist; sourceTree = "<group>"; };
- 18D8B66519535B92008847DF /* TaskEffectivePolicy.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = TaskEffectivePolicy.hpp; sourceTree = "<group>"; };
18EA07101C99C76C006D3005 /* EmbeddedOSSupportHost.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = EmbeddedOSSupportHost.framework; path = System/Library/PrivateFrameworks/EmbeddedOSSupportHost.framework; sourceTree = SDKROOT; };
- 18EA07121C99E4E3006D3005 /* copy_of_AppleEmbeddedOSSupport.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = copy_of_AppleEmbeddedOSSupport.c; path = eostrace/copy_of_AppleEmbeddedOSSupport.c; sourceTree = SOURCE_ROOT; };
- 18EA07131C99E4E3006D3005 /* copy_of_AppleEmbeddedOSSupport.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = copy_of_AppleEmbeddedOSSupport.h; path = eostrace/copy_of_AppleEmbeddedOSSupport.h; sourceTree = SOURCE_ROOT; };
550C19E01804C55E001DA380 /* iosim.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = iosim.1; sourceTree = "<group>"; };
550C19E11804C55E001DA380 /* iosim.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = iosim.c; sourceTree = "<group>"; };
550C19EB1804D226001DA380 /* iosim */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = iosim; sourceTree = BUILT_PRODUCTS_DIR; };
97999D2F1AE84C7600E8B10F /* common.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; name = common.h; path = lskq.tproj/common.h; sourceTree = "<group>"; };
97999D301AE84C7600E8B10F /* lskq.1 */ = {isa = PBXFileReference; lastKnownFileType = text.man; name = lskq.1; path = lskq.tproj/lskq.1; sourceTree = "<group>"; };
97999D311AE84C7600E8B10F /* lskq.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; name = lskq.c; path = lskq.tproj/lskq.c; sourceTree = "<group>"; };
- 9FAAF8741C158C0B00E6856D /* ThreadRequestedPolicy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ThreadRequestedPolicy.hpp; sourceTree = "<group>"; };
- 9FAAF8761C158C2300E6856D /* ThreadEffectivePolicy.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = ThreadEffectivePolicy.hpp; sourceTree = "<group>"; };
+ A7C0927020EC491E0068148E /* passwd.entitlements */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.entitlements; path = passwd.entitlements; sourceTree = "<group>"; };
ADA9007717679A8C00161ADF /* purge */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = purge; sourceTree = BUILT_PRODUCTS_DIR; };
ADA900791767A02700161ADF /* purge.8 */ = {isa = PBXFileReference; lastKnownFileType = text; path = purge.8; sourceTree = "<group>"; };
ADA9007A1767A02700161ADF /* purge.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = purge.c; sourceTree = "<group>"; };
C96F50AC15BDCBF0008682F7 /* lsmp.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; name = lsmp.1; path = lsmp.tproj/lsmp.1; sourceTree = SOURCE_ROOT; };
C96F50AD15BDCE8E008682F7 /* lsmp.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; name = lsmp.c; path = lsmp.tproj/lsmp.c; sourceTree = SOURCE_ROOT; };
C96F50B715BDCEC3008682F7 /* lsmp */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = lsmp; sourceTree = BUILT_PRODUCTS_DIR; };
- C97199F11C5206DE006D9758 /* libktrace.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libktrace.dylib; path = usr/lib/libktrace.dylib; sourceTree = SDKROOT; };
+ C99490E32090F55D00246D9D /* zprint.lua */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = zprint.lua; sourceTree = "<group>"; };
C9D64CCF1B91063200CFA43B /* system_cmds.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = system_cmds.plist; path = tests/system_cmds.plist; sourceTree = "<group>"; };
C9E0691B1C58BDA000C956EB /* CoreSymbolication.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreSymbolication.framework; path = System/Library/PrivateFrameworks/CoreSymbolication.framework; sourceTree = SDKROOT; };
C9E0691D1C58BDB800C956EB /* IOKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = IOKit.framework; path = System/Library/Frameworks/IOKit.framework; sourceTree = SDKROOT; };
+ F2291F5D1FFEBB6A00161936 /* zlog */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = zlog; sourceTree = BUILT_PRODUCTS_DIR; };
+ F2291F5F1FFEBB9E00161936 /* zlog.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = zlog.c; sourceTree = "<group>"; };
+ F27B70272044CB40003C04FC /* CoreFoundation.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = CoreFoundation.framework; path = Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS12.0.Internal.sdk/System/Library/Frameworks/CoreFoundation.framework; sourceTree = DEVELOPER_DIR; };
+ F27B70292045038B003C04FC /* SymbolicationHelper.c */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.c; path = SymbolicationHelper.c; sourceTree = "<group>"; };
+ F27B702A2045038B003C04FC /* SymbolicationHelper.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = SymbolicationHelper.h; sourceTree = "<group>"; };
+ F29F5A5A203E12BB005B0099 /* entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = entitlements.plist; sourceTree = "<group>"; };
+ F29F5A5C203E4403005B0099 /* zlog.1 */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.man; path = zlog.1; sourceTree = "<group>"; };
FEBEE5CF1B0EACEB00166A8B /* entitlements.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = entitlements.plist; sourceTree = "<group>"; };
/* End PBXFileReference section */
);
runOnlyForDeploymentPostprocessing = 0;
};
+ F2291F531FFEBB6A00161936 /* Frameworks */ = {
+ isa = PBXFrameworksBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F27B70282044CB40003C04FC /* CoreFoundation.framework in Frameworks */,
+ F2291F551FFEBB6A00161936 /* CoreSymbolication.framework in Frameworks */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXFrameworksBuildPhase section */
/* Begin PBXGroup section */
path = ltop.tproj;
sourceTree = "<group>";
};
- 18380CDB1C596E8900DC6B89 /* eostrace */ = {
- isa = PBXGroup;
- children = (
- 189632961C5FD38E00FA9646 /* eostrace.h */,
- 18380CDC1C596E8900DC6B89 /* eostrace.c */,
- 18EA07131C99E4E3006D3005 /* copy_of_AppleEmbeddedOSSupport.h */,
- 18EA07121C99E4E3006D3005 /* copy_of_AppleEmbeddedOSSupport.c */,
- );
- path = eostrace;
- sourceTree = "<group>";
- };
- 18597EC518CBC2A300531A50 /* kdprof */ = {
- isa = PBXGroup;
- children = (
- 18597ECC18CBC35700531A50 /* Action.hpp */,
- 18597ECD18CBC35700531A50 /* CollectAction.hpp */,
- 18597ECE18CBC35700531A50 /* CollectAction.cpp */,
- 18597ECF18CBC35700531A50 /* DisableAction.hpp */,
- 18597ED018CBC35700531A50 /* DisableAction.cpp */,
- 18597ED118CBC35700531A50 /* EnableAction.hpp */,
- 18597ED218CBC35700531A50 /* EnableAction.cpp */,
- 18597ED318CBC35700531A50 /* EventPrinting.hpp */,
- 18597ED418CBC35700531A50 /* EventPrinting.cpp */,
- 18597ED518CBC35700531A50 /* global.h */,
- 18597ED618CBC35700531A50 /* Globals.hpp */,
- 18597ED718CBC35700531A50 /* Globals.cpp */,
- 18597ED818CBC35700531A50 /* InitializeAction.hpp */,
- 18597ED918CBC35700531A50 /* InitializeAction.cpp */,
- 18597EDA18CBC35700531A50 /* kdprof.cpp */,
- 18597EDB18CBC35700531A50 /* NoWrapAction.hpp */,
- 18597EDC18CBC35700531A50 /* NoWrapAction.cpp */,
- 18597EDD18CBC35700531A50 /* PrintStateAction.hpp */,
- 18597EDE18CBC35700531A50 /* PrintStateAction.cpp */,
- 18597EDF18CBC35700531A50 /* RemoveAction.hpp */,
- 18597EE018CBC35700531A50 /* RemoveAction.cpp */,
- 18597EE118CBC35700531A50 /* SaveTraceAction.hpp */,
- 18597EE218CBC35700531A50 /* SaveTraceAction.cpp */,
- 18597EE318CBC35700531A50 /* SleepAction.hpp */,
- 18597EE418CBC35700531A50 /* SleepAction.cpp */,
- 18597EE518CBC35700531A50 /* SummaryPrinting.hpp */,
- 18597EE618CBC35700531A50 /* SummaryPrinting.cpp */,
- 18597EE718CBC35700531A50 /* TraceFileAction.hpp */,
- 18597EE818CBC35700531A50 /* TraceFileAction.cpp */,
- 185F75151CC2EFC600B0EA9E /* TypeFilterAction.hpp */,
- 185F75141CC2EFC600B0EA9E /* TypeFilterAction.cpp */,
- 1821B00C1C88BEE2000BAA0C /* usage.hpp */,
- 1821B00B1C88BEE2000BAA0C /* usage.cpp */,
- 185F751A1CC34EBE00B0EA9E /* WriteTraceFileAction.hpp */,
- 185F75191CC34EBE00B0EA9E /* WriteTraceFileAction.cpp */,
- 18410FED1CC881FD00385C96 /* entitlements.plist */,
- 18597EC818CBC2A300531A50 /* kdprof.1 */,
- );
- path = kdprof;
- sourceTree = "<group>";
- };
- 1865513918CA6F8C003B92A7 /* CPPUtil */ = {
- isa = PBXGroup;
- children = (
- 1865513A18CA70B5003B92A7 /* CPPUtil.h */,
- 1865513B18CA70B5003B92A7 /* UtilAbsInterval.cpp */,
- 1865513C18CA70B5003B92A7 /* UtilAbsInterval.hpp */,
- 1865513D18CA70B5003B92A7 /* UtilAbsTime.cpp */,
- 1865513E18CA70B5003B92A7 /* UtilAbsTime.hpp */,
- 1865513F18CA70B5003B92A7 /* UtilAssert.hpp */,
- 1865514018CA70B5003B92A7 /* UtilBase.hpp */,
- 189337C41CC7DA8700B2A6A4 /* UtilCoreSymbolication.hpp */,
- 1865514118CA70B5003B92A7 /* UtilException.hpp */,
- 1865514218CA70B5003B92A7 /* UtilFileDescriptor.hpp */,
- 1865514318CA70B5003B92A7 /* UtilLog.cpp */,
- 1865514418CA70B5003B92A7 /* UtilLog.hpp */,
- 1865514518CA70B5003B92A7 /* UtilMakeUnique.hpp */,
- 1865514618CA70B5003B92A7 /* UtilMappedFile.cpp */,
- 1865514718CA70B5003B92A7 /* UtilMappedFile.hpp */,
- 1865514818CA70B5003B92A7 /* UtilMemoryBuffer.hpp */,
- 1865514918CA70B5003B92A7 /* UtilNanoInterval.hpp */,
- 1865514A18CA70B5003B92A7 /* UtilNanoTime.cpp */,
- 1865514B18CA70B5003B92A7 /* UtilNanoTime.hpp */,
- 1865514C18CA70B5003B92A7 /* UtilPath.cpp */,
- 1865514D18CA70B5003B92A7 /* UtilPath.hpp */,
- 1865514E18CA70B5003B92A7 /* UtilPrettyPrinting.cpp */,
- 1865514F18CA70B5003B92A7 /* UtilPrettyPrinting.hpp */,
- 1865515018CA70B5003B92A7 /* UtilString.cpp */,
- 1865515118CA70B5003B92A7 /* UtilString.hpp */,
- 1865515218CA70B5003B92A7 /* UtilTerminalColor.cpp */,
- 1865515318CA70B5003B92A7 /* UtilTerminalColor.hpp */,
- 1865515418CA70B5003B92A7 /* UtilTime.hpp */,
- 1865515518CA70B5003B92A7 /* UtilTimer.cpp */,
- 1865515618CA70B5003B92A7 /* UtilTimer.hpp */,
- 1865515718CA70B5003B92A7 /* UtilTRange.hpp */,
- 1865515818CA70B5003B92A7 /* UtilTRangeValue.hpp */,
- );
- path = CPPUtil;
- sourceTree = "<group>";
- };
- 1865517D18CA7104003B92A7 /* msa */ = {
- isa = PBXGroup;
- children = (
- 1865518C18CA72F7003B92A7 /* Action.hpp */,
- 1865518E18CA72F7003B92A7 /* EventProcessing.hpp */,
- 1865518F18CA72F7003B92A7 /* EventRingBuffer.hpp */,
- 1865519018CA72F7003B92A7 /* global.h */,
- 1865519218CA72F7003B92A7 /* Globals.hpp */,
- 1865519118CA72F7003B92A7 /* Globals.cpp */,
- 1865519518CA72F7003B92A7 /* LiveTraceAction.hpp */,
- 1865519418CA72F7003B92A7 /* LiveTraceAction.cpp */,
- 1865519618CA72F7003B92A7 /* main.cpp */,
- 1888DB65191A8A4400A0541E /* PrintBuffer.hpp */,
- 1865519818CA72F7003B92A7 /* Printing.hpp */,
- 1865519718CA72F7003B92A7 /* Printing.cpp */,
- 1865519A18CA72F7003B92A7 /* ReadTraceFileAction.hpp */,
- 1865519918CA72F7003B92A7 /* ReadTraceFileAction.cpp */,
- 18D0E13119101CD200F93974 /* VoucherContentSysctl.hpp */,
- 185B9771191022B200FCB84C /* VoucherContentSysctl.cpp */,
- 185B97741910475500FCB84C /* WriteTraceFileAction.hpp */,
- 185B97731910475500FCB84C /* WriteTraceFileAction.cpp */,
- 1865518018CA7104003B92A7 /* msa.1 */,
- );
- path = msa;
- sourceTree = "<group>";
- };
189337C11CC7CB4800B2A6A4 /* Frameworks */ = {
isa = PBXGroup;
children = (
+ F27B70272044CB40003C04FC /* CoreFoundation.framework */,
08ADC98B1E70715D0001CB70 /* ktrace.framework */,
189337C21CC7CB4800B2A6A4 /* CoreFoundation.framework */,
);
name = Frameworks;
sourceTree = "<group>";
};
- 18C8728518EA11B900F86DD9 /* KDBG */ = {
- isa = PBXGroup;
- children = (
- 18C8728D18EA128B00F86DD9 /* KDebug.h */,
- 1873F1261CC587E2008950A8 /* BinaryDataTraceDecoder.hpp */,
- 1873F11E1CC52204008950A8 /* BinaryDataTraceEncoder.hpp */,
- 18C8728718EA128B00F86DD9 /* CPUActivity.hpp */,
- 18C8728818EA128B00F86DD9 /* CPUSummary.hpp */,
- 18624C861BF64ED700FA0575 /* CPUTypeSummary.hpp */,
- 1873F1221CC551DD008950A8 /* DeviceMap.hpp */,
- 1873F1211CC551DD008950A8 /* DeviceMap.cpp */,
- 18C8728918EA128B00F86DD9 /* IOActivity.hpp */,
- 18C8728B18EA128B00F86DD9 /* KDBG.hpp */,
- 18C8728A18EA128B00F86DD9 /* KDBG.cpp */,
- 18C8728C18EA128B00F86DD9 /* KDCPUMapEntry.hpp */,
- 18C8728E18EA128B00F86DD9 /* KDEvent.hpp */,
- 18C8728F18EA128B00F86DD9 /* KDState.hpp */,
- 1875DF421C443513004AC849 /* KDState.cpp */,
- 18C8729018EA128B00F86DD9 /* KDThreadMapEntry.hpp */,
- 18C8729218EA128B00F86DD9 /* Kernel.hpp */,
- 18C8729118EA128B00F86DD9 /* Kernel.cpp */,
- 18C8729318EA128B00F86DD9 /* Machine.hpp */,
- 185F75171CC337D400B0EA9E /* Machine.cpp */,
- 18C8729418EA128B00F86DD9 /* Machine.impl.hpp */,
- 18C8729518EA128B00F86DD9 /* Machine.mutable-impl.hpp */,
- 18C8729618EA128B00F86DD9 /* MachineCPU.hpp */,
- 18C8729718EA128B00F86DD9 /* MachineCPU.impl.hpp */,
- 18C8729818EA128B00F86DD9 /* MachineCPU.mutable-impl.hpp */,
- 18C8729918EA128B00F86DD9 /* MachineMachMsg.hpp */,
- 18C8729A18EA128B00F86DD9 /* MachineProcess.hpp */,
- 18C8729B18EA128B00F86DD9 /* MachineProcess.impl.hpp */,
- 18C8729C18EA128B00F86DD9 /* MachineProcess.mutable-impl.hpp */,
- 18C8729D18EA128B00F86DD9 /* MachineThread.hpp */,
- 18C8729E18EA128B00F86DD9 /* MachineThread.impl.hpp */,
- 18C8729F18EA128B00F86DD9 /* MachineThread.mutable-impl.hpp */,
- 18C872A018EA128B00F86DD9 /* MachineVoucher.hpp */,
- 18C872A118EA128B00F86DD9 /* MetaTypes.hpp */,
- 18C872A218EA128B00F86DD9 /* NurseryMachMsg.hpp */,
- 18C872A318EA128B00F86DD9 /* ProcessSummary.hpp */,
- 18624C871BF6503600FA0575 /* ProcessTypeSummary.hpp */,
- 18D8B66519535B92008847DF /* TaskEffectivePolicy.hpp */,
- 9FAAF8761C158C2300E6856D /* ThreadEffectivePolicy.hpp */,
- 188959FC1958D287004576E8 /* TaskRequestedPolicy.hpp */,
- 9FAAF8741C158C0B00E6856D /* ThreadRequestedPolicy.hpp */,
- 18C872A418EA128B00F86DD9 /* ThreadSummary.hpp */,
- 18624C881BF651EC00FA0575 /* ThreadTypeSummary.hpp */,
- 18C872A618EA128B00F86DD9 /* TraceCodes.hpp */,
- 18C872A518EA128B00F86DD9 /* TraceCodes.cpp */,
- 18C872A718EA128B00F86DD9 /* TraceDataHeader.hpp */,
- 1845E41518EB95810010F451 /* TraceFile.hpp */,
- 1845E41418EB95810010F451 /* TraceFile.cpp */,
- 18624C851BF6400200FA0575 /* TypeSummary.hpp */,
- 18C65BAE1CC1868D005194F4 /* TypeFilter.hpp */,
- 18C65BAD1CC1868D005194F4 /* TypeFilter.cpp */,
- 186288D01CC5DA71002950E0 /* UUIDMap.hpp */,
- 186288CF1CC5DA71002950E0 /* UUIDMap.cpp */,
- 18C872A818EA128B00F86DD9 /* VoucherInterval.hpp */,
- );
- path = KDBG;
- sourceTree = "<group>";
- };
- 18D6F9A91C5A8EDB00F472A7 /* eostraced */ = {
- isa = PBXGroup;
- children = (
- 18D6F9AF1C5A8EF000F472A7 /* eostraced.c */,
- 18D6F9B11C5A8EFB00F472A7 /* com.apple.eostraced.plist */,
- );
- path = eostraced;
- sourceTree = "<group>";
- };
3F56BF751F56057800266763 /* Recovered References */ = {
isa = PBXGroup;
children = (
isa = PBXGroup;
children = (
08CE3D321E6E22DE00DF1B78 /* stackshot.c */,
- 08CE3D301E6E22B000DF1B78 /* stackshot */,
18EA07101C99C76C006D3005 /* EmbeddedOSSupportHost.framework */,
BA4FD1E11372FAFA0025925C /* APPLE_LICENSE */,
BA4FD2FB1372FB710025925C /* BSD.xcconfig */,
BA4FD1F61372FAFA0025925C /* atrun.tproj */,
BA4FD1FF1372FAFA0025925C /* chkpasswd.tproj */,
BA4FD20A1372FAFA0025925C /* chpass.tproj */,
- 1865513918CA6F8C003B92A7 /* CPPUtil */,
BA4FD21E1372FAFA0025925C /* dmesg.tproj */,
BA4FD2261372FAFA0025925C /* dynamic_pager.tproj */,
BA4FD22E1372FAFA0025925C /* fs_usage.tproj */,
BA4FD24B1372FAFA0025925C /* hostinfo.tproj */,
550C19DF1804C55E001DA380 /* iosim.tproj */,
BA4FD24F1372FAFA0025925C /* iostat.tproj */,
- 18C8728518EA11B900F86DD9 /* KDBG */,
- 18597EC518CBC2A300531A50 /* kdprof */,
08DC488C1A12C2C5008AAF38 /* kpgo.tproj */,
BA4FD2551372FAFA0025925C /* latency.tproj */,
BA4FD2591372FAFA0025925C /* login.tproj */,
BA4FD2691372FAFA0025925C /* mean.tproj */,
B3F0E6DA16E9706E008FAD09 /* memory_pressure.tproj */,
BA4FD26C1372FAFA0025925C /* mkfile.tproj */,
- 1865517D18CA7104003B92A7 /* msa */,
0D06BC5F1E8F08CB00C6EC2D /* mslutil */,
BA4FD2701372FAFA0025925C /* newgrp.tproj */,
BA4FD2741372FAFA0025925C /* nologin.tproj */,
BA4FD2BA1372FAFA0025925C /* sysctl.tproj */,
C625B28916D6F27E00168EF7 /* taskpolicy.tproj */,
BA4FD2BF1372FAFA0025925C /* trace.tproj */,
- 18380CDB1C596E8900DC6B89 /* eostrace */,
- 18D6F9A91C5A8EDB00F472A7 /* eostraced */,
BA4FD2C31372FAFA0025925C /* vifs.tproj */,
BA4FD2C71372FAFA0025925C /* vipw.tproj */,
55CCB16716B84ED100B56979 /* vm_purgeable_stat.tproj */,
B158E3A1185A836700474677 /* wordexp-helper.tproj */,
BA4FD2D11372FAFA0025925C /* zdump.tproj */,
BA4FD2D51372FAFA0025925C /* zic.tproj */,
+ F2291F5E1FFEBB8500161936 /* zlog.tproj */,
BA4FD2E31372FAFA0025925C /* zprint.tproj */,
BA4B7A0D1373BBB600003422 /* Libraries */,
BA4FD2F01372FB3D0025925C /* Products */,
BA4B7A0D1373BBB600003422 /* Libraries */ = {
isa = PBXGroup;
children = (
- C97199F11C5206DE006D9758 /* libktrace.dylib */,
BA4B79BF1373A53700003422 /* libbsm.dylib */,
BA4B7A9313765F8B00003422 /* libncurses.dylib */,
BA4B7A091373BA4600003422 /* libutil.dylib */,
BA4FD2811372FAFA0025925C /* passwd.tproj */ = {
isa = PBXGroup;
children = (
+ A7C0927020EC491E0068148E /* passwd.entitlements */,
BA4FD2831372FAFA0025925C /* file_passwd.c */,
BA4FD2841372FAFA0025925C /* nis_passwd.c */,
BA4FD2851372FAFA0025925C /* od_passwd.c */,
BA4FD2E31372FAFA0025925C /* zprint.tproj */ = {
isa = PBXGroup;
children = (
+ C99490E32090F55D00246D9D /* zprint.lua */,
FEBEE5CF1B0EACEB00166A8B /* entitlements.plist */,
BA4FD2E51372FAFA0025925C /* zprint.1 */,
BA4FD2E61372FAFA0025925C /* zprint.c */,
8EC391651C9733C2001E28E6 /* proc_uuid_policy */,
08CE3D291E6E22A200DF1B78 /* stackshot */,
0D06BC5E1E8F08CB00C6EC2D /* mslutil */,
+ F2291F5D1FFEBB6A00161936 /* zlog */,
);
name = Products;
sourceTree = "<group>";
path = ac.tproj;
sourceTree = "<group>";
};
+ F2291F5E1FFEBB8500161936 /* zlog.tproj */ = {
+ isa = PBXGroup;
+ children = (
+ F29F5A5C203E4403005B0099 /* zlog.1 */,
+ F29F5A5A203E12BB005B0099 /* entitlements.plist */,
+ F2291F5F1FFEBB9E00161936 /* zlog.c */,
+ F27B70292045038B003C04FC /* SymbolicationHelper.c */,
+ F27B702A2045038B003C04FC /* SymbolicationHelper.h */,
+ );
+ path = zlog.tproj;
+ sourceTree = "<group>";
+ };
/* End PBXGroup section */
/* Begin PBXHeadersBuildPhase section */
BA0A860813968E8500D2272C /* Sources */,
BA0A860A13968E8500D2272C /* Frameworks */,
BA0A860C13968E8500D2272C /* CopyFiles */,
+ C99490E22090F53B00246D9D /* CopyFiles */,
);
buildRules = (
);
productReference = C96F50B715BDCEC3008682F7 /* lsmp */;
productType = "com.apple.product-type.tool";
};
+ F2291F501FFEBB6A00161936 /* zlog */ = {
+ isa = PBXNativeTarget;
+ buildConfigurationList = F2291F5A1FFEBB6A00161936 /* Build configuration list for PBXNativeTarget "zlog" */;
+ buildPhases = (
+ F2291F511FFEBB6A00161936 /* Sources */,
+ F2291F531FFEBB6A00161936 /* Frameworks */,
+ F29F5A5E203E532B005B0099 /* CopyFiles */,
+ );
+ buildRules = (
+ );
+ dependencies = (
+ );
+ name = zlog;
+ productName = ac;
+ productReference = F2291F5D1FFEBB6A00161936 /* zlog */;
+ productType = "com.apple.product-type.tool";
+ };
/* End PBXNativeTarget section */
/* Begin PBXProject section */
BA0A860713968E8500D2272C /* zprint */,
08CE3D281E6E22A200DF1B78 /* stackshot */,
0D06BC5D1E8F08CB00C6EC2D /* mslutil */,
+ F2291F501FFEBB6A00161936 /* zlog */,
);
};
/* End PBXProject section */
);
runOnlyForDeploymentPostprocessing = 0;
};
+ F2291F511FFEBB6A00161936 /* Sources */ = {
+ isa = PBXSourcesBuildPhase;
+ buildActionMask = 2147483647;
+ files = (
+ F2291F601FFEBB9E00161936 /* zlog.c in Sources */,
+ F27B702B2045038B003C04FC /* SymbolicationHelper.c in Sources */,
+ );
+ runOnlyForDeploymentPostprocessing = 0;
+ };
/* End PBXSourcesBuildPhase section */
/* Begin PBXTargetDependency section */
target = C96F50AE15BDCEC3008682F7 /* lsmp */;
targetProxy = C96F50BB15BDFDB1008682F7 /* PBXContainerItemProxy */;
};
+ F2291F641FFEBC4000161936 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F2291F501FFEBB6A00161936 /* zlog */;
+ targetProxy = F2291F631FFEBC4000161936 /* PBXContainerItemProxy */;
+ };
+ F2291F661FFEBC4700161936 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F2291F501FFEBB6A00161936 /* zlog */;
+ targetProxy = F2291F651FFEBC4700161936 /* PBXContainerItemProxy */;
+ };
+ F2291F681FFEBC4F00161936 /* PBXTargetDependency */ = {
+ isa = PBXTargetDependency;
+ target = F2291F501FFEBB6A00161936 /* zlog */;
+ targetProxy = F2291F671FFEBC4F00161936 /* PBXContainerItemProxy */;
+ };
/* End PBXTargetDependency section */
/* Begin XCBuildConfiguration section */
1873300418CBD4A700275344 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = passwd.tproj/passwd.entitlements;
INSTALL_PATH = /usr/bin;
"OTHER_LDFLAGS[sdk=macosx*][arch=*]" = (
"-framework",
1873301A18CBD4A700275344 /* Debug */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "taskpolicy.tproj/taskpolicy-entitlements.plist";
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders";
INSTALL_PATH = /usr/sbin;
MTL_ENABLE_DEBUG_INFO = NO;
New_Setting14GCC_ENABLE_OBJC_GC = unsupported;
PRODUCT_NAME = wait4path;
- SDKROOT = macosx;
STRIP_INSTALLED_PRODUCT_debug = NO;
USE_HEADERMAP = NO;
WANTS_GET_TASK_ALLOW = NO;
New_Setting14GCC_ENABLE_OBJC_GC = unsupported;
ONLY_ACTIVE_ARCH = YES;
PRODUCT_NAME = wait4path;
- SDKROOT = macosx;
STRIP_INSTALLED_PRODUCT_debug = NO;
USE_HEADERMAP = NO;
WANTS_GET_TASK_ALLOW = NO;
BAE589CD1378FCAA0049DD3B /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = passwd.tproj/passwd.entitlements;
INSTALL_PATH = /usr/bin;
"OTHER_LDFLAGS[sdk=macosx*][arch=*]" = (
"-framework",
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "gcore.tproj/gcore-entitlements.plist";
FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)/$(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework/PrivateHeaders";
GCC_TREAT_IMPLICIT_FUNCTION_DECLARATIONS_AS_ERRORS = YES;
GCC_TREAT_INCOMPATIBLE_POINTER_TYPE_WARNINGS_AS_ERRORS = YES;
CLANG_WARN_INT_CONVERSION = YES;
CLANG_WARN_SUSPICIOUS_IMPLICIT_CONVERSION = YES;
CLANG_WARN_UNREACHABLE_CODE = YES_AGGRESSIVE;
+ CODE_SIGN_ENTITLEMENTS = "gcore.tproj/gcore-entitlements.plist";
FRAMEWORK_SEARCH_PATHS = "$(SDKROOT)/$(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework/PrivateHeaders";
GCC_PREPROCESSOR_DEFINITIONS = (
"DEBUG=1",
C625B28E16D6F27E00168EF7 /* Release */ = {
isa = XCBuildConfiguration;
buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = "taskpolicy.tproj/taskpolicy-entitlements.plist";
GCC_TREAT_WARNINGS_AS_ERRORS = YES;
HEADER_SEARCH_PATHS = "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders";
INSTALL_PATH = /usr/sbin;
};
name = Release;
};
+ F2291F5B1FFEBB6A00161936 /* Release */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = zlog.tproj/entitlements.plist;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
+ "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
+ );
+ HEADER_SEARCH_PATHS = (
+ "$(SDKROOT)/$(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework/PrivateHeaders/mach",
+ "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders",
+ "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/bsd",
+ );
+ INSTALL_PATH = /usr/local/bin;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Release;
+ };
+ F2291F5C1FFEBB6A00161936 /* Debug */ = {
+ isa = XCBuildConfiguration;
+ buildSettings = {
+ CODE_SIGN_ENTITLEMENTS = zlog.tproj/entitlements.plist;
+ FRAMEWORK_SEARCH_PATHS = (
+ "$(inherited)",
+ "$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
+ "$(SDKROOT)$(SYSTEM_LIBRARY_DIR)/PrivateFrameworks",
+ );
+ HEADER_SEARCH_PATHS = (
+ "$(SDKROOT)/$(SYSTEM_LIBRARY_DIR)/Frameworks/Kernel.framework/PrivateHeaders/mach",
+ "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders",
+ "$(SDKROOT)/System/Library/Frameworks/System.framework/PrivateHeaders/bsd",
+ );
+ INSTALL_PATH = /usr/local/bin;
+ PRODUCT_NAME = "$(TARGET_NAME)";
+ };
+ name = Debug;
+ };
/* End XCBuildConfiguration section */
/* Begin XCConfigurationList section */
defaultConfigurationIsVisible = 0;
defaultConfigurationName = Release;
};
+ F2291F5A1FFEBB6A00161936 /* Build configuration list for PBXNativeTarget "zlog" */ = {
+ isa = XCConfigurationList;
+ buildConfigurations = (
+ F2291F5B1FFEBB6A00161936 /* Release */,
+ F2291F5C1FFEBB6A00161936 /* Debug */,
+ );
+ defaultConfigurationIsVisible = 0;
+ defaultConfigurationName = Release;
+ };
/* End XCConfigurationList section */
};
rootObject = BA2DE9181372FA9100D1913C /* Project object */;
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.security.cs.debugger.root</key>
+ <true/>
+</dict>
+</plist>
<key>WorkingDirectory</key>
<string>/tmp/</string>
</dict>
+ <dict>
+ <key>Arch</key>
+ <string>platform-native</string>
+ <key>AsRoot</key>
+ <true/>
+ <key>Command</key>
+ <array>
+ <string>/usr/local/bin/proc_uuid_policy</string>
+ <string>add</string>
+ <string>alt-dyld</string>
+ <string>/usr/bin/yes</string>
+ </array>
+ <key>EligibleResource</key>
+ <string>deviceClass == 'iPhone'</string>
+ <key>IgnoreCrashes</key>
+ <array>
+ </array>
+ <key>TestName</key>
+ <string>test_proc_uuid_policy</string>
+ <key>TestSpecificLogs</key>
+ <array>
+ </array>
+ <key>WorkingDirectory</key>
+ <string>/tmp/</string>
+ </dict>
</array>
</dict>
</plist>
.Pp
.Nm
operates according to the command flag specified.
+.Pp
+NOTE:
+.Nm
+is obsolete. The command you probably want is
+.Xr ktrace 1
.Sh COMMANDS
.Bl -tag -width Ds
.It Fl h
struct event {
event_t ev_next;
- uintptr_t ev_thread;
+ uint64_t ev_thread;
uint32_t ev_debugid;
uint64_t ev_timestamp;
};
struct lookup {
lookup_t lk_next;
- uintptr_t lk_thread;
- uintptr_t lk_dvp;
- long *lk_pathptr;
- long lk_pathname[NUMPARMS + 1];
+ uint64_t lk_thread;
+ uint64_t lk_dvp;
+ int64_t *lk_pathptr;
+ int64_t lk_pathname[NUMPARMS + 1];
};
typedef struct threadmap *threadmap_t;
struct threadmap {
threadmap_t tm_next;
- uintptr_t tm_thread;
- uintptr_t tm_pthread;
+ uint64_t tm_thread;
+ uint64_t tm_pthread;
boolean_t tm_deleteme;
char tm_command[MAXCOMLEN + 1];
};
static int read_command_map(int, uint32_t);
static void read_cpu_map(int);
static void find_thread_command(kd_buf *, char **);
-static void create_map_entry(uintptr_t, char *);
+static void create_map_entry(uint64_t, char *);
static void getdivisor();
static unsigned long argtoul();
static void read_trace();
static void signal_handler(int);
static void signal_handler_RAW(int);
-static void delete_thread_entry(uintptr_t);
-static void find_and_insert_tmp_map_entry(uintptr_t, char *);
-static void create_tmp_map_entry(uintptr_t, uintptr_t);
-static void find_thread_name(uintptr_t, char **, boolean_t);
+static void delete_thread_entry(uint64_t);
+static void find_and_insert_tmp_map_entry(uint64_t, char *);
+static void create_tmp_map_entry(uint64_t, uint64_t);
+static void find_thread_name(uint64_t, char **, boolean_t);
static void execute_process(char * const argv[]);
static int writetrace(int);
static int write_command_map(int);
static int debugid_compar(const void *, const void *);
-static threadmap_t find_thread_entry(uintptr_t);
+static threadmap_t find_thread_entry(uint64_t);
static void saw_filter_class(uint8_t class);
static void saw_filter_end_range(uint8_t end_class);
static
-lookup_t handle_lookup_event(uintptr_t thread, int debugid, kd_buf *kdp)
+lookup_t handle_lookup_event(uint64_t thread, int debugid, kd_buf *kdp)
{
lookup_t lkp;
int hashid;
static
-void delete_lookup_event(uintptr_t thread, lookup_t lkp_to_delete)
+void delete_lookup_event(uint64_t thread, lookup_t lkp_to_delete)
{
lookup_t lkp;
lookup_t lkp_prev;
static
-void insert_start_event(uintptr_t thread, int debugid, uint64_t now)
+void insert_start_event(uint64_t thread, int debugid, uint64_t now)
{
event_t evp;
int hashid;
static
-uint64_t consume_start_event(uintptr_t thread, int debugid, uint64_t now)
+uint64_t consume_start_event(uint64_t thread, int debugid, uint64_t now)
{
event_t evp;
event_t evp_prev;
uint64_t prev;
uint64_t prevdelta = 0;
uint32_t cpunum = 0;
- uintptr_t thread;
+ uint64_t thread;
double x = 0.0;
double y = 0.0;
double event_elapsed_time = 0;
if ( !lkp) {
int t_debugid;
- uintptr_t t_thread;
+ uint64_t t_thread;
if ((debugid & DBG_FUNC_START) || debugid == MACH_MAKERUNNABLE) {
len -= 51;
else
len = 0;
-#ifdef __LP64__
+#if defined(__LP64__) || defined(__arm64__)
- fprintf(output_file, "%-16lx %-51s %-16lx %-2d %s\n", lkp->lk_dvp, &strptr[len], thread, cpunum, command);
+ fprintf(output_file, "%-16llx %-51s %-16" PRIx64 " %-2d %s\n", (uint64_t)lkp->lk_dvp, &strptr[len], thread, cpunum, command);
#else
- fprintf(output_file, "%-8x %-51s %-8lx %-2d %s\n", (unsigned int)lkp->lk_dvp, &strptr[len], thread, cpunum, command);
+ fprintf(output_file, "%-8x %-51s %-8" PRIx64 " %-2d %s\n", (unsigned int)lkp->lk_dvp, &strptr[len], thread, cpunum, command);
#endif
delete_lookup_event(thread, lkp);
} else if (debugid == TRACE_INFO_STRING) {
-#ifdef __LP64__
- fprintf(output_file, "%-32s%-36s %-16lx %-2d %s\n", (char *) &kdp->arg1, "", thread, cpunum, command);
+#if defined(__LP64__) || defined(__arm64__)
+ fprintf(output_file, "%-32s%-36s %-16" PRIx64 " %-2d %s\n", (char *) &kdp->arg1, "", thread, cpunum, command);
#else
- fprintf(output_file, "%-16s%-46s %-8lx %-2d %s\n", (char *) &kdp->arg1, "", thread, cpunum, command);
+ fprintf(output_file, "%-16s%-46s %-8" PRIx64 " %-2d %s\n", (char *) &kdp->arg1, "", thread, cpunum, command);
#endif
} else {
-#ifdef __LP64__
- fprintf(output_file, "%-16lx %-16lx %-16lx %-16lx %-16lx %-2d %s\n", kdp->arg1, kdp->arg2, kdp->arg3, kdp->arg4, thread, cpunum, command);
+#if defined(__LP64__) || defined(__arm64__)
+ fprintf(output_file, "%-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %-16" PRIx64 " %-2d %s\n",
+ (uint64_t)kdp->arg1, (uint64_t)kdp->arg2, (uint64_t)kdp->arg3, (uint64_t)kdp->arg4, thread, cpunum, command);
#else
- fprintf(output_file, "%-8lx %-8lx %-8lx %-8lx %-8lx %-2d %s\n", kdp->arg1, kdp->arg2, kdp->arg3, kdp->arg4, thread, cpunum, command);
+ fprintf(output_file, "%-8" PRIx64 " %-8" PRIx64 " %-8" PRIx64 " %-8" PRIx64 " %-8" PRIx64 " %-2d %s\n",
+ (uint64_t)kdp->arg1, (uint64_t)kdp->arg2, (uint64_t)kdp->arg3, (uint64_t)kdp->arg4, thread, cpunum, command);
#endif
}
lines++;
fprintf(stderr, "Could not re-execute: %d\n", errno);
exit(1);
}
- } else {
+ }
+#if !defined(__arm64__)
+ else {
if (0 != reexec_to_match_kernel()) {
fprintf(stderr, "Could not re-execute: %d\n", errno);
exit(1);
}
}
+#endif
if (setiopolicy_np(IOPOL_TYPE_DISK, IOPOL_SCOPE_PROCESS, IOPOL_PASSIVE) < 0) {
printf("setiopolicy failed\n");
exit(1);
printf("Thread Command\n");
for (i = 0; i < total_threads; i++) {
- printf ("0x%lx %s\n",
- mapptr[i].thread,
+ printf ("0x%" PRIx64 " %s\n",
+ (uint64_t)mapptr[i].thread,
mapptr[i].command);
}
}
}
void
-create_map_entry(uintptr_t thread, char *command)
+create_map_entry(uint64_t thread, char *command)
{
threadmap_t tme;
int hashid;
}
void
-delete_thread_entry(uintptr_t thread)
+delete_thread_entry(uint64_t thread)
{
threadmap_t tme = 0;
threadmap_t tme_prev;
}
void
-find_and_insert_tmp_map_entry(uintptr_t pthread, char *command)
+find_and_insert_tmp_map_entry(uint64_t pthread, char *command)
{
threadmap_t tme = 0;
threadmap_t tme_prev;
}
void
-create_tmp_map_entry(uintptr_t thread, uintptr_t pthread)
+create_tmp_map_entry(uint64_t thread, uint64_t pthread)
{
threadmap_t tme;
threadmap_t
-find_thread_entry(uintptr_t thread)
+find_thread_entry(uint64_t thread)
{
threadmap_t tme;
int hashid;
}
void
-find_thread_name(uintptr_t thread, char **command, boolean_t deleteme)
+find_thread_name(uint64_t thread, char **command, boolean_t deleteme)
{
threadmap_t tme;
void
find_thread_command(kd_buf *kbufp, char **command)
{
- uintptr_t thread;
+ uint64_t thread;
threadmap_t tme;
int debugid_base;
--- /dev/null
+//
+// SymbolicationHelper.c
+// zlog
+//
+// Created by Rasha Eqbal on 2/26/18.
+//
+
+#include "SymbolicationHelper.h"
+
+/*
+ * Most of the CoreSymbolication code here has been copied from ioclasscount in the IOKitTools project.
+ */
+
+#define kAddressKey CFSTR("Address")
+#define kNameKey CFSTR("Name")
+#define kPathKey CFSTR("Path")
+#define kSegmentsKey CFSTR("Segments")
+#define kSizeKey CFSTR("Size")
+#define kUuidKey CFSTR("UUID")
+
+static void AddSymbolOwnerSummary(CSSymbolOwnerRef owner, CFMutableDictionaryRef binaryImages);
+static void ShowBinaryImage(const void *key, const void *value, void *context);
+
+/*
+ * Symbolicates 'addr' using the 'symbolicator' passed in.
+ * Adds owner info to 'binaryImages' for offline symbolication.
+ *
+ * Top-level function that needs to be called on each frame address in the backtrace.
+ */
+void PrintSymbolicatedAddress(CSSymbolicatorRef symbolicator, mach_vm_address_t addr, CFMutableDictionaryRef binaryImages)
+{
+ printf("0x%llx", addr);
+
+ CSSymbolOwnerRef ownerInfo = CSSymbolicatorGetSymbolOwnerWithAddressAtTime(symbolicator, addr, kCSNow);
+ if (!CSIsNull(ownerInfo)) {
+ const char *moduleName = CSSymbolOwnerGetName(ownerInfo);
+ if (moduleName) {
+ printf(" <%s>", moduleName);
+ }
+ }
+
+ CSSymbolRef symbolInfo = CSSymbolicatorGetSymbolWithAddressAtTime(symbolicator, addr, kCSNow);
+ if (!CSIsNull(symbolInfo)) {
+ printf(" %s", CSSymbolGetName(symbolInfo));
+ }
+
+ CSSourceInfoRef sourceInfo = CSSymbolicatorGetSourceInfoWithAddressAtTime(symbolicator, addr, kCSNow);
+ if (!CSIsNull(sourceInfo)) {
+ const char *fileName = CSSourceInfoGetPath(sourceInfo);
+ if (fileName) {
+ printf(" at %s:%d", fileName, CSSourceInfoGetLineNumber(sourceInfo));
+ }
+ }
+ printf("\n");
+
+ AddSymbolOwnerSummary(ownerInfo, binaryImages);
+}
+
+/*
+ * Adds symbolication information for 'owner' to 'binaryImages' to help with offline symbolication.
+ *
+ * This is called from PrintSymbolicatedAddress() on the symbol owner for each address it symbolicates.
+ */
+static void AddSymbolOwnerSummary(CSSymbolOwnerRef owner, CFMutableDictionaryRef binaryImages)
+{
+ const CFUUIDBytes *uuidBytes = NULL;
+ CFUUIDRef uuid = NULL;
+ CFStringRef uuidString = NULL, path = NULL, name = NULL;
+ CFMutableDictionaryRef summaryDict = NULL;
+ __block CSSegmentRef textSegment = kCSNull, textExecSegment = kCSNull;
+ CSSegmentRef segment = kCSNull;
+ CSRange range;
+ CFNumberRef address = NULL, size = NULL;
+
+#define RETURN_IF_NULL(ptr) \
+if (!(ptr)) { \
+goto cleanup; \
+}
+
+ uuidBytes = CSSymbolOwnerGetCFUUIDBytes(owner);
+ if (uuidBytes) {
+ uuid = CFUUIDCreateFromUUIDBytes(NULL, *uuidBytes);
+ if (uuid) {
+ uuidString = CFUUIDCreateString(kCFAllocatorDefault, uuid);
+ }
+ }
+ RETURN_IF_NULL(uuidString);
+
+ if (!CFDictionaryContainsKey(binaryImages, uuidString)) {
+ summaryDict = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
+ RETURN_IF_NULL(summaryDict);
+
+ CFDictionarySetValue(summaryDict, kUuidKey, uuidString);
+
+ path = CFStringCreateWithCString(kCFAllocatorDefault, CSSymbolOwnerGetPath(owner), kCFStringEncodingUTF8);
+ RETURN_IF_NULL(path);
+ CFDictionarySetValue(summaryDict, kPathKey, path);
+
+ name = CFStringCreateWithCString(kCFAllocatorDefault, CSSymbolOwnerGetName(owner), kCFStringEncodingUTF8);
+ RETURN_IF_NULL(name);
+ CFDictionarySetValue(summaryDict, kNameKey, name);
+
+ CSSymbolOwnerForeachSegment(owner, ^(CSSegmentRef segment) {
+ if (strcmp(CSRegionGetName(segment), "__TEXT SEGMENT") == 0) {
+ textSegment = segment;
+ CSRetain(textSegment);
+ } else if (strcmp(CSRegionGetName(segment), "__TEXT_EXEC SEGMENT") == 0) {
+ textExecSegment = segment;
+ CSRetain(textExecSegment);
+ }
+ });
+
+ segment = !CSIsNull(textExecSegment) ? textExecSegment : textSegment;
+ if (CSIsNull(segment)) {
+ goto cleanup;
+ }
+ range = CSRegionGetRange(segment);
+
+ address = CFNumberCreate(NULL, kCFNumberLongLongType, &range.location);
+ RETURN_IF_NULL(address);
+ CFDictionarySetValue(summaryDict, kAddressKey, address);
+
+ size = CFNumberCreate(NULL, kCFNumberLongLongType, &range.length);
+ RETURN_IF_NULL(size);
+ CFDictionarySetValue(summaryDict, kSizeKey, size);
+
+ CFDictionarySetValue(binaryImages, uuidString, summaryDict);
+ }
+
+cleanup:
+ if (size) CFRelease(size);
+ if (address) CFRelease(address);
+ if (!CSIsNull(textExecSegment)) CSRelease(textExecSegment);
+ if (!CSIsNull(textSegment)) CSRelease(textSegment);
+ if (name) CFRelease(name);
+ if (path) CFRelease(path);
+ if (summaryDict) CFRelease(summaryDict);
+ if (uuidString) CFRelease(uuidString);
+ if (uuid) CFRelease(uuid);
+}
+
+/*
+ * Prints offline symbolication information for the images passed in 'binaryImages'.
+ *
+ * Top-level function that needs to be called if the tool wants to include support
+ * for offline symbolication.
+ */
+void PrintBinaryImagesInfo(CFMutableDictionaryRef binaryImages)
+{
+ if (CFDictionaryGetCount(binaryImages) > 0) {
+ printf("\nBinary Images:\n");
+ CFDictionaryApplyFunction(binaryImages, ShowBinaryImage, NULL);
+ } else {
+ printf("No binary images\n");
+ }
+}
+
+/*
+ * Prints information about a binary image necessary for offline symbolication.
+ *
+ * This is called from PrintBinaryImagesInfo() on each element in 'binaryImages'.
+ */
+static void ShowBinaryImage(const void *key, const void *value, void *context)
+{
+ char nameString[256] = {0}, uuidString[256] = {0}, pathString[256] = {0};
+ CFStringRef uuid = (CFStringRef)key;
+ CFStringGetCString(uuid, uuidString, sizeof(uuidString), kCFStringEncodingASCII);
+ CFDictionaryRef summary = (CFDictionaryRef)value;
+
+ CFStringRef name = CFDictionaryGetValue(summary, kNameKey);
+ CFStringGetCString(name, nameString, sizeof(nameString), kCFStringEncodingASCII);
+ CFStringRef path = CFDictionaryGetValue(summary, kPathKey);
+ CFStringGetCString(path, pathString, sizeof(pathString), kCFStringEncodingASCII);
+ CFNumberRef addressNumber = CFDictionaryGetValue(summary, kAddressKey);
+ CFNumberRef sizeNumber = CFDictionaryGetValue(summary, kSizeKey);
+ int64_t address, size;
+ CFNumberGetValue(addressNumber, kCFNumberSInt64Type, &address);
+ CFNumberGetValue(sizeNumber, kCFNumberSInt64Type, &size);
+
+ printf("%p - %p %s <%s> %s\n", (void*)address, (void*)address + size, nameString, uuidString, pathString);
+}
--- /dev/null
+//
+// SymbolicationHelper.h
+// zlog
+//
+// Created by Rasha Eqbal on 2/26/18.
+//
+
+#ifndef SymbolicationHelper_h
+#define SymbolicationHelper_h
+
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreSymbolication/CoreSymbolication.h>
+
+/*
+ * Call this function on each address that needs to be symbolicated.
+ *
+ * sym: The CSSymbolicatorRef which will be used for symbolication. For example, to symbolicate
+ * kernel addresses create a CSSymbolicatorRef by calling CSSymbolicatorCreateWithMachKernel().
+ * addr: The address that needs to be symbolicated.
+ * binaryImages: The dictionary that aggregates binary image info for offline symbolication.
+ */
+void PrintSymbolicatedAddress(CSSymbolicatorRef sym, mach_vm_address_t addr, CFMutableDictionaryRef binaryImages);
+
+/*
+ * Call this function to dump binary image info required for offline symbolication.
+ *
+ * binaryImages: The dictionary that stores this info.
+ *
+ * The preferred way to use this is to create a CFMutableDictionaryRef with a call to CFDictionaryCreateMutable()
+ * and pass it in to PrintSymbolicatedAddress() when symbolicating addresses. This will auto-populate the dictionary,
+ * which just needs to be passed in here to print the relevant information.
+ */
+void PrintBinaryImagesInfo(CFMutableDictionaryRef binaryImages);
+
+#endif /* SymbolicationHelper_h */
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
+<plist version="1.0">
+<dict>
+ <key>com.apple.private.kernel.get-kext-info</key>
+ <true/>
+</dict>
+</plist>
--- /dev/null
+.\" Copyright (c) 2018, Apple Inc. All rights reserved.
+.\"
+.Dd February 21, 2018
+.Dt ZLOG 1
+.Os "Mac OS X"
+.Sh NAME
+.Nm zlog
+.Nd show allocation backtraces for kernel zones
+.Sh SYNOPSIS
+.Nm
+.Op Fl t
+.Op Fl z Ar name Op Fl n Ar num | Fl l
+.Op Fl h
+.Sh DESCRIPTION
+.Nm
+displays allocation (and free, if used in corruption tracking mode with
+the boot-arg "-zc") backtraces for zones that have zone logging enabled.
+Zone logging can be turned on by using the boot-arg "zlog<N>=<name>",
+where 'N' can range from 1 to 10, and 'name' is the name of the zone to
+be tracked.
+.Pp
+.Nm
+interprets the following options:
+.Pp
+.Bl -tag -width "disable -"
+.\" -t
+.It Fl t
+(Default) list all the zones that have logging enabled
+.\" -z
+.It Fl z Ar name
+show all allocation backtraces for zone
+.Ar name
+.\" -n
+.It Fl n Ar num
+Can be used in combination with the
+.Fl z
+option to show the top
+.Ar num
+backtraces with the most active references in the zone
+.Ar name
+.\" -l
+.It Fl l
+Can be used in combination with the
+.Fl z
+option to show the backtrace most likely contributing to a leak in the zone
+.Ar name
+(prints the backtrace with the most active references)
+.\" -h
+.It Fl h
+show the help text
+.El
+.Sh DIAGNOSTICS
+.Ex -std
+.Sh SEE ALSO
+.Xr zprint 1 ,
+.Xr ioclasscount 1
--- /dev/null
+//
+// zlog.c
+// zlog
+//
+// Created by Rasha Eqbal on 1/4/18.
+//
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <string.h>
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach_debug/mach_debug.h>
+#include <CoreFoundation/CoreFoundation.h>
+#include <CoreSymbolication/CoreSymbolication.h>
+#include "SymbolicationHelper.h"
+
+extern kern_return_t
+mach_zone_get_btlog_records(host_priv_t host,
+ mach_zone_name_t name,
+ zone_btrecord_array_t *recsp,
+ mach_msg_type_number_t *recsCntp);
+extern kern_return_t
+mach_zone_get_zlog_zones(host_priv_t host,
+ mach_zone_name_array_t *namesp,
+ mach_msg_type_number_t *namesCntp);
+
+static int compare_zone_btrecords(const void *left, const void *right);
+static void usage(FILE *stream, char **argv);
+static void print_zone_info(const char *name);
+static void get_zone_btrecords(const char *name, int topN);
+static void list_zones_with_zlog_enabled(void);
+
+static void usage(FILE *stream, char **argv)
+{
+ fprintf (stream, "usage: %s [-t] [-z name [-n num | -l]] [-h]\n", argv[0]);
+ fprintf (stream, " -t : list all the zones that have logging enabled\n");
+ fprintf (stream, " -z <name> : show all allocation backtraces for zone <name>\n");
+ fprintf (stream, " -n <num> : show top <num> backtraces with the most active references in zone <name>\n");
+ fprintf (stream, " -l : show the backtrace most likely contributing to a leak in zone <name>\n");
+ fprintf (stream, " (prints the backtrace with the most active references)\n");
+ fprintf (stream, " -h : print this help text\n");
+ exit(stream != stdout);
+}
+
+static int compare_zone_btrecords(const void *left, const void *right)
+{
+ zone_btrecord_t *btl = (zone_btrecord_t *)left;
+ zone_btrecord_t *btr = (zone_btrecord_t *)right;
+
+ return (btr->ref_count - btl->ref_count);
+}
+
+static void print_zone_info(const char *name)
+{
+ mach_zone_name_t zname;
+ mach_zone_info_t zone_info;
+ kern_return_t kr;
+
+ strcpy(zname.mzn_name, name);
+ kr = mach_zone_info_for_zone(mach_host_self(), zname, &zone_info);
+ if (kr != KERN_SUCCESS) {
+ fprintf(stderr, "error: call to mach_zone_info_for_zone() failed: %s\n", mach_error_string(kr));
+ exit(1);
+ }
+ printf("zone name : %s\n", name);
+ printf("element size (bytes) : %lld\n", zone_info.mzi_elem_size);
+ printf("in-use size (bytes) : %lld\n", zone_info.mzi_count * zone_info.mzi_elem_size);
+ printf("total size (bytes) : %lld\n", zone_info.mzi_cur_size);
+ printf("\n");
+}
+
+static void get_zone_btrecords(const char *name, int topN)
+{
+ kern_return_t kr;
+ int i, j, index;
+ mach_zone_name_t zname;
+ unsigned int recs_count = 0;
+ zone_btrecord_t *recs, *recs_addr = NULL;
+ CSSymbolicatorRef kernelSym;
+ CFMutableDictionaryRef binaryImages;
+
+ /* Create kernel symbolicator */
+ kernelSym = CSSymbolicatorCreateWithMachKernel();
+ if (CSIsNull(kernelSym)) {
+ fprintf(stderr, "error: CSSymbolicatorCreateWithMachKernel() returned NULL\n");
+ exit(1);
+ }
+ /* Create dictionary to collect binary image info for offline symbolication */
+ binaryImages = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
+
+ /* Query the kernel for backtrace records */
+ strcpy(zname.mzn_name, name);
+ kr = mach_zone_get_btlog_records(mach_host_self(), zname, &recs_addr, &recs_count);
+ if (kr != KERN_SUCCESS) {
+ fprintf(stderr, "error: call to mach_zone_get_btlog_records() failed: %s\n", mach_error_string(kr));
+ exit(1);
+ }
+
+ if (recs_count == 0) {
+ goto finish;
+ }
+
+ recs = recs_addr;
+ if (topN == 1) {
+ /* Print the backtrace with the highest no. of refs */
+ index = 0;
+ for (i = 0; i < recs_count; i++) {
+ if (recs[i].ref_count > recs[index].ref_count) {
+ index = i;
+ }
+ }
+ recs = recs_addr + index;
+ } else if (topN == 0) {
+ /* Print all backtraces */
+ topN = recs_count;
+ } else {
+ /* Sort the records by no. of refs, and print the top <topN> */
+ qsort(recs, recs_count, sizeof *recs, compare_zone_btrecords);
+ }
+
+ printf("printing top %d (out of %d) allocation backtrace(s) for zone %s\n", topN, recs_count, zname.mzn_name);
+
+ for (i = 0; i < topN; i++) {
+ printf("\nactive refs: %d operation type: %s\n", recs[i].ref_count,
+ (recs[i].operation_type == ZOP_ALLOC)? "ALLOC": (recs[i].operation_type == ZOP_FREE)? "FREE": "UNKNOWN");
+
+ for (j = 0; j < MAX_ZTRACE_DEPTH; j++) {
+ mach_vm_address_t addr = (mach_vm_address_t)recs[i].bt[j];
+ if (!addr) {
+ break;
+ }
+ PrintSymbolicatedAddress(kernelSym, addr, binaryImages);
+ }
+ }
+
+ /* Print relevant info for offline symbolication */
+ PrintBinaryImagesInfo(binaryImages);
+ CFRelease(binaryImages);
+
+finish:
+ if ((recs_addr != NULL) && (recs_count != 0)) {
+ kr = vm_deallocate(mach_task_self(), (vm_address_t) recs_addr, (vm_size_t) (recs_count * sizeof *recs));
+ if (kr != KERN_SUCCESS) {
+ fprintf(stderr, "call to vm_deallocate() failed: %s\n", mach_error_string(kr));
+ exit(1);
+ }
+ }
+ CSRelease(kernelSym);
+}
+
+static void list_zones_with_zlog_enabled(void)
+{
+ kern_return_t kr;
+ mach_zone_name_t *name = NULL;
+ unsigned int name_count = 0, i;
+
+ /* Get names for zones that have zone logging enabled */
+ kr = mach_zone_get_zlog_zones(mach_host_self(), &name, &name_count);
+ if (kr != KERN_SUCCESS) {
+ fprintf(stderr, "error: call to mach_zone_get_zlog_zones() failed: %s\n", mach_error_string(kr));
+ exit(1);
+ }
+
+ if (name_count == 0) {
+ printf("zlog not enabled for any zones.\n");
+ } else {
+ printf("zlog enabled for zones...\n");
+ }
+
+ for (i = 0; i < name_count; i++) {
+ print_zone_info(name[i].mzn_name);
+ }
+
+ if ((name != NULL) && (name_count != 0)) {
+ kr = vm_deallocate(mach_task_self(), (vm_address_t) name, (vm_size_t) (name_count * sizeof *name));
+ if (kr != KERN_SUCCESS) {
+ fprintf(stderr, "call to vm_deallocate() failed: %s\n", mach_error_string(kr));
+ exit(1);
+ }
+ }
+}
+
+#define VERSION_STRING "zlog output version: 1"
+
+int main(int argc, char *argv[])
+{
+ int c, topN = 0;
+ const char *zone_name = NULL;
+
+ /* Identifier string for SpeedTracer parsing */
+ printf("%s\n\n", VERSION_STRING);
+
+ if (argc == 1) {
+ /* default when no arguments are specified */
+ list_zones_with_zlog_enabled();
+ printf("Run 'zlog -h' for usage info.\n");
+ return 0;
+ }
+
+ while ((c = getopt(argc, argv, "tz:n:lh")) != -1) {
+ switch(c) {
+ case 't':
+ list_zones_with_zlog_enabled();
+ break;
+ case 'z':
+ zone_name = optarg;
+ break;
+ case 'n':
+ topN = atoi(optarg);
+ break;
+ case 'l':
+ topN = 1;
+ break;
+ case 'h':
+ usage(stdout, argv);
+ break;
+ case '?':
+ default:
+ usage(stderr, argv);
+ break;
+ }
+ }
+
+ if (optind < argc) {
+ usage(stderr, argv);
+ }
+
+ if (zone_name) {
+ print_zone_info(zone_name);
+ get_zone_btrecords(zone_name, topN);
+ } else {
+ /* -n or -l was specified without -z */
+ if (topN != 0) {
+ usage(stderr, argv);
+ }
+ }
+
+ return 0;
+}
&name, &nameCnt, &info, &infoCnt,
&wiredInfo, &wiredInfoCnt);
if (kr != KERN_SUCCESS) {
- fprintf(stderr, "%s: mach_zone_info: %s\n",
+ fprintf(stderr, "%s: mach_memory_info: %s (try running as root)\n",
program, mach_error_string(kr));
exit(1);
}
--- /dev/null
+require 'strict'
+
+-- # zprint
+--
+-- Parse the output of zprint into tables.
+
+local zprint = {}
+
+-- Return the lines inside "dashed" lines -- that is, lines that are entirely
+-- made up of dashes (-) in the string `str`. The `skip_dashed` argument
+-- controls how many dashed lines to skip before returning the lines between it
+-- and the next dashed line.
+local function lines_inside_dashes(str, skip_dashed)
+ local start_pos = 1
+ for _ = 1, skip_dashed do
+ _, start_pos = str:find('\n[-]+\n', start_pos)
+ end
+ assert(start_pos, 'found dashed line in output')
+ local end_pos, _ = str:find('\n[-]+\n', start_pos + 1)
+ assert(end_pos, 'found ending dashed line in output')
+
+ return str:sub(start_pos + 1, end_pos - 1)
+end
+
+-- Iterate through the zones listed in the given zprint(1) output `zpout`.
+--
+-- for zone in zprint_zones(io.stdin:read('*a')) do
+-- print(zone.name, zone.size, zone.used_size)
+-- end
+function zprint.zones(zpout)
+ -- Get to the first section delimited by dashes. This is where the zones are
+ -- recorded.
+ local zones = lines_inside_dashes(zpout, 1)
+
+ -- Create an iterator for each line, for use in our own iteration function.
+ local lines = zones:gmatch('([^\n]+)\n')
+
+ return function ()
+ -- Grab the next line.
+ local line = lines()
+ if not line then
+ return nil
+ end
+
+ -- Match each column from zprint's output.
+ local name, eltsz, cursz_kb, maxsz_kb, nelts, nelts_max, nused,
+ allocsz_kb = line:match(
+ '([%S]+)%s+(%d+)%s+(%d+)K%s+(%d+)K%s+(%d+)%s+(%d+)%s+(%d+)%s+(%d+)')
+ -- Convert numeric fields to numbers, and into bytes if specified in KiB.
+ eltsz = tonumber(eltsz)
+ local cursz = tonumber(cursz_kb) * 1024
+ local maxsz = tonumber(maxsz_kb) * 1024
+ local usedsz = tonumber(nused) * eltsz
+ local allocsz = tonumber(allocsz_kb) * 1024
+
+ -- Return a table representing the zone.
+ return {
+ name = name, -- the name of the zone
+ size = cursz, -- the size of the zone
+ max_size = maxsz, -- the maximum size of the zone
+ used_size = usedsz, -- the size of all used elements in the zone
+ element_size = eltsz, -- the size of each element in the zone
+ allocation_size = allocsz, -- the size of allocations made for the zone
+ }
+ end
+end
+
+-- Iterate through the tags listed in the given zprint(1) output `zpout`.
+function zprint.tags(zpout)
+ -- Get to the third zone delimited by dashes, where the tags are recorded.
+ local tags = lines_inside_dashes(zpout, 3)
+
+ local lines = tags:gmatch('([^\n]+)\n')
+
+ return function ()
+ local line = lines()
+ if not line then
+ return nil
+ end
+
+ -- Skip any unloaded kmod lines.
+ while line:match('(unloaded kmod)') do
+ line = lines()
+ end
+ -- End on the zone tags line, since it's not useful.
+ if line:match('zone tags') then
+ return nil
+ end
+
+ -- The line representing a region can take 4 different forms, depending on
+ -- the type of region. Check for each of them.
+
+ -- Check for 4 columns.
+ local name, maxsz_kb, cursz_kb = line:match(
+ '(%S+)%s+%d+%s+%d+%s+(%d+)K%s+(%d+)K$')
+ if not name then
+ -- Check for 3 columns.
+ name, maxsz_kb, cursz_kb = line:match('(%S+)%s+%d+%s+(%d+)K%s+(%d+)K$')
+ if not name then
+ -- Check for a two columns.
+ name, cursz_kb = line:match('(%S+)%s+%d+%s+(%d+)K')
+ if not name then
+ -- Check for a single column.
+ name, cursz_kb = line:match('(%S+)%s+(%d+)K')
+ end
+ end
+ end
+ -- Convert numeric fields to numbers and then into bytes.
+ local cursz = tonumber(cursz_kb) * 1024
+ local maxsz = maxsz_kb and (tonumber(maxsz_kb) * 1024)
+
+ -- Return a table representing the region.
+ return {
+ name = name,
+ size = cursz,
+ max_size = maxsz,
+ }
+ end
+end
+
+function zprint.total(zpout)
+ local total = zpout:match('total[^%d]+(%d+.%d+)M of')
+ local bytes = tonumber(total) * 1024 * 1024
+ return bytes
+end
+
+return zprint