123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 |
- $Id: update-patches 24 2008-08-31 14:56:13Z wbx $
- --- strace-4.5.18.orig/syscall.c 2008-08-25 05:16:26.000000000 +0200
- +++ strace-4.5.18/syscall.c 2009-01-02 21:24:05.514097112 +0100
- @@ -772,6 +772,8 @@ internal_syscall(struct tcb *tcp)
- static long r9;
- #elif defined(X86_64)
- static long rax;
- +#elif defined(CRISV10) || defined(CRISV32)
- + static long r10;
- #endif
- #endif /* LINUX */
- #ifdef FREEBSD
- @@ -1273,7 +1275,10 @@ struct tcb *tcp;
- return 0;
- }
- }
- -#endif /* SH64 */
- +#elif defined(CRISV10) || defined(CRISV32)
- + if (upeek(pid, 4*PT_R9, &scno) < 0)
- + return -1;
- +#endif /* CRISV10/CRISV32 */
- #endif /* LINUX */
- #ifdef SUNOS4
- if (upeek(pid, uoff(u_arg[7]), &scno) < 0)
- @@ -1468,6 +1473,14 @@ struct tcb *tcp;
- fprintf(stderr, "stray syscall exit: r8 = %ld\n", r8);
- return 0;
- }
- +#elif defined(CRISV10) || defined(CRISV32)
- + if (upeek(pid, 4*PT_R10, &r10) < 0)
- + return -1;
- + if (r10 != -ENOSYS && !(tcp->flags & TCB_INSYSCALL)) {
- + if (debug)
- + fprintf(stderr, "stray syscall exit: r10 = %ld\n", r10);
- + return 0;
- + }
- #endif
- #endif /* LINUX */
- return 1;
- @@ -1649,6 +1662,17 @@ struct tcb *tcp;
- tcp->u_rval = r9;
- u_error = 0;
- }
- +#else
- +#if defined(CRISV10) || defined(CRISV32)
- + if (r10 && (unsigned) -r10 < nerrnos) {
- + tcp->u_rval = -1;
- + u_error = -r10;
- + }
- + else {
- + tcp->u_rval = r10;
- + u_error = 0;
- + }
- +#endif /* CRISV10/CRISV32 */
- #endif /* SH64 */
- #endif /* SH */
- #endif /* HPPA */
- @@ -2169,6 +2193,23 @@ struct tcb *tcp;
- return -1;
- }
- }
- +#elif defined(CRISV10) || defined(CRISV32)
- + {
- + int i;
- + static const int crisregs[] = {
- + 4*PT_ORIG_R10, 4*PT_R11, 4*PT_R12,
- + 4*PT_R13, 4*PT_MOF, 4*PT_SRP
- + };
- +
- + if (tcp->scno >= 0 && tcp->scno < nsyscalls)
- + tcp->u_nargs = sysent[tcp->scno].nargs;
- + else
- + tcp->u_nargs = 0;
- + for (i = 0; i < tcp->u_nargs; i++) {
- + if (upeek(pid, crisregs[i], &tcp->u_arg[i]) < 0)
- + return -1;
- + }
- + }
- #else /* Other architecture (like i386) (32bits specific) */
- {
- int i;
|