svn commit: r367132 - in head: lib/libsysdecode sys/compat/linux
Edward Tomasz Napierala
trasz at FreeBSD.org
Thu Oct 29 14:23:54 UTC 2020
Author: trasz
Date: Thu Oct 29 14:23:52 2020
New Revision: 367132
URL: https://svnweb.freebsd.org/changeset/base/367132
Log:
Add defines for Linux errno values and use them to make linux_errtbl[]
more readable. While here, add linux_check_errtbl() function to make
sure we don't leave holes.
No objections: emaste (earlier version)
MFC after: 2 weeks
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D26972
Added:
head/sys/compat/linux/linux_errno.h (contents, props changed)
Modified:
head/lib/libsysdecode/errno.c
head/sys/compat/linux/linux.h
head/sys/compat/linux/linux_common.c
head/sys/compat/linux/linux_errno.c
head/sys/compat/linux/linux_errno.inc
Modified: head/lib/libsysdecode/errno.c
==============================================================================
--- head/lib/libsysdecode/errno.c Thu Oct 29 14:21:25 2020 (r367131)
+++ head/lib/libsysdecode/errno.c Thu Oct 29 14:23:52 2020 (r367132)
@@ -36,6 +36,7 @@ __FBSDID("$FreeBSD$");
#include <sysdecode.h>
#if defined(__aarch64__) || defined(__amd64__) || defined(__i386__)
+#include <compat/linux/linux_errno.h>
static
#include <compat/linux/linux_errno.inc>
#endif
Modified: head/sys/compat/linux/linux.h
==============================================================================
--- head/sys/compat/linux/linux.h Thu Oct 29 14:21:25 2020 (r367131)
+++ head/sys/compat/linux/linux.h Thu Oct 29 14:23:52 2020 (r367132)
@@ -197,5 +197,6 @@ int linux_to_bsd_bits_(int value, struct bsd_to_linux_
#define BITMAP_1t1_LINUX(_name) BITMAP_EASY_LINUX(_name, LINUX_##_name)
int bsd_to_linux_errno(int error);
+void linux_check_errtbl(void);
#endif /* _LINUX_MI_H_ */
Modified: head/sys/compat/linux/linux_common.c
==============================================================================
--- head/sys/compat/linux/linux_common.c Thu Oct 29 14:21:25 2020 (r367131)
+++ head/sys/compat/linux/linux_common.c Thu Oct 29 14:23:52 2020 (r367132)
@@ -67,6 +67,9 @@ linux_common_modevent(module_t mod, int type, void *da
switch(type) {
case MOD_LOAD:
+#ifdef INVARIANTS
+ linux_check_errtbl();
+#endif
linux_dev_shm_create();
linux_osd_jail_register();
linux_exit_tag = EVENTHANDLER_REGISTER(process_exit,
Modified: head/sys/compat/linux/linux_errno.c
==============================================================================
--- head/sys/compat/linux/linux_errno.c Thu Oct 29 14:21:25 2020 (r367131)
+++ head/sys/compat/linux/linux_errno.c Thu Oct 29 14:23:52 2020 (r367132)
@@ -8,6 +8,7 @@ __FBSDID("$FreeBSD$");
#include <sys/systm.h>
#include <compat/linux/linux.h>
+#include <compat/linux/linux_errno.h>
#include <compat/linux/linux_errno.inc>
int
@@ -19,3 +20,16 @@ bsd_to_linux_errno(int error)
return (linux_errtbl[error]);
}
+
+#ifdef INVARIANTS
+void
+linux_check_errtbl(void)
+{
+ int i;
+
+ for (i = 1; i < sizeof(linux_errtbl); i++) {
+ KASSERT(linux_errtbl[i] != 0,
+ ("%s: linux_errtbl[%d] == 0", __func__, i));
+ }
+}
+#endif
Added: head/sys/compat/linux/linux_errno.h
==============================================================================
--- /dev/null 00:00:00 1970 (empty, because file is newly added)
+++ head/sys/compat/linux/linux_errno.h Thu Oct 29 14:23:52 2020 (r367132)
@@ -0,0 +1,183 @@
+/*-
+ * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
+ *
+ * Copyright (c) 2020 The FreeBSD Foundation
+ *
+ * This software was developed by Edward Tomasz Napierala under sponsorship
+ * from the FreeBSD Foundation.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _LINUX_ERRNO_H_
+#define _LINUX_ERRNO_H_
+
+#define LINUX_EPERM 1
+#define LINUX_ENOENT 2
+#define LINUX_ESRCH 3
+#define LINUX_EINTR 4
+#define LINUX_EIO 5
+#define LINUX_ENXIO 6
+#define LINUX_E2BIG 7
+#define LINUX_ENOEXEC 8
+#define LINUX_EBADF 9
+
+#define LINUX_ECHILD 10
+#define LINUX_EAGAIN 11
+#define LINUX_ENOMEM 12
+#define LINUX_EACCES 13
+#define LINUX_EFAULT 14
+#define LINUX_ENOTBLK 15
+#define LINUX_EBUSY 16
+#define LINUX_EEXIST 17
+#define LINUX_EXDEV 18
+#define LINUX_ENODEV 19
+
+#define LINUX_ENOTDIR 20
+#define LINUX_EISDIR 21
+#define LINUX_EINVAL 22
+#define LINUX_ENFILE 23
+#define LINUX_EMFILE 24
+#define LINUX_ENOTTY 25
+#define LINUX_ETXTBSY 26
+#define LINUX_EFBIG 27
+#define LINUX_ENOSPC 28
+#define LINUX_ESPIPE 29
+
+#define LINUX_EROFS 30
+#define LINUX_EMLINK 31
+#define LINUX_EPIPE 32
+#define LINUX_EDOM 33
+#define LINUX_ERANGE 34
+#define LINUX_EDEADLK 35
+#define LINUX_ENAMETOOLONG 36
+#define LINUX_ENOLCK 37
+#define LINUX_ENOSYS 38
+#define LINUX_ENOTEMPTY 39
+
+#define LINUX_ELOOP 40
+/* XXX: errno 41 is not defined in Linux. */
+#define LINUX_ENOMSG 42
+#define LINUX_EIDRM 43
+#define LINUX_ECHRNG 44
+#define LINUX_EL2NSYNC 45
+#define LINUX_EL3HLT 46
+#define LINUX_EL3RST 47
+#define LINUX_ELNRNG 48
+#define LINUX_EUNATCH 49
+
+#define LINUX_ENOCSI 50
+#define LINUX_L2HLT 51
+#define LINUX_EBADE 52
+#define LINUX_EBADR 53
+#define LINUX_EXFULL 54
+#define LINUX_ENOANO 55
+#define LINUX_EBADRQC 56
+#define LINUX_EBADSLT 57
+/* XXX: errno 58 is not defined in Linux. */
+#define LINUX_EBFONT 59
+
+#define LINUX_ENOSTR 60
+#define LINUX_ENODATA 61
+#define LINUX_ENOTIME 62
+#define LINUX_ENOSR 63
+#define LINUX_ENONET 64
+#define LINUX_ENOPKG 65
+#define LINUX_EREMOTE 66
+#define LINUX_ENOLINK 67
+#define LINUX_EADV 68
+#define LINUX_ESRMNT 69
+
+#define LINUX_ECOMM 70
+#define LINUX_EPROTO 71
+#define LINUX_EMULTIHOP 72
+#define LINUX_EDOTDOT 73
+#define LINUX_EBADMSG 74
+#define LINUX_EOVERFLOW 75
+#define LINUX_ENOTUNIQ 76
+#define LINUX_EBADFD 77
+#define LINUX_EREMCHG 78
+#define LINUX_ELIBACC 79
+
+#define LINUX_ELIBBAD 80
+#define LINUX_ELIBSCN 81
+#define LINUX_ELIBMAX 82
+#define LINUX_ELIBEXEC 83
+#define LINUX_EILSEQ 84
+#define LINUX_ERESTART 85
+#define LINUX_ESTRPIPE 86
+#define LINUX_EUSERS 87
+#define LINUX_ENOTSOCK 88
+#define LINUX_EDESTADDRREQ 89
+
+#define LINUX_EMSGSIZE 90
+#define LINUX_EPROTOTYPE 91
+#define LINUX_ENOPROTOOPT 92
+#define LINUX_EPROTONOTSUPPORT 93
+#define LINUX_ESOCKNOTSUPPORT 94
+#define LINUX_EOPNOTSUPPORT 95
+#define LINUX_EPFNOTSUPPORT 96
+#define LINUX_EAFNOTSUPPORT 97
+#define LINUX_EADDRINUSE 98
+#define LINUX_EADDRNOTAVAIL 99
+
+#define LINUX_ENETDOWN 100
+#define LINUX_ENETUNREACH 101
+#define LINUX_ENETRESET 102
+#define LINUX_ECONNABORTED 103
+#define LINUX_ECONNRESET 104
+#define LINUX_ENOBUFS 105
+#define LINUX_EISCONN 106
+#define LINUX_ENOTCONN 107
+#define LINUX_ESHUTDOWN 108
+#define LINUX_ETOOMANYREFS 109
+
+#define LINUX_ETIMEDOUT 110
+#define LINUX_ECONNREFUSED 111
+#define LINUX_EHOSTDOWN 112
+#define LINUX_EHOSTUNREACH 113
+#define LINUX_EALREADY 114
+#define LINUX_EINPROGRESS 115
+#define LINUX_ESTALE 116
+#define LINUX_EUCLEAN 117
+#define LINUX_ENOTNAM 118
+#define LINUX_ENAVAIL 119
+
+#define LINUX_EISNAM 120
+#define LINUX_EREMOTEIO 121
+#define LINUX_EDQUOT 122
+#define LINUX_ENOMEDIUM 123
+#define LINUX_EMEDIUMTYPE 124
+#define LINUX_ECANCELED 125
+#define LINUX_ENOKEY 126
+#define LINUX_EKEYEXPIRED 127
+#define LINUX_EKEYREVOKED 128
+#define LINUX_EKEYREJECTED 129
+
+#define LINUX_EOWNERDEAD 130
+#define LINUX_ENOTRECOVERABLE 131
+#define LINUX_ERFKILL 132
+#define LINUX_EHWPOISON 133
+
+#endif /* _LINUX_ERRNO_H_ */
Modified: head/sys/compat/linux/linux_errno.inc
==============================================================================
--- head/sys/compat/linux/linux_errno.inc Thu Oct 29 14:21:25 2020 (r367131)
+++ head/sys/compat/linux/linux_errno.inc Thu Oct 29 14:23:52 2020 (r367132)
@@ -34,125 +34,128 @@
* FreeBSD: src/sys/sys/errno.h
* Linux: include/uapi/asm-generic/errno-base.h
* include/uapi/asm-generic/errno.h
+ *
+ * XXX: The "XXX" comments below should be replaced with rationale
+ * for the errno value chosen.
*/
const int linux_errtbl[ELAST + 1] = {
/* [0, 9] */
[0] = -0,
- [EPERM] = -1,
- [ENOENT] = -2,
- [ESRCH] = -3,
- [EINTR] = -4,
- [EIO] = -5,
- [ENXIO] = -6,
- [E2BIG] = -7,
- [ENOEXEC] = -8,
- [EBADF] = -9,
+ [EPERM] = -LINUX_EPERM,
+ [ENOENT] = -LINUX_ENOENT,
+ [ESRCH] = -LINUX_ESRCH,
+ [EINTR] = -LINUX_EINTR,
+ [EIO] = -LINUX_EIO,
+ [ENXIO] = -LINUX_ENXIO,
+ [E2BIG] = -LINUX_E2BIG,
+ [ENOEXEC] = -LINUX_ENOEXEC,
+ [EBADF] = -LINUX_EBADF,
/* [10, 19] */
- [ECHILD] = -10,
- [EDEADLK] = -35,
- [ENOMEM] = -12,
- [EACCES] = -13,
- [EFAULT] = -14,
- [ENOTBLK] = -15,
- [EBUSY] = -16,
- [EEXIST] = -17,
- [EXDEV] = -18,
- [ENODEV] = -19,
+ [ECHILD] = -LINUX_ECHILD,
+ [EDEADLK] = -LINUX_EDEADLK,
+ [ENOMEM] = -LINUX_ENOMEM,
+ [EACCES] = -LINUX_EACCES,
+ [EFAULT] = -LINUX_EFAULT,
+ [ENOTBLK] = -LINUX_ENOTBLK,
+ [EBUSY] = -LINUX_EBUSY,
+ [EEXIST] = -LINUX_EEXIST,
+ [EXDEV] = -LINUX_EXDEV,
+ [ENODEV] = -LINUX_ENODEV,
/* [20, 29] */
- [ENOTDIR] = -20,
- [EISDIR] = -21,
- [EINVAL] = -22,
- [ENFILE] = -23,
- [EMFILE] = -24,
- [ENOTTY] = -25,
- [ETXTBSY] = -26,
- [EFBIG] = -27,
- [ENOSPC] = -28,
- [ESPIPE] = -29,
+ [ENOTDIR] = -LINUX_ENOTDIR,
+ [EISDIR] = -LINUX_EISDIR,
+ [EINVAL] = -LINUX_EINVAL,
+ [ENFILE] = -LINUX_ENFILE,
+ [EMFILE] = -LINUX_EMFILE,
+ [ENOTTY] = -LINUX_ENOTTY,
+ [ETXTBSY] = -LINUX_ETXTBSY,
+ [EFBIG] = -LINUX_EFBIG,
+ [ENOSPC] = -LINUX_ENOSPC,
+ [ESPIPE] = -LINUX_ESPIPE,
/* [30, 39] */
- [EROFS] = -30,
- [EMLINK] = -31,
- [EPIPE] = -32,
- [EDOM] = -33,
- [ERANGE] = -34,
- [EAGAIN] = -11,
- [EINPROGRESS] = -115,
- [EALREADY] = -114,
- [ENOTSOCK] = -88,
- [EDESTADDRREQ] = -89,
+ [EROFS] = -LINUX_EROFS,
+ [EMLINK] = -LINUX_EMLINK,
+ [EPIPE] = -LINUX_EPIPE,
+ [EDOM] = -LINUX_EDOM,
+ [ERANGE] = -LINUX_ERANGE,
+ [EAGAIN] = -LINUX_EAGAIN,
+ [EINPROGRESS] = -LINUX_EINPROGRESS,
+ [EALREADY] = -LINUX_EALREADY,
+ [ENOTSOCK] = -LINUX_ENOTSOCK,
+ [EDESTADDRREQ] = -LINUX_EDESTADDRREQ,
/* [40, 49] */
- [EMSGSIZE] = -90,
- [EPROTOTYPE] = -91,
- [ENOPROTOOPT] = -92,
- [EPROTONOSUPPORT] = -93,
- [ESOCKTNOSUPPORT] = -94,
- [EOPNOTSUPP] = -95,
- [EPFNOSUPPORT] = -96,
- [EAFNOSUPPORT] = -97,
- [EADDRINUSE] = -98,
- [EADDRNOTAVAIL] = -99,
+ [EMSGSIZE] = -LINUX_EMSGSIZE,
+ [EPROTOTYPE] = -LINUX_EPROTOTYPE,
+ [ENOPROTOOPT] = -LINUX_ENOPROTOOPT,
+ [EPROTONOSUPPORT] = -LINUX_EPROTONOTSUPPORT,
+ [ESOCKTNOSUPPORT] = -LINUX_ESOCKNOTSUPPORT,
+ [EOPNOTSUPP] = -LINUX_EOPNOTSUPPORT,
+ [EPFNOSUPPORT] = -LINUX_EPFNOTSUPPORT,
+ [EAFNOSUPPORT] = -LINUX_EAFNOTSUPPORT,
+ [EADDRINUSE] = -LINUX_EADDRINUSE,
+ [EADDRNOTAVAIL] = -LINUX_EADDRNOTAVAIL,
/* [50, 59] */
- [ENETDOWN] = -100,
- [ENETUNREACH] = -101,
- [ENETRESET] = -102,
- [ECONNABORTED] = -103,
- [ECONNRESET] = -104,
- [ENOBUFS] = -105,
- [EISCONN] = -106,
- [ENOTCONN] = -107,
- [ESHUTDOWN] = -108,
- [ETOOMANYREFS] = -109,
+ [ENETDOWN] = -LINUX_ENETDOWN,
+ [ENETUNREACH] = -LINUX_ENETUNREACH,
+ [ENETRESET] = -LINUX_ENETRESET,
+ [ECONNABORTED] = -LINUX_ECONNABORTED,
+ [ECONNRESET] = -LINUX_ECONNRESET,
+ [ENOBUFS] = -LINUX_ENOBUFS,
+ [EISCONN] = -LINUX_EISCONN,
+ [ENOTCONN] = -LINUX_ENOTCONN,
+ [ESHUTDOWN] = -LINUX_ESHUTDOWN,
+ [ETOOMANYREFS] = -LINUX_ETOOMANYREFS,
/* [60, 69] */
- [ETIMEDOUT] = -110,
- [ECONNREFUSED] = -111,
- [ELOOP] = -40,
- [ENAMETOOLONG] = -36,
- [EHOSTDOWN] = -112,
- [EHOSTUNREACH] = -113,
- [ENOTEMPTY] = -39,
- [EPROCLIM] = -11,
- [EUSERS] = -87,
- [EDQUOT] = -122,
+ [ETIMEDOUT] = -LINUX_ETIMEDOUT,
+ [ECONNREFUSED] = -LINUX_ECONNREFUSED,
+ [ELOOP] = -LINUX_ELOOP,
+ [ENAMETOOLONG] = -LINUX_ENAMETOOLONG,
+ [EHOSTDOWN] = -LINUX_EHOSTDOWN,
+ [EHOSTUNREACH] = -LINUX_EHOSTUNREACH,
+ [ENOTEMPTY] = -LINUX_ENOTEMPTY,
+ [EPROCLIM] = -LINUX_EAGAIN, /* XXX */
+ [EUSERS] = -LINUX_EUSERS,
+ [EDQUOT] = -LINUX_EDQUOT,
/* [70, 79] */
- [ESTALE] = -116,
- [EREMOTE] = -66,
- [EBADRPC] = -6, /* EBADRPC -> ENXIO */
- [ERPCMISMATCH] = -6, /* ERPCMISMATCH -> ENXIO */
- [EPROGUNAVAIL] = -6, /* EPROGUNAVAIL -> ENXIO */
- [EPROGMISMATCH] = -6, /* EPROGMISMATCH -> ENXIO */
- [EPROCUNAVAIL] = -6, /* EPROCUNAVAIL -> ENXIO */
- [ENOLCK] = -37,
- [ENOSYS] = -38,
- [EFTYPE] = -9,
+ [ESTALE] = -LINUX_ESTALE,
+ [EREMOTE] = -LINUX_EREMOTE,
+ [EBADRPC] = -LINUX_ENXIO, /* XXX */
+ [ERPCMISMATCH] = -LINUX_ENXIO, /* XXX */
+ [EPROGUNAVAIL] = -LINUX_ENXIO, /* XXX */
+ [EPROGMISMATCH] = -LINUX_ENXIO, /* XXX */
+ [EPROCUNAVAIL] = -LINUX_ENXIO, /* XXX */
+ [ENOLCK] = -LINUX_ENOLCK,
+ [ENOSYS] = -LINUX_ENOSYS,
+ [EFTYPE] = -LINUX_EBADF, /* XXX */
/* [80, 89] */
- [EAUTH] = -6, /* EAUTH -> ENXIO */
- [ENEEDAUTH] = -6, /* ENEEDAUTH -> ENXIO */
- [EIDRM] = -43,
- [ENOMSG] = -42,
- [EOVERFLOW] = -75,
- [ECANCELED] = -125,
- [EILSEQ] = -84,
- [ENOATTR] = -61,
- [EDOOFUS] = -22, /* EDOOFUS -> EINVAL */
- [EBADMSG] = -74,
+ [EAUTH] = -LINUX_ENXIO, /* XXX */
+ [ENEEDAUTH] = -LINUX_ENXIO, /* XXX */
+ [EIDRM] = -LINUX_EIDRM,
+ [ENOMSG] = -LINUX_ENOMSG,
+ [EOVERFLOW] = -LINUX_EOVERFLOW,
+ [ECANCELED] = -LINUX_ECANCELED,
+ [EILSEQ] = -LINUX_EILSEQ,
+ [ENOATTR] = -LINUX_ENODATA, /* XXX */
+ [EDOOFUS] = -LINUX_EINVAL, /* XXX */
+ [EBADMSG] = -LINUX_EBADMSG,
/* [90, 99] */
- [EMULTIHOP] = -72,
- [ENOLINK] = -67,
- [EPROTO] = -71,
- [ENOTCAPABLE] = -1, /* ENOTCAPABLE -> EPERM */
- [ECAPMODE] = -1, /* ECAPMODE -> EPERM */
- [ENOTRECOVERABLE] = -131, /* ENOTRECOVERABLE */
- [EOWNERDEAD] = -130, /* EOWNERDEAD */
- [EINTEGRITY] = -22, /* EINTEGRITY -> EINVAL */
+ [EMULTIHOP] = -LINUX_EMULTIHOP,
+ [ENOLINK] = -LINUX_ENOLINK,
+ [EPROTO] = -LINUX_EPROTO,
+ [ENOTCAPABLE] = -LINUX_EPERM, /* XXX */
+ [ECAPMODE] = -LINUX_EPERM, /* XXX */
+ [ENOTRECOVERABLE] = -LINUX_ENOTRECOVERABLE,
+ [EOWNERDEAD] = -LINUX_EOWNERDEAD,
+ [EINTEGRITY] = -LINUX_EINVAL, /* XXX */
};
_Static_assert(ELAST == 97,
More information about the svn-src-all
mailing list