Message ID | 1501765874-6201-5-git-send-email-adhemerval.zanella@linaro.org |
---|---|
State | Accepted |
Commit | 0bb2fabcb3bcac064a3d89917c0736353cdac2f4 |
Headers | show |
Series | None | expand |
Since this is a refactor, if no one opposes I will commit it shortly. On 03/08/2017 10:11, Adhemerval Zanella wrote: > This patch consolidates all the non cancellable openat{64} calls to use > the __openat{64}_nocancel identifier. For non cancellable targets it will > be just a macro to call the default respective symbol while on Linux > will be a internal one. > > Checked on x86_64-linux-gnu, x86_64-linux-gnu-x32, and i686-linux-gnu. > > * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro. > (openat_not_cancel_3): Likewise. > (openat64_not_cancel_3): Likewise). > (openat_not_cancel_3): Likewise). > * sysdeps/unix/sysv/linux/not-cancel.h (openat_not_cancel): Remove > macro. > (openat_not_cancel_3): Likewise. > (openat64_not_cancel): Likewise. > (openat64_not_cancel_3): Likewise. > * sysdeps/unix/sysv/linux/openat.c (__openat_nocancel): New function. > * sysdeps/unix/sysv/linux/openat64.c (__openat64_nocancel): Likewise. > * io/ftw.c (open_dir_stream): Replace openat{64}_not_cancel{_3} with > __open{64}_nocancel. > * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise. > * sysdeps/posix/getcwd.c (__getcwd): Likewise. > * sysdeps/posix/opendir.c (__opendirat): Likewise. > --- > ChangeLog | 17 +++++++++++++++++ > io/ftw.c | 4 ++-- > sysdeps/generic/not-cancel.h | 12 ++++-------- > sysdeps/mach/hurd/opendir.c | 2 +- > sysdeps/posix/getcwd.c | 4 ++-- > sysdeps/posix/opendir.c | 2 +- > sysdeps/unix/sysv/linux/not-cancel.h | 18 ++++++++---------- > sysdeps/unix/sysv/linux/openat.c | 20 ++++++++++++++++++++ > sysdeps/unix/sysv/linux/openat64.c | 36 ++++++++++++++++++++++++++++++------ > 9 files changed, 85 insertions(+), 30 deletions(-) > > diff --git a/ChangeLog b/ChangeLog > index 0bc21b6..d40900c 100644 > --- a/ChangeLog > +++ b/ChangeLog > @@ -1,5 +1,22 @@ > 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org> > > + * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro. > + (openat_not_cancel_3): Likewise. > + (openat64_not_cancel_3): Likewise). > + (openat_not_cancel_3): Likewise). > + * sysdeps/unix/sysv/linux/not-cancel.h (openat_not_cancel): Remove > + macro. > + (openat_not_cancel_3): Likewise. > + (openat64_not_cancel): Likewise. > + (openat64_not_cancel_3): Likewise. > + * sysdeps/unix/sysv/linux/openat.c (__openat_nocancel): New function. > + * sysdeps/unix/sysv/linux/openat64.c (__openat64_nocancel): Likewise. > + * io/ftw.c (open_dir_stream): Replace openat{64}_not_cancel{_3} with > + __open{64}_nocancel. > + * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise. > + * sysdeps/posix/getcwd.c (__getcwd): Likewise. > + * sysdeps/posix/opendir.c (__opendirat): Likewise. > + > * sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro. > (__write_nocancel): New macro. > * sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel): > diff --git a/io/ftw.c b/io/ftw.c > index 140a237..f33fed3 100644 > --- a/io/ftw.c > +++ b/io/ftw.c > @@ -337,8 +337,8 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp) > > if (dfdp != NULL && *dfdp != -1) > { > - int fd = openat64_not_cancel_3 (*dfdp, data->dirbuf + data->ftw.base, > - O_RDONLY | O_DIRECTORY | O_NDELAY); > + int fd = __openat64_nocancel (*dfdp, data->dirbuf + data->ftw.base, > + O_RDONLY | O_DIRECTORY | O_NDELAY); > dirp->stream = NULL; > if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL) > close_not_cancel_no_status (fd); > diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h > index e91cb6c..df9aea6 100644 > --- a/sysdeps/generic/not-cancel.h > +++ b/sysdeps/generic/not-cancel.h > @@ -22,14 +22,10 @@ > __open (__VA_ARGS__) > #define __open64_nocancel(...) \ > __open64 (__VA_ARGS__) > -#define openat_not_cancel(fd, name, flags, mode) \ > - __openat (fd, name, flags, mode) > -#define openat_not_cancel_3(fd, name, flags) \ > - __openat (fd, name, flags, 0) > -#define openat64_not_cancel(fd, name, flags, mode) \ > - __openat64 (fd, name, flags, mode) > -#define openat64_not_cancel_3(fd, name, flags) \ > - __openat64 (fd, name, flags, 0) > +#define __openat_nocancel(...) \ > + __openat (__VA_ARGS__) > +#define __openat64_nocancel(...) \ > + __openat64 (__VA_ARGS__) > #define close_not_cancel(fd) \ > __close (fd) > #define close_not_cancel_no_status(fd) \ > diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c > index 8db70b2..d3757f0 100644 > --- a/sysdeps/mach/hurd/opendir.c > +++ b/sysdeps/mach/hurd/opendir.c > @@ -86,7 +86,7 @@ __opendirat (int dfd, const char *name) > assert (dfd == AT_FDCWD); > fd = __open_nocancel (name, flags); > #else > - fd = openat_not_cancel_3 (dfd, name, flags); > + fd = __openat_nocancel (dfd, name, flags); > #endif > if (fd < 0) > return NULL; > diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c > index eb1706a..ecae628 100644 > --- a/sysdeps/posix/getcwd.c > +++ b/sysdeps/posix/getcwd.c > @@ -175,7 +175,7 @@ extern char *alloca (); > # include <not-cancel.h> > # include <kernel-features.h> > #else > -# define openat64_not_cancel_3(dfd, name, mode) openat64 (dfd, name, mode) > +# define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode) > # define close_not_cancel_no_status(fd) close (fd) > #endif > > @@ -281,7 +281,7 @@ __getcwd (char *buf, size_t size) > while (!(thisdev == rootdev && thisino == rootino)) > { > if (__have_atfcts >= 0) > - fd = openat64_not_cancel_3 (fd, "..", O_RDONLY | O_CLOEXEC); > + fd = __openat64_nocancel (fd, "..", O_RDONLY | O_CLOEXEC); > else > fd = -1; > if (fd >= 0) > diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c > index 3ee27b2..51a92e8 100644 > --- a/sysdeps/posix/opendir.c > +++ b/sysdeps/posix/opendir.c > @@ -161,7 +161,7 @@ __opendirat (int dfd, const char *name) > } > } > > - return opendir_tail (openat_not_cancel_3 (dfd, name, opendir_oflags)); > + return opendir_tail (__openat_nocancel (dfd, name, opendir_oflags)); > } > #endif > > diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h > index 84dc72a..08ad773 100644 > --- a/sysdeps/unix/sysv/linux/not-cancel.h > +++ b/sysdeps/unix/sysv/linux/not-cancel.h > @@ -34,6 +34,14 @@ libc_hidden_proto (__open_nocancel) > __typeof (open64) __open64_nocancel; > libc_hidden_proto (__open64_nocancel) > > +/* Non cancellable openat syscall. */ > +__typeof (openat) __openat_nocancel; > +libc_hidden_proto (__openat_nocancel) > + > +/* Non cacellable openat syscall (LFS version). */ > +__typeof (openat64) __openat64_nocancel; > +libc_hidden_proto (__openat64_nocancel) > + > /* Non cancellable read syscall. */ > __typeof (__read) __read_nocancel; > libc_hidden_proto (__read_nocancel) > @@ -42,16 +50,6 @@ libc_hidden_proto (__read_nocancel) > __typeof (__write) __write_nocancel; > libc_hidden_proto (__write_nocancel) > > -/* Uncancelable openat. */ > -#define openat_not_cancel(fd, fname, oflag, mode) \ > - INLINE_SYSCALL (openat, 4, fd, fname, oflag, mode) > -#define openat_not_cancel_3(fd, fname, oflag) \ > - INLINE_SYSCALL (openat, 3, fd, fname, oflag) > -#define openat64_not_cancel(fd, fname, oflag, mode) \ > - INLINE_SYSCALL (openat, 4, fd, fname, oflag | O_LARGEFILE, mode) > -#define openat64_not_cancel_3(fd, fname, oflag) \ > - INLINE_SYSCALL (openat, 3, fd, fname, oflag | O_LARGEFILE) > - > /* Uncancelable close. */ > #define __close_nocancel(fd) \ > INLINE_SYSCALL (close, 1, fd) > diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c > index 1587305..f995775 100644 > --- a/sysdeps/unix/sysv/linux/openat.c > +++ b/sysdeps/unix/sysv/linux/openat.c > @@ -19,6 +19,7 @@ > #include <stdarg.h> > > #include <sysdep-cancel.h> > +#include <not-cancel.h> > > #ifndef __OFF_T_MATCHES_OFF64_T > > @@ -43,4 +44,23 @@ weak_alias (__libc_openat, __openat) > libc_hidden_weak (__openat) > weak_alias (__libc_openat, openat) > > +# if !IS_IN (rtld) > +int > +__openat_nocancel (int fd, const char *file, int oflag, ...) > +{ > + mode_t mode = 0; > + if (__OPEN_NEEDS_MODE (oflag)) > + { > + va_list arg; > + va_start (arg, oflag); > + mode = va_arg (arg, mode_t); > + va_end (arg); > + } > + > + return SYSCALL_CANCEL (openat, fd, file, oflag, mode); > +} > +# else > +strong_alias (__libc_openat, __openat_nocancel) > +# endif > +libc_hidden_weak (__openat_nocancel) > #endif > diff --git a/sysdeps/unix/sysv/linux/openat64.c b/sysdeps/unix/sysv/linux/openat64.c > index 4942061..816e8f1 100644 > --- a/sysdeps/unix/sysv/linux/openat64.c > +++ b/sysdeps/unix/sysv/linux/openat64.c > @@ -19,6 +19,13 @@ > #include <stdarg.h> > > #include <sysdep-cancel.h> > +#include <not-cancel.h> > + > +#ifdef __OFF_T_MATCHES_OFF64_T > +# define EXTRA_OPEN_FLAGS 0 > +#else > +# define EXTRA_OPEN_FLAGS O_LARGEFILE > +#endif > > /* Open FILE with access OFLAG. Interpret relative paths relative to > the directory associated with FD. If OFLAG includes O_CREAT or > @@ -35,12 +42,6 @@ __libc_openat64 (int fd, const char *file, int oflag, ...) > va_end (arg); > } > > -#ifdef __OFF_T_MATCHES_OFF64_T > -# define EXTRA_OPEN_FLAGS 0 > -#else > -# define EXTRA_OPEN_FLAGS O_LARGEFILE > -#endif > - > return SYSCALL_CANCEL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS, mode); > } > > @@ -48,8 +49,31 @@ strong_alias (__libc_openat64, __openat64) > libc_hidden_weak (__openat64) > weak_alias (__libc_openat64, openat64) > > +#if !IS_IN (rtld) > +int > +__openat64_nocancel (int fd, const char *file, int oflag, ...) > +{ > + mode_t mode = 0; > + if (__OPEN_NEEDS_MODE (oflag)) > + { > + va_list arg; > + va_start (arg, oflag); > + mode = va_arg (arg, mode_t); > + va_end (arg); > + } > + > + return INLINE_SYSCALL_CALL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS, > + mode); > +} > +#else > +strong_alias (__libc_openat64, __openat64_nocancel) > +#endif > +libc_hidden_def (__openat64_nocancel) > + > #ifdef __OFF_T_MATCHES_OFF64_T > strong_alias (__libc_openat64, __openat) > libc_hidden_weak (__openat) > weak_alias (__libc_openat64, openat) > + > +strong_alias (__openat64_nocancel, __openat_nocancel) > #endif >
On 18/08/2017 10:55, Adhemerval Zanella wrote: > Since this is a refactor, if no one opposes I will commit it shortly. >> diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c >> index 1587305..f995775 100644 >> --- a/sysdeps/unix/sysv/linux/openat.c >> +++ b/sysdeps/unix/sysv/linux/openat.c >> @@ -19,6 +19,7 @@ >> #include <stdarg.h> >> >> #include <sysdep-cancel.h> >> +#include <not-cancel.h> >> >> #ifndef __OFF_T_MATCHES_OFF64_T >> >> @@ -43,4 +44,23 @@ weak_alias (__libc_openat, __openat) >> libc_hidden_weak (__openat) >> weak_alias (__libc_openat, openat) >> >> +# if !IS_IN (rtld) >> +int >> +__openat_nocancel (int fd, const char *file, int oflag, ...) >> +{ >> + mode_t mode = 0; >> + if (__OPEN_NEEDS_MODE (oflag)) >> + { >> + va_list arg; >> + va_start (arg, oflag); >> + mode = va_arg (arg, mode_t); >> + va_end (arg); >> + } >> + >> + return SYSCALL_CANCEL (openat, fd, file, oflag, mode); And this is blatantly wrong, I will fix it.
diff --git a/ChangeLog b/ChangeLog index 0bc21b6..d40900c 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,22 @@ 2017-08-02 Adhemerval Zanella <adhemerval.zanella@linaro.org> + * sysdeps/generic/not-cancel.h (openat_not_cancel): Remove macro. + (openat_not_cancel_3): Likewise. + (openat64_not_cancel_3): Likewise). + (openat_not_cancel_3): Likewise). + * sysdeps/unix/sysv/linux/not-cancel.h (openat_not_cancel): Remove + macro. + (openat_not_cancel_3): Likewise. + (openat64_not_cancel): Likewise. + (openat64_not_cancel_3): Likewise. + * sysdeps/unix/sysv/linux/openat.c (__openat_nocancel): New function. + * sysdeps/unix/sysv/linux/openat64.c (__openat64_nocancel): Likewise. + * io/ftw.c (open_dir_stream): Replace openat{64}_not_cancel{_3} with + __open{64}_nocancel. + * sysdeps/mach/hurd/opendir.c (__opendirat): Likewise. + * sysdeps/posix/getcwd.c (__getcwd): Likewise. + * sysdeps/posix/opendir.c (__opendirat): Likewise. + * sysdeps/generic/not-cancel.h (write_not_cancel): Remove macro. (__write_nocancel): New macro. * sysdeps/unix/sysv/linux/not-cancel.h (__write_nocancel): diff --git a/io/ftw.c b/io/ftw.c index 140a237..f33fed3 100644 --- a/io/ftw.c +++ b/io/ftw.c @@ -337,8 +337,8 @@ open_dir_stream (int *dfdp, struct ftw_data *data, struct dir_data *dirp) if (dfdp != NULL && *dfdp != -1) { - int fd = openat64_not_cancel_3 (*dfdp, data->dirbuf + data->ftw.base, - O_RDONLY | O_DIRECTORY | O_NDELAY); + int fd = __openat64_nocancel (*dfdp, data->dirbuf + data->ftw.base, + O_RDONLY | O_DIRECTORY | O_NDELAY); dirp->stream = NULL; if (fd != -1 && (dirp->stream = __fdopendir (fd)) == NULL) close_not_cancel_no_status (fd); diff --git a/sysdeps/generic/not-cancel.h b/sysdeps/generic/not-cancel.h index e91cb6c..df9aea6 100644 --- a/sysdeps/generic/not-cancel.h +++ b/sysdeps/generic/not-cancel.h @@ -22,14 +22,10 @@ __open (__VA_ARGS__) #define __open64_nocancel(...) \ __open64 (__VA_ARGS__) -#define openat_not_cancel(fd, name, flags, mode) \ - __openat (fd, name, flags, mode) -#define openat_not_cancel_3(fd, name, flags) \ - __openat (fd, name, flags, 0) -#define openat64_not_cancel(fd, name, flags, mode) \ - __openat64 (fd, name, flags, mode) -#define openat64_not_cancel_3(fd, name, flags) \ - __openat64 (fd, name, flags, 0) +#define __openat_nocancel(...) \ + __openat (__VA_ARGS__) +#define __openat64_nocancel(...) \ + __openat64 (__VA_ARGS__) #define close_not_cancel(fd) \ __close (fd) #define close_not_cancel_no_status(fd) \ diff --git a/sysdeps/mach/hurd/opendir.c b/sysdeps/mach/hurd/opendir.c index 8db70b2..d3757f0 100644 --- a/sysdeps/mach/hurd/opendir.c +++ b/sysdeps/mach/hurd/opendir.c @@ -86,7 +86,7 @@ __opendirat (int dfd, const char *name) assert (dfd == AT_FDCWD); fd = __open_nocancel (name, flags); #else - fd = openat_not_cancel_3 (dfd, name, flags); + fd = __openat_nocancel (dfd, name, flags); #endif if (fd < 0) return NULL; diff --git a/sysdeps/posix/getcwd.c b/sysdeps/posix/getcwd.c index eb1706a..ecae628 100644 --- a/sysdeps/posix/getcwd.c +++ b/sysdeps/posix/getcwd.c @@ -175,7 +175,7 @@ extern char *alloca (); # include <not-cancel.h> # include <kernel-features.h> #else -# define openat64_not_cancel_3(dfd, name, mode) openat64 (dfd, name, mode) +# define __openat64_nocancel(dfd, name, mode) openat64 (dfd, name, mode) # define close_not_cancel_no_status(fd) close (fd) #endif @@ -281,7 +281,7 @@ __getcwd (char *buf, size_t size) while (!(thisdev == rootdev && thisino == rootino)) { if (__have_atfcts >= 0) - fd = openat64_not_cancel_3 (fd, "..", O_RDONLY | O_CLOEXEC); + fd = __openat64_nocancel (fd, "..", O_RDONLY | O_CLOEXEC); else fd = -1; if (fd >= 0) diff --git a/sysdeps/posix/opendir.c b/sysdeps/posix/opendir.c index 3ee27b2..51a92e8 100644 --- a/sysdeps/posix/opendir.c +++ b/sysdeps/posix/opendir.c @@ -161,7 +161,7 @@ __opendirat (int dfd, const char *name) } } - return opendir_tail (openat_not_cancel_3 (dfd, name, opendir_oflags)); + return opendir_tail (__openat_nocancel (dfd, name, opendir_oflags)); } #endif diff --git a/sysdeps/unix/sysv/linux/not-cancel.h b/sysdeps/unix/sysv/linux/not-cancel.h index 84dc72a..08ad773 100644 --- a/sysdeps/unix/sysv/linux/not-cancel.h +++ b/sysdeps/unix/sysv/linux/not-cancel.h @@ -34,6 +34,14 @@ libc_hidden_proto (__open_nocancel) __typeof (open64) __open64_nocancel; libc_hidden_proto (__open64_nocancel) +/* Non cancellable openat syscall. */ +__typeof (openat) __openat_nocancel; +libc_hidden_proto (__openat_nocancel) + +/* Non cacellable openat syscall (LFS version). */ +__typeof (openat64) __openat64_nocancel; +libc_hidden_proto (__openat64_nocancel) + /* Non cancellable read syscall. */ __typeof (__read) __read_nocancel; libc_hidden_proto (__read_nocancel) @@ -42,16 +50,6 @@ libc_hidden_proto (__read_nocancel) __typeof (__write) __write_nocancel; libc_hidden_proto (__write_nocancel) -/* Uncancelable openat. */ -#define openat_not_cancel(fd, fname, oflag, mode) \ - INLINE_SYSCALL (openat, 4, fd, fname, oflag, mode) -#define openat_not_cancel_3(fd, fname, oflag) \ - INLINE_SYSCALL (openat, 3, fd, fname, oflag) -#define openat64_not_cancel(fd, fname, oflag, mode) \ - INLINE_SYSCALL (openat, 4, fd, fname, oflag | O_LARGEFILE, mode) -#define openat64_not_cancel_3(fd, fname, oflag) \ - INLINE_SYSCALL (openat, 3, fd, fname, oflag | O_LARGEFILE) - /* Uncancelable close. */ #define __close_nocancel(fd) \ INLINE_SYSCALL (close, 1, fd) diff --git a/sysdeps/unix/sysv/linux/openat.c b/sysdeps/unix/sysv/linux/openat.c index 1587305..f995775 100644 --- a/sysdeps/unix/sysv/linux/openat.c +++ b/sysdeps/unix/sysv/linux/openat.c @@ -19,6 +19,7 @@ #include <stdarg.h> #include <sysdep-cancel.h> +#include <not-cancel.h> #ifndef __OFF_T_MATCHES_OFF64_T @@ -43,4 +44,23 @@ weak_alias (__libc_openat, __openat) libc_hidden_weak (__openat) weak_alias (__libc_openat, openat) +# if !IS_IN (rtld) +int +__openat_nocancel (int fd, const char *file, int oflag, ...) +{ + mode_t mode = 0; + if (__OPEN_NEEDS_MODE (oflag)) + { + va_list arg; + va_start (arg, oflag); + mode = va_arg (arg, mode_t); + va_end (arg); + } + + return SYSCALL_CANCEL (openat, fd, file, oflag, mode); +} +# else +strong_alias (__libc_openat, __openat_nocancel) +# endif +libc_hidden_weak (__openat_nocancel) #endif diff --git a/sysdeps/unix/sysv/linux/openat64.c b/sysdeps/unix/sysv/linux/openat64.c index 4942061..816e8f1 100644 --- a/sysdeps/unix/sysv/linux/openat64.c +++ b/sysdeps/unix/sysv/linux/openat64.c @@ -19,6 +19,13 @@ #include <stdarg.h> #include <sysdep-cancel.h> +#include <not-cancel.h> + +#ifdef __OFF_T_MATCHES_OFF64_T +# define EXTRA_OPEN_FLAGS 0 +#else +# define EXTRA_OPEN_FLAGS O_LARGEFILE +#endif /* Open FILE with access OFLAG. Interpret relative paths relative to the directory associated with FD. If OFLAG includes O_CREAT or @@ -35,12 +42,6 @@ __libc_openat64 (int fd, const char *file, int oflag, ...) va_end (arg); } -#ifdef __OFF_T_MATCHES_OFF64_T -# define EXTRA_OPEN_FLAGS 0 -#else -# define EXTRA_OPEN_FLAGS O_LARGEFILE -#endif - return SYSCALL_CANCEL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS, mode); } @@ -48,8 +49,31 @@ strong_alias (__libc_openat64, __openat64) libc_hidden_weak (__openat64) weak_alias (__libc_openat64, openat64) +#if !IS_IN (rtld) +int +__openat64_nocancel (int fd, const char *file, int oflag, ...) +{ + mode_t mode = 0; + if (__OPEN_NEEDS_MODE (oflag)) + { + va_list arg; + va_start (arg, oflag); + mode = va_arg (arg, mode_t); + va_end (arg); + } + + return INLINE_SYSCALL_CALL (openat, fd, file, oflag | EXTRA_OPEN_FLAGS, + mode); +} +#else +strong_alias (__libc_openat64, __openat64_nocancel) +#endif +libc_hidden_def (__openat64_nocancel) + #ifdef __OFF_T_MATCHES_OFF64_T strong_alias (__libc_openat64, __openat) libc_hidden_weak (__openat) weak_alias (__libc_openat64, openat) + +strong_alias (__openat64_nocancel, __openat_nocancel) #endif