Index: head/sys/compat/linux/linux_errno.h =================================================================== --- head/sys/compat/linux/linux_errno.h +++ head/sys/compat/linux/linux_errno.h @@ -180,4 +180,8 @@ #define LINUX_ERFKILL 132 #define LINUX_EHWPOISON 133 +#ifdef _KERNEL +#define LINUX_ELAST LINUX_EHWPOISON +#endif + #endif /* _LINUX_ERRNO_H_ */ Index: head/sys/compat/linux/linux_errno.c =================================================================== --- head/sys/compat/linux/linux_errno.c +++ head/sys/compat/linux/linux_errno.c @@ -31,5 +31,11 @@ KASSERT(linux_errtbl[i] != 0, ("%s: linux_errtbl[%d] == 0", __func__, i)); } + + for (i = 1; i < nitems(linux_to_bsd_errtbl); i++) { + KASSERT(linux_to_bsd_errtbl[i] != 0, + ("%s: linux_to_bsd_errtbl[%d] == 0", __func__, i)); + } + } #endif Index: head/sys/compat/linux/linux_errno.inc =================================================================== --- head/sys/compat/linux/linux_errno.inc +++ head/sys/compat/linux/linux_errno.inc @@ -160,3 +160,170 @@ _Static_assert(ELAST == 97, "missing errno entries in linux_errtbl"); + +static const int linux_to_bsd_errtbl[LINUX_ELAST + 1] = { + /* [0, 9] */ + [0] = 0, + [LINUX_EPERM] = EPERM, + [LINUX_ENOENT] = ENOENT, + [LINUX_ESRCH] = ESRCH, + [LINUX_EINTR] = EINTR, + [LINUX_EIO] = EIO, + [LINUX_ENXIO] = ENXIO, + [LINUX_E2BIG] = E2BIG, + [LINUX_ENOEXEC] = ENOENT, + [LINUX_EBADF] = EBADF, + + /* [10, 19] */ + [LINUX_ECHILD] = ECHILD, + [LINUX_EAGAIN] = EAGAIN, + [LINUX_ENOMEM] = ENOMEM, + [LINUX_EACCES] = EACCES, + [LINUX_EFAULT] = EFAULT, + [LINUX_ENOTBLK] = ENOTBLK, + [LINUX_EBUSY] = EBUSY, + [LINUX_EEXIST] = EEXIST, + [LINUX_EXDEV] = EXDEV, + [LINUX_ENODEV] = ENODEV, + + /* [20, 29] */ + [LINUX_ENOTDIR] = ENOTDIR, + [LINUX_EISDIR] = EISDIR, + [LINUX_EINVAL] = EINVAL, + [LINUX_ENFILE] = ENFILE, + [LINUX_EMFILE] = EMFILE, + [LINUX_ENOTTY] = ENOTTY, + [LINUX_ETXTBSY] = ETXTBSY, + [LINUX_EFBIG] = EFBIG, + [LINUX_ENOSPC] = ENOSPC, + [LINUX_ESPIPE] = ESPIPE, + + /* [30, 39] */ + [LINUX_EROFS] = EROFS, + [LINUX_EMLINK] = EMLINK, + [LINUX_EPIPE] = EPIPE, + [LINUX_EDOM] = EDOM, + [LINUX_ERANGE] = ERANGE, + [LINUX_EDEADLK] = EDEADLK, + [LINUX_ENAMETOOLONG] = ENAMETOOLONG, + [LINUX_ENOLCK] = ENOLCK, + [LINUX_ENOSYS] = ENOSYS, + [LINUX_ENOTEMPTY] = ENOTEMPTY, + + /* [40, 49] */ + [LINUX_ELOOP] = ELOOP, + [41] = EINVAL, + [LINUX_ENOMSG] = ENOMSG, + [LINUX_EIDRM] = EIDRM, + [LINUX_ECHRNG] = EINVAL, /* XXX */ + [LINUX_EL2NSYNC] = EINVAL, /* XXX */ + [LINUX_EL3HLT] = EINVAL, /* XXX */ + [LINUX_EL3RST] = EINVAL, /* XXX */ + [LINUX_ELNRNG] = EINVAL, /* XXX */ + [LINUX_EUNATCH] = EINVAL, /* XXX */ + + /* [50, 59] */ + [LINUX_ENOCSI] = EINVAL, /* XXX */ + [LINUX_EL2HLT] = EINVAL, /* XXX */ + [LINUX_EBADE] = EINVAL, /* XXX */ + [LINUX_EBADR] = EINVAL, /* XXX */ + [LINUX_EXFULL] = EINVAL, /* XXX */ + [LINUX_ENOANO] = EINVAL, /* XXX */ + [LINUX_EBADRQC] = EINVAL, /* XXX */ + [LINUX_EBADSLT] = EINVAL, /* XXX */ + [58] = EINVAL, + [LINUX_EBFONT] = EINVAL, /* XXX */ + + /* [60, 69] */ + [LINUX_ENOSTR] = EINVAL, /* XXX */ + [LINUX_ENODATA] = ENOATTR, /* XXX */ + [LINUX_ENOTIME] = EINVAL, /* XXX */ + [LINUX_ENOSR] = EINVAL, /* XXX */ + [LINUX_ENONET] = EINVAL, /* XXX */ + [LINUX_ENOPKG] = EINVAL, /* XXX */ + [LINUX_EREMOTE] = EREMOTE, + [LINUX_ENOLINK] = ENOLINK, + [LINUX_EADV] = EINVAL, /* XXX */ + [LINUX_ESRMNT] = EINVAL, /* XXX */ + + /* [70, 79] */ + [LINUX_ECOMM] = EINVAL, /* XXX */ + [LINUX_EPROTO] = EPROTO, + [LINUX_EMULTIHOP] = EMULTIHOP, + [LINUX_EDOTDOT] = EINVAL, /* XXX */ + [LINUX_EBADMSG] = EBADMSG, + [LINUX_EOVERFLOW] = EOVERFLOW, + [LINUX_ENOTUNIQ] = EINVAL, /* XXX */ + [LINUX_EBADFD] = EBADF, /* XXX */ + [LINUX_EREMCHG] = EINVAL, /* XXX */ + [LINUX_ELIBACC] = EINVAL, /* XXX */ + + /* [80, 89] */ + [LINUX_ELIBBAD] = EINVAL, /* XXX */ + [LINUX_ELIBSCN] = EINVAL, /* XXX */ + [LINUX_ELIBMAX] = EINVAL, /* XXX */ + [LINUX_ELIBEXEC] = EINVAL, /* XXX */ + [LINUX_EILSEQ] = EILSEQ, + [LINUX_ERESTART] = EAGAIN, /* XXX */ + [LINUX_ESTRPIPE] = EINVAL, /* XXX */ + [LINUX_EUSERS] = EUSERS, + [LINUX_ENOTSOCK] = ENOTSOCK, + [LINUX_EDESTADDRREQ] = EDESTADDRREQ, + + /* [90, 99] */ + [LINUX_EMSGSIZE] = EMSGSIZE, + [LINUX_EPROTOTYPE] = EPROTOTYPE, + [LINUX_ENOPROTOOPT] = ENOPROTOOPT, + [LINUX_EPROTONOTSUPPORT] = EPROTONOSUPPORT, + [LINUX_ESOCKNOTSUPPORT] = EPROTONOSUPPORT, /* XXX */ + [LINUX_EOPNOTSUPPORT] = EOPNOTSUPP, + [LINUX_EPFNOTSUPPORT] = EPFNOSUPPORT, + [LINUX_EAFNOTSUPPORT] = EAFNOSUPPORT, + [LINUX_EADDRINUSE] = EADDRINUSE, + [LINUX_EADDRNOTAVAIL] = EADDRNOTAVAIL, + + /* [100, 109] */ + [LINUX_ENETDOWN] = ENETDOWN, + [LINUX_ENETUNREACH] = ENETUNREACH, + [LINUX_ENETRESET] = ENETRESET, + [LINUX_ECONNABORTED] = ECONNABORTED, + [LINUX_ECONNRESET] = ECONNRESET, + [LINUX_ENOBUFS] = ENOBUFS, + [LINUX_EISCONN] = EISCONN, + [LINUX_ENOTCONN] = ENOTCONN, + [LINUX_ESHUTDOWN] = ESHUTDOWN, + [LINUX_ETOOMANYREFS] = ETOOMANYREFS, + + /* [110, 119] */ + [LINUX_ETIMEDOUT] = ETIMEDOUT, + [LINUX_ECONNREFUSED] = ECONNREFUSED, + [LINUX_EHOSTDOWN] = EHOSTDOWN, + [LINUX_EHOSTUNREACH] = EHOSTUNREACH, + [LINUX_EALREADY] = EALREADY, + [LINUX_EINPROGRESS] = EINPROGRESS, + [LINUX_ESTALE] = ESTALE, + [LINUX_EUCLEAN] = EINVAL, /* XXX */ + [LINUX_ENOTNAM] = EINVAL, /* XXX */ + [LINUX_ENAVAIL] = EINVAL, /* XXX */ + + /* [120, 129] */ + [LINUX_EISNAM] = EINVAL, /* XXX */ + [LINUX_EREMOTEIO] = EINVAL, /* XXX */ + [LINUX_EDQUOT] = EDQUOT, + [LINUX_ENOMEDIUM] = EIO, /* XXX */ + [LINUX_EMEDIUMTYPE] = EIO, /* XXX */ + [LINUX_ECANCELED] = ECANCELED, + [LINUX_ENOKEY] = EIO, /* XXX */ + [LINUX_EKEYEXPIRED] = EIO, /* XXX */ + [LINUX_EKEYREVOKED] = EIO, /* XXX */ + [LINUX_EKEYREJECTED] = EIO, /* XXX */ + + /* [130, 139] */ + [LINUX_EOWNERDEAD] = EOWNERDEAD, + [LINUX_ENOTRECOVERABLE] = ENOTRECOVERABLE, + [LINUX_ERFKILL] = ENETDOWN, /* XXX */ + [LINUX_EHWPOISON] = EINVAL, /* XXX */ +}; + +_Static_assert(LINUX_ELAST == 133, + "missing errno entries in linux_to_bsd_errtbl");