linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Dominique Martinet <asmadeus@codewreck.org>
To: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	linux-kernel <linux-kernel@vger.kernel.org>,
	Eli Friedman <efriedma@codeaurora.org>,
	Christopher Li <sparse@chrisli.org>,
	Kees Cook <keescook@chromium.org>, Ingo Molnar <mingo@kernel.org>,
	Geert Uytterhoeven <geert@linux-m68k.org>,
	Arnd Bergmann <arnd@arndb.de>,
	Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	Masahiro Yamada <yamada.masahiro@socionext.com>,
	Joe Perches <joe@perches.com>,
	Nick Desaulniers <ndesaulniers@google.com>
Subject: Re: [PATCH 7/7] Compiler Attributes: use feature checks instead of version checks
Date: Sat, 1 Sep 2018 16:17:47 +0200	[thread overview]
Message-ID: <20180901141747.GA20900@nautica> (raw)
In-Reply-To: <CANiq72=pMSOaY5rYvJFgWKjiqAMjEVFu8GXRHx=Tz4sXqP-SSw@mail.gmail.com>

Miguel Ojeda wrote on Sat, Sep 01, 2018:
>>> +/*
>>> + * To check for optional attributes, we use __has_attribute, which is supported
>>> + * on gcc >= 5, clang >= 2.9 and icc >= 17. In the meantime, to support
>>> + * 4.6 <= gcc < 5, we implement __has_attribute by hand.
>>> + */
>>> +#ifndef __has_attribute
>>> +#define __has_attribute(x) __GCC4_has_attribute_##x
>>> +#define __GCC4_has_attribute_externally_visible 1
>>> +#define __GCC4_has_attribute_noclone 1
>>> +#define __GCC4_has_attribute_optimize 1
>>> +#if __GNUC_MINOR__ >= 8
>>> +#define __GCC4_has_attribute_no_sanitize_address 1
>>> +#endif
>>> +#if __GNUC_MINOR__ >= 9
>>> +#define __GCC4_has_attribute_assume_aligned 1
>>> +#endif
>>> +#endif
>>
>> Hmm, if this is in this file and not compiler-gcc, I am not sure about
>> using GNUC_MINOR without checking the major -- I have no idea what kind
>> of versions e.g. icc will use (or what attributes ancients version of
>> clang or old icc support, actually)
> 
> The idea here is that all non-gcc recent compilers that we may care
> about support __has_attribute,so if we are inside the #ifndef, we
> *have* to be gcc < 5 (see https://godbolt.org/z/NQFdsK).

That really makes me want to have these in compiler-gcc though :)

But I guess I can also understand wanting to include this file as early
as possible, although I do not think any of the compiler-specific
headers use any of this they could eventually want to override something
from it at some point... Leaving it as an open question, feel free to do
as you prefer here.


> By the way, do you know if there are some public docs on the
> attributes supported by icc that we can link to? I couldn't find
> anything in a quick search, both in google and in the icc's
> "Compatibility" pages...

I'm honestly not using icc much, I just have access to machines where it
is installed...
Actually, now I'm looking there is some html documentation installed
along with icc, but it does not seem complete; instead it points to
software.intel.com ... which has _some_ documentation on attributes, but
is missing a _lot_ of them, see :
https://software.intel.com/en-us/cpp-compiler-18.0-developer-guide-and-reference-attributes

I saw that a lot of these attributes were defined as #pragma first for
icc and had hoped to see something like 'alternative forms' in the
pragma documentations but there does not seem to be anything there
either... Afraid I won't be of much help there.



(from another reply)
> Because of that logic, I tried to simplify as much as possible all
> existing things (e.g. assume_aligned by removing __CHECKER__) so that
> they could be moved to compiler_attributes.h. In a way,
> compiler_attributes.h defines some extensions to the C language that
> all code could use anywhere (actually whether we can move them out of
> __KERNEL__ etc. is another question)

