Messages in this thread | | | Date | Sun, 28 Feb 2010 11:09:02 +0100 | From | Heiko Carstens <> | Subject | Re: [PATCH 08/12] syscalls: add new COMPAT_SYSCALL_DEFINE#N() macro |
| |
On Fri, Feb 26, 2010 at 04:37:30PM -0500, Jason Baron wrote: > Add COMPAT_SYSCALL_DEFINE#N() macro define common compat syscalls that > are not arch specific. Prepends "compat_sys_" to the syscall name to identify > it. > > Signed-off-by: Jason Baron <jbaron@redhat.com> > --- > include/linux/syscalls.h | 7 +++++++ > 1 files changed, 7 insertions(+), 0 deletions(-) > > diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h > index cd7b959..241a19c 100644 > --- a/include/linux/syscalls.h > +++ b/include/linux/syscalls.h > @@ -228,6 +228,13 @@ struct perf_event_attr; > #define ARCH_COMPAT_SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, arch_compat_sys_##name, __VA_ARGS__) > #define ARCH_COMPAT_SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, arch_compat_sys_##name, __VA_ARGS__) > > +#define COMPAT_SYSCALL_DEFINE1(name, ...) SYSCALL_DEFINEx(1, compat_sys_##name, __VA_ARGS__) > +#define COMPAT_SYSCALL_DEFINE2(name, ...) SYSCALL_DEFINEx(2, compat_sys_##name, __VA_ARGS__) > +#define COMPAT_SYSCALL_DEFINE3(name, ...) SYSCALL_DEFINEx(3, compat_sys_##name, __VA_ARGS__) > +#define COMPAT_SYSCALL_DEFINE4(name, ...) SYSCALL_DEFINEx(4, compat_sys_##name, __VA_ARGS__) > +#define COMPAT_SYSCALL_DEFINE5(name, ...) SYSCALL_DEFINEx(5, compat_sys_##name, __VA_ARGS__) > +#define COMPAT_SYSCALL_DEFINE6(name, ...) SYSCALL_DEFINEx(6, compat_sys_##name, __VA_ARGS__) > +
For architectures which select CONFIG_HAVE_SYSCALL_WRAPPERS this adds unnecessary sign extension code to each compat syscall. On the other hand we could get rid partly of the arch specific sign extension code but that would need some other changes before as well. For example this one:
asmlinkage long compat_sys_gettimeofday(struct compat_timeval __user *tv, struct timezone __user *tz)
should be converted to a function which takes two compat_uptr_t's and let the syscall code itself do the proper pointer conversion (compat_ptr()).
Besides that the syscall alias names for these compat calls do look a bit strange:
000000000008b57c T SyScompat_sys_adjtimex 000000000008b57c T compat_sys_adjtimex
That needs to be fixed as well. Or simply add a 1:1 wrapper independent of CONFIG_HAVE_SYSCALL_WRAPPERS.
| |