aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2015-03-24 19:39:47 +0100
committerDenys Vlasenko <dvlasenk@redhat.com>2015-03-24 19:39:47 +0100
commit430143bf8db4808730b490ea538f22a557708f92 (patch)
treed3b0ae1e397e2f12e634f2ad5281147ea91470c5
parentea00900a85ae0dc09d58b73b41309794855811a3 (diff)
downloadandroid_external_strace-430143bf8db4808730b490ea538f22a557708f92.tar.gz
android_external_strace-430143bf8db4808730b490ea538f22a557708f92.tar.bz2
android_external_strace-430143bf8db4808730b490ea538f22a557708f92.zip
sparc: fix v4.10-25-g8497b62 fallout
Before: $ sleep 3 & ./strace -p $! Process 8703 attached syscall: unknown syscall trap 1a800003 00025d58 syscall_516(0, 0x40080000, 0, 0xfc000f00, 0x28, 0xefc03b18) = 0 exit_group(0) = ? +++ exited with 0 +++ After: $ sleep 3 & ./strace -p $! Process 8725 attached restart_syscall(<... resuming interrupted nanosleep ...>) = 0 exit_group(0) = ? +++ exited with 0 +++ Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
-rw-r--r--linux/sparc/get_scno.c49
1 files changed, 4 insertions, 45 deletions
diff --git a/linux/sparc/get_scno.c b/linux/sparc/get_scno.c
index d083bf47..cde44441 100644
--- a/linux/sparc/get_scno.c
+++ b/linux/sparc/get_scno.c
@@ -1,20 +1,11 @@
-/* Disassemble the syscall trap. */
+#ifdef SPARC64
/* Retrieve the syscall trap instruction. */
unsigned long trap;
-
errno = 0;
-
-#ifdef SPARC64
trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)sparc_regs.tpc, 0);
-trap >>= 32;
-#else
-trap = ptrace(PTRACE_PEEKTEXT, tcp->pid, (char *)sparc_regs.pc, 0);
-#endif
-
if (errno)
return -1;
-
-/* Disassemble the trap to see what personality to use. */
+trap >>= 32;
switch (trap) {
case 0x91d02010:
/* Linux/SPARC syscall trap. */
@@ -24,39 +15,7 @@ case 0x91d0206d:
/* Linux/SPARC64 syscall trap. */
update_personality(tcp, 2);
break;
-case 0x91d02000:
- /* SunOS syscall trap. (pers 1) */
- fprintf(stderr, "syscall: SunOS no support\n");
- return -1;
-case 0x91d02008:
- /* Solaris 2.x syscall trap. (per 2) */
- update_personality(tcp, 1);
- break;
-case 0x91d02009:
- /* NetBSD/FreeBSD syscall trap. */
- fprintf(stderr, "syscall: NetBSD/FreeBSD not supported\n");
- return -1;
-case 0x91d02027:
- /* Solaris 2.x gettimeofday */
- update_personality(tcp, 1);
- break;
-default:
-#ifdef SPARC64
- fprintf(stderr, "syscall: unknown syscall trap %08lx %016lx\n", trap, sparc_regs.tpc);
-#else
- fprintf(stderr, "syscall: unknown syscall trap %08lx %08lx\n", trap, sparc_regs.pc);
-#endif
- return -1;
-}
-
-/* Extract the system call number from the registers. */
-if (trap == 0x91d02027) {
- scno = 156;
-} else {
- scno = sparc_regs.u_regs[U_REG_G1];
}
+#endif
-if (scno == 0) {
- scno = sparc_regs.u_regs[U_REG_O0];
- memmove(&sparc_regs.u_regs[U_REG_O0], &sparc_regs.u_regs[U_REG_O1], 7*sizeof(sparc_regs.u_regs[0]));
-}
+scno = sparc_regs.u_regs[U_REG_G1];