s390/compat: automatic zero, sign and pointer conversion of syscalls
Instead of explicitly changing compat system call parameters from e.g. unsigned long to compat_ulong_t let the COMPAT_SYSCALL_WRAP macros automatically detect (unsigned) long parameters and zero and sign extend them automatically. The resulting binary is completely identical. In addition add a sys_[system call name] prototype for each system call wrapper. This will cause compile errors if the prototype does not match the prototype in include/linux/syscall.h. Therefore we should now always get the correct zero and sign extension of system call parameters. Pointers are handled like before. Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:
@@ -98,6 +98,8 @@ struct sigaltstack;
|
||||
#define __MAP(n,...) __MAP##n(__VA_ARGS__)
|
||||
|
||||
#define __SC_DECL(t, a) t a
|
||||
#define __TYPE_IS_L(t) (__same_type((t)0, 0L))
|
||||
#define __TYPE_IS_UL(t) (__same_type((t)0, 0UL))
|
||||
#define __TYPE_IS_LL(t) (__same_type((t)0, 0LL) || __same_type((t)0, 0ULL))
|
||||
#define __SC_LONG(t, a) __typeof(__builtin_choose_expr(__TYPE_IS_LL(t), 0LL, 0L)) a
|
||||
#define __SC_CAST(t, a) (t) a
|
||||
|
Reference in New Issue
Block a user