- if (tcp->scno >= nsyscalls || tcp->scno < 0 ||
- qual_flags[tcp->scno] & QUAL_RAW) {
- if (u_error)
- tprintf("= -1 (errno %ld)", u_error);
+ tprintf("= ? <unavailable>");
+ printtrailer();
+ tcp->flags &= ~TCB_INSYSCALL;
+ return res;
+ }
+
+ if (tcp->scno >= nsyscalls || tcp->scno < 0
+ || (qual_flags[tcp->scno] & QUAL_RAW))
+ sys_res = printargs(tcp);
+ else {
+ if (not_failing_only && tcp->u_error)
+ return 0; /* ignore failed syscalls */
+ sys_res = (*sysent[tcp->scno].sys_func)(tcp);
+ }
+
+ u_error = tcp->u_error;
+ tprintf(") ");
+ tabto(acolumn);
+ if (tcp->scno >= nsyscalls || tcp->scno < 0 ||
+ qual_flags[tcp->scno] & QUAL_RAW) {
+ if (u_error)
+ tprintf("= -1 (errno %ld)", u_error);
+ else
+ tprintf("= %#lx", tcp->u_rval);
+ }
+ else if (!(sys_res & RVAL_NONE) && u_error) {
+ switch (u_error) {
+#ifdef LINUX
+ case ERESTARTSYS:
+ tprintf("= ? ERESTARTSYS (To be restarted)");
+ break;
+ case ERESTARTNOINTR:
+ tprintf("= ? ERESTARTNOINTR (To be restarted)");
+ break;
+ case ERESTARTNOHAND:
+ tprintf("= ? ERESTARTNOHAND (To be restarted)");
+ break;
+ case ERESTART_RESTARTBLOCK:
+ tprintf("= ? ERESTART_RESTARTBLOCK (To be restarted)");
+ break;
+#endif /* LINUX */
+ default:
+ tprintf("= -1 ");
+ if (u_error < 0)
+ tprintf("E??? (errno %ld)", u_error);
+ else if (u_error < nerrnos)
+ tprintf("%s (%s)", errnoent[u_error],
+ strerror(u_error));