mirror of
https://github.com/Fishwaldo/linux-bl808.git
synced 2025-06-17 20:25:19 +00:00
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:
parent
2c81fc4fb4
commit
ab4f8bba19
2 changed files with 77 additions and 59 deletions
|
@ -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
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue