syscall: reformat and fix exit() for signed integers

master
Anton Lydike 1 year ago
parent 283bb1ae14
commit 41d17daeaf

@ -31,12 +31,12 @@ class.
""" """
ADDITIONAL_SYMBOLS = { ADDITIONAL_SYMBOLS = {
'MAP_PRIVATE': 1<<0, "MAP_PRIVATE": 1 << 0,
'MAP_SHARED': 1<<1, "MAP_SHARED": 1 << 1,
'MAP_ANON': 1<<2, "MAP_ANON": 1 << 2,
'MAP_ANONYMOUS': 1<<2, "MAP_ANONYMOUS": 1 << 2,
'PROT_READ': 1<<0, "PROT_READ": 1 << 0,
'PROT_WRITE': 1<<1, "PROT_WRITE": 1 << 1,
} }
""" """
A set of additional symbols that are used by various syscalls. A set of additional symbols that are used by various syscalls.
@ -80,7 +80,9 @@ def get_syscall_symbols():
:return: dictionary of all syscall symbols (SCALL_<name> -> id) :return: dictionary of all syscall symbols (SCALL_<name> -> id)
""" """
items: Dict[str, int] = {("SCALL_" + name.upper()): num for num, name in SYSCALLS.items()} items: Dict[str, int] = {
("SCALL_" + name.upper()): num for num, name in SYSCALLS.items()
}
items.update(ADDITIONAL_SYMBOLS) items.update(ADDITIONAL_SYMBOLS)
@ -239,7 +241,7 @@ class SyscallInterface:
Exit syscall. Exits the system with status code a0 Exit syscall. Exits the system with status code a0
""" """
scall.cpu.halted = True scall.cpu.halted = True
scall.cpu.exit_code = scall.cpu.regs.get("a0").value scall.cpu.exit_code = scall.cpu.regs.get("a0").signed().value
def mmap2(self, scall: Syscall): def mmap2(self, scall: Syscall):
""" """
@ -255,10 +257,10 @@ class SyscallInterface:
fd = <ignored> fd = <ignored>
off_t = <ignored> off_t = <ignored>
""" """
addr = scall.cpu.regs.get('a0').unsigned_value addr = scall.cpu.regs.get("a0").unsigned_value
size = scall.cpu.regs.get('a1').unsigned_value size = scall.cpu.regs.get("a1").unsigned_value
prot = scall.cpu.regs.get('a2').unsigned_value prot = scall.cpu.regs.get("a2").unsigned_value
flags = scall.cpu.regs.get('a3').unsigned_value flags = scall.cpu.regs.get("a3").unsigned_value
# error out if prot is not 1 or 3: # error out if prot is not 1 or 3:
# 1 = PROT_READ # 1 = PROT_READ
@ -270,11 +272,11 @@ class SyscallInterface:
size = 4096 * ceil(size / 4096) size = 4096 * ceil(size / 4096)
section = BinaryDataMemorySection( section = BinaryDataMemorySection(
bytearray(size), bytearray(size),
'.data.runtime-allocated', ".data.runtime-allocated",
None, None,
'system', "system",
base=addr, base=addr,
flags=MemoryFlags(read_only=prot != 3, executable=False) flags=MemoryFlags(read_only=prot != 3, executable=False),
) )
# try to insert section # try to insert section

Loading…
Cancel
Save