This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 2/6] Optimize i386 syscall inlining


On Fri, Aug 21, 2015 at 5:55 AM, H.J. Lu <hjl.tools@gmail.com> wrote:
> On Fri, Aug 21, 2015 at 5:35 AM, Joseph Myers <joseph@codesourcery.com> wrote:
>> You define INLINE_SYSCALL_ERROR_RETURN to ignore the specified return
>> value.  There is nothing in the comments on the default version of that
>> macro in sysdeps/unix/sysdep.h to say that it is OK to ignore the return
>> value.  If the return value must always be -1, I think the macro should
>> take one fewer argument rather than having specified semantics that the
>> last argument must always be -1, or that the macro may return -1 and
>> ignore the last argument.
>
> __syscall_error is for tail call from system call error and it has been used
> this way in glibc.  It is OK to tail call __syscall_error and ignore the user
> provided return value for syscall error.  I can add a comment to i386
> INLINE_SYSCALL_ERROR_RETURN.
>

Like this:

/* Set error number and return value.  It should only be used with
   function return.  __syscall_error is for tail call from syscall error.
   It is OK to tail call __syscall_error and ignore the user provided
   return value for syscall error.  */
#undef INLINE_SYSCALL_ERROR_RETURN
#define INLINE_SYSCALL_ERROR_RETURN(resultvar, type, value) \
  ({                                                                    \
    _Static_assert ((type) -1 == (type) (value),                        \
                    "syscall error return is not -1");                  \
    return (type) __syscall_error (resultvar);                          \
    (type) -1;                                                          \
  })

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]