Message ID | 1445430808-25718-1-git-send-email-adhemerval.zanella@linaro.com |
---|---|
State | Accepted |
Commit | fc48bfbc796e3825b6048df9146ce91c0baec0c8 |
Headers | show |
Ping. On 21-10-2015 10:33, Adhemerval Zanella wrote: > This patch fixes the SYSCALL_CANCEL macro for usage with zero argument > number (for instance SYSCALL_CANCEL (pause)) using a similar approach > used for SOCKETCALL_CANCEL. > > GLIBC build still does not hit this issue still since SYSCALL_CANCEL > is not currently being used for zero arguments calls. > > Tested on i386, x86_64, powerpc64le, aarch64. > > * sysdeps/unix/sysdep.h (SYSCALL_CANCEL): Fix macro for zero argument > syscalls. > (__SYSCALL0): New macro. > (__SYSCALL1): Likewise. > (__SYSCALL2): Likewise. > (__SYSCALL3): Likewise. > (__SYSCALL4): Likewise. > (__SYSCALL5): Likewise. > (__SYSCALL6): Likewise. > (__SYSCALL_CONCAT_X): Likewise. > (__SYSCALL_CONCAT): Likewise. > (__SYSCALL_DIST): Likewise. > (__SYSCALL_CALL): Likewise. > --- > ChangeLog | 16 ++++++++++++++++ > sysdeps/unix/sysdep.h | 34 ++++++++++++++++++++++++++-------- > 2 files changed, 42 insertions(+), 8 deletions(-) > > diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h > index 52dad58..7e94e53 100644 > --- a/sysdeps/unix/sysdep.h > +++ b/sysdeps/unix/sysdep.h > @@ -24,22 +24,40 @@ > #define SYSCALL__(name, args) PSEUDO (__##name, name, args) > #define SYSCALL(name, args) PSEUDO (name, name, args) > > -/* Cancellation macros. */ > -#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n > +#define __SYSCALL0(name) \ > + INLINE_SYSCALL (name, 0) > +#define __SYSCALL1(name, a1) \ > + INLINE_SYSCALL (name, 1, a1) > +#define __SYSCALL2(name, a1, a2) \ > + INLINE_SYSCALL (name, 2, a1, a2) > +#define __SYSCALL3(name, a1, a2, a3) \ > + INLINE_SYSCALL (name, 3, a1, a2, a3) > +#define __SYSCALL4(name, a1, a2, a3, a4) \ > + INLINE_SYSCALL (name, 4, a1, a2, a3, a4) > +#define __SYSCALL5(name, a1, a2, a3, a4, a5) \ > + INLINE_SYSCALL (name, 5, a1, a2, a3, a4, a5) > +#define __SYSCALL6(name, a1, a2, a3, a4, a5, a6) \ > + INLINE_SYSCALL (name, 6, a1, a2, a3, a4, a5, a6) > + > +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n > #define __SYSCALL_NARGS(...) \ > - __SYSCALL_NARGS_X (__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0,) > + __SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) > +#define __SYSCALL_CONCAT_X(a,b) a##b > +#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X (a, b) > +#define __SYSCALL_DISP(b,...) \ > + __SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) > + > +#define __SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__) > > -#define SYSCALL_CANCEL(name, ...) \ > +#define SYSCALL_CANCEL(...) \ > ({ \ > long int sc_ret; \ > if (SINGLE_THREAD_P) \ > - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS(__VA_ARGS__), \ > - __VA_ARGS__); \ > + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ > else \ > { \ > int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ > - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS (__VA_ARGS__), \ > - __VA_ARGS__); \ > + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ > LIBC_CANCEL_RESET (sc_cancel_oldtype); \ > } \ > sc_ret; \ >
Ping. On 09-11-2015 10:21, Adhemerval Zanella wrote: > Ping. > > On 21-10-2015 10:33, Adhemerval Zanella wrote: >> This patch fixes the SYSCALL_CANCEL macro for usage with zero argument >> number (for instance SYSCALL_CANCEL (pause)) using a similar approach >> used for SOCKETCALL_CANCEL. >> >> GLIBC build still does not hit this issue still since SYSCALL_CANCEL >> is not currently being used for zero arguments calls. >> >> Tested on i386, x86_64, powerpc64le, aarch64. >> >> * sysdeps/unix/sysdep.h (SYSCALL_CANCEL): Fix macro for zero argument >> syscalls. >> (__SYSCALL0): New macro. >> (__SYSCALL1): Likewise. >> (__SYSCALL2): Likewise. >> (__SYSCALL3): Likewise. >> (__SYSCALL4): Likewise. >> (__SYSCALL5): Likewise. >> (__SYSCALL6): Likewise. >> (__SYSCALL_CONCAT_X): Likewise. >> (__SYSCALL_CONCAT): Likewise. >> (__SYSCALL_DIST): Likewise. >> (__SYSCALL_CALL): Likewise. >> --- >> ChangeLog | 16 ++++++++++++++++ >> sysdeps/unix/sysdep.h | 34 ++++++++++++++++++++++++++-------- >> 2 files changed, 42 insertions(+), 8 deletions(-) >> >> diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h >> index 52dad58..7e94e53 100644 >> --- a/sysdeps/unix/sysdep.h >> +++ b/sysdeps/unix/sysdep.h >> @@ -24,22 +24,40 @@ >> #define SYSCALL__(name, args) PSEUDO (__##name, name, args) >> #define SYSCALL(name, args) PSEUDO (name, name, args) >> >> -/* Cancellation macros. */ >> -#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n >> +#define __SYSCALL0(name) \ >> + INLINE_SYSCALL (name, 0) >> +#define __SYSCALL1(name, a1) \ >> + INLINE_SYSCALL (name, 1, a1) >> +#define __SYSCALL2(name, a1, a2) \ >> + INLINE_SYSCALL (name, 2, a1, a2) >> +#define __SYSCALL3(name, a1, a2, a3) \ >> + INLINE_SYSCALL (name, 3, a1, a2, a3) >> +#define __SYSCALL4(name, a1, a2, a3, a4) \ >> + INLINE_SYSCALL (name, 4, a1, a2, a3, a4) >> +#define __SYSCALL5(name, a1, a2, a3, a4, a5) \ >> + INLINE_SYSCALL (name, 5, a1, a2, a3, a4, a5) >> +#define __SYSCALL6(name, a1, a2, a3, a4, a5, a6) \ >> + INLINE_SYSCALL (name, 6, a1, a2, a3, a4, a5, a6) >> + >> +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n >> #define __SYSCALL_NARGS(...) \ >> - __SYSCALL_NARGS_X (__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0,) >> + __SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) >> +#define __SYSCALL_CONCAT_X(a,b) a##b >> +#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X (a, b) >> +#define __SYSCALL_DISP(b,...) \ >> + __SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) >> + >> +#define __SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__) >> >> -#define SYSCALL_CANCEL(name, ...) \ >> +#define SYSCALL_CANCEL(...) \ >> ({ \ >> long int sc_ret; \ >> if (SINGLE_THREAD_P) \ >> - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS(__VA_ARGS__), \ >> - __VA_ARGS__); \ >> + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ >> else \ >> { \ >> int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ >> - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS (__VA_ARGS__), \ >> - __VA_ARGS__); \ >> + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ >> LIBC_CANCEL_RESET (sc_cancel_oldtype); \ >> } \ >> sc_ret; \ >>
Ping, if noone opposes I will commit in in following days. On 26-11-2015 10:46, Adhemerval Zanella wrote: > Ping. > > On 09-11-2015 10:21, Adhemerval Zanella wrote: >> Ping. >> >> On 21-10-2015 10:33, Adhemerval Zanella wrote: >>> This patch fixes the SYSCALL_CANCEL macro for usage with zero argument >>> number (for instance SYSCALL_CANCEL (pause)) using a similar approach >>> used for SOCKETCALL_CANCEL. >>> >>> GLIBC build still does not hit this issue still since SYSCALL_CANCEL >>> is not currently being used for zero arguments calls. >>> >>> Tested on i386, x86_64, powerpc64le, aarch64. >>> >>> * sysdeps/unix/sysdep.h (SYSCALL_CANCEL): Fix macro for zero argument >>> syscalls. >>> (__SYSCALL0): New macro. >>> (__SYSCALL1): Likewise. >>> (__SYSCALL2): Likewise. >>> (__SYSCALL3): Likewise. >>> (__SYSCALL4): Likewise. >>> (__SYSCALL5): Likewise. >>> (__SYSCALL6): Likewise. >>> (__SYSCALL_CONCAT_X): Likewise. >>> (__SYSCALL_CONCAT): Likewise. >>> (__SYSCALL_DIST): Likewise. >>> (__SYSCALL_CALL): Likewise. >>> --- >>> ChangeLog | 16 ++++++++++++++++ >>> sysdeps/unix/sysdep.h | 34 ++++++++++++++++++++++++++-------- >>> 2 files changed, 42 insertions(+), 8 deletions(-) >>> >>> diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h >>> index 52dad58..7e94e53 100644 >>> --- a/sysdeps/unix/sysdep.h >>> +++ b/sysdeps/unix/sysdep.h >>> @@ -24,22 +24,40 @@ >>> #define SYSCALL__(name, args) PSEUDO (__##name, name, args) >>> #define SYSCALL(name, args) PSEUDO (name, name, args) >>> >>> -/* Cancellation macros. */ >>> -#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n >>> +#define __SYSCALL0(name) \ >>> + INLINE_SYSCALL (name, 0) >>> +#define __SYSCALL1(name, a1) \ >>> + INLINE_SYSCALL (name, 1, a1) >>> +#define __SYSCALL2(name, a1, a2) \ >>> + INLINE_SYSCALL (name, 2, a1, a2) >>> +#define __SYSCALL3(name, a1, a2, a3) \ >>> + INLINE_SYSCALL (name, 3, a1, a2, a3) >>> +#define __SYSCALL4(name, a1, a2, a3, a4) \ >>> + INLINE_SYSCALL (name, 4, a1, a2, a3, a4) >>> +#define __SYSCALL5(name, a1, a2, a3, a4, a5) \ >>> + INLINE_SYSCALL (name, 5, a1, a2, a3, a4, a5) >>> +#define __SYSCALL6(name, a1, a2, a3, a4, a5, a6) \ >>> + INLINE_SYSCALL (name, 6, a1, a2, a3, a4, a5, a6) >>> + >>> +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n >>> #define __SYSCALL_NARGS(...) \ >>> - __SYSCALL_NARGS_X (__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0,) >>> + __SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) >>> +#define __SYSCALL_CONCAT_X(a,b) a##b >>> +#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X (a, b) >>> +#define __SYSCALL_DISP(b,...) \ >>> + __SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) >>> + >>> +#define __SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__) >>> >>> -#define SYSCALL_CANCEL(name, ...) \ >>> +#define SYSCALL_CANCEL(...) \ >>> ({ \ >>> long int sc_ret; \ >>> if (SINGLE_THREAD_P) \ >>> - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS(__VA_ARGS__), \ >>> - __VA_ARGS__); \ >>> + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ >>> else \ >>> { \ >>> int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ >>> - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS (__VA_ARGS__), \ >>> - __VA_ARGS__); \ >>> + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ >>> LIBC_CANCEL_RESET (sc_cancel_oldtype); \ >>> } \ >>> sc_ret; \ >>>
diff --git a/sysdeps/unix/sysdep.h b/sysdeps/unix/sysdep.h index 52dad58..7e94e53 100644 --- a/sysdeps/unix/sysdep.h +++ b/sysdeps/unix/sysdep.h @@ -24,22 +24,40 @@ #define SYSCALL__(name, args) PSEUDO (__##name, name, args) #define SYSCALL(name, args) PSEUDO (name, name, args) -/* Cancellation macros. */ -#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,n,...) n +#define __SYSCALL0(name) \ + INLINE_SYSCALL (name, 0) +#define __SYSCALL1(name, a1) \ + INLINE_SYSCALL (name, 1, a1) +#define __SYSCALL2(name, a1, a2) \ + INLINE_SYSCALL (name, 2, a1, a2) +#define __SYSCALL3(name, a1, a2, a3) \ + INLINE_SYSCALL (name, 3, a1, a2, a3) +#define __SYSCALL4(name, a1, a2, a3, a4) \ + INLINE_SYSCALL (name, 4, a1, a2, a3, a4) +#define __SYSCALL5(name, a1, a2, a3, a4, a5) \ + INLINE_SYSCALL (name, 5, a1, a2, a3, a4, a5) +#define __SYSCALL6(name, a1, a2, a3, a4, a5, a6) \ + INLINE_SYSCALL (name, 6, a1, a2, a3, a4, a5, a6) + +#define __SYSCALL_NARGS_X(a,b,c,d,e,f,g,h,n,...) n #define __SYSCALL_NARGS(...) \ - __SYSCALL_NARGS_X (__VA_ARGS__, 7, 6, 5, 4, 3, 2, 1, 0,) + __SYSCALL_NARGS_X (__VA_ARGS__,7,6,5,4,3,2,1,0,) +#define __SYSCALL_CONCAT_X(a,b) a##b +#define __SYSCALL_CONCAT(a,b) __SYSCALL_CONCAT_X (a, b) +#define __SYSCALL_DISP(b,...) \ + __SYSCALL_CONCAT (b,__SYSCALL_NARGS(__VA_ARGS__))(__VA_ARGS__) + +#define __SYSCALL_CALL(...) __SYSCALL_DISP (__SYSCALL, __VA_ARGS__) -#define SYSCALL_CANCEL(name, ...) \ +#define SYSCALL_CANCEL(...) \ ({ \ long int sc_ret; \ if (SINGLE_THREAD_P) \ - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS(__VA_ARGS__), \ - __VA_ARGS__); \ + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ else \ { \ int sc_cancel_oldtype = LIBC_CANCEL_ASYNC (); \ - sc_ret = INLINE_SYSCALL (name, __SYSCALL_NARGS (__VA_ARGS__), \ - __VA_ARGS__); \ + sc_ret = __SYSCALL_CALL (__VA_ARGS__); \ LIBC_CANCEL_RESET (sc_cancel_oldtype); \ } \ sc_ret; \