Skip to contentSkip to conversation

Help with "warning: 'alias' attribute ignored"

U-Boot-Users Timur Tabi 2 participants 2 messages Mar 11, 2008 – Mar 12, 2008

lore
Share & tools
lore

Timur Tabi

author
#0 lore raw

I'm trying to write code that uses the "pragma weak" feature of gcc to define a global variable that is used only if it isn't defined somewhere else. I thought I had it working, but then I noticed this:

powerpc-linux-gnu-gcc -g -Os -fPIC -ffixed-r14 -meabi -D__KERNEL__
-DTEXT_BASE=0xFE000000 -I/temp/u-boot.281/include -fno-builtin -ffreestanding
-nostdinc -isystem /opt/freescale/usr/local/gcc-4.2.72-eglibc-2.5.72-1/powerpc-linux-gnu/lib/gcc/powerpc-linux-gnu/4.2.1/include -pipe -DCONFIG_PPC -D__powerpc__ -DCONFIG_MPC83XX -DCONFIG_E300 -ffixed-r2
-msoft-float -Wall -Wstrict-prototypes -c -o fsl_i2c.o fsl_i2c.c
fsl_i2c.c: In function 'get_fdr':
fsl_i2c.c:72: warning: 'alias' attribute ignored

Here's the code in question, which is in fsl_i2c.c:

#pragma weak fsl_i2c_speed_map = default_fsl_i2c_speed_map

struct fsl_i2c_speed_map default_fsl_i2c_speed_map[] = {
	{0, 0x3F}, {-1, 0x3F}
};

static u8 get_fdr(unsigned int i2c_clk, unsigned int speed)

{
	extern struct fsl_i2c_speed_map fsl_i2c_speed_map[];
	...

Line 72 is the "extern struct fsl..." line.

In a platform-specific file, I have this:

struct fsl_i2c_speed_map fsl_i2c_speed_map[] = {
	{0, 0x20},
	...

What I'm trying to do is to make it so that you don't need to define the fsl_i2c_speed_map[] array in your platform file. However, I get the warning message if fsl_i2c_speed_map[] *is* defined in the platform file.

Am I just doing this wrong, or is there a way to avoid the compiler warning?

Signature · 2 lines
Timur Tabi
Linux kernel developer at Freescale
#1 lore raw
Quoted 14 lines · Timur Tabi

I'm trying to write code that uses the "pragma weak" feature of gcc to define a global variable that is used only if it isn't defined somewhere else. I thought I had it working, but then I noticed this:

powerpc-linux-gnu-gcc -g -Os -fPIC -ffixed-r14 -meabi -D__KERNEL__

(quoted diff) +0 -2
-DTEXT_BASE=0xFE000000 -I/temp/u-boot.281/include -fno-builtin -ffreestanding
-nostdinc -isystem

/opt/freescale/usr/local/gcc-4.2.72-eglibc-2.5.72-1/powerpc-linux-gnu/lib/gcc/powerpc-linux-gnu/4.2.1/include

(quoted diff) +0 -2
-pipe  -DCONFIG_PPC -D__powerpc__ -DCONFIG_MPC83XX -DCONFIG_E300 -ffixed-r2
-msoft-float -Wall -Wstrict-prototypes -c -o fsl_i2c.o fsl_i2c.c

fsl_i2c.c: In function 'get_fdr':
fsl_i2c.c:72: warning: 'alias' attribute ignored

Quoted 2 lines

Here's the code in question, which is in fsl_i2c.c:

replace this

Quoted 5 lines

#pragma weak fsl_i2c_speed_map = default_fsl_i2c_speed_map

struct fsl_i2c_speed_map default_fsl_i2c_speed_map[] = {
	{0, 0x3F}, {-1, 0x3F}
};

by this

struct fsl_i2c_speed_map fsl_i2c_speed_map[] __attribute__((weak))= {
	{0, 0x3F}, {-1, 0x3F}
};
Quoted 2 lines

static u8 get_fdr(unsigned int i2c_clk, unsigned int speed) {

and remove this line

Quoted 1 line
	extern struct fsl_i2c_speed_map fsl_i2c_speed_map[];

Best Regards,
J.