diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py
index 389177e..aaa3de3 100755
--- a/libc/tools/gensyscalls.py
+++ b/libc/tools/gensyscalls.py
@@ -303,27 +303,18 @@
                 t["asm-mips"] = self.mips_genstub(syscall_func,"__NR_"+syscall_name)
 
 
-    def gen_NR_syscall(self, fp, name, id):
-        fp.write("#define __NR_%-25s    (__NR_SYSCALL_BASE + %d)\n" % (name,id))
-
-
-    def gen_glibc_syscalls_h(self):
-        glibc_syscalls_h_path = "include/sys/glibc-syscalls.h"
-        all_syscall_names = set()
-        for sc in self.syscalls:
-            all_syscall_names.add(sc["name"])
-        fp = create_file(glibc_syscalls_h_path)
-        fp.write("/* Auto-generated by gensyscalls.py; do not edit. */\n")
-        fp.write("#ifndef _BIONIC_GLIBC_SYSCALLS_H_\n")
-        fp.write("#define _BIONIC_GLIBC_SYSCALLS_H_\n")
-        for syscall_name in sorted(all_syscall_names):
-            fp.write("#define SYS_%-25s __NR_%s\n" % (syscall_name, syscall_name))
-        fp.write("#endif\n")
-        fp.close()
-        self.other_files.append(glibc_syscalls_h_path)
+    def gen_NR_syscall(self, glibc_fp, linux_fp, name, id):
+        linux_fp.write("#define __NR_%-25s    (__NR_SYSCALL_BASE + %d)\n" % (name,id))
+        glibc_fp.write("#define SYS_%-25s __NR_%s\n" % (name, name))
 
 
     def gen_linux_syscalls_h(self):
+        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")
+        glibc_fp.write("#ifndef _BIONIC_GLIBC_SYSCALLS_H_\n")
+        glibc_fp.write("#define _BIONIC_GLIBC_SYSCALLS_H_\n")
+
         linux_syscalls_h_path = "include/sys/linux-syscalls.h"
         D("generating " + linux_syscalls_h_path)
         fp = create_file(linux_syscalls_h_path)
@@ -344,39 +335,50 @@
             sc_id  = sc["common"]
             sc_name = sc["name"]
             if sc_id >= 0:
-                self.gen_NR_syscall(fp, sc_name, sc_id)
+                self.gen_NR_syscall(glibc_fp, fp, sc_name, sc_id)
 
         # now, all arm-specific syscalls
-        fp.write( "\n#ifdef __arm__\n" );
+        fp.write("\n#ifdef __arm__\n")
+        glibc_fp.write( "\n#ifdef __arm__\n")
         for sc in self.syscalls:
             sc_id  = sc["armid"]
             sc_name = sc["name"]
             if sc_id >= 0:
-                self.gen_NR_syscall(fp, sc_name, sc_id)
-        fp.write( "#endif\n" );
+                self.gen_NR_syscall(glibc_fp, fp, sc_name, sc_id)
+        fp.write("#endif\n")
+        glibc_fp.write("#endif\n")
 
         gen_syscalls = {}
-        # finally, all i386-specific syscalls
-        fp.write( "\n#ifdef __i386__\n" );
+        # all i386-specific syscalls
+        fp.write("\n#ifdef __i386__\n")
+        glibc_fp.write("\n#ifdef __i386__\n")
         for sc in sorted(self.syscalls,key=lambda x:x["x86id"]):
             sc_id  = sc["x86id"]
             sc_name = sc["name"]
             if sc_id >= 0 and sc_name not in gen_syscalls:
-                self.gen_NR_syscall(fp, sc_name, sc_id)
+                self.gen_NR_syscall(glibc_fp, fp, sc_name, sc_id)
                 gen_syscalls[sc_name] = True
-        fp.write( "#endif\n" );
+        fp.write("#endif\n")
+        glibc_fp.write("#endif\n")
 
         # all mips-specific syscalls
-        fp.write( "\n#ifdef __mips__\n" );
+        fp.write("\n#ifdef __mips__\n")
+        glibc_fp.write("\n#ifdef __mips__\n")
         for sc in sorted(self.syscalls,key=lambda x:x["mipsid"]):
             sc_id = sc["mipsid"]
             if sc_id >= 0:
-                self.gen_NR_syscall(fp, sc["name"], sc_id)
+                self.gen_NR_syscall(glibc_fp, fp, sc["name"], sc_id)
         fp.write( "#endif\n" );
+        glibc_fp.write( "#endif\n" );
 
         fp.write( "\n#endif\n" )
         fp.write( "\n#endif /* _BIONIC_LINUX_SYSCALLS_H_ */\n" );
         fp.close()
+
+        glibc_fp.write("#endif\n")
+        glibc_fp.close()
+
+        self.other_files.append(glibc_syscalls_h_path)
         self.other_files.append(linux_syscalls_h_path)
 
 
@@ -448,7 +450,6 @@
 
         D( "re-generating stubs and support files" )
 
-        self.gen_glibc_syscalls_h()
         self.gen_linux_syscalls_h()
         for arch in all_archs:
             self.gen_arch_syscalls_mk(arch)
