Merge with git+ssh://master.kernel.org/pub/scm/libs/klibc/klibc.git
diff --git a/usr/include/arch/arm/klibc/asmmacros.h b/usr/include/arch/arm/klibc/asmmacros.h
new file mode 100644
index 0000000..4ed6149
--- /dev/null
+++ b/usr/include/arch/arm/klibc/asmmacros.h
@@ -0,0 +1,30 @@
+/*
+ * usr/include/arch/arm/klibc/asmmacros.h
+ *
+ * Assembly macros used by ARM system call stubs
+ */
+
+#ifndef _KLIBC_ASMMACROS_H
+#define _KLIBC_ASMMACROS_H
+
+/* An immediate in ARM can be any 8-bit value rotated by an even number of bits */
+
+#define ARM_VALID_IMM(x)	\
+	((((x) & ~0x000000ff) == 0) || \
+	 (((x) & ~0x000003fc) == 0) || \
+	 (((x) & ~0x00000ff0) == 0) || \
+	 (((x) & ~0x00003fc0) == 0) || \
+	 (((x) & ~0x0000ff00) == 0) || \
+	 (((x) & ~0x0003fc00) == 0) || \
+	 (((x) & ~0x000ff000) == 0) || \
+	 (((x) & ~0x003fc000) == 0) || \
+	 (((x) & ~0x00ff0000) == 0) || \
+	 (((x) & ~0x03fc0000) == 0) || \
+	 (((x) & ~0x0ff00000) == 0) || \
+	 (((x) & ~0x3fc00000) == 0) || \
+	 (((x) & ~0xff000000) == 0) || \
+	 (((x) & ~0xfc000003) == 0) || \
+	 (((x) & ~0xf000000f) == 0) || \
+	 (((x) & ~0xc000003f) == 0))
+	 
+#endif /* _KLIBC_ASMMACROS_H */
diff --git a/usr/kinit/initrd.c b/usr/kinit/initrd.c
index 2bc6c01..1371333 100644
--- a/usr/kinit/initrd.c
+++ b/usr/kinit/initrd.c
@@ -191,9 +191,9 @@
 		if (err)
 			fprintf(stderr, "%s: running linuxrc: %s\n", progname,
 				strerror(-err));
+		return 1;	/* initrd is root, or run_linuxrc took care of it */
 	} else {
 		DEBUG(("kinit: permament (or pivoting) initrd, not running linuxrc\n"));
+		return 0;	/* Mounting initrd as ordinary root */
 	}
-
-	return 1;		/* initrd is root, or run_linuxrc took care of it */
 }
diff --git a/usr/klibc/version b/usr/klibc/version
index 10e70bd..5574de9 100644
--- a/usr/klibc/version
+++ b/usr/klibc/version
@@ -1 +1 @@
-1.3.27
+1.3.28