#include #include #include #include #include #include #include #include static void *thread_func(void *arg) { kern_logf("started thread with arg %p", arg); errno = 100; return (void *)0xdeadbeef; } int main(int argc, const char *argv[], const char *envp[]) { sys_remote_set(SYS_REMOTE_NSD, 0, 0); kern_logf("herdd"); kern_logf("args:"); for (int i = 0; i < argc; i++) { kern_logf("[%d]: %s", i, argv[i]); } kern_logf("env:"); for (int i = 0; envp[i]; i++) { kern_logf("[%d]: %s", i, envp[i]); } kern_logf("self = %p", pthread_self()); errno = 200; #if 1 int dir = open("/", 0); if (dir >= 0) { kern_logf("opened '/'"); char buf[4096] = {0}; struct dentry *dent = (struct dentry *)buf; long len = getdents(dir, dent, sizeof buf); if (len < 0) { kern_logf("getdents failed (%s)", strerror(errno)); } else { for (long i = 0; i < len;) { dent = (struct dentry *)(buf + i); kern_logf(" - %s", dent->d_name); i += dent->d_reclen; } } close(dir); } else { kern_logf("open() failed: %s", strerror(errno)); } #endif pthread_t thread; pthread_create(&thread, NULL, thread_func, (void *)0xdeafcafe); kern_logf("started thread %p", thread); void *ret = NULL; pthread_join(thread, &ret); kern_logf("thread returned %p", ret); return 0; }