diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py
index a39b63b..5e519de 100755
--- a/libc/tools/gensyscalls.py
+++ b/libc/tools/gensyscalls.py
@@ -10,12 +10,6 @@
 
 from bionic_utils import *
 
-# set this to 1 if you want to generate thumb stubs
-gen_thumb_stubs = 0
-
-# set this to 1 if you want to generate ARM EABI stubs
-gen_eabi_stubs = 1
-
 # get the root Bionic directory, simply this script's dirname
 #
 bionic_root = find_bionic_root()
@@ -32,7 +26,7 @@
 bionic_temp = "/tmp/bionic_gensyscalls/"
 
 # all architectures, update as you see fit
-all_archs = [ "arm", "x86", "mips" ]
+all_archs = [ "arm", "mips", "x86" ]
 
 def make_dir( path ):
     path = os.path.abspath(path)
@@ -47,6 +41,7 @@
     make_dir(dir)
     return open( bionic_temp + relpath, "w" )
 
+#
 # x86 assembler templates for each syscall stub
 #
 
@@ -75,8 +70,10 @@
 END(%(fname)s)
 """
 
+#
 # ARM assembler templates for each syscall stub
 #
+
 arm_header = """/* autogenerated by gensyscalls.py */
 #include <machine/asm.h>
 #include <sys/linux-syscalls.h>
@@ -84,29 +81,6 @@
 ENTRY(%(fname)s)
 """
 
-arm_footer = """\
-END(%(fname)s)
-"""
-
-arm_call_default = arm_header + """\
-    swi   #%(idname)s
-    movs    r0, r0
-    bxpl    lr
-    b       __set_syscall_errno
-""" + arm_footer
-
-arm_call_long = arm_header + """\
-    .save   {r4, r5, lr}
-    stmfd   sp!, {r4, r5, lr}
-    ldr     r4, [sp, #12]
-    ldr     r5, [sp, #16]
-    swi     # %(idname)s
-    ldmfd   sp!, {r4, r5, lr}
-    movs    r0, r0
-    bxpl    lr
-    b       __set_syscall_errno
-""" + arm_footer
-
 arm_eabi_call_default = arm_header + """\
     mov     ip, r7
     ldr     r7, =%(idname)s
@@ -115,7 +89,8 @@
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
-""" + arm_footer
+END(%(fname)s)
+"""
 
 arm_eabi_call_long = arm_header + """\
     mov     ip, sp
@@ -128,61 +103,13 @@
     movs    r0, r0
     bxpl    lr
     b       __set_syscall_errno
-""" + arm_footer
+END(%(fname)s)
+"""
 
-# ARM thumb assembler templates for each syscall stub
 #
-thumb_header = """/* autogenerated by gensyscalls.py */
-    .text
-    .type %(fname)s, #function
-    .globl %(fname)s
-    .align 4
-    .thumb_func
-    .fnstart
-
-#define  __thumb__
-#include <sys/linux-syscalls.h>
-
-
-%(fname)s:
-"""
-
-thumb_call_default = thumb_header + """\
-    .save   {r7,lr}
-    push    {r7,lr}
-    ldr     r7, =%(idname)s
-    swi     #0
-    tst     r0, r0
-    bmi     1f
-    pop     {r7,pc}
-1:
-    neg     r0, r0
-    ldr     r1, =__set_errno
-    blx     r1
-    pop     {r7,pc}
-    .fnend
-"""
-
-thumb_call_long = thumb_header + """\
-    .save  {r4,r5,r7,lr}
-    push   {r4,r5,r7,lr}
-    ldr    r4, [sp,#16]
-    ldr    r5, [sp,#20]
-    ldr    r7, =%(idname)s
-    swi    #0
-    tst    r0, r0
-    bmi    1f
-    pop    {r4,r5,r7,pc}
-1:
-    neg    r0, r0
-    ldr    r1, =__set_errno
-    blx    r1
-    pop    {r4,r5,r7,pc}
-    .fnend
-"""
-
 # mips assembler templates for each syscall stub
 #
+
 mips_call = """/* autogenerated by gensyscalls.py */
 #include <sys/linux-syscalls.h>
     .text
@@ -229,7 +156,7 @@
 
 def count_arm_param_registers(params):
     """This function is used to count the number of register used
-       to pass parameters when invoking a thumb or ARM system call.
+       to pass parameters when invoking an ARM system call.
        This is because the ARM EABI mandates that 64-bit quantities
        must be passed in an even+odd register pair. So, for example,
        something like:
@@ -326,15 +253,6 @@
         result += x86_return % t
         return result
 
-    def arm_genstub(self,fname, flags, idname):
-        t = { "fname"  : fname,
-              "idname" : idname }
-        if flags:
-            numargs = int(flags)
-            if numargs > 4:
-                return arm_call_long % t
-        return arm_call_default % t
-
 
     def arm_eabi_genstub(self,fname, flags, idname):
         t = { "fname"  : fname,
@@ -346,15 +264,6 @@
         return arm_eabi_call_default % t
 
 
-    def thumb_genstub(self,fname, flags, idname):
-        t = { "fname"  : fname,
-              "idname" : idname }
-        if flags:
-            numargs = int(flags)
-            if numargs > 4:
-                return thumb_call_long % t
-        return thumb_call_default % t
-
     def mips_genstub(self,fname, idname):
         t = { "fname"  : fname,
               "idname" : idname }
@@ -373,13 +282,7 @@
 
             if t["common"] >= 0 or t["armid"] >= 0:
                 num_regs = count_arm_param_registers(syscall_params)
-                if gen_thumb_stubs:
-                    t["asm-thumb"] = self.thumb_genstub(syscall_func,num_regs,"__NR_"+syscall_name)
-                else:
-                    if gen_eabi_stubs:
-                        t["asm-arm"]   = self.arm_eabi_genstub(syscall_func,num_regs,"__NR_"+syscall_name)
-                    else:
-                        t["asm-arm"]   = self.arm_genstub(syscall_func,num_regs,"__NR_"+syscall_name)
+                t["asm-arm"] = self.arm_eabi_genstub(syscall_func,num_regs,"__NR_"+syscall_name)
 
             if t["common"] >= 0 or t["x86id"] >= 0:
                 num_regs = count_generic_param_registers(syscall_params)
@@ -391,6 +294,7 @@
                 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)
 
@@ -464,7 +368,7 @@
         fp.write( "# auto-generated by gensyscalls.py, do not touch\n" )
         fp.write( "syscall_src := \n" )
         arch_test = {
-            "arm": lambda x: x.has_key("asm-arm") or x.has_key("asm-thumb"),
+            "arm": lambda x: x.has_key("asm-arm"),
             "x86": lambda x: x.has_key("asm-x86"),
             "mips": lambda x: x.has_key("asm-mips")
         }
@@ -488,14 +392,6 @@
                 fp.close()
                 self.new_stubs.append( fname )
 
-            if sc.has_key("asm-thumb") and 'arm' in all_archs:
-                fname = "arch-arm/syscalls/%s.S" % sc["func"]
-                D2( ">>> generating "+fname )
-                fp = create_file( fname )
-                fp.write(sc["asm-thumb"])
-                fp.close()
-                self.new_stubs.append( fname )
-
             if sc.has_key("asm-x86") and 'x86' in all_archs:
                 fname = "arch-x86/syscalls/%s.S" % sc["func"]
                 D2( ">>> generating "+fname )
