From patchwork Fri Jun 14 14:22:36 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Weimer X-Patchwork-Id: 33118 Received: (qmail 91865 invoked by alias); 14 Jun 2019 14:22:44 -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 91853 invoked by uid 89); 14 Jun 2019 14:22:44 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-19.0 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3, SPF_HELO_PASS autolearn=ham version=3.3.1 spammy=wonders X-HELO: mx1.redhat.com From: Florian Weimer To: Szabolcs Nagy Cc: nd , Zack Weinberg , GNU C Library Subject: Re: [glibc] : Use Linux UAPI header for statx if available and useful References: <20190612110504.66041.qmail@sourceware.org> <87ftoe7utd.fsf@oldenburg2.str.redhat.com> <87y3266czw.fsf@oldenburg2.str.redhat.com> <87ef3y6bpv.fsf@oldenburg2.str.redhat.com> <17fed83c-e000-ccbf-9900-104fc20a6273@arm.com> <874l4u6bad.fsf@oldenburg2.str.redhat.com> <2df99c26-7a4c-02ba-a50e-7557c5581a9b@arm.com> Date: Fri, 14 Jun 2019 16:22:36 +0200 In-Reply-To: <2df99c26-7a4c-02ba-a50e-7557c5581a9b@arm.com> (Szabolcs Nagy's message of "Wed, 12 Jun 2019 16:05:43 +0000") Message-ID: <87muiks0ur.fsf@oldenburg2.str.redhat.com> User-Agent: Gnus/5.13 (Gnus v5.13) Emacs/26.2 (gnu/linux) MIME-Version: 1.0 * Szabolcs Nagy: > On 12/06/2019 17:03, Florian Weimer wrote: >> * Szabolcs Nagy: >> >>> On 12/06/2019 16:54, Florian Weimer wrote: >>>> Linux: Fix __glibc_has_include use for and statx >>>> >>>> The identifier linux is used as a predefined macro, so the actually used >>>> path is 1/stat.h or 1/stat64.h. Using the quote-based version triggers >>>> a file lookup for /usr/include/bits/linux/stat.h (or whatever directory >>>> is used to store bits/statx.h), but since bits/ is pretty much reserved >>>> by glibc, this appears to be acceptable. >>>> >>>> This is related to GCC PR 80005: incorrect macro expansion of the >>>> argument of __has_include. >>>> >>>> Suggested by Zack Weinberg. >>>> >>>> 2019-06-12 Florian Weimer >>>> >>>> * sysdeps/unix/sysv/linux/bits/statx.h: Use string literal in >>>> argument to __glibc_has_include to inhibit macro expansion. >>>> >>>> diff --git a/sysdeps/unix/sysv/linux/bits/statx.h b/sysdeps/unix/sysv/linux/bits/statx.h >>>> index d36f44efc6..3599f85a47 100644 >>>> --- a/sysdeps/unix/sysv/linux/bits/statx.h >>>> +++ b/sysdeps/unix/sysv/linux/bits/statx.h >>>> @@ -23,8 +23,8 @@ >>>> #endif >>>> >>>> /* Use the Linux kernel header if available. */ >>>> -#if __glibc_has_include () >>>> -# include >>>> +#if __glibc_has_include ("linux/stat.h") >>>> +# include "linux/stat.h" >>> >>> i would add a comment here with the gcc bug number as a >>> reminder in case anybody wonders about "" >> >> What about this? >> >> /* Use "" to work around incorrect macro expansion of the __has_include >> argument (GCC PR 80005). */ > > looks good. Thanks. Updated patch below. I plan to push this soon. Florian Linux: Fix __glibc_has_include use for and statx The identifier linux is used as a predefined macro, so the actually used path is 1/stat.h or 1/stat64.h. Using the quote-based version triggers a file lookup for /usr/include/bits/linux/stat.h (or whatever directory is used to store bits/statx.h), but since bits/ is pretty much reserved by glibc, this appears to be acceptable. This is related to GCC PR 80005: incorrect macro expansion of the argument of __has_include. Suggested by Zack Weinberg. 2019-06-14 Florian Weimer * sysdeps/unix/sysv/linux/bits/statx.h: Use string literal in argument to __glibc_has_include to inhibit macro expansion. Reviewed-by: Carlos O'Donell diff --git a/sysdeps/unix/sysv/linux/bits/statx.h b/sysdeps/unix/sysv/linux/bits/statx.h index d36f44efc6..206878723f 100644 --- a/sysdeps/unix/sysv/linux/bits/statx.h +++ b/sysdeps/unix/sysv/linux/bits/statx.h @@ -23,8 +23,11 @@ #endif /* Use the Linux kernel header if available. */ -#if __glibc_has_include () -# include + +/* Use "" to work around incorrect macro expansion of the + __has_include argument (GCC PR 80005). */ +#if __glibc_has_include ("linux/stat.h") +# include "linux/stat.h" # ifdef STATX_TYPE # define __statx_timestamp_defined 1 # define __statx_defined 1