Example #1
0
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")
Example #2
0
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")
Example #3
0
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")
Example #4
0
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")
Example #5
0
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")
Example #6
0
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")
Example #7
0
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")
Example #8
0
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")