This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 1/6] Add INLINE_SYSCALL_RETURN/INLINE_SYSCALL_ERROR_RETURN
- From: Joseph Myers <joseph at codesourcery dot com>
- To: "H.J. Lu" <hjl dot tools at gmail dot com>
- Cc: Andreas Schwab <schwab at linux-m68k dot org>, GNU C Library <libc-alpha at sourceware dot org>
- Date: Fri, 21 Aug 2015 15:58:37 +0000
- Subject: Re: [PATCH 1/6] Add INLINE_SYSCALL_RETURN/INLINE_SYSCALL_ERROR_RETURN
- Authentication-results: sourceware.org; auth=none
- References: <20150814120014 dot GA28610 at gmail dot com> <87oaiavy2c dot fsf at igel dot home> <CAMe9rOoP9GPP+i6xbAXwHffwr+KOKNhV=FsJ5sx=G2bM_1SE+g at mail dot gmail dot com> <87oai9vkg7 dot fsf at igel dot home> <CAMe9rOqPmsPPR7RPbdhMKh-cRxK_J2dphmECdvq0QHtfnLgz0w at mail dot gmail dot com> <87k2sxvjh8 dot fsf at igel dot home> <CAMe9rOrbhzbxg2ed3w0i7zE7=KM1q37DtR1vAY_Lk=rxsJ_8mA at mail dot gmail dot com> <87d1ypvixm dot fsf at igel dot home> <CAMe9rOqEpVE3X-drZp6W6UESV0CCAtY3Qew+SPOt1b7Y9BNwfA at mail dot gmail dot com> <878u9dvh61 dot fsf at igel dot home> <CAMe9rOqNhBrGkJCkp5xT8DebN68qzoZciWtSZzGhYo1Msyv3TQ at mail dot gmail dot com> <CAMe9rOqZ=4B698SouQm=fTLaZvsqStQRYyMMhjPNCKMbjK1Xmw at mail dot gmail dot com> <CAMe9rOqNodDbB2mi4SU6agR=-qK0yfRHyFq7BiwBeWre-gJ1tw at mail dot gmail dot com> <alpine dot DEB dot 2 dot 10 dot 1508211502380 dot 2039 at digraph dot polyomino dot org dot uk>
Here's another problem with the patch as committed, further evidence of
the need for proper review of such changes before they go in rather than
assuming silence means consensus. The currently checked in eventfd.c has:
#ifdef __NR_eventfd2
# ifndef __ASSUME_EVENTFD2
INTERNAL_SYSCALL_DECL (err);
int res = INTERNAL_SYSCALL (eventfd2, err, 2, count, flags);
if (!__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (res, err))
|| INTERNAL_SYSCALL_ERRNO (res, err) != ENOSYS)
return res;
# endif
return INLINE_SYSCALL_RETURN (eventfd2, 2, int, count, flags);
#endif
This means: if __NR_eventfd2 is defined, but __ASSUME_EVENTFD2 isn't (on
alpha), the code will always return after this point, never falling back
to eventfd. Furthermore, in the ENOSYS case, it will call the syscall
twice in the process. Maybe there should be a #else case instead of
#endif?
--
Joseph S. Myers
joseph@codesourcery.com