fa/scripts/syscalls.py
Ari Archer 8febe3ddf7
Improve syscall mapping generation
Signed-off-by: Ari Archer <ari.web.xyz@gmail.com>
2022-06-27 23:45:14 +03:00

49 lines
1.2 KiB
Python
Executable file

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""Convert linux syscall table mapping
to fa language macros"""
import sys
from typing import List, Tuple
from warnings import filterwarnings as filter_warnings
def main() -> int:
"""Entry/main function"""
syscall_gen: List[Tuple[str, str]] = []
biggest_sysf_len: int = 0
for line in sys.stdin.readlines():
if line.startswith("#") or not line.strip():
continue
sys_num, sys_abi, sys_name = line.split()[:3]
sys_fullname: str = f"SYS_{sys_name}"
if sys_abi == "x32": # Legacy ABI
continue
_sys_fullname_len: int = len(sys_fullname)
if _sys_fullname_len > biggest_sysf_len:
biggest_sysf_len = _sys_fullname_len
syscall_gen.append((sys_num, sys_fullname))
for syscall_num, syscall_name in syscall_gen:
print(
f"macro {syscall_name} \
{' ' * (biggest_sysf_len - len(syscall_name))}{syscall_num} \
{' ' * (len(sys_num) - len(syscall_num))}end"
)
return 0
if __name__ == "__main__":
assert main.__annotations__.get("return") is int, "main() should return an integer"
filter_warnings("error", category=Warning)
sys.exit(main())