On Thu, May 2, 2019 at 4:13 PM Reshma Pattan <reshma.pat...@intel.com>
wrote:

> gcc 9 on Fedora 30 gives an error
> "taking address of packed member may result in an
> unaligned pointer value" for -Waddress-of-packed-member.
>
> Report it as warning instead of error to fix the build.
>
> Snippet of build before fix
> ...lib/librte_eal/linux/eal/eal_memalloc.c: In function ‘alloc_seg_walk’:
> ...lib/librte_eal/linux/eal/eal_memalloc.c:768:12: error: taking address
> of packed member of ‘struct rte_mem_config’ may result in an unaligned
> pointer value [-Werror=address-of-packed-member]
>   768 |  cur_msl = &mcfg->memsegs[msl_idx];
>       |            ^~~~~~~~~~~~~~~~~~~~~~~
>
> Snippet of build after fix
> ..lib/librte_eal/linux/eal/eal_memory.c: In function ‘remap_segment’:
> ..lib/librte_eal/linux/eal/eal_memory.c:685:9: warning: taking address
> of packed member of ‘struct rte_mem_config’ may result in an unaligned
> pointer value [-Waddress-of-packed-member]
>   685 |   msl = &mcfg->memsegs[msl_idx];
>
> Signed-off-by: Reshma Pattan <reshma.pat...@intel.com>
> ---
>  mk/toolchain/gcc/rte.vars.mk | 4 ++++
>  1 file changed, 4 insertions(+)
>
> diff --git a/mk/toolchain/gcc/rte.vars.mk b/mk/toolchain/gcc/rte.vars.mk
> index d8b99faf6..61032bbbc 100644
> --- a/mk/toolchain/gcc/rte.vars.mk
> +++ b/mk/toolchain/gcc/rte.vars.mk
> @@ -87,5 +87,9 @@ WERROR_FLAGS += -Wimplicit-fallthrough=2
>  WERROR_FLAGS += -Wno-format-truncation
>  endif
>
> +#Report "taking address of packed member may result
> +#in an unaligned pointer value" issues as warnings.
> +WERROR_FLAGS += -Wno-error=address-of-packed-member
> +
>  export CC AS AR LD OBJCOPY OBJDUMP STRIP READELF
>  export TOOLCHAIN_CFLAGS TOOLCHAIN_LDFLAGS TOOLCHAIN_ASFLAGS
> --
> 2.21.0
>
>
No, you can't do this unconditionally.

Looked at clang (in make build system) and meson (globally) and those
completely disable the warning.
$ git grep address-of-packed-member origin/master --
origin/master:config/meson.build:       '-Wno-address-of-packed-member'
origin/master:mk/toolchain/clang/rte.vars.mk:WERROR_FLAGS +=
-Wno-address-of-packed-member

It should be something like (untested):

@@ -87,5 +87,10 @@ WERROR_FLAGS += -Wimplicit-fallthrough=2
 WERROR_FLAGS += -Wno-format-truncation
 endif

+# disable packed member unalign warnings
+ifeq ($(shell test $(GCC_VERSION) -ge 90 && echo 1), 1)
+WERROR_FLAGS += -Wno-address-of-packed-member
+endif
+
 export CC AS AR LD OBJCOPY OBJDUMP STRIP READELF
 export TOOLCHAIN_CFLAGS TOOLCHAIN_LDFLAGS TOOLCHAIN_ASFLAGS


-- 
David Marchand

Reply via email to