diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py
index 26cf3a5..2e87e03 100755
--- a/libc/tools/gensyscalls.py
+++ b/libc/tools/gensyscalls.py
@@ -76,9 +76,9 @@
 #
 
 arm_header = """/* autogenerated by gensyscalls.py */
+#include <asm/unistd.h>
 #include <linux/err.h>
 #include <machine/asm.h>
-#include <sys/linux-syscalls.h>
 
 ENTRY(%(fname)s)
 """
@@ -191,6 +191,14 @@
             count += 1
     return count
 
+# This lets us support regular system calls like __NR_write and also weird
+# ones like __ARM_NR_cacheflush, where the NR doesn't come at the start.
+def make__NR_name(name):
+    if name.startswith("__"):
+        return name
+    else:
+        return "__NR_%s" % (name)
+
 class State:
     def __init__(self):
         self.old_stubs = []
@@ -286,25 +294,25 @@
 
             if t["common"] >= 0 or t["armid"] >= 0:
                 num_regs = count_arm_param_registers(syscall_params)
-                t["asm-arm"] = self.arm_eabi_genstub(syscall_func,num_regs,"__NR_"+syscall_name)
+                t["asm-arm"] = self.arm_eabi_genstub(syscall_func, num_regs, make__NR_name(syscall_name))
 
             if t["common"] >= 0 or t["x86id"] >= 0:
                 num_regs = count_generic_param_registers(syscall_params)
                 if t["cid"] >= 0:
-                    t["asm-x86"] = self.x86_genstub_cid(syscall_func, num_regs, "__NR_"+syscall_name, t["cid"])
+                    t["asm-x86"] = self.x86_genstub_cid(syscall_func, num_regs, make__NR_name(syscall_name), t["cid"])
                 else:
-                    t["asm-x86"] = self.x86_genstub(syscall_func, num_regs, "__NR_"+syscall_name)
+                    t["asm-x86"] = self.x86_genstub(syscall_func, num_regs, make__NR_name(syscall_name))
             elif t["cid"] >= 0:
                 E("cid for dispatch syscalls is only supported for x86 in "
                   "'%s'" % syscall_name)
                 return
 
             if t["common"] >= 0 or t["mipsid"] >= 0:
-                t["asm-mips"] = self.mips_genstub(syscall_func,"__NR_"+syscall_name)
+                t["asm-mips"] = self.mips_genstub(syscall_func, make__NR_name(syscall_name))
 
 
     def gen_NR_syscall(self, linux_fp, name, id):
-        linux_fp.write("#define __NR_%-25s    (__NR_SYSCALL_BASE + %d)\n" % (name,id))
+        linux_fp.write("#define %-30s    (__NR_SYSCALL_BASE + %d)\n" % (make__NR_name(name),id))
 
 
     def scan_linux_unistd_h(self, fp, path):
@@ -315,10 +323,11 @@
             if m:
                 syscalls.add(m.group(1))
         for syscall in sorted(syscalls):
-            fp.write("#define SYS_%s __NR_%s\n" % (syscall, syscall))
+            fp.write("#define SYS_%s %s\n" % (syscall, make__NR_name(syscall)))
 
 
     def gen_linux_syscalls_h(self):
+        # TODO: generate a separate file for each architecture, like glibc's bits/syscall.h.
         glibc_syscalls_h_path = "include/sys/glibc-syscalls.h"
         glibc_fp = create_file(glibc_syscalls_h_path)
         glibc_fp.write("/* Auto-generated by gensyscalls.py; do not edit. */\n")
@@ -337,6 +346,7 @@
         glibc_fp.close()
         self.other_files.append(glibc_syscalls_h_path)
 
+        # TODO: stop generating this. it's useless.
         linux_syscalls_h_path = "include/sys/linux-syscalls.h"
         D("generating " + linux_syscalls_h_path)
         fp = create_file(linux_syscalls_h_path)
@@ -344,9 +354,8 @@
         fp.write( "#ifndef _BIONIC_LINUX_SYSCALLS_H_\n" )
         fp.write( "#define _BIONIC_LINUX_SYSCALLS_H_\n\n" )
         fp.write( "#if !defined __ASM_ARM_UNISTD_H && !defined __ASM_I386_UNISTD_H && !defined __ASM_MIPS_UNISTD_H\n" )
-        fp.write( "#if defined __arm__ && !defined __ARM_EABI__ && !defined __thumb__\n" )
-        fp.write( "  #  define __NR_SYSCALL_BASE 0x900000\n" )
-        fp.write( "#elif defined(__mips__)\n" )
+
+        fp.write( "#if defined(__mips__)\n" )
         fp.write( "  #  define __NR_SYSCALL_BASE 4000\n" )
         fp.write( "#else\n" )
         fp.write( "  #  define __NR_SYSCALL_BASE 0\n" )
