Author: emaste
Date: Thu Mar 22 12:58:49 2018
New Revision: 331356
URL: https://svnweb.freebsd.org/changeset/base/331356

Log:
  Share Linux errno table with libsysdecode
  
  Requested by: jhb
  Reviewed by:  jhb
  Sponsored by: Turing Robotic Industries Inc.

Added:
  head/sys/compat/linux/linux_errno.inc
     - copied, changed from r331355, head/sys/compat/linux/linux_errno.c
Modified:
  head/lib/libsysdecode/errno.c
  head/sys/amd64/linux/linux_sysvec.c
  head/sys/amd64/linux32/linux32_sysvec.c
  head/sys/compat/linux/linux_emul.h
  head/sys/compat/linux/linux_errno.c
  head/sys/i386/linux/linux_sysvec.c
  head/sys/modules/linux_common/Makefile

Modified: head/lib/libsysdecode/errno.c
==============================================================================
--- head/lib/libsysdecode/errno.c       Thu Mar 22 12:26:27 2018        
(r331355)
+++ head/lib/libsysdecode/errno.c       Thu Mar 22 12:58:49 2018        
(r331356)
@@ -37,25 +37,8 @@ __FBSDID("$FreeBSD$");
 #include <sysdecode.h>
 
 #if defined(__i386__) || defined(__amd64__)
-/*
- * Linux syscalls return negative errno's, we do positive and map them
- * Reference:
- *   FreeBSD: src/sys/sys/errno.h
- *   Linux:   include/uapi/asm-generic/errno-base.h
- *            include/uapi/asm-generic/errno.h
- */
-static int bsd_to_linux_errno[ELAST + 1] = {
-       -0,  -1,  -2,  -3,  -4,  -5,  -6,  -7,  -8,  -9,
-       -10, -35, -12, -13, -14, -15, -16, -17, -18, -19,
-       -20, -21, -22, -23, -24, -25, -26, -27, -28, -29,
-       -30, -31, -32, -33, -34, -11,-115,-114, -88, -89,
-       -90, -91, -92, -93, -94, -95, -96, -97, -98, -99,
-       -100,-101,-102,-103,-104,-105,-106,-107,-108,-109,
-       -110,-111, -40, -36,-112,-113, -39, -11, -87,-122,
-       -116, -66,  -6,  -6,  -6,  -6,  -6, -37, -38,  -9,
-         -6,  -6, -43, -42, -75,-125, -84, -61, -16, -74,
-        -72, -67, -71,  -1,  -1, -131, -130
-};
+static
+#include <compat/linux/linux_errno.inc>
 #endif
 
 #include <contrib/cloudabi/cloudabi_types_common.h>
@@ -156,8 +139,8 @@ sysdecode_abi_to_freebsd_errno(enum sysdecode_abi abi,
                 * This is imprecise since it returns the first
                 * matching errno.
                 */
-               for (i = 0; i < nitems(bsd_to_linux_errno); i++) {
-                       if (error == bsd_to_linux_errno[i])
+               for (i = 0; i < nitems(linux_errtbl); i++) {
+                       if (error == linux_errtbl[i])
                                return (i);
                }
                break;
@@ -187,7 +170,7 @@ sysdecode_freebsd_to_abi_errno(enum sysdecode_abi abi,
        case SYSDECODE_ABI_LINUX:
        case SYSDECODE_ABI_LINUX32:
                if (error >= 0 && error <= ELAST)
-                       return (bsd_to_linux_errno[error]);
+                       return (linux_errtbl[error]);
                break;
 #endif
        case SYSDECODE_ABI_CLOUDABI32:

Modified: head/sys/amd64/linux/linux_sysvec.c
==============================================================================
--- head/sys/amd64/linux/linux_sysvec.c Thu Mar 22 12:26:27 2018        
(r331355)
+++ head/sys/amd64/linux/linux_sysvec.c Thu Mar 22 12:58:49 2018        
(r331356)
@@ -752,7 +752,7 @@ struct sysentvec elf_linux_sysvec = {
        .sv_table       = linux_sysent,
        .sv_mask        = 0,
        .sv_errsize     = ELAST + 1,
-       .sv_errtbl      = bsd_to_linux_errno_generic,
+       .sv_errtbl      = linux_errtbl,
        .sv_transtrap   = linux_translate_traps,
        .sv_fixup       = linux_fixup_elf,
        .sv_sendsig     = linux_rt_sendsig,

Modified: head/sys/amd64/linux32/linux32_sysvec.c
==============================================================================
--- head/sys/amd64/linux32/linux32_sysvec.c     Thu Mar 22 12:26:27 2018        
(r331355)
+++ head/sys/amd64/linux32/linux32_sysvec.c     Thu Mar 22 12:58:49 2018        
(r331356)
@@ -952,7 +952,7 @@ struct sysentvec elf_linux_sysvec = {
        .sv_table       = linux32_sysent,
        .sv_mask        = 0,
        .sv_errsize     = ELAST + 1,
-       .sv_errtbl      = bsd_to_linux_errno_generic,
+       .sv_errtbl      = linux_errtbl,
        .sv_transtrap   = linux_translate_traps,
        .sv_fixup       = linux_fixup_elf,
        .sv_sendsig     = linux_sendsig,

Modified: head/sys/compat/linux/linux_emul.h
==============================================================================
--- head/sys/compat/linux/linux_emul.h  Thu Mar 22 12:26:27 2018        
(r331355)
+++ head/sys/compat/linux/linux_emul.h  Thu Mar 22 12:58:49 2018        
(r331356)
@@ -77,6 +77,6 @@ struct linux_pemuldata {
 
 struct linux_pemuldata *pem_find(struct proc *);
 
-extern const int bsd_to_linux_errno_generic[];
+extern const int linux_errtbl[];
 
 #endif /* !_LINUX_EMUL_H_ */

Modified: head/sys/compat/linux/linux_errno.c
==============================================================================
--- head/sys/compat/linux/linux_errno.c Thu Mar 22 12:26:27 2018        
(r331355)
+++ head/sys/compat/linux/linux_errno.c Thu Mar 22 12:58:49 2018        
(r331356)
@@ -1,151 +1,6 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 1994-1996 Søren Schmidt
- * All rights reserved.
- *
- * 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$
- */
+/* $FreeBSD$ */
 
 #include <sys/cdefs.h>
 #include <sys/errno.h>
 
-/*
- * Linux syscalls return negative errno's, we do positive and map them
- * Reference:
- *   FreeBSD: src/sys/sys/errno.h
- *   Linux:   include/uapi/asm-generic/errno-base.h
- *            include/uapi/asm-generic/errno.h
- */
-const int bsd_to_linux_errno_generic[ELAST + 1] = {
-       -0,
-       -1,
-       -2,
-       -3,
-       -4,
-       -5,
-       -6,
-       -7,
-       -8,
-       -9,
-
-       -10,
-       -35,    /* EDEADLK */
-       -12,
-       -13,
-       -14,
-       -15,
-       -16,
-       -17,
-       -18,
-       -19,
-
-       -20,
-       -21,
-       -22,
-       -23,
-       -24,
-       -25,
-       -26,
-       -27,
-       -28,
-       -29,
-
-       -30,
-       -31,
-       -32,
-       -33,
-       -34,
-       -11,    /* EAGAIN */
-       -115,
-       -114,
-       -88,
-       -89,
-
-       -90,
-       -91,
-       -92,
-       -93,
-       -94,
-       -95,
-       -96,
-       -97,
-       -98,
-       -99,
-
-       -100,
-       -101,
-       -102,
-       -103,
-       -104,
-       -105,
-       -106,
-       -107,
-       -108,
-       -109,
-
-       -110,
-       -111,
-       -40,
-       -36,
-       -112,
-       -113,
-       -39,
-       -11,
-       -87,
-       -122,
-
-       -116,
-       -66,
-       -6,     /* EBADRPC -> ENXIO */
-       -6,     /* ERPCMISMATCH -> ENXIO */
-       -6,     /* EPROGUNAVAIL -> ENXIO */
-       -6,     /* EPROGMISMATCH -> ENXIO */
-       -6,     /* EPROCUNAVAIL -> ENXIO */
-       -37,
-       -38,
-       -9,
-
-       -6,     /* EAUTH -> ENXIO */
-       -6,     /* ENEEDAUTH -> ENXIO */
-       -43,
-       -42,
-       -75,
-       -125,
-       -84,
-       -61,
-       -16,    /* EDOOFUS -> EBUSY */
-       -74,
-
-       -72,
-       -67,
-       -71,
-       -1,     /* ENOTCAPABLE -> EPERM */
-       -1,     /* ECAPMODE -> EPERM */
-       -131,   /* ENOTRECOVERABLE */
-       -130,   /* EOWNERDEAD */
-};
-
-_Static_assert(ELAST == 96,
-    "missing errno entries in bsd_to_linux_errno_generic");
+#include <compat/linux/linux_errno.inc>

Copied and modified: head/sys/compat/linux/linux_errno.inc (from r331355, 
head/sys/compat/linux/linux_errno.c)
==============================================================================
--- head/sys/compat/linux/linux_errno.c Thu Mar 22 12:26:27 2018        
(r331355, copy source)
+++ head/sys/compat/linux/linux_errno.inc       Thu Mar 22 12:58:49 2018        
(r331356)
@@ -28,9 +28,6 @@
  * $FreeBSD$
  */
 
-#include <sys/cdefs.h>
-#include <sys/errno.h>
-
 /*
  * Linux syscalls return negative errno's, we do positive and map them
  * Reference:
@@ -38,7 +35,7 @@
  *   Linux:   include/uapi/asm-generic/errno-base.h
  *            include/uapi/asm-generic/errno.h
  */
-const int bsd_to_linux_errno_generic[ELAST + 1] = {
+const int linux_errtbl[ELAST + 1] = {
        -0,
        -1,
        -2,
@@ -148,4 +145,4 @@ const int bsd_to_linux_errno_generic[ELAST + 1] = {
 };
 
 _Static_assert(ELAST == 96,
-    "missing errno entries in bsd_to_linux_errno_generic");
+    "missing errno entries in linux_errtbl");

Modified: head/sys/i386/linux/linux_sysvec.c
==============================================================================
--- head/sys/i386/linux/linux_sysvec.c  Thu Mar 22 12:26:27 2018        
(r331355)
+++ head/sys/i386/linux/linux_sysvec.c  Thu Mar 22 12:58:49 2018        
(r331356)
@@ -893,7 +893,7 @@ struct sysentvec linux_sysvec = {
        .sv_table       = linux_sysent,
        .sv_mask        = 0,
        .sv_errsize     = ELAST + 1,
-       .sv_errtbl      = bsd_to_linux_errno_generic,
+       .sv_errtbl      = linux_errtbl,
        .sv_transtrap   = linux_translate_traps,
        .sv_fixup       = linux_fixup,
        .sv_sendsig     = linux_sendsig,
@@ -930,7 +930,7 @@ struct sysentvec elf_linux_sysvec = {
        .sv_table       = linux_sysent,
        .sv_mask        = 0,
        .sv_errsize     = ELAST + 1,
-       .sv_errtbl      = bsd_to_linux_errno_generic,
+       .sv_errtbl      = linux_errtbl,
        .sv_transtrap   = linux_translate_traps,
        .sv_fixup       = linux_fixup_elf,
        .sv_sendsig     = linux_sendsig,

Modified: head/sys/modules/linux_common/Makefile
==============================================================================
--- head/sys/modules/linux_common/Makefile      Thu Mar 22 12:26:27 2018        
(r331355)
+++ head/sys/modules/linux_common/Makefile      Thu Mar 22 12:58:49 2018        
(r331356)
@@ -8,8 +8,8 @@ SRCS=   linux_common.c linux_mib.c linux_mmap.c linux_ut
        linux.c opt_compat.h device_if.h vnode_if.h bus_if.h
 
 EXPORT_SYMS=
-EXPORT_SYMS+=  bsd_to_linux_errno_generic
 EXPORT_SYMS+=  linux_emul_path
+EXPORT_SYMS+=  linux_errtbl
 EXPORT_SYMS+=  linux_ioctl_register_handler
 EXPORT_SYMS+=  linux_ioctl_unregister_handler
 EXPORT_SYMS+=  linux_get_osname
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to