[1/2] eal/arm: fix gcc build for optimization level 0
Checks
Commit Message
Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
failed for:
../lib/librte_efd/rte_efd.c
Assembler messages:
3866: Error: selected processor does not support `crc32cb w0,w0,w1'
3890: Error: selected processor does not support `crc32ch w0,w0,w1'
3914: Error: selected processor does not support `crc32cw w0,w0,w1'
3938: Error: selected processor does not support `crc32cx w0,w0,x1'
This was caused by an architecture specifier added for Clang.
Unlike Clang, Gcc considers each inline assembly block to be dependent
and therefor, the architecture specifier impacts assemble of some
blocks require certain extension support.
Removed the architecture for Gcc to fix the issue.
Fixes: 8fce34cd0a6a ("eal/arm: fix clang build of native target")
Reported-by: Feifei Wang <feifei.wang2@arm.com>
Signed-off-by: Ruifeng Wang <ruifeng.wang@arm.com>
---
lib/librte_eal/arm/include/rte_atomic_64.h | 4 ++++
1 file changed, 4 insertions(+)
Comments
On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang <ruifeng.wang@arm.com> wrote:
>
> Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
> failed for:
> ../lib/librte_efd/rte_efd.c
> Assembler messages:
> 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> 3914: Error: selected processor does not support `crc32cw w0,w0,w1'
> 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
>
> This was caused by an architecture specifier added for Clang.
> Unlike Clang, Gcc considers each inline assembly block to be dependent
> and therefor, the architecture specifier impacts assemble of some
> blocks require certain extension support.
I reproduced this error with -O0 for config/arm/arm64_octeontx2_linux_gcc.
The patch looks simple enough and it only affects ARM builds.
Jerin,
Are you okay with this change for 20.11?
Or should we wait 21.02?
Ruifeng,
Looking at the kernel, I see no distinction with gcc/clang, so I'd say
the kernel has the same issue, or is there something else that differs
in dpdk?
Besides, the kernel patch previously mentioned had a followup fix.
On Fri, Nov 27, 2020 at 2:09 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang <ruifeng.wang@arm.com> wrote:
> >
> > Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
> > failed for:
> > ../lib/librte_efd/rte_efd.c
> > Assembler messages:
> > 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> > 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> > 3914: Error: selected processor does not support `crc32cw w0,w0,w1'
> > 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
> >
> > This was caused by an architecture specifier added for Clang.
> > Unlike Clang, Gcc considers each inline assembly block to be dependent
> > and therefor, the architecture specifier impacts assemble of some
> > blocks require certain extension support.
>
> I reproduced this error with -O0 for config/arm/arm64_octeontx2_linux_gcc.
> The patch looks simple enough and it only affects ARM builds.
>
> Jerin,
> Are you okay with this change for 20.11?
> Or should we wait 21.02?
I could reproduce the issue with meson build -Dbuildtype=debug
--cross-file config/arm/arm64_octeontx2_linux_gcc
This fix is OK. Request to merge for 20.11
Acked-by: Jerin Jacob <jerinj@marvell.com>
>
> Ruifeng,
> Looking at the kernel, I see no distinction with gcc/clang, so I'd say
> the kernel has the same issue, or is there something else that differs
> in dpdk?
> Besides, the kernel patch previously mentioned had a followup fix.
>
>
> --
> David Marchand
>
On Fri, Nov 27, 2020 at 9:51 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
>
> On Fri, Nov 27, 2020 at 2:09 PM David Marchand
> <david.marchand@redhat.com> wrote:
> >
> > On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang <ruifeng.wang@arm.com> wrote:
> > >
> > > Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
> > > failed for:
> > > ../lib/librte_efd/rte_efd.c
> > > Assembler messages:
> > > 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> > > 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> > > 3914: Error: selected processor does not support `crc32cw w0,w0,w1'
> > > 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
> > >
> > > This was caused by an architecture specifier added for Clang.
> > > Unlike Clang, Gcc considers each inline assembly block to be dependent
> > > and therefor, the architecture specifier impacts assemble of some
> > > blocks require certain extension support.
> >
> > I reproduced this error with -O0 for config/arm/arm64_octeontx2_linux_gcc.
> > The patch looks simple enough and it only affects ARM builds.
> >
> > Jerin,
> > Are you okay with this change for 20.11?
> > Or should we wait 21.02?
>
> I could reproduce the issue with meson build -Dbuildtype=debug
> --cross-file config/arm/arm64_octeontx2_linux_gcc
>
> This fix is OK. Request to merge for 20.11
>
> Acked-by: Jerin Jacob <jerinj@marvell.com>
Ruifeng, Andrew,
I get a compilation error with this patch on sfc using gcc and
config/arm/arm64_octeontx2_linux_gcc config + --buildtype=debug and/or
-Dc_args=-O0 .
aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture
8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802
FAILED: drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o
aarch64-linux-gnu-gcc
-Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
-Idrivers/common/sfc_efx/base -I../../dpdk/drivers/common/sfc_efx/base
-Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
-I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include
-I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include
-I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/arm/include
-I../../dpdk/lib/librte_eal/arm/include -Ilib/librte_eal/common
-I../../dpdk/lib/librte_eal/common -Ilib/librte_eal
-I../../dpdk/lib/librte_eal -Ilib/librte_kvargs
-I../../dpdk/lib/librte_kvargs
-Ilib/librte_telemetry/../librte_metrics
-I../../dpdk/lib/librte_telemetry/../librte_metrics
-Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry
-fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall
-Winvalid-pch -Werror -g -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-packed-not-aligned
-Wno-missing-field-initializers -D_GNU_SOURCE -fPIC
-march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API
-DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-optimization
-Waggregate-return -Wbad-function-cast -Wno-sign-compare
-Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
-Wno-unused-but-set-variable -MD -MQ
'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -MF
'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o.d' -o
'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -c
../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c
In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
from
../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
from ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c:7:
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
‘__cas_128_relaxed’:
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
function returns an aggregate [-Werror=aggregate-return]
__ATOMIC128_CAS_OP(__cas_128_relaxed, "casp")
^~~~~~~~~~~~~~~~~
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
definition of macro ‘__ATOMIC128_CAS_OP’
cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
^~~~~~~~~~~
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
‘__cas_128_acquire’:
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:82:20: error:
function returns an aggregate [-Werror=aggregate-return]
__ATOMIC128_CAS_OP(__cas_128_acquire, "caspa")
^~~~~~~~~~~~~~~~~
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
definition of macro ‘__ATOMIC128_CAS_OP’
cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
^~~~~~~~~~~
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
‘__cas_128_release’:
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:83:20: error:
function returns an aggregate [-Werror=aggregate-return]
__ATOMIC128_CAS_OP(__cas_128_release, "caspl")
^~~~~~~~~~~~~~~~~
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
definition of macro ‘__ATOMIC128_CAS_OP’
cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
^~~~~~~~~~~
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
‘__cas_128_acq_rel’:
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:84:20: error:
function returns an aggregate [-Werror=aggregate-return]
__ATOMIC128_CAS_OP(__cas_128_acq_rel, "caspal")
^~~~~~~~~~~~~~~~~
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
definition of macro ‘__ATOMIC128_CAS_OP’
cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
^~~~~~~~~~~
cc1: all warnings being treated as errors
If I waive those warnings:
- next to fail is net/igc (fixed by next patch so ok)
- and then next to fail is net/sfc.
On Fri, Nov 27, 2020 at 2:56 PM David Marchand
<david.marchand@redhat.com> wrote:
>
> On Fri, Nov 27, 2020 at 9:51 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> >
> > On Fri, Nov 27, 2020 at 2:09 PM David Marchand
> > <david.marchand@redhat.com> wrote:
> > >
> > > On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang <ruifeng.wang@arm.com> wrote:
> > > >
> > > > Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
> > > > failed for:
> > > > ../lib/librte_efd/rte_efd.c
> > > > Assembler messages:
> > > > 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> > > > 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> > > > 3914: Error: selected processor does not support `crc32cw w0,w0,w1'
> > > > 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
> > > >
> > > > This was caused by an architecture specifier added for Clang.
> > > > Unlike Clang, Gcc considers each inline assembly block to be dependent
> > > > and therefor, the architecture specifier impacts assemble of some
> > > > blocks require certain extension support.
> > >
> > > I reproduced this error with -O0 for config/arm/arm64_octeontx2_linux_gcc.
> > > The patch looks simple enough and it only affects ARM builds.
> > >
> > > Jerin,
> > > Are you okay with this change for 20.11?
> > > Or should we wait 21.02?
> >
> > I could reproduce the issue with meson build -Dbuildtype=debug
> > --cross-file config/arm/arm64_octeontx2_linux_gcc
> >
> > This fix is OK. Request to merge for 20.11
> >
> > Acked-by: Jerin Jacob <jerinj@marvell.com>
>
> Ruifeng, Andrew,
>
> I get a compilation error with this patch on sfc using gcc and
> config/arm/arm64_octeontx2_linux_gcc config + --buildtype=debug and/or
> -Dc_args=-O0 .
>
> aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture
> 8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802
>
> FAILED: drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o
> aarch64-linux-gnu-gcc
> -Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
> -Idrivers/common/sfc_efx/base -I../../dpdk/drivers/common/sfc_efx/base
> -Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
> -I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include
> -I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include
> -I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/arm/include
> -I../../dpdk/lib/librte_eal/arm/include -Ilib/librte_eal/common
> -I../../dpdk/lib/librte_eal/common -Ilib/librte_eal
> -I../../dpdk/lib/librte_eal -Ilib/librte_kvargs
> -I../../dpdk/lib/librte_kvargs
> -Ilib/librte_telemetry/../librte_metrics
> -I../../dpdk/lib/librte_telemetry/../librte_metrics
> -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry
> -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall
> -Winvalid-pch -Werror -g -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-packed-not-aligned
> -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC
> -march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API
> -DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-optimization
> -Waggregate-return -Wbad-function-cast -Wno-sign-compare
> -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
> -Wno-unused-but-set-variable -MD -MQ
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -MF
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o.d' -o
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -c
> ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c
> In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
> from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
> from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
> from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
> from
> ../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
> from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
> from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
> from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
> from ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c:7:
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> ‘__cas_128_relaxed’:
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
> function returns an aggregate [-Werror=aggregate-return]
> __ATOMIC128_CAS_OP(__cas_128_relaxed, "casp")
> ^~~~~~~~~~~~~~~~~
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> definition of macro ‘__ATOMIC128_CAS_OP’
> cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> ^~~~~~~~~~~
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> ‘__cas_128_acquire’:
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:82:20: error:
> function returns an aggregate [-Werror=aggregate-return]
> __ATOMIC128_CAS_OP(__cas_128_acquire, "caspa")
> ^~~~~~~~~~~~~~~~~
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> definition of macro ‘__ATOMIC128_CAS_OP’
> cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> ^~~~~~~~~~~
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> ‘__cas_128_release’:
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:83:20: error:
> function returns an aggregate [-Werror=aggregate-return]
> __ATOMIC128_CAS_OP(__cas_128_release, "caspl")
> ^~~~~~~~~~~~~~~~~
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> definition of macro ‘__ATOMIC128_CAS_OP’
> cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> ^~~~~~~~~~~
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> ‘__cas_128_acq_rel’:
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:84:20: error:
> function returns an aggregate [-Werror=aggregate-return]
> __ATOMIC128_CAS_OP(__cas_128_acq_rel, "caspal")
> ^~~~~~~~~~~~~~~~~
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> definition of macro ‘__ATOMIC128_CAS_OP’
> cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> ^~~~~~~~~~~
> cc1: all warnings being treated as errors
>
>
> If I waive those warnings:
> - next to fail is net/igc (fixed by next patch so ok)
> - and then next to fail is net/sfc.
Regarding the net/sfc build, Could try clean build.(I got the warning first,
after the clean build, it is OK)
>
>
> --
> David Marchand
>
> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Friday, November 27, 2020 4:39 PM
> To: Ruifeng Wang <Ruifeng.Wang@arm.com>; jerinj@marvell.com
> Cc: Honnappa Nagarahalli <Honnappa.Nagarahalli@arm.com>; dev
> <dev@dpdk.org>; nd <nd@arm.com>; Feifei Wang <Feifei.Wang2@arm.com>
> Subject: Re: [dpdk-dev] [PATCH 1/2] eal/arm: fix gcc build for optimization
> level 0
>
> On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang <ruifeng.wang@arm.com>
> wrote:
> >
> > Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
> > failed for:
> > ../lib/librte_efd/rte_efd.c
> > Assembler messages:
> > 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> > 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> > 3914: Error: selected processor does not support `crc32cw w0,w0,w1'
> > 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
> >
> > This was caused by an architecture specifier added for Clang.
> > Unlike Clang, Gcc considers each inline assembly block to be dependent
> > and therefor, the architecture specifier impacts assemble of some
> > blocks require certain extension support.
>
> I reproduced this error with -O0 for config/arm/arm64_octeontx2_linux_gcc.
> The patch looks simple enough and it only affects ARM builds.
>
> Jerin,
> Are you okay with this change for 20.11?
> Or should we wait 21.02?
>
> Ruifeng,
> Looking at the kernel, I see no distinction with gcc/clang, so I'd say the kernel
> has the same issue, or is there something else that differs in dpdk?
> Besides, the kernel patch previously mentioned had a followup fix.
The kernel follow up fix looks like a better way to reconcile Gcc and Clang.
I'll reroll with the same approach.
>
>
> --
> David Marchand
On 11/27/20 12:25 PM, David Marchand wrote:
> On Fri, Nov 27, 2020 at 9:51 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
>>
>> On Fri, Nov 27, 2020 at 2:09 PM David Marchand
>> <david.marchand@redhat.com> wrote:
>>>
>>> On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang <ruifeng.wang@arm.com> wrote:
>>>>
>>>> Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
>>>> failed for:
>>>> ../lib/librte_efd/rte_efd.c
>>>> Assembler messages:
>>>> 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
>>>> 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
>>>> 3914: Error: selected processor does not support `crc32cw w0,w0,w1'
>>>> 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
>>>>
>>>> This was caused by an architecture specifier added for Clang.
>>>> Unlike Clang, Gcc considers each inline assembly block to be dependent
>>>> and therefor, the architecture specifier impacts assemble of some
>>>> blocks require certain extension support.
>>>
>>> I reproduced this error with -O0 for config/arm/arm64_octeontx2_linux_gcc.
>>> The patch looks simple enough and it only affects ARM builds.
>>>
>>> Jerin,
>>> Are you okay with this change for 20.11?
>>> Or should we wait 21.02?
>>
>> I could reproduce the issue with meson build -Dbuildtype=debug
>> --cross-file config/arm/arm64_octeontx2_linux_gcc
>>
>> This fix is OK. Request to merge for 20.11
>>
>> Acked-by: Jerin Jacob <jerinj@marvell.com>
>
> Ruifeng, Andrew,
>
> I get a compilation error with this patch on sfc using gcc and
> config/arm/arm64_octeontx2_linux_gcc config + --buildtype=debug and/or
> -Dc_args=-O0 .
>
> aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture
> 8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802
>
> FAILED: drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o
> aarch64-linux-gnu-gcc
> -Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
> -Idrivers/common/sfc_efx/base -I../../dpdk/drivers/common/sfc_efx/base
> -Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
> -I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include
> -I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include
> -I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/arm/include
> -I../../dpdk/lib/librte_eal/arm/include -Ilib/librte_eal/common
> -I../../dpdk/lib/librte_eal/common -Ilib/librte_eal
> -I../../dpdk/lib/librte_eal -Ilib/librte_kvargs
> -I../../dpdk/lib/librte_kvargs
> -Ilib/librte_telemetry/../librte_metrics
> -I../../dpdk/lib/librte_telemetry/../librte_metrics
> -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry
> -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall
> -Winvalid-pch -Werror -g -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-packed-not-aligned
> -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC
> -march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API
> -DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-optimization
> -Waggregate-return -Wbad-function-cast -Wno-sign-compare
> -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
> -Wno-unused-but-set-variable -MD -MQ
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -MF
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o.d' -o
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -c
> ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c
> In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
> from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
> from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
> from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
> from
> ../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
> from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
> from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
> from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
> from ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c:7:
...
> If I waive those warnings:
> - next to fail is net/igc (fixed by next patch so ok)
> - and then next to fail is net/sfc.
As I understand it is not common/sfc_efx specific issue since it is
simply header inclusion. I guess it is the just first
one to build. I have no good ideas what to do with it.
So, help from ARM experts would be appreciated.
Andrew.
On Fri, Nov 27, 2020 at 10:34 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
>
> On Fri, Nov 27, 2020 at 2:56 PM David Marchand
> <david.marchand@redhat.com> wrote:
> >
> > On Fri, Nov 27, 2020 at 9:51 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> > >
> > > On Fri, Nov 27, 2020 at 2:09 PM David Marchand
> > > <david.marchand@redhat.com> wrote:
> > > >
> > > > On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang <ruifeng.wang@arm.com> wrote:
> > > > >
> > > > > Gcc build with '-O0' on platforms with RTE_ARM_FEATURE_ATOMICS set
> > > > > failed for:
> > > > > ../lib/librte_efd/rte_efd.c
> > > > > Assembler messages:
> > > > > 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> > > > > 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> > > > > 3914: Error: selected processor does not support `crc32cw w0,w0,w1'
> > > > > 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
> > > > >
> > > > > This was caused by an architecture specifier added for Clang.
> > > > > Unlike Clang, Gcc considers each inline assembly block to be dependent
> > > > > and therefor, the architecture specifier impacts assemble of some
> > > > > blocks require certain extension support.
> > > >
> > > > I reproduced this error with -O0 for config/arm/arm64_octeontx2_linux_gcc.
> > > > The patch looks simple enough and it only affects ARM builds.
> > > >
> > > > Jerin,
> > > > Are you okay with this change for 20.11?
> > > > Or should we wait 21.02?
> > >
> > > I could reproduce the issue with meson build -Dbuildtype=debug
> > > --cross-file config/arm/arm64_octeontx2_linux_gcc
> > >
> > > This fix is OK. Request to merge for 20.11
> > >
> > > Acked-by: Jerin Jacob <jerinj@marvell.com>
> >
> > Ruifeng, Andrew,
> >
> > I get a compilation error with this patch on sfc using gcc and
> > config/arm/arm64_octeontx2_linux_gcc config + --buildtype=debug and/or
> > -Dc_args=-O0 .
> >
> > aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture
> > 8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802
> >
> > FAILED: drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o
> > aarch64-linux-gnu-gcc
> > -Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
> > -Idrivers/common/sfc_efx/base -I../../dpdk/drivers/common/sfc_efx/base
> > -Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
> > -I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include
> > -I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include
> > -I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/arm/include
> > -I../../dpdk/lib/librte_eal/arm/include -Ilib/librte_eal/common
> > -I../../dpdk/lib/librte_eal/common -Ilib/librte_eal
> > -I../../dpdk/lib/librte_eal -Ilib/librte_kvargs
> > -I../../dpdk/lib/librte_kvargs
> > -Ilib/librte_telemetry/../librte_metrics
> > -I../../dpdk/lib/librte_telemetry/../librte_metrics
> > -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry
> > -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall
> > -Winvalid-pch -Werror -g -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-packed-not-aligned
> > -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC
> > -march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API
> > -DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-optimization
> > -Waggregate-return -Wbad-function-cast -Wno-sign-compare
> > -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
> > -Wno-unused-but-set-variable -MD -MQ
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -MF
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o.d' -o
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o' -c
> > ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c
> > In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
> > from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
> > from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
> > from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
> > from
> > ../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
> > from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
> > from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
> > from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
> > from ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c:7:
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > ‘__cas_128_relaxed’:
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
> > function returns an aggregate [-Werror=aggregate-return]
> > __ATOMIC128_CAS_OP(__cas_128_relaxed, "casp")
> > ^~~~~~~~~~~~~~~~~
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > definition of macro ‘__ATOMIC128_CAS_OP’
> > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> > ^~~~~~~~~~~
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > ‘__cas_128_acquire’:
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:82:20: error:
> > function returns an aggregate [-Werror=aggregate-return]
> > __ATOMIC128_CAS_OP(__cas_128_acquire, "caspa")
> > ^~~~~~~~~~~~~~~~~
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > definition of macro ‘__ATOMIC128_CAS_OP’
> > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> > ^~~~~~~~~~~
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > ‘__cas_128_release’:
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:83:20: error:
> > function returns an aggregate [-Werror=aggregate-return]
> > __ATOMIC128_CAS_OP(__cas_128_release, "caspl")
> > ^~~~~~~~~~~~~~~~~
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > definition of macro ‘__ATOMIC128_CAS_OP’
> > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> > ^~~~~~~~~~~
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > ‘__cas_128_acq_rel’:
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:84:20: error:
> > function returns an aggregate [-Werror=aggregate-return]
> > __ATOMIC128_CAS_OP(__cas_128_acq_rel, "caspal")
> > ^~~~~~~~~~~~~~~~~
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > definition of macro ‘__ATOMIC128_CAS_OP’
> > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated) \
> > ^~~~~~~~~~~
> > cc1: all warnings being treated as errors
> >
> >
> > If I waive those warnings:
> > - next to fail is net/igc (fixed by next patch so ok)
> > - and then next to fail is net/sfc.
>
> Regarding the net/sfc build, Could try clean build.(I got the warning first,
> after the clean build, it is OK)
That's what I first thought too, then I noticed that
test-meson-builds.sh had switched back my build dir to debugoptimized.
From scratch:
The Meson build system
Version: 0.52.0
Source dir: /home/dmarchan/dpdk
Build dir: /home/dmarchan/builds/build-arm64-octeontx2
Build type: cross build
Program cat found: YES (/usr/bin/cat)
Project name: DPDK
Project version: 20.11.0-rc5
Appending CFLAGS from environment: '-Werror'
C compiler for the build machine: ccache gcc (gcc 9.3.1 "gcc (GCC)
9.3.1 20200408 (Red Hat 9.3.1-2)")
C linker for the build machine: GNU ld.bfd 2.32-33
C compiler for the host machine: aarch64-linux-gnu-gcc (gcc 8.2.1
"aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture
8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802")
C linker for the host machine: GNU ld.bfd 8.2-2019
Build machine cpu family: x86_64
Build machine cpu: x86_64
Host machine cpu family: aarch64
Host machine cpu: armv8-a
Target machine cpu family: aarch64
Target machine cpu: armv8-a
...
Option buildtype is: debug [default: release]
Option default_library is: shared [default: static]
Found ninja-1.9.0 at /usr/bin/ninja
ninja: Entering directory `/home/dmarchan/builds/build-arm64-octeontx2'
[479/2558] Compiling C object
'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'.
FAILED: drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o
aarch64-linux-gnu-gcc
-Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
-Idrivers/common/sfc_efx/base -I../../dpdk/drivers/common/sfc_efx/base
-Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
-I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include
-I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include
-I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/arm/include
-I../../dpdk/lib/librte_eal/arm/include -Ilib/librte_eal/common
-I../../dpdk/lib/librte_eal/common -Ilib/librte_eal
-I../../dpdk/lib/librte_eal -Ilib/librte_kvargs
-I../../dpdk/lib/librte_kvargs
-Ilib/librte_telemetry/../librte_metrics
-I../../dpdk/lib/librte_telemetry/../librte_metrics
-Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry
-fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall
-Winvalid-pch -Werror -g -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-packed-not-aligned
-Wno-missing-field-initializers -D_GNU_SOURCE -fPIC
-march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API
-DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-optimization
-Waggregate-return -Wbad-function-cast -Wno-sign-compare
-Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
-Wno-unused-but-set-variable -MD -MQ
'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'
-MF 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o.d'
-o 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'
-c ../../dpdk/drivers/common/sfc_efx/base/efx_bootcfg.c
In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
from
../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
from ../../dpdk/drivers/common/sfc_efx/base/efx_bootcfg.c:7:
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
‘__cas_128_relaxed’:
../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
function returns an aggregate [-Werror=aggregate-return]
__ATOMIC128_CAS_OP(__cas_128_relaxed, "casp")
...
> -----Original Message-----
> From: David Marchand <david.marchand@redhat.com>
> Sent: Friday, November 27, 2020 5:45 PM
> To: Jerin Jacob <jerinjacobk@gmail.com>
> Cc: Ruifeng Wang <Ruifeng.Wang@arm.com>; Andrew Rybchenko
> <andrew.rybchenko@oktetlabs.ru>; jerinj@marvell.com; Honnappa
> Nagarahalli <Honnappa.Nagarahalli@arm.com>; dev <dev@dpdk.org>; nd
> <nd@arm.com>; Feifei Wang <Feifei.Wang2@arm.com>
> Subject: Re: [dpdk-dev] [PATCH 1/2] eal/arm: fix gcc build for optimization
> level 0
>
> On Fri, Nov 27, 2020 at 10:34 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> >
> > On Fri, Nov 27, 2020 at 2:56 PM David Marchand
> > <david.marchand@redhat.com> wrote:
> > >
> > > On Fri, Nov 27, 2020 at 9:51 AM Jerin Jacob <jerinjacobk@gmail.com>
> wrote:
> > > >
> > > > On Fri, Nov 27, 2020 at 2:09 PM David Marchand
> > > > <david.marchand@redhat.com> wrote:
> > > > >
> > > > > On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang
> <ruifeng.wang@arm.com> wrote:
> > > > > >
> > > > > > Gcc build with '-O0' on platforms with
> RTE_ARM_FEATURE_ATOMICS
> > > > > > set failed for:
> > > > > > ../lib/librte_efd/rte_efd.c
> > > > > > Assembler messages:
> > > > > > 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> > > > > > 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> > > > > > 3914: Error: selected processor does not support `crc32cw
> w0,w0,w1'
> > > > > > 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
> > > > > >
> > > > > > This was caused by an architecture specifier added for Clang.
> > > > > > Unlike Clang, Gcc considers each inline assembly block to be
> > > > > > dependent and therefor, the architecture specifier impacts
> > > > > > assemble of some blocks require certain extension support.
> > > > >
> > > > > I reproduced this error with -O0 for
> config/arm/arm64_octeontx2_linux_gcc.
> > > > > The patch looks simple enough and it only affects ARM builds.
> > > > >
> > > > > Jerin,
> > > > > Are you okay with this change for 20.11?
> > > > > Or should we wait 21.02?
> > > >
> > > > I could reproduce the issue with meson build -Dbuildtype=debug
> > > > --cross-file config/arm/arm64_octeontx2_linux_gcc
> > > >
> > > > This fix is OK. Request to merge for 20.11
> > > >
> > > > Acked-by: Jerin Jacob <jerinj@marvell.com>
> > >
> > > Ruifeng, Andrew,
> > >
> > > I get a compilation error with this patch on sfc using gcc and
> > > config/arm/arm64_octeontx2_linux_gcc config + --buildtype=debug
> > > and/or
> > > -Dc_args=-O0 .
> > >
> > > aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture
> > > 8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802
> > >
> > > FAILED:
> > > drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o
> > > aarch64-linux-gnu-gcc
> > > -Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
> > > -Idrivers/common/sfc_efx/base
> > > -I../../dpdk/drivers/common/sfc_efx/base
> > > -Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
> > > -I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include
> > > -I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include
> > > -I../../dpdk/lib/librte_eal/linux/include
> > > -Ilib/librte_eal/arm/include -I../../dpdk/lib/librte_eal/arm/include
> > > -Ilib/librte_eal/common -I../../dpdk/lib/librte_eal/common
> > > -Ilib/librte_eal -I../../dpdk/lib/librte_eal -Ilib/librte_kvargs
> > > -I../../dpdk/lib/librte_kvargs
> > > -Ilib/librte_telemetry/../librte_metrics
> > > -I../../dpdk/lib/librte_telemetry/../librte_metrics
> > > -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry
> > > -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall
> > > -Winvalid-pch -Werror -g -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-packed-not-aligned
> > > -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC
> > > -march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API
> > > -DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-
> optimization
> > > -Waggregate-return -Wbad-function-cast -Wno-sign-compare
> > > -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
> > > -Wno-unused-but-set-variable -MD -MQ
> > > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o'
> > > -MF
> > >
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o.d'
> > > -o
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o'
> > > -c ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c
> > > In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
> > > from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
> > > from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
> > > from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
> > > from
> > > ../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
> > > from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
> > > from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
> > > from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
> > > from ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c:7:
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > ‘__cas_128_relaxed’:
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
> > > function returns an aggregate [-Werror=aggregate-return]
> > > __ATOMIC128_CAS_OP(__cas_128_relaxed, "casp")
> > > ^~~~~~~~~~~~~~~~~
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> \
> > > ^~~~~~~~~~~
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > ‘__cas_128_acquire’:
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:82:20: error:
> > > function returns an aggregate [-Werror=aggregate-return]
> > > __ATOMIC128_CAS_OP(__cas_128_acquire, "caspa")
> > > ^~~~~~~~~~~~~~~~~
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> \
> > > ^~~~~~~~~~~
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > ‘__cas_128_release’:
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:83:20: error:
> > > function returns an aggregate [-Werror=aggregate-return]
> > > __ATOMIC128_CAS_OP(__cas_128_release, "caspl")
> > > ^~~~~~~~~~~~~~~~~
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> \
> > > ^~~~~~~~~~~
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > ‘__cas_128_acq_rel’:
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:84:20: error:
> > > function returns an aggregate [-Werror=aggregate-return]
> > > __ATOMIC128_CAS_OP(__cas_128_acq_rel, "caspal")
> > > ^~~~~~~~~~~~~~~~~
> > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> \
> > > ^~~~~~~~~~~
> > > cc1: all warnings being treated as errors
> > >
> > >
> > > If I waive those warnings:
> > > - next to fail is net/igc (fixed by next patch so ok)
> > > - and then next to fail is net/sfc.
> >
> > Regarding the net/sfc build, Could try clean build.(I got the warning
> > first, after the clean build, it is OK)
>
> That's what I first thought too, then I noticed that test-meson-builds.sh had
> switched back my build dir to debugoptimized.
>
>
> From scratch:
>
> The Meson build system
> Version: 0.52.0
> Source dir: /home/dmarchan/dpdk
> Build dir: /home/dmarchan/builds/build-arm64-octeontx2
> Build type: cross build
> Program cat found: YES (/usr/bin/cat)
> Project name: DPDK
> Project version: 20.11.0-rc5
> Appending CFLAGS from environment: '-Werror'
> C compiler for the build machine: ccache gcc (gcc 9.3.1 "gcc (GCC)
> 9.3.1 20200408 (Red Hat 9.3.1-2)")
> C linker for the build machine: GNU ld.bfd 2.32-33 C compiler for the host
> machine: aarch64-linux-gnu-gcc (gcc 8.2.1 "aarch64-linux-gnu-gcc (GNU
> Toolchain for the A-profile Architecture
> 8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802") C linker for the host machine:
> GNU ld.bfd 8.2-2019 Build machine cpu family: x86_64 Build machine cpu:
> x86_64 Host machine cpu family: aarch64 Host machine cpu: armv8-a Target
> machine cpu family: aarch64 Target machine cpu: armv8-a ...
> Option buildtype is: debug [default: release] Option default_library is: shared
> [default: static] Found ninja-1.9.0 at /usr/bin/ninja
> ninja: Entering directory `/home/dmarchan/builds/build-arm64-octeontx2'
> [479/2558] Compiling C object
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'.
> FAILED:
> drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o
> aarch64-linux-gnu-gcc
> -Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
> -Idrivers/common/sfc_efx/base -I../../dpdk/drivers/common/sfc_efx/base
> -Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
> -I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include -
> I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include -
> I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/arm/include -
> I../../dpdk/lib/librte_eal/arm/include -Ilib/librte_eal/common -
> I../../dpdk/lib/librte_eal/common -Ilib/librte_eal -I../../dpdk/lib/librte_eal -
> Ilib/librte_kvargs -I../../dpdk/lib/librte_kvargs -
> Ilib/librte_telemetry/../librte_metrics
> -I../../dpdk/lib/librte_telemetry/../librte_metrics
> -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry -fdiagnostics-
> color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Werror -g -
> 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-packed-
> not-aligned -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC -
> march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API -
> DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-optimization -
> Waggregate-return -Wbad-function-cast -Wno-sign-compare -Wno-unused-
> parameter -Wno-unused-variable -Wno-empty-body -Wno-unused-but-set-
> variable -MD -MQ
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'
> -MF
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o.
> d'
> -o
> 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'
> -c ../../dpdk/drivers/common/sfc_efx/base/efx_bootcfg.c
> In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
> from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
> from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
> from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
> from
> ../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
> from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
> from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
> from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
> from ../../dpdk/drivers/common/sfc_efx/base/efx_bootcfg.c:7:
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> ‘__cas_128_relaxed’:
> ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
> function returns an aggregate [-Werror=aggregate-return]
> __ATOMIC128_CAS_OP(__cas_128_relaxed, "casp") ...
I can see similar warning message (function returns an aggregate) when doing "-O0" build.
Since "-Werror=aggregate-return" is used, error will be reported.
This is because '__cas_128_xxx' return aggregated data type I think.
Inline the functions should resolve the issue. But it could cause register corruption as discussed
when the code was added:
http://patches.dpdk.org/patch/55580/
No quick solution I can think of.
>
>
> --
> David Marchand
On Fri, Nov 27, 2020 at 3:35 PM Ruifeng Wang <Ruifeng.Wang@arm.com> wrote:
>
> > -----Original Message-----
> > From: David Marchand <david.marchand@redhat.com>
> > Sent: Friday, November 27, 2020 5:45 PM
> > To: Jerin Jacob <jerinjacobk@gmail.com>
> > Cc: Ruifeng Wang <Ruifeng.Wang@arm.com>; Andrew Rybchenko
> > <andrew.rybchenko@oktetlabs.ru>; jerinj@marvell.com; Honnappa
> > Nagarahalli <Honnappa.Nagarahalli@arm.com>; dev <dev@dpdk.org>; nd
> > <nd@arm.com>; Feifei Wang <Feifei.Wang2@arm.com>
> > Subject: Re: [dpdk-dev] [PATCH 1/2] eal/arm: fix gcc build for optimization
> > level 0
> >
> > On Fri, Nov 27, 2020 at 10:34 AM Jerin Jacob <jerinjacobk@gmail.com> wrote:
> > >
> > > On Fri, Nov 27, 2020 at 2:56 PM David Marchand
> > > <david.marchand@redhat.com> wrote:
> > > >
> > > > On Fri, Nov 27, 2020 at 9:51 AM Jerin Jacob <jerinjacobk@gmail.com>
> > wrote:
> > > > >
> > > > > On Fri, Nov 27, 2020 at 2:09 PM David Marchand
> > > > > <david.marchand@redhat.com> wrote:
> > > > > >
> > > > > > On Fri, Nov 27, 2020 at 9:10 AM Ruifeng Wang
> > <ruifeng.wang@arm.com> wrote:
> > > > > > >
> > > > > > > Gcc build with '-O0' on platforms with
> > RTE_ARM_FEATURE_ATOMICS
> > > > > > > set failed for:
> > > > > > > ../lib/librte_efd/rte_efd.c
> > > > > > > Assembler messages:
> > > > > > > 3866: Error: selected processor does not support `crc32cb w0,w0,w1'
> > > > > > > 3890: Error: selected processor does not support `crc32ch w0,w0,w1'
> > > > > > > 3914: Error: selected processor does not support `crc32cw
> > w0,w0,w1'
> > > > > > > 3938: Error: selected processor does not support `crc32cx w0,w0,x1'
> > > > > > >
> > > > > > > This was caused by an architecture specifier added for Clang.
> > > > > > > Unlike Clang, Gcc considers each inline assembly block to be
> > > > > > > dependent and therefor, the architecture specifier impacts
> > > > > > > assemble of some blocks require certain extension support.
> > > > > >
> > > > > > I reproduced this error with -O0 for
> > config/arm/arm64_octeontx2_linux_gcc.
> > > > > > The patch looks simple enough and it only affects ARM builds.
> > > > > >
> > > > > > Jerin,
> > > > > > Are you okay with this change for 20.11?
> > > > > > Or should we wait 21.02?
> > > > >
> > > > > I could reproduce the issue with meson build -Dbuildtype=debug
> > > > > --cross-file config/arm/arm64_octeontx2_linux_gcc
> > > > >
> > > > > This fix is OK. Request to merge for 20.11
> > > > >
> > > > > Acked-by: Jerin Jacob <jerinj@marvell.com>
> > > >
> > > > Ruifeng, Andrew,
> > > >
> > > > I get a compilation error with this patch on sfc using gcc and
> > > > config/arm/arm64_octeontx2_linux_gcc config + --buildtype=debug
> > > > and/or
> > > > -Dc_args=-O0 .
> > > >
> > > > aarch64-linux-gnu-gcc (GNU Toolchain for the A-profile Architecture
> > > > 8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802
> > > >
> > > > FAILED:
> > > > drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o
> > > > aarch64-linux-gnu-gcc
> > > > -Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
> > > > -Idrivers/common/sfc_efx/base
> > > > -I../../dpdk/drivers/common/sfc_efx/base
> > > > -Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
> > > > -I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include
> > > > -I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include
> > > > -I../../dpdk/lib/librte_eal/linux/include
> > > > -Ilib/librte_eal/arm/include -I../../dpdk/lib/librte_eal/arm/include
> > > > -Ilib/librte_eal/common -I../../dpdk/lib/librte_eal/common
> > > > -Ilib/librte_eal -I../../dpdk/lib/librte_eal -Ilib/librte_kvargs
> > > > -I../../dpdk/lib/librte_kvargs
> > > > -Ilib/librte_telemetry/../librte_metrics
> > > > -I../../dpdk/lib/librte_telemetry/../librte_metrics
> > > > -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry
> > > > -fdiagnostics-color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall
> > > > -Winvalid-pch -Werror -g -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-packed-not-aligned
> > > > -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC
> > > > -march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API
> > > > -DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-
> > optimization
> > > > -Waggregate-return -Wbad-function-cast -Wno-sign-compare
> > > > -Wno-unused-parameter -Wno-unused-variable -Wno-empty-body
> > > > -Wno-unused-but-set-variable -MD -MQ
> > > > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o'
> > > > -MF
> > > >
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o.d'
> > > > -o
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_crc32.c.o'
> > > > -c ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c
> > > > In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
> > > > from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
> > > > from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
> > > > from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
> > > > from
> > > > ../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
> > > > from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
> > > > from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
> > > > from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
> > > > from ../../dpdk/drivers/common/sfc_efx/base/efx_crc32.c:7:
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > > ‘__cas_128_relaxed’:
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
> > > > function returns an aggregate [-Werror=aggregate-return]
> > > > __ATOMIC128_CAS_OP(__cas_128_relaxed, "casp")
> > > > ^~~~~~~~~~~~~~~~~
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> > \
> > > > ^~~~~~~~~~~
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > > ‘__cas_128_acquire’:
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:82:20: error:
> > > > function returns an aggregate [-Werror=aggregate-return]
> > > > __ATOMIC128_CAS_OP(__cas_128_acquire, "caspa")
> > > > ^~~~~~~~~~~~~~~~~
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> > \
> > > > ^~~~~~~~~~~
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > > ‘__cas_128_release’:
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:83:20: error:
> > > > function returns an aggregate [-Werror=aggregate-return]
> > > > __ATOMIC128_CAS_OP(__cas_128_release, "caspl")
> > > > ^~~~~~~~~~~~~~~~~
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> > \
> > > > ^~~~~~~~~~~
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > > > ‘__cas_128_acq_rel’:
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:84:20: error:
> > > > function returns an aggregate [-Werror=aggregate-return]
> > > > __ATOMIC128_CAS_OP(__cas_128_acq_rel, "caspal")
> > > > ^~~~~~~~~~~~~~~~~
> > > > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:57:1: note: in
> > > > definition of macro ‘__ATOMIC128_CAS_OP’
> > > > cas_op_name(rte_int128_t *dst, rte_int128_t old, rte_int128_t updated)
> > \
> > > > ^~~~~~~~~~~
> > > > cc1: all warnings being treated as errors
> > > >
> > > >
> > > > If I waive those warnings:
> > > > - next to fail is net/igc (fixed by next patch so ok)
> > > > - and then next to fail is net/sfc.
> > >
> > > Regarding the net/sfc build, Could try clean build.(I got the warning
> > > first, after the clean build, it is OK)
> >
> > That's what I first thought too, then I noticed that test-meson-builds.sh had
> > switched back my build dir to debugoptimized.
> >
> >
> > From scratch:
> >
> > The Meson build system
> > Version: 0.52.0
> > Source dir: /home/dmarchan/dpdk
> > Build dir: /home/dmarchan/builds/build-arm64-octeontx2
> > Build type: cross build
> > Program cat found: YES (/usr/bin/cat)
> > Project name: DPDK
> > Project version: 20.11.0-rc5
> > Appending CFLAGS from environment: '-Werror'
> > C compiler for the build machine: ccache gcc (gcc 9.3.1 "gcc (GCC)
> > 9.3.1 20200408 (Red Hat 9.3.1-2)")
> > C linker for the build machine: GNU ld.bfd 2.32-33 C compiler for the host
> > machine: aarch64-linux-gnu-gcc (gcc 8.2.1 "aarch64-linux-gnu-gcc (GNU
> > Toolchain for the A-profile Architecture
> > 8.2-2019.01 (arm-rel-8.28)) 8.2.1 20180802") C linker for the host machine:
> > GNU ld.bfd 8.2-2019 Build machine cpu family: x86_64 Build machine cpu:
> > x86_64 Host machine cpu family: aarch64 Host machine cpu: armv8-a Target
> > machine cpu family: aarch64 Target machine cpu: armv8-a ...
> > Option buildtype is: debug [default: release] Option default_library is: shared
> > [default: static] Found ninja-1.9.0 at /usr/bin/ninja
> > ninja: Entering directory `/home/dmarchan/builds/build-arm64-octeontx2'
> > [479/2558] Compiling C object
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'.
> > FAILED:
> > drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o
> > aarch64-linux-gnu-gcc
> > -Idrivers/common/sfc_efx/base/932d09a@@sfc_base@sta
> > -Idrivers/common/sfc_efx/base -I../../dpdk/drivers/common/sfc_efx/base
> > -Idrivers/common/sfc_efx -I../../dpdk/drivers/common/sfc_efx -I.
> > -I../../dpdk/ -Iconfig -I../../dpdk/config -Ilib/librte_eal/include -
> > I../../dpdk/lib/librte_eal/include -Ilib/librte_eal/linux/include -
> > I../../dpdk/lib/librte_eal/linux/include -Ilib/librte_eal/arm/include -
> > I../../dpdk/lib/librte_eal/arm/include -Ilib/librte_eal/common -
> > I../../dpdk/lib/librte_eal/common -Ilib/librte_eal -I../../dpdk/lib/librte_eal -
> > Ilib/librte_kvargs -I../../dpdk/lib/librte_kvargs -
> > Ilib/librte_telemetry/../librte_metrics
> > -I../../dpdk/lib/librte_telemetry/../librte_metrics
> > -Ilib/librte_telemetry -I../../dpdk/lib/librte_telemetry -fdiagnostics-
> > color=always -pipe -D_FILE_OFFSET_BITS=64 -Wall -Winvalid-pch -Werror -g -
> > 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-packed-
> > not-aligned -Wno-missing-field-initializers -D_GNU_SOURCE -fPIC -
> > march=armv8.2-a+crc+crypto+lse -DALLOW_EXPERIMENTAL_API -
> > DALLOW_INTERNAL_API -Wno-format-truncation -Wdisabled-optimization -
> > Waggregate-return -Wbad-function-cast -Wno-sign-compare -Wno-unused-
> > parameter -Wno-unused-variable -Wno-empty-body -Wno-unused-but-set-
> > variable -MD -MQ
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'
> > -MF
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o.
> > d'
> > -o
> > 'drivers/common/sfc_efx/base/932d09a@@sfc_base@sta/efx_bootcfg.c.o'
> > -c ../../dpdk/drivers/common/sfc_efx/base/efx_bootcfg.c
> > In file included from ../../dpdk/lib/librte_eal/arm/include/rte_atomic.h:9,
> > from ../../dpdk/lib/librte_eal/include/generic/rte_pause.h:19,
> > from ../../dpdk/lib/librte_eal/arm/include/rte_pause_64.h:19,
> > from ../../dpdk/lib/librte_eal/arm/include/rte_pause.h:13,
> > from
> > ../../dpdk/lib/librte_eal/include/generic/rte_spinlock.h:25,
> > from ../../dpdk/lib/librte_eal/arm/include/rte_spinlock.h:17,
> > from ../../dpdk/drivers/common/sfc_efx/efsys.h:15,
> > from ../../dpdk/drivers/common/sfc_efx/base/efx.h:11,
> > from ../../dpdk/drivers/common/sfc_efx/base/efx_bootcfg.c:7:
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h: In function
> > ‘__cas_128_relaxed’:
> > ../../dpdk/lib/librte_eal/arm/include/rte_atomic_64.h:81:20: error:
> > function returns an aggregate [-Werror=aggregate-return]
> > __ATOMIC128_CAS_OP(__cas_128_relaxed, "casp") ...
>
> I can see similar warning message (function returns an aggregate) when doing "-O0" build.
> Since "-Werror=aggregate-return" is used, error will be reported.
> This is because '__cas_128_xxx' return aggregated data type I think.
> Inline the functions should resolve the issue. But it could cause register corruption as discussed
> when the code was added:
> http://patches.dpdk.org/patch/55580/
>
> No quick solution I can think of.
Yes. We may need to return two separate uint64_t by taking as the pointer.
It will be NOT a candidate for 20.11.
In my setup:
meson --buildtype=debug build --cross-file config/arm/arm64_octeontx2_linux_gcc
ninja -C build
Shows the warnings for "warning: function returns an aggregate
[-Waggregate-return]", Since
warning not treated as the error it links.
I think, for this release, The current[1] minor changes are OK as it
improves the situation.
http://patches.dpdk.org/project/dpdk/list/?submitter=Ruifeng
> >
> >
> > --
> > David Marchand
>
@@ -46,7 +46,11 @@ rte_atomic_thread_fence(int memorder)
/*------------------------ 128 bit atomic operations -------------------------*/
#if defined(__ARM_FEATURE_ATOMICS) || defined(RTE_ARM_FEATURE_ATOMICS)
+#if defined(RTE_CC_CLANG)
#define __LSE_PREAMBLE ".arch armv8-a+lse\n"
+#else
+#define __LSE_PREAMBLE ""
+#endif
#define __ATOMIC128_CAS_OP(cas_op_name, op_string) \
static __rte_noinline rte_int128_t \