On 05. 02. 25, 23:56, David Laight wrote:
On Wed, 5 Feb 2025 20:45:46 +0000
Simon Horman <ho...@kernel.org> wrote:

+ Jiri

On Wed, Feb 05, 2025 at 11:42:12AM +0100, Przemek Kitszel wrote:
GCC 7 is not as good as GCC 8+ in telling what is a compile-time const,
and thus could be used for static storage. So we could not use variables
for that, no matter how much "const" keyword is sprinkled around.

Excerpt from the report:
My GCC is: gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0.

   CC [M]  drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.o
drivers/net/ethernet/intel/ice/devlink/health.c:35:3: error: initializer 
element is not constant
    ice_common_port_solutions, {ice_port_number_label}},
    ^~~~~~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/intel/ice/devlink/health.c:35:3: note: (near 
initialization for 'ice_health_status_lookup[0].solution')
drivers/net/ethernet/intel/ice/devlink/health.c:35:31: error: initializer 
element is not constant
    ice_common_port_solutions, {ice_port_number_label}},
                                ^~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/intel/ice/devlink/health.c:35:31: note: (near 
initialization for 'ice_health_status_lookup[0].data_label[0]')
drivers/net/ethernet/intel/ice/devlink/health.c:37:46: error: initializer 
element is not constant
    "Change or replace the module or cable.", {ice_port_number_label}},
                                               ^~~~~~~~~~~~~~~~~~~~~
drivers/net/ethernet/intel/ice/devlink/health.c:37:46: note: (near 
initialization for 'ice_health_status_lookup[1].data_label[0]')
drivers/net/ethernet/intel/ice/devlink/health.c:39:3: error: initializer 
element is not constant
    ice_common_port_solutions, {ice_port_number_label}},
    ^~~~~~~~~~~~~~~~~~~~~~~~~

Fixes: 85d6164ec56d ("ice: add fw and port health reporters")
Reported-by: Qiuxu Zhuo <qiuxu.z...@intel.com>
Closes: 
https://lore.kernel.org/netdev/cy8pr11mb7134bf7a46d71e50d25fa7a989...@cy8pr11mb7134.namprd11.prod.outlook.com
Signed-off-by: Przemek Kitszel <przemyslaw.kits...@intel.com>
---
I would really like to bump min gcc to 8.5 (RH 8 family),
instead of supporting old Ubuntu. However SLES 15 is also stuck with gcc 7.5 :(

CC: Linus Torvalds <torva...@linux-foundation.org>
CC: Kees Cook <k...@kernel.org>
CC: Nick Desaulniers <nick.desaulni...@gmail.com>

Hi Prezemek,

I ran into a similar problem not so long ago and I'm wondering if
the following, based on a suggestion by Jiri Slaby, resolves your
problem.

I'm sure I remember from somewhere that although the variables are
'static const' they have to be real variables because they can still
be patched.

Not sure what you mean -- using macros, they placed the strings into .rodata anyway.

Mind the difference between:
const char *X;
char *const X;
const char *const X;

They are all different and allow different things (X++, (*X)++, nothing).

Possibly, the problem above could be fixed by the third variant too, IMO. But is ineffective (having generated an unused pointer).

thanks,
--
js
suse labs

Reply via email to