]> xenbits.xensource.com Git - people/liuw/freebsd.git/commitdiff
Rename remaining linux32 symbols such as linux_sysent[] and
authorjhb <jhb@FreeBSD.org>
Thu, 22 Oct 2015 21:28:20 +0000 (21:28 +0000)
committerjhb <jhb@FreeBSD.org>
Thu, 22 Oct 2015 21:28:20 +0000 (21:28 +0000)
linux_syscallnames[] from linux_* to linux32_* to avoid conflicts with
linux64.ko.  While here, add support for linux64 binaries to systrace.
- Update NOPROTO entries in amd64/linux/syscalls.master to match the
  main table to fix systrace build.
- Add a special case for union l_semun arguments to the systrace
  generation.
- The systrace_linux32 module now only builds the systrace_linux32.ko.
  module on amd64.
- Add a new systrace_linux module that builds on both i386 and amd64.
  For i386 it builds the existing systrace_linux.ko.  For amd64 it
  builds a systrace_linux.ko for 64-bit binaries.

Reviewed by: markj
Differential Revision: https://reviews.freebsd.org/D3954

sys/amd64/linux/syscalls.master
sys/amd64/linux32/linux32_sysvec.c
sys/amd64/linux32/syscalls.conf
sys/amd64/linux32/syscalls.master
sys/cddl/dev/systrace/systrace.c
sys/kern/makesyscalls.sh
sys/modules/dtrace/Makefile
sys/modules/dtrace/systrace_linux/Makefile [new file with mode: 0644]
sys/modules/dtrace/systrace_linux32/Makefile

index d840f8806d4e2848b6e548dacec1304d15558cc1..87c800079b145e208bb47eca507893295b0c89ce 100644 (file)
@@ -49,8 +49,8 @@
                                    struct l_newstat *buf); }
 6      AUE_LSTAT       STD     { int linux_newlstat(char *path, \
                                    struct l_newstat *buf); }
-7      AUE_POLL        NOPROTO { int poll(struct pollfd*, \
-                                   unsigned int nfds, int timeout); }
+7      AUE_POLL        NOPROTO { int poll(struct pollfd *fds, u_int nfds, \
+                                   int timeout); }
 8      AUE_LSEEK       STD     { int linux_lseek(l_uint fdes, l_off_t off, \
                                    l_int whence); }
 9      AUE_MMAP        STD     { int linux_mmap2(l_ulong addr, l_ulong len, \
 161    AUE_CHROOT      NOPROTO { int chroot(char *path); }
 162    AUE_SYNC        NOPROTO { int sync(void); }
 163    AUE_ACCT        NOPROTO { int acct(char *path); }
-164    AUE_SETTIMEOFDAY        NOPROTO { int settimeofday(struct l_timeval *tp, struct timezone *tzp); }
+164    AUE_SETTIMEOFDAY        NOPROTO { int settimeofday(struct l_timeval *tv, struct timezone *tzp); }
 165    AUE_MOUNT       STD     { int linux_mount(char *specialfile, \
                                    char *dir, char *filesystemtype, \
                                    l_ulong rwflag, void *data); }
index 250e16bbf59510151924e147a6c2f1fab2bdf0c9..99e211773d01c4db2831aa313b3213402946e10c 100644 (file)
@@ -115,7 +115,7 @@ static char *linux_shared_page_mapping;
 extern char _binary_linux32_locore_o_start;
 extern char _binary_linux32_locore_o_end;
 
-extern struct sysent linux_sysent[LINUX_SYS_MAXSYSCALL];
+extern struct sysent linux32_sysent[LINUX32_SYS_MAXSYSCALL];
 
 SET_DECLARE(linux_ioctl_handler_set, struct linux_ioctl_handler);
 
@@ -1008,8 +1008,8 @@ linux32_fixlimit(struct rlimit *rl, int which)
 }
 
 struct sysentvec elf_linux_sysvec = {
-       .sv_size        = LINUX_SYS_MAXSYSCALL,
-       .sv_table       = linux_sysent,
+       .sv_size        = LINUX32_SYS_MAXSYSCALL,
+       .sv_table       = linux32_sysent,
        .sv_mask        = 0,
        .sv_sigsize     = 0,
        .sv_sigtbl      = NULL,
index dc0ad82d29c2b7c3879c6d2fa0cb6aa18f32482e..7d096b5a9c64384a27a4100c8b6f09435187c2b0 100644 (file)
@@ -1,11 +1,11 @@
 # $FreeBSD$
 sysnames="linux32_syscalls.c"
 sysproto="linux32_proto.h"
-sysproto_h=_LINUX_SYSPROTO_H_
+sysproto_h=_LINUX32_SYSPROTO_H_
 syshdr="linux32_syscall.h"
 syssw="linux32_sysent.c"
 sysmk="/dev/null"
-syscallprefix="LINUX_SYS_"
-switchname="linux_sysent"
-namesname="linux_syscallnames"
+syscallprefix="LINUX32_SYS_"
+switchname="linux32_sysent"
+namesname="linux32_syscallnames"
 systrace="linux32_systrace_args.c"
index 5f688f3c3b4f35ef6b2b5c60b96c70930978eff9..8d9f90c21043712b3c8def52a22e89fe87d70ff8 100644 (file)
@@ -2,7 +2,7 @@
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 ; System call name/number master file (or rather, slave, from LINUX).
-; Processed to create linux_sysent.c, linux_proto.h and linux_syscall.h.
+; Processed to create linux32_sysent.c, linux32_proto.h and linux32_syscall.h.
 
 ; Columns: number audit type nargs name alt{name,tag,rtyp}/comments
 ;      number  system call number, must be in order
index 921393ce19e82d324779047c7b4d9834921efba8..1796091bada2d20d6b488c5a14127c6e16b81662 100644 (file)
 
 #ifdef LINUX_SYSTRACE
 #if defined(__amd64__)
-#include <amd64/linux32/linux.h>
-#include <amd64/linux32/linux32_proto.h>
-#include <amd64/linux32/linux32_syscalls.c>
-#include <amd64/linux32/linux32_systrace_args.c>
-#define        MODNAME         "linux32"
+#include <amd64/linux/linux.h>
+#include <amd64/linux/linux_proto.h>
+#include <amd64/linux/linux_syscalls.c>
+#include <amd64/linux/linux_systrace_args.c>
 #elif defined(__i386__)
 #include <i386/linux/linux.h>
 #include <i386/linux/linux_proto.h>
 #include <i386/linux/linux_syscalls.c>
 #include <i386/linux/linux_systrace_args.c>
-#define        MODNAME         "linux"
 #else
 #error Only i386 and amd64 are supported.
 #endif
+#define        MODNAME         "linux"
 extern struct sysent linux_sysent[];
 #define        MAXSYSCALL      LINUX_SYS_MAXSYSCALL
 #define        SYSCALLNAMES    linux_syscallnames
 #define        SYSENT          linux_sysent
+#elif defined(LINUX32_SYSTRACE)
+#if defined(__amd64__)
+#include <amd64/linux32/linux.h>
+#include <amd64/linux32/linux32_proto.h>
+#include <amd64/linux32/linux32_syscalls.c>
+#include <amd64/linux32/linux32_systrace_args.c>
+#else
+#error Only amd64 is supported.
+#endif
+#define        MODNAME         "linux32"
+extern struct sysent linux32_sysent[];
+#define        MAXSYSCALL      LINUX32_SYS_MAXSYSCALL
+#define        SYSCALLNAMES    linux32_syscallnames
+#define        SYSENT          linux32_sysent
 #elif defined(FREEBSD32_SYSTRACE)
 /*
  * The syscall arguments are processed into a DTrace argument array
@@ -103,6 +116,7 @@ extern const char *freebsd32_syscallnames[];
 #define        MAXSYSCALL      SYS_MAXSYSCALL
 #define        SYSCALLNAMES    syscallnames
 #define        SYSENT          sysent
+#define        NATIVE_ABI
 #endif
 
 #define        PROVNAME        "syscall"
@@ -132,7 +146,7 @@ static void systrace_load(void *);
 static struct cdevsw systrace_cdevsw = {
        .d_version      = D_VERSION,
        .d_open         = systrace_open,
-#ifdef LINUX_SYSTRACE
+#ifndef NATIVE_ABI
        .d_name         = "systrace_" MODNAME,
 #else
        .d_name         = "systrace",
@@ -171,7 +185,7 @@ static dtrace_provider_id_t systrace_id;
 typedef void (*systrace_dtrace_probe_t)(dtrace_id_t, uintptr_t, uintptr_t,
     uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t, uintptr_t);
 
-#if !defined(LINUX_SYSTRACE)
+#ifdef NATIVE_ABI
 /*
  * Probe callback function.
  *
@@ -314,7 +328,7 @@ systrace_load(void *dummy)
            NULL, &systrace_pops, NULL, &systrace_id) != 0)
                return;
 
-#if !defined(LINUX_SYSTRACE)
+#ifdef NATIVE_ABI
        systrace_probe_func = systrace_probe;
 #endif
 }
@@ -328,7 +342,7 @@ systrace_unload()
        if ((error = dtrace_unregister(systrace_id)) != 0)
                return (error);
 
-#if !defined(LINUX_SYSTRACE)
+#ifdef NATIVE_ABI
        systrace_probe_func = NULL;
 #endif
 
@@ -370,6 +384,16 @@ SYSINIT(systrace_load, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, systrace_load, NULL
 SYSUNINIT(systrace_unload, SI_SUB_DTRACE_PROVIDER, SI_ORDER_ANY, systrace_unload, NULL);
 
 #ifdef LINUX_SYSTRACE
+DEV_MODULE(systrace_linux, systrace_modevent, NULL);
+MODULE_VERSION(systrace_linux, 1);
+#ifdef __amd64__
+MODULE_DEPEND(systrace_linux, linux64, 1, 1, 1);
+#else
+MODULE_DEPEND(systrace_linux, linux, 1, 1, 1);
+#endif
+MODULE_DEPEND(systrace_linux, dtrace, 1, 1, 1);
+MODULE_DEPEND(systrace_linux, opensolaris, 1, 1, 1);
+#elif defined(LINUX32_SYSTRACE)
 DEV_MODULE(systrace_linux32, systrace_modevent, NULL);
 MODULE_VERSION(systrace_linux32, 1);
 MODULE_DEPEND(systrace_linux32, linux, 1, 1, 1);
index ef1517437a6634e370b1affb80e64d962baad643..75289e5bcc5cf8ee14b5cc01b05384b1614926bb 100644 (file)
@@ -411,6 +411,10 @@ s/\$//g
                                        printf("\t\tuarg[%d] = (intptr_t) p->%s; /* %s */\n", \
                                             i - 1, \
                                             argname[i], arg) > systrace
+                               else if (arg == "union l_semun")
+                                       printf("\t\tuarg[%d] = p->%s.buf; /* %s */\n", \
+                                            i - 1, \
+                                            argname[i], arg) > systrace
                                else if (substr(arg, 1, 1) == "u" || arg == "size_t")
                                        printf("\t\tuarg[%d] = p->%s; /* %s */\n", \
                                             i - 1, \
index 7be4c32889c54de73f3dbc99d903f0ff1d125d66..e5264db1a10bc6efc9404a522a480bbd9396541e 100644 (file)
@@ -13,7 +13,10 @@ SUBDIR=              dtmalloc        \
                systrace
 
 .if ${MACHINE_CPUARCH} == "amd64" || ${MACHINE_CPUARCH} == "i386"
-SUBDIR+=       fasttrap fbt systrace_linux32
+SUBDIR+=       fasttrap fbt systrace_linux
+.endif
+.if ${MACHINE_CPUARCH} == "amd64"
+SUBDIR+=       systrace_linux32
 .endif
 .if ${MACHINE_CPUARCH} == "powerpc"
 SUBDIR+=       fbt fasttrap
diff --git a/sys/modules/dtrace/systrace_linux/Makefile b/sys/modules/dtrace/systrace_linux/Makefile
new file mode 100644 (file)
index 0000000..1cf5e31
--- /dev/null
@@ -0,0 +1,18 @@
+# $FreeBSD$
+
+SYSDIR?=       ${.CURDIR}/../../..
+
+.PATH:         ${SYSDIR}/cddl/dev/systrace
+
+KMOD=          systrace_linux
+
+SRCS=          systrace.c
+SRCS+=         vnode_if.h
+
+CFLAGS+=       -I${SYSDIR}/cddl/compat/opensolaris \
+               -I${SYSDIR}/cddl/contrib/opensolaris/uts/common \
+               -I${SYSDIR} -DLINUX_SYSTRACE
+
+.include <bsd.kmod.mk>
+
+CFLAGS+=       -include ${SYSDIR}/cddl/compat/opensolaris/sys/debug_compat.h
index b3eedeea1d536c16b14bc7b893c809cf3970bf8f..db798c39b2567c0157dc37de2fcd096b0687950f 100644 (file)
@@ -4,18 +4,14 @@ SYSDIR?=      ${.CURDIR}/../../..
 
 .PATH:         ${SYSDIR}/cddl/dev/systrace
 
-.if ${MACHINE} == "amd64"
 KMOD=          systrace_linux32
-.else
-KMOD=          systrace_linux
-.endif
 
 SRCS=          systrace.c
 SRCS+=         vnode_if.h
 
 CFLAGS+=       -I${SYSDIR}/cddl/compat/opensolaris \
                -I${SYSDIR}/cddl/contrib/opensolaris/uts/common \
-               -I${SYSDIR} -DLINUX_SYSTRACE
+               -I${SYSDIR} -DLINUX32_SYSTRACE
 
 .include <bsd.kmod.mk>