From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeroen Hofstee Date: Sat, 28 Jun 2014 19:00:52 +0200 Subject: [U-Boot] __weak usage Message-ID: <53AEF4C4.1040108@myspectrum.nl> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de 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 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