On Sat, 12 Mar 2011 09:09:25 +0000 (UTC) Andriy Gapon <a...@freebsd.org>
wrote:

> Author: avg
> Date: Sat Mar 12 09:09:25 2011
> New Revision: 219561
> URL: http://svn.freebsd.org/changeset/base/219561
> 
> Log:
>   add DTrace systrace support for linux32 and freebsd32 on amd64
> syscalls 
>   Add systrace_linux32 and systrace_freebsd32 modules which provide
>   support for tracing compat system calls in addition to native system
>   call tracing provided by systrace module.
>   
>   Provided that all the systrace modules are loaded now you can select
>   what syscalls to trace in the following manner:
>   
>   syscall::xxx:yyy - work on all system calls that match the
> specification syscall:freebsd:xxx:yyy - only native system calls
>   syscall:linux32:xxx:yyy - linux32 compat system calls
>   syscall:freebsd32:xxx:yyy - freebsd32 compat system calls on amd64

I am working on some SDT probes for the linuxulator. The way I handle it
there is to use "linuxulator" for the native size, and "linuxulator32"
for the current 32-bit linux emulation on amd64. When the amd64 arch
gets a native linux emulation (dchagin@ has patches) this would allow to
trace both in a sane way.

Is it possible to have "linux" as the modname on i386? Is it easy to
have both linux syscall types (64 bit and 32 bit) on amd64 in case
native support arrives in this code?

> Modified: head/sys/cddl/dev/systrace/systrace.c
> ==============================================================================
> --- head/sys/cddl/dev/systrace/systrace.c     Sat Mar 12 08:58:19
> 2011  (r219560) +++
> head/sys/cddl/dev/systrace/systrace.c Sat Mar 12 09:09:25
> 2011  (r219561) @@ -59,17 +59,38 @@ #include <sys/dtrace.h>
>  
>  #ifdef LINUX_SYSTRACE
> -#include <linux.h>
> -#include <linux_syscall.h>
> -#include <linux_proto.h>
> -#include <linux_syscallnames.c>
> -#include <linux_systrace.c>
> +#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>
> +#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>

This looks like there is also support for linux syscalls on 386.

> +#else
> +#error Only i386 and amd64 are supported.
> +#endif
>  extern struct sysent linux_sysent[];
> -#define      DEVNAME         "dtrace/linsystrace"
> -#define      PROVNAME        "linsyscall"
> +#define      MODNAME         "linux32"

But this looks like it will be named linux32 in any case. In the short
term I would prefer:
---snip---
#if defined(__amd64__)
#define MODNAME "linux32"
#elif defined(__i386__)
#define MODNAME "linux"
#endif
---snip---

>  #define      MAXSYSCALL      LINUX_SYS_MAXSYSCALL
>  #define      SYSCALLNAMES    linux_syscallnames
>  #define      SYSENT          linux_sysent

Bye,
Alexander.
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to