Skip to contentSkip to conversation

__weak usage

U-Boot Jeroen Hofstee 2 participants 2 messages Jun 28, 2014

lore
Share & tools
lore
#0 lore raw

Hi,

Perhaps this is trivial for you all, but it is something I had not realized before looking into the warnings u-boot generates with W=1 / clang. The below "program" will compile fine with MAKEALL (even with pedantic warnings). Since the compiler never sees the different definition and the linker does not care, there is no warning at all.

If a weak prototype ever changes, running MAKEALL gives no guarantee boards don't crash at runtime. Hence I would propose that when adding a new __weak, both the weak and non weak definition actually see the common prototype. And please use __weak to reduce the noise when compiling with W=1.

Regards,
Jeroen

::::::::::::::
a.c
::::::::::::::
#define __weak __attribute__((weak))

__weak void some_function(void)
{
}

void go(void)

{
     some_function();
}

::::::::::::::
b.c
::::::::::::::
#include <stdio.h>

extern void go(void);

void some_function(int *arg)

{
     printf("lets crash %d", *arg);
}

int main()

{
     go();

     return 0;
}

jeroen at yellow:~/weak$ gcc -Wall -Wpedantic a.c b.c jeroen at yellow:~/weak$ ./a.out
Segmentation fault

#1 lore raw
Quoted 9 lines · Jeroen Hofstee

Hi,

Perhaps this is trivial for you all, but it is something I had not realized before looking into the warnings u-boot generates with W=1 / clang. The below "program" will compile fine with MAKEALL (even with pedantic warnings). Since the compiler never sees the different definition and the linker does not care, there is no warning at all.

Quoted 5 lines

If a weak prototype ever changes, running MAKEALL gives no guarantee boards don't crash at runtime. Hence I would propose that when adding a new __weak, both the weak and non weak definition actually see the common prototype. And please use __weak to reduce the noise when compiling with W=1.

Indeed, __weak functions should still be listed in header files, cases that don't are a bug.

Signature · 8 lines
Tom
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20140628/b309a70d/attachment.pgp>