(very good question, though! Figuring out how to share these with the
tools/include/linux/compiler* instead of having an old copy would be a
good start... For another patchset though)

-- 
Dominique

  reply	other threads:[~2018-09-01 14:18 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-08-31 17:05 [PATCH 1/7] Compiler Attributes: remove unused attributes Miguel Ojeda
2018-08-31 17:05 ` [PATCH 2/7] Compiler Attributes: use the no-underscores syntax Miguel Ojeda
2018-08-31 18:51   ` Nick Desaulniers
2018-08-31 19:17     ` Miguel Ojeda
2018-08-31 21:49   ` Rasmus Villemoes
2018-08-31 22:10     ` Miguel Ojeda
2018-08-31 22:40       ` Miguel Ojeda
2018-09-03  6:42         ` Geert Uytterhoeven
2018-09-03 10:40           ` Miguel Ojeda
2018-08-31 17:05 ` [PATCH 3/7] Compiler Attributes: remove unneeded tests Miguel Ojeda
2018-08-31 21:10   ` Nick Desaulniers
2018-09-01  8:16   ` kbuild test robot
2018-09-01  9:56   ` kbuild test robot
2018-08-31 17:05 ` [PATCH 4/7] Compiler Attributes: homogenize __must_be_array Miguel Ojeda
2018-08-31 21:16   ` Nick Desaulniers
2018-09-01  9:17   ` Luc Van Oostenryck
2018-09-01 12:11     ` Miguel Ojeda
2018-08-31 17:05 ` [PATCH 5/7] Compiler Attributes: naked was fixed in gcc 4.6 Miguel Ojeda
2018-08-31 19:48   ` Arnd Bergmann
2018-08-31 20:26     ` Miguel Ojeda
2018-08-31 17:05 ` [PATCH 6/7] Compiler Attributes: remove unneeded sparse (__CHECKER__) tests Miguel Ojeda
2018-08-31 21:38   ` Nick Desaulniers
2018-08-31 21:55     ` Miguel Ojeda
2018-08-31 22:39       ` Luc Van Oostenryck
2018-08-31 17:05 ` [PATCH 7/7] Compiler Attributes: use feature checks instead of version checks Miguel Ojeda
2018-08-31 23:07   ` Nick Desaulniers
2018-09-01 13:38     ` Miguel Ojeda
2018-09-01 18:39       ` Greg KH
2018-09-01 19:15         ` Miguel Ojeda
2018-09-01  9:24   ` kbuild test robot
2018-09-01  9:51   ` kbuild test robot
2018-09-01  9:56   ` Luc Van Oostenryck
2018-09-01 12:58     ` Miguel Ojeda
2018-09-01 10:14   ` Dominique Martinet
2018-09-01 12:55     ` Miguel Ojeda
2018-09-01 14:17       ` Dominique Martinet [this message]
2018-09-03 18:03         ` Miguel Ojeda
2018-08-31 17:27 ` [PATCH 1/7] Compiler Attributes: remove unused attributes Joe Perches
2018-08-31 18:43   ` Nick Desaulniers
2018-08-31 18:53     ` Joe Perches
2018-08-31 20:23     ` Miguel Ojeda
2018-08-31 21:27       ` Nick Desaulniers
2018-09-02 19:54         ` Arnd Bergmann
2018-09-03 11:16           ` Miguel Ojeda
2018-08-31 18:39 ` Nick Desaulniers

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20180901141747.GA20900@nautica \
    --to=asmadeus@codewreck.org \
    --cc=arnd@arndb.de \
    --cc=efriedma@codeaurora.org \
    --cc=geert@linux-m68k.org \
    --cc=gregkh@linuxfoundation.org \
    --cc=joe@perches.com \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=miguel.ojeda.sandonis@gmail.com \
    --cc=mingo@kernel.org \
    --cc=ndesaulniers@google.com \
    --cc=sparse@chrisli.org \
    --cc=torvalds@linux-foundation.org \
    --cc=yamada.masahiro@socionext.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).