Share Linux errno table with libsysdecode
Requested by: jhb Reviewed by: jhb Sponsored by: Turing Robotic Industries Inc.
This commit is contained in:
parent
e1992aa142
commit
1ac2776bbb
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=331356
@ -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, int error)
|
||||
* 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, int error)
|
||||
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:
|
||||
|
@ -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,
|
||||
|
@ -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,
|
||||
|
@ -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_ */
|
||||
|
@ -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>
|
||||
|
148
sys/compat/linux/linux_errno.inc
Normal file
148
sys/compat/linux/linux_errno.inc
Normal file
@ -0,0 +1,148 @@
|
||||
/*-
|
||||
* 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$
|
||||
*/
|
||||
|
||||
/*
|
||||
* 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 linux_errtbl[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 linux_errtbl");
|
@ -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,
|
||||
|
@ -8,8 +8,8 @@ SRCS= linux_common.c linux_mib.c linux_mmap.c linux_util.c linux_emul.c \
|
||||
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
|
||||
|
Loading…
Reference in New Issue
Block a user