summaryrefslogtreecommitdiffstats
path: root/libc/tools/bionic_utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'libc/tools/bionic_utils.py')
-rw-r--r--libc/tools/bionic_utils.py23
1 files changed, 21 insertions, 2 deletions
diff --git a/libc/tools/bionic_utils.py b/libc/tools/bionic_utils.py
index feb1561..65ff042 100644
--- a/libc/tools/bionic_utils.py
+++ b/libc/tools/bionic_utils.py
@@ -136,6 +136,11 @@ class SysCallsTxtParser:
print "%d: %s" % (self.lineno, msg)
def parse_line(self, line):
+ """ parse a syscall spec line.
+
+ line processing, format is
+ return type func_name[:syscall_name[:call_id]] ( [paramlist] ) (syscall_number[,syscall_number_x86])|stub
+ """
pos_lparen = line.find('(')
E = self.E
if pos_lparen < 0:
@@ -154,6 +159,7 @@ class SysCallsTxtParser:
syscall_func = return_type[-1]
return_type = string.join(return_type[:-1],' ')
+ call_id = -1
pos_colon = syscall_func.find(':')
if pos_colon < 0:
@@ -162,8 +168,20 @@ class SysCallsTxtParser:
if pos_colon == 0 or pos_colon+1 >= len(syscall_func):
E("misplaced colon in '%s'" % line)
return
- syscall_name = syscall_func[pos_colon+1:]
- syscall_func = syscall_func[:pos_colon]
+
+ # now find if there is a call_id for a dispatch-type syscall
+ # after the optional 2nd colon
+ pos_colon2 = syscall_func.find(':', pos_colon + 1)
+ if pos_colon2 < 0:
+ syscall_name = syscall_func[pos_colon+1:]
+ syscall_func = syscall_func[:pos_colon]
+ else:
+ if pos_colon2+1 >= len(syscall_func):
+ E("misplaced colon2 in '%s'" % line)
+ return
+ syscall_name = syscall_func[(pos_colon+1):pos_colon2]
+ call_id = int(syscall_func[pos_colon2+1:])
+ syscall_func = syscall_func[:pos_colon]
if pos_rparen > pos_lparen+1:
syscall_params = line[pos_lparen+1:pos_rparen].split(',')
@@ -191,6 +209,7 @@ class SysCallsTxtParser:
t = { "id" : syscall_id,
"id2" : syscall_id2,
+ "cid" : call_id,
"name" : syscall_name,
"func" : syscall_func,
"params" : syscall_params,