linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>
To: Miguel Ojeda <miguel.ojeda.sandonis@gmail.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>,
	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>,
	Dominique Martinet <asmadeus@codewreck.org>,
	Nick Desaulniers <ndesaulniers@google.com>
Subject: Re: [PATCH 7/7] Compiler Attributes: use feature checks instead of version checks
Date: Sat, 1 Sep 2018 11:56:40 +0200	[thread overview]
Message-ID: <20180901095639.ms6kkzywazkvs376@ltop.local> (raw)
In-Reply-To: <20180831170514.24665-7-miguel.ojeda.sandonis@gmail.com>

On Fri, Aug 31, 2018 at 07:05:14PM +0200, Miguel Ojeda wrote:
> Instead of using version checks per-compiler to define (or not)
> each attribute, use __has_attribute to test for them, following
> the cleanup started with commit 815f0ddb346c
> ("include/linux/compiler*.h: make compiler-*.h mutually exclusive").
> 
> All the attributes that are fairly common/standard (i.e. those that
> do not require extra logic to define them) have been moved
> to a new file include/linux/compiler_attributes.h.
> 
> In an effort to make the file as regular as possible, comments
> stating the purpose of attributes have been removed. Instead,
> links to the compiler docs have been added (i.e. to gcc and,
> if available, to clang as well). In addition, they have been sorted.
> 
> Finally, if an attribute is optional (i.e. if it is guarded
> by __has_attribute), the reason has been stated for future reference.
> 
> diff --git a/include/linux/compiler_attributes.h b/include/linux/compiler_attributes.h
> new file mode 100644
> index 000000000000..a9dfafc8fd19
> --- /dev/null
> +++ b/include/linux/compiler_attributes.h
> @@ -0,0 +1,226 @@
> +#ifndef __LINUX_COMPILER_ATTRIBUTES_H
> +#define __LINUX_COMPILER_ATTRIBUTES_H
> +
> +/*
> + * This file is meant to be sorted (by actual attribute name,
> + * not by #define identifier).
> + *
> + * Do not add here attributes which depend on others or require extra logic.
> + *
> + * If an attribute is optional, state the reason in the comment.
> + */
> +
> +/*
> + * 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

For sparse (which doesn't support __has_attribute() yet and defines
__GNUC_MINOR__ depending on the compiler used to build it) it won't
be totally correct since the concerned attributes here will be
incorrectly considered as not supported. But, since these attributes
have no semantic effects for sparse, it won't matter.

So, for sparse:
Reviewed-by: Luc Van Oostenryck <luc.vanoostenryck@gmail.com>

-- Luc

  parent reply	other threads:[~2018-09-01  9:56 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 [this message]
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
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=20180901095639.ms6kkzywazkvs376@ltop.local \
    --to=luc.vanoostenryck@gmail.com \
    --cc=arnd@arndb.de \
    --cc=asmadeus@codewreck.org \
    --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).