From: David Marchand <david.marchand@redhat.com>
To: Bruce Richardson <bruce.richardson@intel.com>
Cc: dev <dev@dpdk.org>, "Wang, Haiyue" <haiyue.wang@intel.com>,
Ray Kinsella <mdr@ashroe.eu>, Neil Horman <nhorman@tuxdriver.com>
Subject: Re: [dpdk-dev] [PATCH v6 2/8] eal: fix error attribute use for clang
Date: Thu, 28 Jan 2021 14:36:25 +0100 [thread overview]
Message-ID: <CAJFAV8xm4XsfSe-1cbYkReDz6xV7vsVCLkJHRbCcbM5rJG2vQQ@mail.gmail.com> (raw)
In-Reply-To: <20210128112007.GA899@bricha3-MOBL.ger.corp.intel.com>
On Thu, Jan 28, 2021 at 12:20 PM Bruce Richardson
<bruce.richardson@intel.com> wrote:
> > If the compiler has neither error or diagnose_if support, an internal
> > API can be called without ALLOW_INTERNAL_API.
> > I prefer a build error complaining on an unknown attribute rather than
> > silence a check.
> >
> > I.e.
> >
> > #ifndef ALLOW_INTERNAL_API
> >
> > #if __has_attribute(diagnose_if) /* For clang */
> > #define __rte_internal \
> > __attribute__((diagnose_if(1, "Symbol is not public ABI", "error"), \
> > section(".text.internal")))
> >
> > #else
> > #define __rte_internal \
> > __attribute__((error("Symbol is not public ABI"), \
> > section(".text.internal")))
> >
> > #endif
> >
> > #else /* ALLOW_INTERNAL_API */
> >
> > #define __rte_internal \
> > section(".text.internal")))
> >
> > #endif
> >
>
> Would this not mean that if someone was using a compiler that supported
> neither that they could never include any header file which contained any
> internal functions? I'd rather err on the side of allowing this, on the
> basis that the symbol should be already documented as internal and this is
> only an additional sanity check.
- Still not a fan.
We will never know about those compilers behavior, like how we caught
the clang issue and found an alternative.
- I just caught a build error with RHEL7 gcc:
[1/2127] Compiling C object
lib/librte_eal.a.p/librte_eal_common_eal_common_config.c.o
FAILED: lib/librte_eal.a.p/librte_eal_common_eal_common_config.c.o
ccache cc -Ilib/librte_eal.a.p -Ilib -I../lib -I. -I.. -Iconfig
-I../config -Ilib/librte_eal/include -I../lib/librte_eal/include
-Ilib/librte_eal/linux/include -I../lib/librte_eal/linux/include
-Ilib/librte_eal/x86/include -I../lib/librte_eal/x86/include
-Ilib/librte_eal/common -I../lib/librte_eal/common -Ilib/librte_eal
-I../lib/librte_eal -Ilib/librte_kvargs -I../lib/librte_kvargs
-Ilib/librte_metrics -I../lib/librte_metrics -Ilib/librte_telemetry
-I../lib/librte_telemetry -pipe -D_FILE_OFFSET_BITS=64 -Wall
-Winvalid-pch -O3 -include rte_config.h -Wextra -Wcast-qual
-Wdeprecated -Wformat -Wformat-nonliteral -Wformat-security
-Wmissing-declarations -Wmissing-prototypes -Wnested-externs
-Wold-style-definition -Wpointer-arith -Wsign-compare
-Wstrict-prototypes -Wundef -Wwrite-strings
-Wno-missing-field-initializers -D_GNU_SOURCE -fPIC -march=native
-DALLOW_EXPERIMENTAL_API -DALLOW_INTERNAL_API '-DABI_VERSION="21.1"'
-MD -MQ lib/librte_eal.a.p/librte_eal_common_eal_common_config.c.o -MF
lib/librte_eal.a.p/librte_eal_common_eal_common_config.c.o.d -o
lib/librte_eal.a.p/librte_eal_common_eal_common_config.c.o -c
../lib/librte_eal/common/eal_common_config.c
In file included from ../lib/librte_eal/include/rte_dev.h:24:0,
from ../lib/librte_eal/common/eal_private.h:12,
from ../lib/librte_eal/common/eal_common_config.c:9:
../lib/librte_eal/include/rte_compat.h:22:51: error: missing binary
operator before token "("
#if !defined ALLOW_INTERNAL_API && __has_attribute(error) /* For GCC */
^
../lib/librte_eal/include/rte_compat.h:28:53: error: missing binary
operator before token "("
#elif !defined ALLOW_INTERNAL_API && __has_attribute(diagnose_if) /*
For clang */
^
I can see that gcc doc recommends checking for __has_attribute availability.
Pasting from google cache, since the gcc.gnu.org doc website seems unavailable.
"""
4.2.6 __has_attribute
The special operator __has_attribute (operand) may be used in ‘#if’
and ‘#elif’ expressions to test whether the attribute referenced by
its operand is recognized by GCC. Using the operator in other contexts
is not valid. In C code, if compiling for strict conformance to
standards before C2x, operand must be a valid identifier. Otherwise,
operand may be optionally introduced by the attribute-scope:: prefix.
The attribute-scope prefix identifies the “namespace” within which the
attribute is recognized. The scope of GCC attributes is ‘gnu’ or
‘__gnu__’. The __has_attribute operator by itself, without any operand
or parentheses, acts as a predefined macro so that support for it can
be tested in portable code. Thus, the recommended use of the operator
is as follows:
#if defined __has_attribute
# if __has_attribute (nonnull)
# define ATTR_NONNULL __attribute__ ((nonnull))
# endif
#endif
The first ‘#if’ test succeeds only when the operator is supported by
the version of GCC (or another compiler) being used. Only when that
test succeeds is it valid to use __has_attribute as a preprocessor
operator. As a result, combining the two tests into a single
expression as shown below would only be valid with a compiler that
supports the operator but not with others that don’t.
#if defined __has_attribute && __has_attribute (nonnull) /* not portable */
…
#endif
"""
--
David Marchand
next prev parent reply other threads:[~2021-01-28 13:36 UTC|newest]
Thread overview: 165+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-01-14 11:05 [dpdk-dev] [PATCH 00/20] ensure headers have correct includes Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 01/20] eal: fix missing header inclusion Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 02/20] telemetry: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 03/20] ethdev: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 04/20] ring: fix missing includes for c11 model header Bruce Richardson
2021-01-14 12:57 ` David Marchand
2021-01-14 13:54 ` Ananyev, Konstantin
2021-01-14 11:05 ` [dpdk-dev] [PATCH 05/20] net: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 06/20] mbuf: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 07/20] bitratestats: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 08/20] rib: fix missing header includes Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 09/20] vhost: " Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 10/20] ipsec: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 11/20] fib: fix missing header includes Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 12/20] table: fix missing header include Bruce Richardson
2021-01-14 11:05 ` [dpdk-dev] [PATCH 13/20] pipeline: fix missing header includes Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 14/20] metrics: fix variable declaration in header Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 15/20] node: fix missing header include Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 16/20] app: fix extra include paths for app builds Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 17/20] app/chkincs: add chkincs app to verify headers Bruce Richardson
2021-01-14 12:16 ` David Marchand
2021-01-14 12:28 ` Bruce Richardson
2021-01-14 12:49 ` David Marchand
2021-01-14 16:04 ` David Marchand
2021-01-14 16:18 ` Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 18/20] eal: add missing include to mcslock Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 19/20] eal/x86: add architecture-specific headers to chkincs Bruce Richardson
2021-01-14 11:06 ` [dpdk-dev] [PATCH 20/20] test-meson-builds: add includes check to default x86 build Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 00/19] ensure headers have correct includes Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 01/19] eal: fix missing header inclusion Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 02/19] telemetry: fix missing header include Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 03/19] ethdev: " Bruce Richardson
2021-01-15 15:38 ` Andrew Rybchenko
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 04/19] net: " Bruce Richardson
2021-01-16 12:10 ` Ophir Munk
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 05/19] mbuf: " Bruce Richardson
2021-01-15 15:40 ` Andrew Rybchenko
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 06/19] bitratestats: " Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 07/19] rib: fix missing header includes Bruce Richardson
2021-01-15 11:37 ` Medvedkin, Vladimir
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 08/19] vhost: " Bruce Richardson
2021-01-21 8:38 ` Maxime Coquelin
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 09/19] ipsec: fix missing header include Bruce Richardson
2021-01-15 11:35 ` Ananyev, Konstantin
2021-01-15 11:37 ` Medvedkin, Vladimir
2021-01-15 11:45 ` Medvedkin, Vladimir
2021-01-15 11:49 ` Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 10/19] fib: fix missing header includes Bruce Richardson
2021-01-15 11:37 ` Medvedkin, Vladimir
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 11/19] table: fix missing header include Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 12/19] pipeline: fix missing header includes Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 13/19] metrics: fix variable declaration in header Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 14/19] node: fix missing header include Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 15/19] app: fix extra include paths for app builds Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 16/19] app/chkincs: add chkincs app to verify headers Bruce Richardson
2021-01-15 11:51 ` Ferruh Yigit
2021-01-15 11:59 ` Bruce Richardson
2021-01-15 14:09 ` Thomas Monjalon
2021-01-15 14:55 ` Bruce Richardson
2021-01-15 14:59 ` Bruce Richardson
2021-01-20 14:34 ` Bruce Richardson
2021-01-20 15:05 ` David Marchand
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 17/19] eal: add missing include to mcslock Bruce Richardson
2021-01-15 13:25 ` Honnappa Nagarahalli
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 18/19] eal/x86: add architecture-specific headers to chkincs Bruce Richardson
2021-01-15 11:10 ` [dpdk-dev] [PATCH v2 19/19] test-meson-builds: add includes check to default x86 build Bruce Richardson
2021-01-21 9:25 ` [dpdk-dev] [PATCH v2 00/19] ensure headers have correct includes David Marchand
2021-01-21 9:33 ` Bruce Richardson
2021-01-21 9:36 ` Thomas Monjalon
2021-01-21 9:43 ` Bruce Richardson
2021-01-21 15:15 ` Bruce Richardson
2021-01-21 23:20 ` Thomas Monjalon
2021-01-22 10:44 ` Bruce Richardson
2021-01-25 14:11 ` [dpdk-dev] [PATCH v3 0/4] add checking of header includes Bruce Richardson
2021-01-25 14:11 ` [dpdk-dev] [PATCH v3 1/4] eal: add missing include to mcslock Bruce Richardson
2021-01-25 14:11 ` [dpdk-dev] [PATCH v3 2/4] build: separate out headers for include checking Bruce Richardson
2021-01-25 14:11 ` [dpdk-dev] [PATCH v3 3/4] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-25 14:11 ` [dpdk-dev] [PATCH v3 4/4] devtools: remove check-includes script Bruce Richardson
2021-01-25 15:51 ` [dpdk-dev] [PATCH v3 0/4] add checking of header includes David Marchand
2021-01-25 18:17 ` Bruce Richardson
2021-01-26 11:15 ` Bruce Richardson
2021-01-26 14:04 ` David Marchand
2021-01-26 14:24 ` Bruce Richardson
2021-01-26 14:39 ` Bruce Richardson
2021-01-26 15:31 ` Thomas Monjalon
2021-01-26 15:42 ` Bruce Richardson
2021-01-26 15:50 ` Thomas Monjalon
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 0/7] " Bruce Richardson
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 1/7] eal: add missing include to mcslock Bruce Richardson
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 2/7] eal: fix error attribute use for clang Bruce Richardson
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 3/7] rib: fix missing header include Bruce Richardson
2021-01-26 14:21 ` Medvedkin, Vladimir
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 4/7] build: separate out headers for include checking Bruce Richardson
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 5/7] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 6/7] devtools: remove check-includes script Bruce Richardson
2021-01-26 14:18 ` [dpdk-dev] [PATCH v4 7/7] ci: add checking of includes to CI builds Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 0/8] add checking of header includes Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 1/8] eal: add missing include to mcslock Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 2/8] eal: fix error attribute use for clang Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 3/8] ethdev: make driver-only headers private Bruce Richardson
2021-01-27 8:56 ` David Marchand
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 4/8] rib: fix missing header include Bruce Richardson
2021-01-27 11:08 ` Medvedkin, Vladimir
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 5/8] build: separate out headers for include checking Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 6/8] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 7/8] devtools: remove check-includes script Bruce Richardson
2021-01-26 21:38 ` [dpdk-dev] [PATCH v5 8/8] ci: add checking of includes to CI builds Bruce Richardson
2021-01-27 14:46 ` Aaron Conole
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 0/8] add checking of header includes Bruce Richardson
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 1/8] eal: add missing include to mcslock Bruce Richardson
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 2/8] eal: fix error attribute use for clang Bruce Richardson
2021-01-28 11:00 ` David Marchand
2021-01-28 11:20 ` Bruce Richardson
2021-01-28 13:36 ` David Marchand [this message]
2021-01-28 14:16 ` Bruce Richardson
2021-01-28 15:16 ` Bruce Richardson
2021-01-28 16:46 ` [dpdk-dev] [dpdk-techboard] " Thomas Monjalon
2021-01-28 17:36 ` Bruce Richardson
2021-01-29 8:35 ` David Marchand
2021-01-29 8:54 ` Thomas Monjalon
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 3/8] rib: fix missing header include Bruce Richardson
2021-01-28 11:01 ` David Marchand
2021-01-28 11:20 ` Bruce Richardson
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 4/8] ethdev: make driver-only headers private Bruce Richardson
2021-01-27 17:48 ` Maxime Coquelin
2021-01-28 10:17 ` Thomas Monjalon
2021-01-28 11:01 ` David Marchand
2021-01-28 16:38 ` Webster, Steven
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 5/8] build: separate out headers for include checking Bruce Richardson
2021-01-28 11:07 ` Thomas Monjalon
2021-01-28 11:23 ` Bruce Richardson
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 6/8] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-01-28 11:02 ` David Marchand
2021-01-28 11:27 ` Bruce Richardson
2021-01-28 11:31 ` David Marchand
2021-01-28 11:48 ` Bruce Richardson
2021-01-28 17:23 ` Bruce Richardson
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 7/8] devtools: remove check-includes script Bruce Richardson
2021-01-28 11:10 ` Thomas Monjalon
2021-01-28 11:38 ` Bruce Richardson
2021-01-28 14:05 ` Thomas Monjalon
2021-01-27 17:33 ` [dpdk-dev] [PATCH v6 8/8] ci: add checking of includes to CI builds Bruce Richardson
2021-01-28 11:12 ` Thomas Monjalon
2021-01-28 11:41 ` Bruce Richardson
2021-01-28 18:34 ` Bruce Richardson
2021-01-29 17:42 ` David Marchand
2021-01-29 21:38 ` Aaron Conole
2021-01-28 10:55 ` [dpdk-dev] [PATCH v6 0/8] add checking of header includes David Marchand
2021-01-28 11:47 ` Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 00/10] " Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 01/10] eal: add missing include to mcslock Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 02/10] eal: fix error attribute use for clang Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 03/10] power: fix missing header includes Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 04/10] rib: fix missing header include Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 05/10] ethdev: make driver-only headers private Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 06/10] eventdev: " Bruce Richardson
2021-02-22 22:34 ` Stephen Hemminger
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 07/10] build: separate out headers for include checking Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 08/10] buildtools/chkincs: add app to verify header includes Bruce Richardson
2021-02-02 11:36 ` David Marchand
2021-02-02 12:23 ` Bruce Richardson
2021-01-29 16:48 ` [dpdk-dev] [PATCH v7 09/10] devtools: remove check-includes script Bruce Richardson
2021-01-29 16:55 ` [dpdk-dev] [PATCH v7 10/10] ci: add checking of includes to CI builds Bruce Richardson
2021-01-29 21:37 ` Aaron Conole
2021-01-29 20:14 ` [dpdk-dev] [PATCH v7 00/10] add checking of header includes David Marchand
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=CAJFAV8xm4XsfSe-1cbYkReDz6xV7vsVCLkJHRbCcbM5rJG2vQQ@mail.gmail.com \
--to=david.marchand@redhat.com \
--cc=bruce.richardson@intel.com \
--cc=dev@dpdk.org \
--cc=haiyue.wang@intel.com \
--cc=mdr@ashroe.eu \
--cc=nhorman@tuxdriver.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).