diff --git a/libc/tools/gensyscalls.py b/libc/tools/gensyscalls.py
index 530e565..41c9500 100755
--- a/libc/tools/gensyscalls.py
+++ b/libc/tools/gensyscalls.py
@@ -31,7 +31,7 @@
 bionic_temp = "/tmp/bionic_gensyscalls/"
 
 # all architectures, update as you see fit
-all_archs = [ "arm", "x86" ]
+all_archs = [ "arm", "x86", "sh" ]
 
 def make_dir( path ):
     if not os.path.exists(path):
@@ -188,6 +188,62 @@
     .fnend
 """
 
+# SuperH assembler templates for each syscall stub
+#
+superh_header = """/* autogenerated by gensyscalls.py */
+#include <sys/linux-syscalls.h>
+
+    .text
+    .type %(fname)s, @function
+    .globl %(fname)s
+    .align 4
+
+%(fname)s:
+"""
+
+superh_call_default = """
+    /* invoke trap */
+    mov.l   0f, r3  /* trap num */
+    trapa   #(%(numargs)s + 0x10)
+
+    /* check return value */
+    cmp/pz  r0
+    bt      %(idname)s_end
+
+    /* keep error number */
+    sts.l   pr, @-r15
+    mov.l   1f, r1
+    jsr     @r1
+    mov     r0, r4
+    lds.l   @r15+, pr
+
+%(idname)s_end:
+    rts
+    nop
+
+    .align  2
+0:  .long   %(idname)s
+1:  .long   __set_syscall_errno
+"""
+
+superh_5args_header = """
+    /* get ready for additonal arg */
+    mov.l   @r15, r0
+"""
+
+superh_6args_header = """
+    /* get ready for additonal arg */
+    mov.l   @r15, r0
+    mov.l   @(4, r15), r1
+"""
+
+superh_7args_header = """
+    /* get ready for additonal arg */
+    mov.l   @r15, r0
+    mov.l   @(4, r15), r1
+    mov.l   @(8, r15), r2
+"""
+
 
 class State:
     def __init__(self):
@@ -285,6 +341,23 @@
         return thumb_call_default % t
 
 
+    def superh_genstub(self, fname, flags, idname):
+        numargs = int(flags)
+        t = { "fname"  : fname,
+              "idname" : idname,
+              "numargs" : numargs }
+        superh_call = superh_header
+        if flags:
+            if numargs == 5:
+                superh_call += superh_5args_header
+            if numargs == 6:
+                superh_call += superh_6args_header
+            if numargs == 7:
+                superh_call += superh_7args_header
+        superh_call += superh_call_default
+        return superh_call % t
+
+
     def process_file(self,input):
         parser = SysCallsTxtParser()
         parser.parse_file(input)
@@ -314,6 +387,9 @@
                 E("cid for dispatch syscalls is only supported for x86 in "
                   "'%s'" % syscall_name)
                 return
+            if t["id3"] >= 0:
+                t["asm-sh"] = self.superh_genstub(syscall_func,len(syscall_params),"__NR_"+syscall_name)
+
 
 
     def gen_NR_syscall(self,fp,name,id):
@@ -363,6 +439,20 @@
                 gen_syscalls[sc_name] = True
         fp.write( "#endif\n" );
 
+        # all superh-specific syscalls
+        fp.write( "\n#if defined(__SH3__) || defined(__SH4__) \n" );
+        for sc in self.syscalls:
+            sc_id  = sc["id"]
+            sc_id2 = sc["id2"]
+            sc_id3 = sc["id3"]
+            sc_name = sc["name"]
+            if sc_id2 != sc_id3 and sc_id3 >= 0:
+                self.gen_NR_syscall( fp, sc_name, sc_id3 )
+            else:
+                if sc_id != sc_id2 and sc_id2 >= 0:
+                    self.gen_NR_syscall( fp, sc_name, sc_id2 )
+        fp.write( "#endif\n" );
+
         fp.write( "\n#endif\n" )
         fp.write( "\n#endif /* _BIONIC_LINUX_SYSCALLS_H_ */\n" );
         fp.close()
@@ -395,7 +485,8 @@
         fp.write( "syscall_src := \n" )
         arch_test = {
             "arm": lambda x: x.has_key("asm-arm") or x.has_key("asm-thumb"),
-            "x86": lambda x: x.has_key("asm-x86")
+            "x86": lambda x: x.has_key("asm-x86"),
+            "sh": lambda x: x.has_key("asm-sh")
         }
 
         for sc in self.syscalls:
@@ -432,6 +523,14 @@
                 fp.close()
                 self.new_stubs.append( fname )
 
+            if sc.has_key("asm-sh"):
+                fname = "arch-sh/syscalls/%s.S" % sc["func"]
+                D( ">>> generating "+fname )
+                fp = create_file( fname )
+                fp.write(sc["asm-sh"])
+                fp.close()
+                self.new_stubs.append( fname )
+
 
     def  regenerate(self):
         D( "scanning for existing architecture-specific stub files" )
