From patchwork Tue Jul 4 19:53:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Adhemerval Zanella X-Patchwork-Id: 107013 Delivered-To: patch@linaro.org Received: by 10.140.101.44 with SMTP id t41csp1361174qge; Tue, 4 Jul 2017 12:54:45 -0700 (PDT) X-Received: by 10.98.135.140 with SMTP id i134mr16548778pfe.237.1499198085061; Tue, 04 Jul 2017 12:54:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1499198085; cv=none; d=google.com; s=arc-20160816; b=Y+d23qKS3bBYOuLkOpR6ZNUqIZN5Y+tFqIaHKI8aCjzS60oTZlQfekPTadICFvSE5I PvCcSbo1pkyKGl9p7CZGqdd2qccKPEkgBhRrPYj5XTencN0o5JUYmZsMtqRSHK9ra9B4 idsNJ2FHReTlzjmT57cIxwN5lX6uiJOaU5gfvsJrxSkwE/pG+3SjYzdg1imvxIEtUD5C OjDR7khh1IsORpzLMZxU4H5OwDNi7ygMiMz0tz7nj6PESB0DiV6anPYMGE8HCywRYCt6 qlt6ydKNYLF5RwLduHOEAGWfrmeOqmodsV0ZR158ZL6PGuXgWCCnzaPpXCm5VLZakE4B yHAA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=references:in-reply-to:message-id:date:subject:to:from:delivered-to :sender:list-help:list-post:list-archive:list-subscribe :list-unsubscribe:list-id:precedence:mailing-list:dkim-signature :domainkey-signature:arc-authentication-results; bh=MNDYV8eYj5bC/Z9BO3lUmRbU/VJEOPN13aHerBf1P8A=; b=i4kSb0z0U70laX7OcnMkQtW44/5JDFB1qrNzPMUJ9lZ61RHXWyCoBvwQBENyjETh/w pduN/qGX7I2Kq5ITKICOUwNNB4TvmYObx+pkvMfPRf3jCo5PKPp8rz5Pl8NaDbYVDCKC HMquVf9pfcBjmRrVHXfarbhl5Af4oxZKziyVqcUFOLSkXQGZR8op44kcXbs5QYZEmuaL CkEI97PYzn29+jSJqVehtTFcuRG/JHPoKexBJTpaxzM7aNeBDL73gYTT2Q8DRWnJzszx wh9gxHDdKWGzrdW8X/hyOwsyDoe3hRAer21pWc/Djwe9iinyHqoypf4esUV3eUyVY8yG +VWQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@sourceware.org header.b=ipucqwrq; spf=pass (google.com: domain of libc-alpha-return-81663-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-81663-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from sourceware.org (server1.sourceware.org. [209.132.180.131]) by mx.google.com with ESMTPS id e11si15480525pgp.217.2017.07.04.12.54.44 for (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 04 Jul 2017 12:54:45 -0700 (PDT) Received-SPF: pass (google.com: domain of libc-alpha-return-81663-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) client-ip=209.132.180.131; Authentication-Results: mx.google.com; dkim=pass header.i=@sourceware.org header.b=ipucqwrq; spf=pass (google.com: domain of libc-alpha-return-81663-patch=linaro.org@sourceware.org designates 209.132.180.131 as permitted sender) smtp.mailfrom=libc-alpha-return-81663-patch=linaro.org@sourceware.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=linaro.org DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; q=dns; s=default; b=g69IlSxWi9H/JAKMRu+t8znKwh4hkb1 VcQ3+9MfvMejR4pAZoK8vSBWniBzwlno3OzYYZ1BlMx/+sWQYD51fIh6142FqcEM QzokbV917J/5hdK5FPxBrgEX8aRj17d/dFpT8k1w/CwEuqfRKjFTDM2lC9A+wPq/ cmorW3K8dt6c= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:from:to:subject:date:message-id:in-reply-to :references; s=default; bh=KJMzgB9OMdPkuKD3g9gXYQlbvPE=; b=ipucq wrqNBLyoLDJMnNm5ls4ZeYCPr29UslowxDVuLcuka+oLz/AZXxPMLdfdyvkIYiP6 eRFZKemHnSV+1HX3fzvOu6TKWNRku0Kdze/hUC27fHtvl3kjxvKMzRG+mamFWxFm zddGE5HuwZf4QqYBt25t+DpBiFIgRMJY6e17Vg= Received: (qmail 73826 invoked by alias); 4 Jul 2017 19:54:16 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 73427 invoked by uid 89); 4 Jul 2017 19:54:12 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, RCVD_IN_DNSWL_NONE, RCVD_IN_SORBS_SPAM, SPF_PASS autolearn=ham version=3.3.2 spammy=Non X-HELO: mail-qk0-f172.google.com X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id:in-reply-to :references; bh=MNDYV8eYj5bC/Z9BO3lUmRbU/VJEOPN13aHerBf1P8A=; b=uHM+u3DbINDwAh8E8+GWyKGkjPhUZsJ00tTrQLHRbbt84CyxFm7aTpyMfcRq5mGBhn TeYgknJwQVJUbftnDXeCJqL2h37ydRDwN70gBtUvatKt6Ptm4mABTgX+PRK+2iqEs0mQ tRaLB7FRhWX8BFQQznIXSh1NLog8xRHNw6wuuO8Ws2M7k99BCKw2I72J34jJgvm328sq XXdOJ0juoy6G6Ghk6dVvk5tfgSkJPEe0FChl7ZwmQVsT/4AEBjbbLrl2TnvMQ72RIGji Jr+XPMotfHX3ZQs9QL6dXpl9DA7y+5fb14UPs4Qw2Nngs9EYYe5Ab3veUhFFyGd931CW 2b+w== X-Gm-Message-State: AKS2vOz0CRRhXvbEQ6hBgkIiCDBgW2zllFWq2bQN9IAkCecZxKfDbhev 6cYFI/fA3gPSs/sF7ML7fw== X-Received: by 10.55.168.17 with SMTP id r17mr50953898qke.146.1499198047765; Tue, 04 Jul 2017 12:54:07 -0700 (PDT) From: Adhemerval Zanella To: libc-alpha@sourceware.org Subject: [PATCH 04/14] Consolidate non cancellable openat call Date: Tue, 4 Jul 2017 16:53:44 -0300 Message-Id: <1499198034-5837-5-git-send-email-adhemerval.zanella@linaro.org> In-Reply-To: <1499198034-5837-1-git-send-email-adhemerval.zanella@linaro.org> References: <1499198034-5837-1-git-send-email-adhemerval.zanella@linaro.org> 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 | 16 ++++++++++++++++ sysdeps/unix/sysv/linux/openat64.c | 32 ++++++++++++++++++++++++++------ 9 files changed, 77 insertions(+), 30 deletions(-) -- 2.7.4 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 # include #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..3057301 100644 --- a/sysdeps/unix/sysv/linux/openat.c +++ b/sysdeps/unix/sysv/linux/openat.c @@ -19,6 +19,7 @@ #include #include +#include #ifndef __OFF_T_MATCHES_OFF64_T @@ -43,4 +44,19 @@ weak_alias (__libc_openat, __openat) libc_hidden_weak (__openat) weak_alias (__libc_openat, openat) +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); +} +libc_hidden_weak (__openat_nocancel) #endif diff --git a/sysdeps/unix/sysv/linux/openat64.c b/sysdeps/unix/sysv/linux/openat64.c index 4942061..3c1cdf8 100644 --- a/sysdeps/unix/sysv/linux/openat64.c +++ b/sysdeps/unix/sysv/linux/openat64.c @@ -19,6 +19,13 @@ #include #include +#include + +#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,27 @@ strong_alias (__libc_openat64, __openat64) libc_hidden_weak (__openat64) weak_alias (__libc_openat64, openat64) +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); +} +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