def write_syscallname_arch(f): f.write( "template <typename Arch> static std::string syscallname_arch(int syscall);\n" ) f.write("\n") for specializer, arch in [("X86Arch", "x86"), ("X64Arch", "x64")]: f.write( "template <> std::string syscallname_arch<%s>(int syscall) {\n" % specializer) f.write(" switch (syscall) {\n") def write_case(name): f.write( " case %(specializer)s::%(syscall)s: return \"%(syscall)s\";\n" % { 'specializer': specializer, 'syscall': name }) for name, _ in syscalls.for_arch(arch): write_case(name) f.write(" default: {") f.write(" char buf[100];") f.write(" sprintf(buf, \"<unknown-syscall-%d>\", syscall);") f.write(" return buf;\n") f.write(" }\n") f.write(" }\n") f.write("}\n") f.write("\n")
def write_syscall_defs_table(f): for specializer, arch in [("X86Arch", "x86"), ("X64Arch", "x64")]: f.write("template<> syscall_defs<%s>::Table syscall_defs<%s>::table = {\n" % (specializer, specializer)) arch_syscalls = sorted(syscalls.for_arch(arch), key=lambda x: getattr(x[1], arch)) for name, obj in arch_syscalls: if isinstance(obj, syscalls.RegularSyscall): f.write(" { %s::%s, { rep_%s } },\n" % (specializer, name, obj.semantics)) elif isinstance(obj, (syscalls.IrregularSyscall, syscalls.RestartSyscall)): f.write(" { %s::%s, { rep_EMU } },\n" % (specializer, name)) elif isinstance(obj, syscalls.UnsupportedSyscall): pass f.write("};\n") f.write("\n")
def write_syscallname_arch(f): f.write("template <typename Arch> static const char* syscallname_arch(int syscall);\n") f.write("\n"); for specializer, arch in [("X86Arch", "x86"), ("X64Arch", "x64")]: f.write("template <> const char* syscallname_arch<%s>(int syscall) {\n" % specializer) f.write(" switch (syscall) {\n"); def write_case(name): f.write(" case %(specializer)s::%(syscall)s: return \"%(syscall)s\";\n" % { 'specializer': specializer, 'syscall': name }) for name, _ in syscalls.for_arch(arch): write_case(name) f.write(" default: return \"<unknown-syscall>\";\n") f.write(" }\n") f.write("}\n") f.write("\n")
def write_syscall_defs_table(f): for specializer, arch in [("X86Arch", "x86"), ("X64Arch", "x64")]: f.write("template<> syscall_defs<%s>::Table syscall_defs<%s>::table = {\n" % (specializer, specializer)) arch_syscalls = sorted(syscalls.for_arch(arch), key=lambda x: getattr(x[1], arch)) for name, obj in arch_syscalls: if isinstance(obj, syscalls.RegularSyscall): recorded_args = [ arg for arg in syscalls.RegularSyscall.ARGUMENT_SLOTS if getattr(obj, arg, None) is not None ] f.write(" { %s::%s, { rep_%s, %d } },\n" % (specializer, name, obj.semantics, len(recorded_args))) elif isinstance(obj, (syscalls.IrregularSyscall, syscalls.RestartSyscall)): f.write(" { %s::%s, { rep_IRREGULAR, -1 } },\n" % (specializer, name)) elif isinstance(obj, syscalls.UnsupportedSyscall): pass f.write("};\n") f.write("\n")
def write_syscallname_arch(f, arch): f.write("// This file has been autogenerated. DO NOT MODIFY!\n") f.write("pub fn syscallname_arch(syscall: i32) -> String {\n") f.write(" match syscall {\n") def write_case(name): f.write(" %(syscall_upper)s => \"%(syscall)s\".into(),\n" % { 'syscall_upper': name.upper(), 'syscall': name }) for name, _ in syscalls.for_arch(arch): write_case(name) f.write(" _ => format!(\"<unknown-syscall-{}>\", syscall),\n") f.write(" }\n") f.write("}\n") f.write("\n")
def write_syscall_defs_table(f): for specializer, arch in [("X86Arch", "x86"), ("X64Arch", "x64")]: f.write( "template<> syscall_defs<%s>::Table syscall_defs<%s>::table = {\n" % (specializer, specializer)) arch_syscalls = sorted(syscalls.for_arch(arch), key=lambda x: getattr(x[1], arch)) for name, obj in arch_syscalls: if isinstance(obj, syscalls.RegularSyscall): f.write(" { %s::%s, { rep_%s } },\n" % (specializer, name, obj.semantics)) elif isinstance( obj, (syscalls.IrregularSyscall, syscalls.RestartSyscall)): f.write(" { %s::%s, { rep_EMU } },\n" % (specializer, name)) elif isinstance(obj, syscalls.UnsupportedSyscall): pass f.write("};\n") f.write("\n")
def write_syscallname_arch(f): f.write("template <typename Arch> static std::string syscallname_arch(int syscall);\n") f.write("\n"); for specializer, arch in [("X86Arch", "x86"), ("X64Arch", "x64")]: f.write("template <> std::string syscallname_arch<%s>(int syscall) {\n" % specializer) f.write(" switch (syscall) {\n"); def write_case(name): f.write(" case %(specializer)s::%(syscall)s: return \"%(syscall)s\";\n" % { 'specializer': specializer, 'syscall': name }) for name, _ in syscalls.for_arch(arch): write_case(name) f.write(" default: {") f.write(" char buf[100];") f.write(" sprintf(buf, \"<unknown-syscall-%d>\", syscall);") f.write(" return buf;\n") f.write(" }\n") f.write(" }\n") f.write("}\n") f.write("\n")
def write_syscallname_arch(f): f.write("template <typename Arch> static const char* syscallname_arch(int syscall);\n") f.write("\n") for specializer, arch in [("X86Arch", "x86"), ("X64Arch", "x64")]: f.write("template <> const char* syscallname_arch<%s>(int syscall) {\n" % specializer) f.write(" switch (syscall) {\n") def write_case(name): f.write( ' case %(specializer)s::%(syscall)s: return "%(syscall)s";\n' % {"specializer": specializer, "syscall": name} ) for name, _ in syscalls.for_arch(arch): write_case(name) f.write(' default: return "<unknown-syscall>";\n') f.write(" }\n") f.write("}\n") f.write("\n")