Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Factory:RISCV
python-python-ptrace
riscv.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File riscv.patch of Package python-python-ptrace
diff --git a/ptrace/binding/cpu.py b/ptrace/binding/cpu.py index d4d8053..91c985c 100644 --- a/ptrace/binding/cpu.py +++ b/ptrace/binding/cpu.py @@ -1,5 +1,5 @@ from ptrace.cpu_info import ( - CPU_POWERPC, CPU_INTEL, CPU_X86_64, CPU_I386, CPU_ARM32, CPU_AARCH64) + CPU_POWERPC, CPU_INTEL, CPU_X86_64, CPU_I386, CPU_ARM32, CPU_AARCH64, CPU_RISCV) CPU_INSTR_POINTER = None CPU_STACK_POINTER = None @@ -18,6 +18,10 @@ elif CPU_AARCH64: CPU_INSTR_POINTER = 'pc' CPU_STACK_POINTER = 'sp' CPU_FRAME_POINTER = 'r29' +elif CPU_RISCV: + CPU_INSTR_POINTER = 'pc' + CPU_STACK_POINTER = 'sp' + CPU_FRAME_POINTER = 's0' elif CPU_X86_64: CPU_INSTR_POINTER = "rip" CPU_STACK_POINTER = "rsp" diff --git a/ptrace/binding/func.py b/ptrace/binding/func.py index bc4bf4d..04391ba 100644 --- a/ptrace/binding/func.py +++ b/ptrace/binding/func.py @@ -3,7 +3,7 @@ from ctypes import addressof, c_int, get_errno, set_errno, sizeof from ptrace import PtraceError from ptrace.ctypes_tools import formatAddress from ptrace.os_tools import RUNNING_LINUX, RUNNING_BSD, RUNNING_OPENBSD -from ptrace.cpu_info import CPU_64BITS, CPU_WORD_SIZE, CPU_POWERPC, CPU_AARCH64 +from ptrace.cpu_info import CPU_64BITS, CPU_WORD_SIZE, CPU_POWERPC, CPU_AARCH64, CPU_RISCV if RUNNING_OPENBSD: from ptrace.binding.openbsd_struct import ( @@ -82,7 +82,7 @@ elif RUNNING_BSD: PTRACE_IO = 12 else: # Linux - if not CPU_AARCH64: + if not (CPU_AARCH64 or CPU_RISCV): HAS_PTRACE_GETREGS = True HAS_PTRACE_SETREGS = True PTRACE_GETREGS = 12 diff --git a/ptrace/binding/linux_struct.py b/ptrace/binding/linux_struct.py index 1bcc20c..4f6accc 100644 --- a/ptrace/binding/linux_struct.py +++ b/ptrace/binding/linux_struct.py @@ -1,7 +1,7 @@ from ctypes import (Structure, Union, sizeof, c_char, c_ushort, c_int, c_uint, c_ulong, c_void_p, c_uint16, c_uint32, c_uint64, c_size_t) -from ptrace.cpu_info import CPU_64BITS, CPU_PPC32, CPU_PPC64, CPU_ARM32, CPU_AARCH64 +from ptrace.cpu_info import CPU_64BITS, CPU_PPC32, CPU_PPC64, CPU_ARM32, CPU_AARCH64, CPU_RISCV pid_t = c_int uid_t = c_ushort @@ -123,6 +123,41 @@ class user_regs_struct(register_structure): ('pc', c_ulong), ('pstate', c_ulong)] ) + elif CPU_RISCV: + _fields_ = ( + ("pc", c_ulong), + ("ra", c_ulong), + ("sp", c_ulong), + ("gp", c_ulong), + ("tp", c_ulong), + ("t0", c_ulong), + ("t1", c_ulong), + ("t2", c_ulong), + ("s0", c_ulong), + ("s1", c_ulong), + ("a0", c_ulong), + ("a1", c_ulong), + ("a2", c_ulong), + ("a3", c_ulong), + ("a4", c_ulong), + ("a5", c_ulong), + ("a6", c_ulong), + ("a7", c_ulong), + ("s2", c_ulong), + ("s3", c_ulong), + ("s4", c_ulong), + ("s5", c_ulong), + ("s6", c_ulong), + ("s7", c_ulong), + ("s8", c_ulong), + ("s9", c_ulong), + ("s10", c_ulong), + ("s11", c_ulong), + ("t3", c_ulong), + ("t4", c_ulong), + ("t5", c_ulong), + ("t6", c_ulong), + ) elif CPU_64BITS: _fields_ = ( ("r15", c_ulong), diff --git a/ptrace/cpu_info.py b/ptrace/cpu_info.py index e8cd7b2..85e2e95 100644 --- a/ptrace/cpu_info.py +++ b/ptrace/cpu_info.py @@ -41,6 +41,8 @@ if HAS_UNAME: CPU_X86_64 = (_machine in ("x86_64", "amd64")) # compatible Intel 64 bits CPU_ARM32 = _machine.startswith('arm') CPU_AARCH64 = (_machine == 'aarch64') + CPU_RISCV32 = (_machine == 'riscv32') + CPU_RISCV64 = (_machine == 'riscv64') del _machine else: # uname() fallback for Windows @@ -51,6 +53,8 @@ else: CPU_X86_64 = False CPU_ARM32 = False CPU_AARCH64 = False + CPU_RISCV32 = False + CPU_RISCV64 = False bits, linkage = architecture() if bits == '32bit': CPU_I386 = True @@ -62,3 +66,4 @@ else: CPU_INTEL = (CPU_I386 or CPU_X86_64) CPU_POWERPC = (CPU_PPC32 or CPU_PPC64) CPU_ARM = (CPU_ARM32 or CPU_AARCH64) +CPU_RISCV = (CPU_RISCV32 or CPU_RISCV64) diff --git a/ptrace/syscall/linux/riscv32.py b/ptrace/syscall/linux/riscv32.py new file mode 100644 index 0000000..dd7927c --- /dev/null +++ b/ptrace/syscall/linux/riscv32.py @@ -0,0 +1,316 @@ +SYSCALL_NAMES = { + 0: "io_setup", + 1: "io_destroy", + 2: "io_submit", + 3: "io_cancel", + 5: "setxattr", + 6: "lsetxattr", + 7: "fsetxattr", + 8: "getxattr", + 9: "lgetxattr", + 10: "fgetxattr", + 11: "listxattr", + 12: "llistxattr", + 13: "flistxattr", + 14: "removexattr", + 15: "lremovexattr", + 16: "fremovexattr", + 17: "getcwd", + 18: "lookup_dcookie", + 19: "eventfd2", + 20: "epoll_create1", + 21: "epoll_ctl", + 22: "epoll_pwait", + 23: "dup", + 24: "dup3", + 25: "fcntl64", + 26: "inotify_init1", + 27: "inotify_add_watch", + 28: "inotify_rm_watch", + 29: "ioctl", + 30: "ioprio_set", + 31: "ioprio_get", + 32: "flock", + 33: "mknodat", + 34: "mkdirat", + 35: "unlinkat", + 36: "symlinkat", + 37: "linkat", + 39: "umount2", + 40: "mount", + 41: "pivot_root", + 42: "nfsservctl", + 43: "statfs64", + 44: "fstatfs64", + 45: "truncate64", + 46: "ftruncate64", + 47: "fallocate", + 48: "faccessat", + 49: "chdir", + 50: "fchdir", + 51: "chroot", + 52: "fchmod", + 53: "fchmodat", + 54: "fchownat", + 55: "fchown", + 56: "openat", + 57: "close", + 58: "vhangup", + 59: "pipe2", + 60: "quotactl", + 61: "getdents64", + 62: "llseek", + 63: "read", + 64: "write", + 65: "readv", + 66: "writev", + 67: "pread64", + 68: "pwrite64", + 69: "preadv", + 70: "pwritev", + 71: "sendfile64", + 74: "signalfd4", + 75: "vmsplice", + 76: "splice", + 77: "tee", + 78: "readlinkat", + 81: "sync", + 82: "fsync", + 83: "fdatasync", + 84: "sync_file_range", + 85: "timerfd_create", + 89: "acct", + 90: "capget", + 91: "capset", + 92: "personality", + 93: "exit", + 94: "exit_group", + 95: "waitid", + 96: "set_tid_address", + 97: "unshare", + 99: "set_robust_list", + 100: "get_robust_list", + 102: "getitimer", + 103: "setitimer", + 104: "kexec_load", + 105: "init_module", + 106: "delete_module", + 107: "timer_create", + 109: "timer_getoverrun", + 111: "timer_delete", + 116: "syslog", + 117: "ptrace", + 118: "sched_setparam", + 119: "sched_setscheduler", + 120: "sched_getscheduler", + 121: "sched_getparam", + 122: "sched_setaffinity", + 123: "sched_getaffinity", + 124: "sched_yield", + 125: "sched_get_priority_max", + 126: "sched_get_priority_min", + 128: "restart_syscall", + 129: "kill", + 130: "tkill", + 131: "tgkill", + 132: "sigaltstack", + 133: "rt_sigsuspend", + 134: "rt_sigaction", + 135: "rt_sigprocmask", + 136: "rt_sigpending", + 138: "rt_sigqueueinfo", + 139: "rt_sigreturn", + 140: "setpriority", + 141: "getpriority", + 142: "reboot", + 143: "setregid", + 144: "setgid", + 145: "setreuid", + 146: "setuid", + 147: "setresuid", + 148: "getresuid", + 149: "setresgid", + 150: "getresgid", + 151: "setfsuid", + 152: "setfsgid", + 153: "times", + 154: "setpgid", + 155: "getpgid", + 156: "getsid", + 157: "setsid", + 158: "getgroups", + 159: "setgroups", + 160: "uname", + 161: "sethostname", + 162: "setdomainname", + 165: "getrusage", + 166: "umask", + 167: "prctl", + 168: "getcpu", + 172: "getpid", + 173: "getppid", + 174: "getuid", + 175: "geteuid", + 176: "getgid", + 177: "getegid", + 178: "gettid", + 179: "sysinfo", + 180: "mq_open", + 181: "mq_unlink", + 184: "mq_notify", + 185: "mq_getsetattr", + 186: "msgget", + 187: "msgctl", + 188: "msgrcv", + 189: "msgsnd", + 190: "semget", + 191: "semctl", + 193: "semop", + 194: "shmget", + 195: "shmctl", + 196: "shmat", + 197: "shmdt", + 198: "socket", + 199: "socketpair", + 200: "bind", + 201: "listen", + 202: "accept", + 203: "connect", + 204: "getsockname", + 205: "getpeername", + 206: "sendto", + 207: "recvfrom", + 208: "setsockopt", + 209: "getsockopt", + 210: "shutdown", + 211: "sendmsg", + 212: "recvmsg", + 213: "readahead", + 214: "brk", + 215: "munmap", + 216: "mremap", + 217: "add_key", + 218: "request_key", + 219: "keyctl", + 220: "clone", + 221: "execve", + 222: "mmap2", + 223: "fadvise64_64", + 224: "swapon", + 225: "swapoff", + 226: "mprotect", + 227: "msync", + 228: "mlock", + 229: "munlock", + 230: "mlockall", + 231: "munlockall", + 232: "mincore", + 233: "madvise", + 234: "remap_file_pages", + 235: "mbind", + 236: "get_mempolicy", + 237: "set_mempolicy", + 238: "migrate_pages", + 239: "move_pages", + 240: "rt_tgsigqueueinfo", + 241: "perf_event_open", + 242: "accept4", + 259: "riscv_flush_icache", + 261: "prlimit64", + 262: "fanotify_init", + 263: "fanotify_mark", + 264: "name_to_handle_at", + 265: "open_by_handle_at", + 267: "syncfs", + 268: "setns", + 269: "sendmmsg", + 270: "process_vm_readv", + 271: "process_vm_writev", + 272: "kcmp", + 273: "finit_module", + 274: "sched_setattr", + 275: "sched_getattr", + 276: "renameat2", + 277: "seccomp", + 278: "getrandom", + 279: "memfd_create", + 280: "bpf", + 281: "execveat", + 282: "userfaultfd", + 283: "membarrier", + 284: "mlock2", + 285: "copy_file_range", + 286: "preadv2", + 287: "pwritev2", + 288: "pkey_mprotect", + 289: "pkey_alloc", + 290: "pkey_free", + 291: "statx", + 293: "rseq", + 294: "kexec_file_load", + 403: "clock_gettime64", + 404: "clock_settime64", + 405: "clock_adjtime64", + 406: "clock_getres_time64", + 407: "clock_nanosleep_time64", + 408: "timer_gettime64", + 409: "timer_settime64", + 410: "timerfd_gettime64", + 411: "timerfd_settime64", + 412: "utimensat_time64", + 413: "pselect6_time64", + 414: "ppoll_time64", + 416: "io_pgetevents_time64", + 417: "recvmmsg_time64", + 418: "mq_timedsend_time64", + 419: "mq_timedreceive_time64", + 420: "semtimedop_time64", + 421: "rt_sigtimedwait_time64", + 422: "futex_time64", + 423: "sched_rr_get_interval_time64", + 424: "pidfd_send_signal", + 425: "io_uring_setup", + 426: "io_uring_enter", + 427: "io_uring_register", + 428: "open_tree", + 429: "move_mount", + 430: "fsopen", + 431: "fsconfig", + 432: "fsmount", + 433: "fspick", + 434: "pidfd_open", + 435: "clone3", + 436: "close_range", + 437: "openat2", + 438: "pidfd_getfd", + 439: "faccessat2", + 440: "process_madvise", + 441: "epoll_pwait2", + 442: "mount_setattr", + 443: "quotactl_fd", + 444: "landlock_create_ruleset", + 445: "landlock_add_rule", + 446: "landlock_restrict_self", + 447: "memfd_secret", + 448: "process_mrelease", + 449: "futex_waitv", + 450: "set_mempolicy_home_node", +} + +SOCKET_SYSCALL_NAMES = set(( + "socket", + "socketpair", + "connect", + "sendto", + "recvfrom", + "sendmsg", + "recvmsg", + "bind", + "listen", + "accept", + "getsockname", + "getpeername", + "getsockopt", + "setsockopt", + "shutdown", +)) diff --git a/ptrace/syscall/linux/riscv64.py b/ptrace/syscall/linux/riscv64.py new file mode 100644 index 0000000..40f4f1f --- /dev/null +++ b/ptrace/syscall/linux/riscv64.py @@ -0,0 +1,327 @@ +SYSCALL_NAMES = { + 0: "io_setup", + 1: "io_destroy", + 2: "io_submit", + 3: "io_cancel", + 4: "io_getevents", + 5: "setxattr", + 6: "lsetxattr", + 7: "fsetxattr", + 8: "getxattr", + 9: "lgetxattr", + 10: "fgetxattr", + 11: "listxattr", + 12: "llistxattr", + 13: "flistxattr", + 14: "removexattr", + 15: "lremovexattr", + 16: "fremovexattr", + 17: "getcwd", + 18: "lookup_dcookie", + 19: "eventfd2", + 20: "epoll_create1", + 21: "epoll_ctl", + 22: "epoll_pwait", + 23: "dup", + 24: "dup3", + 25: "fcntl", + 26: "inotify_init1", + 27: "inotify_add_watch", + 28: "inotify_rm_watch", + 29: "ioctl", + 30: "ioprio_set", + 31: "ioprio_get", + 32: "flock", + 33: "mknodat", + 34: "mkdirat", + 35: "unlinkat", + 36: "symlinkat", + 37: "linkat", + 38: "renameat", + 39: "umount2", + 40: "mount", + 41: "pivot_root", + 42: "nfsservctl", + 43: "statfs", + 44: "fstatfs", + 45: "truncate", + 46: "ftruncate", + 47: "fallocate", + 48: "faccessat", + 49: "chdir", + 50: "fchdir", + 51: "chroot", + 52: "fchmod", + 53: "fchmodat", + 54: "fchownat", + 55: "fchown", + 56: "openat", + 57: "close", + 58: "vhangup", + 59: "pipe2", + 60: "quotactl", + 61: "getdents64", + 62: "lseek", + 63: "read", + 64: "write", + 65: "readv", + 66: "writev", + 67: "pread64", + 68: "pwrite64", + 69: "preadv", + 70: "pwritev", + 71: "sendfile", + 72: "pselect6", + 73: "ppoll", + 74: "signalfd4", + 75: "vmsplice", + 76: "splice", + 77: "tee", + 78: "readlinkat", + 79: "newfstatat", + 80: "fstat", + 81: "sync", + 82: "fsync", + 83: "fdatasync", + 84: "sync_file_range", + 85: "timerfd_create", + 86: "timerfd_settime", + 87: "timerfd_gettime", + 88: "utimensat", + 89: "acct", + 90: "capget", + 91: "capset", + 92: "personality", + 93: "exit", + 94: "exit_group", + 95: "waitid", + 96: "set_tid_address", + 97: "unshare", + 98: "futex", + 99: "set_robust_list", + 100: "get_robust_list", + 101: "nanosleep", + 102: "getitimer", + 103: "setitimer", + 104: "kexec_load", + 105: "init_module", + 106: "delete_module", + 107: "timer_create", + 108: "timer_gettime", + 109: "timer_getoverrun", + 110: "timer_settime", + 111: "timer_delete", + 112: "clock_settime", + 113: "clock_gettime", + 114: "clock_getres", + 115: "clock_nanosleep", + 116: "syslog", + 117: "ptrace", + 118: "sched_setparam", + 119: "sched_setscheduler", + 120: "sched_getscheduler", + 121: "sched_getparam", + 122: "sched_setaffinity", + 123: "sched_getaffinity", + 124: "sched_yield", + 125: "sched_get_priority_max", + 126: "sched_get_priority_min", + 127: "sched_rr_get_interval", + 128: "restart_syscall", + 129: "kill", + 130: "tkill", + 131: "tgkill", + 132: "sigaltstack", + 133: "rt_sigsuspend", + 134: "rt_sigaction", + 135: "rt_sigprocmask", + 136: "rt_sigpending", + 137: "rt_sigtimedwait", + 138: "rt_sigqueueinfo", + 139: "rt_sigreturn", + 140: "setpriority", + 141: "getpriority", + 142: "reboot", + 143: "setregid", + 144: "setgid", + 145: "setreuid", + 146: "setuid", + 147: "setresuid", + 148: "getresuid", + 149: "setresgid", + 150: "getresgid", + 151: "setfsuid", + 152: "setfsgid", + 153: "times", + 154: "setpgid", + 155: "getpgid", + 156: "getsid", + 157: "setsid", + 158: "getgroups", + 159: "setgroups", + 160: "uname", + 161: "sethostname", + 162: "setdomainname", + 163: "getrlimit", + 164: "setrlimit", + 165: "getrusage", + 166: "umask", + 167: "prctl", + 168: "getcpu", + 169: "gettimeofday", + 170: "settimeofday", + 171: "adjtimex", + 172: "getpid", + 173: "getppid", + 174: "getuid", + 175: "geteuid", + 176: "getgid", + 177: "getegid", + 178: "gettid", + 179: "sysinfo", + 180: "mq_open", + 181: "mq_unlink", + 182: "mq_timedsend", + 183: "mq_timedreceive", + 184: "mq_notify", + 185: "mq_getsetattr", + 186: "msgget", + 187: "msgctl", + 188: "msgrcv", + 189: "msgsnd", + 190: "semget", + 191: "semctl", + 192: "semtimedop", + 193: "semop", + 194: "shmget", + 195: "shmctl", + 196: "shmat", + 197: "shmdt", + 198: "socket", + 199: "socketpair", + 200: "bind", + 201: "listen", + 202: "accept", + 203: "connect", + 204: "getsockname", + 205: "getpeername", + 206: "sendto", + 207: "recvfrom", + 208: "setsockopt", + 209: "getsockopt", + 210: "shutdown", + 211: "sendmsg", + 212: "recvmsg", + 213: "readahead", + 214: "brk", + 215: "munmap", + 216: "mremap", + 217: "add_key", + 218: "request_key", + 219: "keyctl", + 220: "clone", + 221: "execve", + 222: "mmap", + 223: "fadvise64", + 224: "swapon", + 225: "swapoff", + 226: "mprotect", + 227: "msync", + 228: "mlock", + 229: "munlock", + 230: "mlockall", + 231: "munlockall", + 232: "mincore", + 233: "madvise", + 234: "remap_file_pages", + 235: "mbind", + 236: "get_mempolicy", + 237: "set_mempolicy", + 238: "migrate_pages", + 239: "move_pages", + 240: "rt_tgsigqueueinfo", + 241: "perf_event_open", + 242: "accept4", + 259: "riscv_flush_icache", + 243: "recvmmsg", + 260: "wait4", + 261: "prlimit64", + 262: "fanotify_init", + 263: "fanotify_mark", + 264: "name_to_handle_at", + 265: "open_by_handle_at", + 266: "clock_adjtime", + 267: "syncfs", + 268: "setns", + 269: "sendmmsg", + 270: "process_vm_readv", + 271: "process_vm_writev", + 272: "kcmp", + 273: "finit_module", + 274: "sched_setattr", + 275: "sched_getattr", + 276: "renameat2", + 277: "seccomp", + 278: "getrandom", + 279: "memfd_create", + 280: "bpf", + 281: "execveat", + 282: "userfaultfd", + 283: "membarrier", + 284: "mlock2", + 285: "copy_file_range", + 286: "preadv2", + 287: "pwritev2", + 288: "pkey_mprotect", + 289: "pkey_alloc", + 290: "pkey_free", + 291: "statx", + 292: "io_pgetevents", + 293: "rseq", + 294: "kexec_file_load", + 424: "pidfd_send_signal", + 425: "io_uring_setup", + 426: "io_uring_enter", + 427: "io_uring_register", + 428: "open_tree", + 429: "move_mount", + 430: "fsopen", + 431: "fsconfig", + 432: "fsmount", + 433: "fspick", + 434: "pidfd_open", + 435: "clone3", + 436: "close_range", + 437: "openat2", + 438: "pidfd_getfd", + 439: "faccessat2", + 440: "process_madvise", + 441: "epoll_pwait2", + 442: "mount_setattr", + 443: "quotactl_fd", + 444: "landlock_create_ruleset", + 445: "landlock_add_rule", + 446: "landlock_restrict_self", + 447: "memfd_secret", + 448: "process_mrelease", + 449: "futex_waitv", + 450: "set_mempolicy_home_node", +} + +SOCKET_SYSCALL_NAMES = set(( + "socket", + "socketpair", + "connect", + "sendto", + "recvfrom", + "sendmsg", + "recvmsg", + "bind", + "listen", + "accept", + "getsockname", + "getpeername", + "getsockopt", + "setsockopt", + "shutdown", +)) diff --git a/ptrace/syscall/names.py b/ptrace/syscall/names.py index fb4e6c6..b970989 100644 --- a/ptrace/syscall/names.py +++ b/ptrace/syscall/names.py @@ -1,4 +1,4 @@ -from ptrace.cpu_info import CPU_X86_64, CPU_I386, CPU_PPC64, CPU_PPC32, CPU_AARCH64 +from ptrace.cpu_info import CPU_X86_64, CPU_I386, CPU_PPC64, CPU_PPC32, CPU_AARCH64, CPU_RISCV32, CPU_RISCV64 from ptrace.os_tools import RUNNING_LINUX, RUNNING_FREEBSD if RUNNING_LINUX: if CPU_X86_64: @@ -11,6 +11,10 @@ if RUNNING_LINUX: from ptrace.syscall.linux.powerpc32 import SYSCALL_NAMES, SOCKET_SYSCALL_NAMES elif CPU_AARCH64: from ptrace.syscall.linux.aarch64 import SYSCALL_NAMES, SOCKET_SYSCALL_NAMES + elif CPU_RISCV32: + from ptrace.syscall.linux.riscv32 import SYSCALL_NAMES, SOCKET_SYSCALL_NAMES + elif CPU_RISCV64: + from ptrace.syscall.linux.riscv64 import SYSCALL_NAMES, SOCKET_SYSCALL_NAMES else: raise NotImplementedError("Unsupported CPU architecture") diff --git a/ptrace/syscall/ptrace_syscall.py b/ptrace/syscall/ptrace_syscall.py index 14d9408..2dfd7dc 100644 --- a/ptrace/syscall/ptrace_syscall.py +++ b/ptrace/syscall/ptrace_syscall.py @@ -1,7 +1,7 @@ from os import strerror from errno import errorcode -from ptrace.cpu_info import CPU_X86_64, CPU_POWERPC, CPU_I386, CPU_ARM32, CPU_AARCH64 +from ptrace.cpu_info import CPU_X86_64, CPU_POWERPC, CPU_I386, CPU_ARM32, CPU_AARCH64, CPU_RISCV from ptrace.ctypes_tools import ulong2long, formatAddress, formatWordHex from ptrace.func_call import FunctionCall from ptrace.syscall import SYSCALL_NAMES, SYSCALL_PROTOTYPES, SyscallArgument @@ -16,6 +16,8 @@ elif CPU_ARM32: SYSCALL_REGISTER = "r7" elif CPU_AARCH64: SYSCALL_REGISTER = "r8" +elif CPU_RISCV: + SYSCALL_REGISTER = "a7" elif RUNNING_LINUX: if CPU_X86_64: SYSCALL_REGISTER = "orig_rax" @@ -37,6 +39,8 @@ elif CPU_X86_64: RETURN_VALUE_REGISTER = "rax" elif CPU_POWERPC: RETURN_VALUE_REGISTER = "result" +elif CPU_RISCV: + RETURN_VALUE_REGISTER = "a0" else: raise NotImplementedError("Unsupported CPU architecture") @@ -92,6 +96,8 @@ class PtraceSyscall(FunctionCall): return (regs.r0, regs.r1, regs.r2, regs.r3, regs.r4, regs.r5, regs.r6) if CPU_AARCH64: return (regs.r0, regs.r1, regs.r2, regs.r3, regs.r4, regs.r5, regs.r6, regs.r7) + if CPU_RISCV: + return (regs.a0, regs.a1, regs.a2, regs.a3, regs.a4, regs.a5, regs.a6) if RUNNING_BSD: sp = self.process.getStackPointer() return [self.process.readWord(sp + index * CPU_WORD_SIZE) diff --git a/tests/test_strace.py b/tests/test_strace.py index 39ff14c..2020a3b 100755 --- a/tests/test_strace.py +++ b/tests/test_strace.py @@ -11,6 +11,7 @@ STRACE = os.path.normpath( os.path.join(os.path.dirname(__file__), '..', 'strace.py')) AARCH64 = (getattr(os.uname(), 'machine', None) == 'aarch64') +RISCV = (getattr(os.uname(), 'machine', None).startswith('riscv')) class TestStrace(unittest.TestCase): @@ -78,19 +79,21 @@ class TestStrace(unittest.TestCase): pattern = br"^rename\('oldpath', 'newpath'\)" if AARCH64: pattern = br"^renameat\(.*'oldpath'.*'newpath'\)" + if RISCV: + pattern = br"^renameat2\(.*'oldpath'.*'newpath', 0\)" self.assert_syscall("import os; os.rename('oldpath', 'newpath')", pattern) def test_link(self): pattern = br"^link\('oldpath', 'newpath'\)" - if AARCH64: + if AARCH64 or RISCV: pattern = br"^linkat\(.*'oldpath'.*'newpath'.*\)" self.assert_syscall("import os; os.link('oldpath', 'newpath')", pattern) def test_symlink(self): pattern = br"^symlink\('target', 'linkpath'\)" - if AARCH64: + if AARCH64 or RISCV: pattern = br"^symlinkat\(.*'target'.*'linkpath'\)" try: self.assert_syscall("import os; os.symlink('target', 'linkpath')",
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor