Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Mar 2018 12:58:50 +0000 (UTC)
From:      Ed Maste <emaste@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r331356 - in head: lib/libsysdecode sys/amd64/linux sys/amd64/linux32 sys/compat/linux sys/i386/linux sys/modules/linux_common
Message-ID:  <201803221258.w2MCwov4067050@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
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



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201803221258.w2MCwov4067050>