Make it easier to add syscalls for another architecture.
Much of the per-architecture duplication can be removed, so let's do so
before we add the 64-bit architectures.
Change-Id: Ieb796503c8e5353ea38c3bab768bb9a690c9a767
diff --git a/libc/tools/bionic_utils.py b/libc/tools/bionic_utils.py
index baa41be..eed9001 100644
--- a/libc/tools/bionic_utils.py
+++ b/libc/tools/bionic_utils.py
@@ -2,9 +2,7 @@
import sys, os, commands, string
-# support Bionic architectures, add new ones as appropriate
-#
-bionic_archs = [ "arm", "x86", "mips" ]
+all_arches = [ "arm", "mips", "x86" ]
# basic debugging trace support
# call D_setlevel to set the verbosity level
@@ -51,7 +49,7 @@
""" parse a syscall spec line.
line processing, format is
- return type func_name[:syscall_name[:call_id]] ( [paramlist] ) architecture_list
+ return type func_name[:syscall_name[:socketcall_id]] ( [paramlist] ) architecture_list
"""
pos_lparen = line.find('(')
E = self.E
@@ -71,7 +69,7 @@
syscall_func = return_type[-1]
return_type = string.join(return_type[:-1],' ')
- call_id = -1
+ socketcall_id = -1
pos_colon = syscall_func.find(':')
if pos_colon < 0:
@@ -81,7 +79,7 @@
E("misplaced colon in '%s'" % line)
return
- # now find if there is a call_id for a dispatch-type syscall
+ # now find if there is a socketcall_id for a dispatch-type syscall
# after the optional 2nd colon
pos_colon2 = syscall_func.find(':', pos_colon + 1)
if pos_colon2 < 0:
@@ -92,7 +90,7 @@
E("misplaced colon2 in '%s'" % line)
return
syscall_name = syscall_func[(pos_colon+1):pos_colon2]
- call_id = int(syscall_func[pos_colon2+1:])
+ socketcall_id = int(syscall_func[pos_colon2+1:])
syscall_func = syscall_func[:pos_colon]
if pos_rparen > pos_lparen+1:
@@ -102,51 +100,35 @@
syscall_params = []
params = "void"
+ t = {
+ "name" : syscall_name,
+ "func" : syscall_func,
+ "params" : syscall_params,
+ "decl" : "%-15s %s (%s);" % (return_type, syscall_func, params),
+ "socketcall_id" : socketcall_id
+ }
+
# Parse the architecture list.
- syscall_common = -1
- syscall_arm = -1
- syscall_x86 = -1
- syscall_mips = -1
arch_list = line[pos_rparen+1:].strip()
if arch_list == "custom":
pass
elif arch_list == "all":
- syscall_common = 1
+ for arch in all_arches:
+ t[arch] = True
else:
for arch in string.split(arch_list, ','):
- if arch == "arm":
- syscall_arm = 1
- elif arch == "x86":
- syscall_x86 = 1
- elif arch == "mips":
- syscall_mips = 1
+ if arch in all_arches:
+ t[arch] = True
else:
E("invalid syscall architecture list in '%s'" % line)
return
+ self.syscalls.append(t)
+
global verbose
if verbose >= 2:
- if call_id == -1:
- if syscall_common == -1:
- print "%s: %d,%d,%d" % (syscall_name, syscall_arm, syscall_x86, syscall_mips)
- else:
- print "%s: %d" % (syscall_name, syscall_common)
- else:
- if syscall_common == -1:
- print "%s(%d): %d,%d,%d" % (syscall_name, call_id, syscall_arm, syscall_x86, syscall_mips)
- else:
- print "%s(%d): %d" % (syscall_name, call_id, syscall_common)
+ print t
- t = { "armid" : syscall_arm,
- "x86id" : syscall_x86,
- "mipsid" : syscall_mips,
- "common" : syscall_common,
- "cid" : call_id,
- "name" : syscall_name,
- "func" : syscall_func,
- "params" : syscall_params,
- "decl" : "%-15s %s (%s);" % (return_type, syscall_func, params) }
- self.syscalls.append(t)
def parse_file(self, file_path):
D2("parse_file: %s" % file_path)