#define RVAL_DECODED 0100 /* syscall decoding finished */
#define RVAL_IOCTL_DECODED 0200 /* ioctl sub-parser successfully decoded
the argument */
+#define RVAL_PRINT_ERR_VAL 0400 /* Print decoded error code along with
+ syscall return value. Needed for modify_ldt
+ that for some reason decides to return
+ an error with higher bits set to 0. */
#define IOCTL_NUMBER_UNKNOWN 0
#define IOCTL_NUMBER_HANDLED 1
tprints(") ");
tabto();
unsigned long u_error = tcp->u_error;
+ kernel_long_t u_rval;
if (raw(tcp)) {
if (u_error) {
tprints("= ? ERESTART_RESTARTBLOCK (Interrupted by signal)");
break;
default:
+ u_rval = sys_res & RVAL_PRINT_ERR_VAL ?
+ tcp->u_rval : -1;
u_error_str = err_name(u_error);
if (u_error_str)
- tprintf("= -1 %s (%s)",
- u_error_str, strerror(u_error));
+ tprintf("= %" PRI_kld " %s (%s)",
+ u_rval, u_error_str, strerror(u_error));
else
- tprintf("= -1 %lu (%s)",
- u_error, strerror(u_error));
+ tprintf("= %" PRI_kld " %lu (%s)",
+ u_rval, u_error, strerror(u_error));
break;
}
if (syscall_tampered(tcp))