Merge with git+ssh://master.kernel.org/pub/scm/libs/klibc/klibc.git
diff --git a/usr/klibc/arch/x86_64/MCONFIG b/usr/klibc/arch/x86_64/MCONFIG
index 8edf343..edcd638 100644
--- a/usr/klibc/arch/x86_64/MCONFIG
+++ b/usr/klibc/arch/x86_64/MCONFIG
@@ -17,10 +17,10 @@
 KLIBCARCHREQFLAGS = -m64
 ifeq ($(DEBUG),y)
 KLIBCOPTFLAGS     = -Os -fomit-frame-pointer \
-		-falign-functions=0 -falign-jumps=0 -falign-loops=0
+		-falign-functions=1 -falign-jumps=1 -falign-loops=1
 else
 KLIBCOPTFLAGS     = -Os -fno-asynchronous-unwind-tables -fomit-frame-pointer \
-		-falign-functions=0 -falign-jumps=0 -falign-loops=0
+		-falign-functions=1 -falign-jumps=1 -falign-loops=1
 endif
 KLIBCBITSIZE      = 64
 KLIBCLDFLAGS      = -m elf_x86_64
diff --git a/usr/utils/Kbuild b/usr/utils/Kbuild
index b3b8d8a..75618cc 100644
--- a/usr/utils/Kbuild
+++ b/usr/utils/Kbuild
@@ -2,7 +2,7 @@
 # Kbuild file for klib utils
 #
 
-progs := chroot dd mkdir mkfifo mount pivot_root umount
+progs := chroot dd mkdir mkfifo mknod mount pivot_root umount
 progs += true false sleep ln nuke minips cat
 progs += insmod uname halt
 
@@ -18,6 +18,8 @@
 shared/mkdir-y      := mkdir.o file_mode.o
 static/mkfifo-y     := mkfifo.o file_mode.o
 shared/mkfifo-y     := mkfifo.o file_mode.o
+static/mknod-y      := mknod.o file_mode.o
+shared/mknod-y      := mknod.o file_mode.o
 static/mount-y      := mount_main.o mount_opts.o
 shared/mount-y      := mount_main.o mount_opts.o
 static/pivot_root-y := pivot_root.o
diff --git a/usr/utils/mknod.c b/usr/utils/mknod.c
new file mode 100644
index 0000000..1facda7
--- /dev/null
+++ b/usr/utils/mknod.c
@@ -0,0 +1,58 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <sys/stat.h>
+
+char *progname;
+
+static __noreturn usage(void)
+{
+	fprintf(stderr, "Usage: %s name {b|c} major minor\n", progname);
+	exit(1);
+}
+
+int main(int argc, char *argv[], char *envp[])
+{
+	char *name = NULL, *endp;
+	unsigned int major, minor;
+	mode_t mode;
+	dev_t dev;
+
+	progname = argv[0];
+	if (argc != 5)
+		usage();
+
+	name = argv[1];
+	if (!name) {
+		perror("device");
+		usage();
+	}
+
+	mode = 0666;
+	if (argv[2][0] == 'c')
+		mode |= S_IFCHR;
+	else if (argv[2][0] == 'b')
+		mode |= S_IFBLK;
+	else {
+		perror("block or char devices.");
+		usage();
+	}
+
+	major = strtol(argv[3], &endp, 0);
+	if (*endp != '\0') {
+		perror("major.");
+		usage();
+	}
+	minor = strtol(argv[4], &endp, 0);
+	if (*endp != '\0') {
+		perror("minor.");
+		usage();
+	}
+	dev = makedev(major, minor);
+
+	if (mknod(name, mode, dev) == -1) {
+		perror("mknod");
+		exit(1);
+	}
+
+	exit(0);
+}