From: Petar Jovanovic Date: Fri, 27 Jan 2017 17:01:49 +0000 (+0000) Subject: mips32: add support for ptrace syscall X-Git-Tag: svn/VALGRIND_3_13_0~210 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=795ee051e6885321bd8fec74fc107997492c2a13;p=thirdparty%2Fvalgrind.git mips32: add support for ptrace syscall Add wrapers for ptrace syscall for mips32. Patch by Aleksandra Karadzic. git-svn-id: svn://svn.valgrind.org/valgrind/trunk@16211 --- diff --git a/coregrind/m_syswrap/syswrap-mips32-linux.c b/coregrind/m_syswrap/syswrap-mips32-linux.c index 09b13c1e6b..652e593ce3 100644 --- a/coregrind/m_syswrap/syswrap-mips32-linux.c +++ b/coregrind/m_syswrap/syswrap-mips32-linux.c @@ -437,7 +437,58 @@ PRE(sys_mmap) int, prot, int, flags, int, fd, unsigned long, offset); r = mips_PRE_sys_mmap(tid, ARG1, ARG2, ARG3, ARG4, ARG5, (Off64T) ARG6); SET_STATUS_from_SysRes(r); -} +} + +PRE(sys_ptrace) +{ + PRINT("sys_ptrace ( %ld, %ld, %#lx, %#lx )", SARG1, SARG2, ARG3, ARG4); + PRE_REG_READ4(int, "ptrace", + long, request, long, pid, unsigned long, addr, + unsigned long, data); + switch (ARG1) { + case VKI_PTRACE_PEEKTEXT: + case VKI_PTRACE_PEEKDATA: + case VKI_PTRACE_PEEKUSR: + PRE_MEM_WRITE("ptrace(peek)", ARG4, sizeof(long)); + break; + case VKI_PTRACE_GETEVENTMSG: + PRE_MEM_WRITE("ptrace(geteventmsg)", ARG4, sizeof(unsigned long)); + break; + case VKI_PTRACE_GETSIGINFO: + PRE_MEM_WRITE("ptrace(getsiginfo)", ARG4, sizeof(vki_siginfo_t)); + break; + case VKI_PTRACE_SETSIGINFO: + PRE_MEM_READ("ptrace(setsiginfo)", ARG4, sizeof(vki_siginfo_t)); + break; + case VKI_PTRACE_GETREGSET: + ML_(linux_PRE_getregset)(tid, ARG3, ARG4); + break; + default: + break; + } +} + +POST(sys_ptrace) +{ + switch (ARG1) { + case VKI_PTRACE_PEEKTEXT: + case VKI_PTRACE_PEEKDATA: + case VKI_PTRACE_PEEKUSR: + POST_MEM_WRITE (ARG4, sizeof(long)); + break; + case VKI_PTRACE_GETEVENTMSG: + POST_MEM_WRITE (ARG4, sizeof(unsigned long)); + break; + case VKI_PTRACE_GETSIGINFO: + POST_MEM_WRITE (ARG4, sizeof(vki_siginfo_t)); + break; + case VKI_PTRACE_GETREGSET: + ML_(linux_POST_getregset)(tid, ARG3, ARG4); + break; + default: + break; + } +} // XXX: lstat64/fstat64/stat64 are generic, but not necessarily // applicable to every architecture -- I think only to 32-bit archs. @@ -690,7 +741,7 @@ static SyscallTableEntry syscall_main_table[] = { GENX_ (__NR_setuid, sys_setuid), // 23 GENX_ (__NR_getuid, sys_getuid), // 24 LINX_ (__NR_stime, sys_stime), // 25 - //.. PLAXY(__NR_ptrace, sys_ptrace), // 26 + PLAXY(__NR_ptrace, sys_ptrace), // 26 GENX_ (__NR_alarm, sys_alarm), // 27 //.. // (__NR_oldfstat, sys_fstat), // 28 GENX_ (__NR_pause, sys_pause), // 29 diff --git a/memcheck/tests/linux/getregset.vgtest b/memcheck/tests/linux/getregset.vgtest index 1bd6ef00f5..4c661084b8 100644 --- a/memcheck/tests/linux/getregset.vgtest +++ b/memcheck/tests/linux/getregset.vgtest @@ -1,4 +1,4 @@ prog: getregset vgopts: -q -prereq: ../../../tests/os_test linux 2.6.33 && ! ../../../tests/arch_test mips32 && ! ../../../tests/arch_test ppc64 +prereq: ((../../../tests/os_test linux 2.6.33 && ! ../../../tests/arch_test mips32) || ../../../tests/os_test linux 3.10.0 ) && ! ../../../tests/arch_test ppc64