Subject: Mapping 2 compat linux32 syscalls on a single native one
To: NetBSD kernel <tech-kern@NetBSD.org>
From: Nicolas Joly <njoly@pasteur.fr>
List: tech-kern
Date: 01/29/2007 16:26:22
Hi,

I encountered a small problem while trying to map 2 amd64 compat
linux32 syscalls (linux32_sys_exit and linux32_sys_exit_groups) on the
native sys_exit one.

1       NOARGS  { int sys_exit(int rval); }
252     NOARGS  { int sys_exit(int rval); }

Unfortunately this won't work, because of LINUX32_SYS_exit multiple
definitions ...

njoly@lanfeust [arch/amd64]> grep LINUX32_SYS_exit linux32_syscall.h
#define LINUX32_SYS_exit        1
#define LINUX32_SYS_exit        252

Then i changed the second call from NOARGS to NODEF, but this doesn't
work either because of `sys_exit_args' redefinition.

In file included from ./machine/linux32_machdep.h:11,
                 from /tmp/genassym.7132/assym.c:27:
/local/src/NetBSD/src/sys/compat/linux32/arch/amd64/linux32_syscallargs.h:402: error: redefinition of 'struct sys_exit_args'

I think that i need both NODEF and NOARGS to handle this
case. Unfortunately, setting both flags at the same time does not
seems to be supported.

For now, i use a dummy linux32_sys_exit_group(), which only calls
sys_exit() ...

252     NOARGS  { int linux32_sys_exit_group(int error_code); }

int
linux32_sys_exit_group(l, v, retval)
        struct lwp *l;
        void *v;
        register_t *retval;
{
        return sys_exit(l, v, retval);
}

Is there a better way to handle this ?

Thanks.

-- 
Nicolas Joly

Biological Software and Databanks.
Institut Pasteur, Paris.