svn commit: r346823 - in stable/11: lib/libsysdecode sys/amd64/linux sys/amd64/linux32 sys/compat/linux sys/conf sys/i386/linux sys/modules/linux sys/modules/linux_common
Dmitry Chagin
dchagin at FreeBSD.org
Sun Apr 28 13:33:39 UTC 2019
Author: dchagin
Date: Sun Apr 28 13:33:35 2019
New Revision: 346823
URL: https://svnweb.freebsd.org/changeset/base/346823
Log:
MFC r331056:
Share a single bsd-linux errno table across MD consumers
Three copies of the linuxulator linux_sysvec.c contained identical
BSD to Linux errno translation tables, and future work to support other
architectures will also use the same table. Move the table to a common
file to be used by all. Make it 'const int' to place it in .rodata.
(Some existing Linux architectures use MD errno values, but x86 and Arm
share the generic set.)
This change should introduce no functional change; a followup will add
missing errno values.
MFC r331057:
linux_errno.c: add newer errno values
Also introduce a static assert to ensure the list is kept up to date.
MFC r331060:
Chase r331057 in libsysdecode erno table
Added:
stable/11/sys/compat/linux/linux_errno.c
- copied, changed from r331056, head/sys/compat/linux/linux_errno.c
Modified:
stable/11/lib/libsysdecode/errno.c
stable/11/sys/amd64/linux/linux_sysvec.c
stable/11/sys/amd64/linux32/linux32_sysvec.c
stable/11/sys/compat/linux/linux_emul.h
stable/11/sys/conf/files.amd64
stable/11/sys/conf/files.i386
stable/11/sys/i386/linux/linux_sysvec.c
stable/11/sys/modules/linux/Makefile
stable/11/sys/modules/linux_common/Makefile
Directory Properties:
stable/11/ (props changed)
Modified: stable/11/lib/libsysdecode/errno.c
==============================================================================
--- stable/11/lib/libsysdecode/errno.c Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/lib/libsysdecode/errno.c Sun Apr 28 13:33:35 2019 (r346823)
@@ -41,8 +41,8 @@ __FBSDID("$FreeBSD$");
* Linux syscalls return negative errno's, we do positive and map them
* Reference:
* FreeBSD: src/sys/sys/errno.h
- * Linux: linux-2.6.17.8/include/asm-generic/errno-base.h
- * linux-2.6.17.8/include/asm-generic/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,
@@ -54,7 +54,7 @@ static int bsd_to_linux_errno[ELAST + 1] = {
-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
+ -72, -67, -71, -1, -1, -131, -130
};
#endif
Modified: stable/11/sys/amd64/linux/linux_sysvec.c
==============================================================================
--- stable/11/sys/amd64/linux/linux_sysvec.c Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/amd64/linux/linux_sysvec.c Sun Apr 28 13:33:35 2019 (r346823)
@@ -130,26 +130,6 @@ static void linux_exec_setregs(struct thread *td, stru
u_long stack);
static int linux_vsyscall(struct thread *td);
-/*
- * Linux syscalls return negative errno's, we do positive and map them
- * Reference:
- * FreeBSD: src/sys/sys/errno.h
- * Linux: linux-2.6.17.8/include/asm-generic/errno-base.h
- * linux-2.6.17.8/include/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
-};
-
#define LINUX_T_UNKNOWN 255
static int _bsd_to_linux_trapcode[] = {
LINUX_T_UNKNOWN, /* 0 */
@@ -773,7 +753,7 @@ struct sysentvec elf_linux_sysvec = {
.sv_table = linux_sysent,
.sv_mask = 0,
.sv_errsize = ELAST + 1,
- .sv_errtbl = bsd_to_linux_errno,
+ .sv_errtbl = bsd_to_linux_errno_generic,
.sv_transtrap = translate_traps,
.sv_fixup = elf_linux_fixup,
.sv_sendsig = linux_rt_sendsig,
Modified: stable/11/sys/amd64/linux32/linux32_sysvec.c
==============================================================================
--- stable/11/sys/amd64/linux32/linux32_sysvec.c Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/amd64/linux32/linux32_sysvec.c Sun Apr 28 13:33:35 2019 (r346823)
@@ -131,26 +131,6 @@ static bool linux32_trans_osrel(const Elf_Note *note,
static void linux_vdso_install(void *param);
static void linux_vdso_deinstall(void *param);
-/*
- * Linux syscalls return negative errno's, we do positive and map them
- * Reference:
- * FreeBSD: src/sys/sys/errno.h
- * Linux: linux-2.6.17.8/include/asm-generic/errno-base.h
- * linux-2.6.17.8/include/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
-};
-
#define LINUX_T_UNKNOWN 255
static int _bsd_to_linux_trapcode[] = {
LINUX_T_UNKNOWN, /* 0 */
@@ -973,7 +953,7 @@ struct sysentvec elf_linux_sysvec = {
.sv_table = linux32_sysent,
.sv_mask = 0,
.sv_errsize = ELAST + 1,
- .sv_errtbl = bsd_to_linux_errno,
+ .sv_errtbl = bsd_to_linux_errno_generic,
.sv_transtrap = translate_traps,
.sv_fixup = elf_linux_fixup,
.sv_sendsig = linux_sendsig,
Modified: stable/11/sys/compat/linux/linux_emul.h
==============================================================================
--- stable/11/sys/compat/linux/linux_emul.h Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/compat/linux/linux_emul.h Sun Apr 28 13:33:35 2019 (r346823)
@@ -77,4 +77,6 @@ struct linux_pemuldata {
struct linux_pemuldata *pem_find(struct proc *);
+extern const int bsd_to_linux_errno_generic[];
+
#endif /* !_LINUX_EMUL_H_ */
Copied and modified: stable/11/sys/compat/linux/linux_errno.c (from r331056, head/sys/compat/linux/linux_errno.c)
==============================================================================
--- head/sys/compat/linux/linux_errno.c Fri Mar 16 14:46:38 2018 (r331056, copy source)
+++ stable/11/sys/compat/linux/linux_errno.c Sun Apr 28 13:33:35 2019 (r346823)
@@ -28,14 +28,15 @@
* $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: linux-2.6.17.8/include/asm-generic/errno-base.h
- * linux-2.6.17.8/include/asm-generic/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,
@@ -140,4 +141,11 @@ const int bsd_to_linux_errno_generic[ELAST + 1] = {
-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");
Modified: stable/11/sys/conf/files.amd64
==============================================================================
--- stable/11/sys/conf/files.amd64 Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/conf/files.amd64 Sun Apr 28 13:33:35 2019 (r346823)
@@ -623,6 +623,7 @@ amd64/linux32/linux32_support.s optional compat_linux3
amd64/linux32/linux32_sysent.c optional compat_linux32
amd64/linux32/linux32_sysvec.c optional compat_linux32
compat/linux/linux_emul.c optional compat_linux32
+compat/linux/linux_errno.c optional compat_linux32
compat/linux/linux_file.c optional compat_linux32
compat/linux/linux_fork.c optional compat_linux32
compat/linux/linux_futex.c optional compat_linux32
Modified: stable/11/sys/conf/files.i386
==============================================================================
--- stable/11/sys/conf/files.i386 Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/conf/files.i386 Sun Apr 28 13:33:35 2019 (r346823)
@@ -100,6 +100,7 @@ compat/linprocfs/linprocfs.c optional linprocfs
compat/linsysfs/linsysfs.c optional linsysfs
compat/linux/linux_event.c optional compat_linux
compat/linux/linux_emul.c optional compat_linux
+compat/linux/linux_errno.c optional compat_linux
compat/linux/linux_file.c optional compat_linux
compat/linux/linux_fork.c optional compat_linux
compat/linux/linux_futex.c optional compat_linux
Modified: stable/11/sys/i386/linux/linux_sysvec.c
==============================================================================
--- stable/11/sys/i386/linux/linux_sysvec.c Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/i386/linux/linux_sysvec.c Sun Apr 28 13:33:35 2019 (r346823)
@@ -126,26 +126,6 @@ static eventhandler_tag linux_exit_tag;
static eventhandler_tag linux_exec_tag;
static eventhandler_tag linux_thread_dtor_tag;
-/*
- * Linux syscalls return negative errno's, we do positive and map them
- * Reference:
- * FreeBSD: src/sys/sys/errno.h
- * Linux: linux-2.6.17.8/include/asm-generic/errno-base.h
- * linux-2.6.17.8/include/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
-};
-
#define LINUX_T_UNKNOWN 255
static int _bsd_to_linux_trapcode[] = {
LINUX_T_UNKNOWN, /* 0 */
@@ -905,7 +885,7 @@ struct sysentvec linux_sysvec = {
.sv_table = linux_sysent,
.sv_mask = 0,
.sv_errsize = ELAST + 1,
- .sv_errtbl = bsd_to_linux_errno,
+ .sv_errtbl = bsd_to_linux_errno_generic,
.sv_transtrap = translate_traps,
.sv_fixup = linux_fixup,
.sv_sendsig = linux_sendsig,
@@ -942,7 +922,7 @@ struct sysentvec elf_linux_sysvec = {
.sv_table = linux_sysent,
.sv_mask = 0,
.sv_errsize = ELAST + 1,
- .sv_errtbl = bsd_to_linux_errno,
+ .sv_errtbl = bsd_to_linux_errno_generic,
.sv_transtrap = translate_traps,
.sv_fixup = elf_linux_fixup,
.sv_sendsig = linux_sendsig,
Modified: stable/11/sys/modules/linux/Makefile
==============================================================================
--- stable/11/sys/modules/linux/Makefile Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/modules/linux/Makefile Sun Apr 28 13:33:35 2019 (r346823)
@@ -31,7 +31,7 @@ OBJS= ${VDSO}.so
.if ${MACHINE_CPUARCH} == "i386"
SRCS+= linux_ptrace.c imgact_linux.c linux_util.c linux_mib.c linux_mmap.c \
- linux_emul.c opt_cpu.h linux.c
+ linux_emul.c linux_errno.c opt_cpu.h linux.c
.endif
.if ${MACHINE_CPUARCH} == "i386"
Modified: stable/11/sys/modules/linux_common/Makefile
==============================================================================
--- stable/11/sys/modules/linux_common/Makefile Sun Apr 28 13:29:29 2019 (r346822)
+++ stable/11/sys/modules/linux_common/Makefile Sun Apr 28 13:33:35 2019 (r346823)
@@ -4,9 +4,11 @@
KMOD= linux_common
SRCS= linux_common.c linux_mib.c linux_mmap.c linux_util.c linux_emul.c \
+ linux_errno.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_ioctl_register_handler
EXPORT_SYMS+= linux_ioctl_unregister_handler
More information about the svn-src-stable
mailing list