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.