> > > Sorry, I don't have an example. Just a guess, weak function references: > > > > > > void weak_fun(void) __attribute__ ((weak)); > > > if (weak_fun) > > > weak_fun(); > > > > Using default weak functions as well as overridden weak functions both > > definitely work. So the pointers must be being updated correctly. I > > guess I'm not sure where specifically a problem could arise. Let me > > know if you have any additional details. I'm hoping to send the patches > > out later today, maybe some review/testing will make things clearer. > > This does not work: > > void weak_fun(void) __attribute__ ((weak)); > printf("weak_fun:%p\n", weak_fun); > > prints "weak 17f9c000" after relocation > for me, should be NULL when weak_fun is undefined.
Ahh, I see. I see the same thing. In general U-Boot declares weak functions by either using the 'alias' attribute: static int __def_eth_init(bd_t *bis) { return -1; } int cpu_eth_init(bd_t *bis) __attribute__((weak, alias("__def_eth_init"))); or by declaring a function as weak: void __attribute__((weak)) _machine_restart(void) { } Both these scenarios work with the current relocation fixup scheme. What is a real world scenario (such as your example) when someone would declare a weak function, but not actually implement a default. Doesn't that defeat the purpose of having a weak function in the first place? Eg why would someone use your example of: void weak_fun(void) __attribute__ ((weak)); ... if (weak_fun) weak_fun(); ... over: void weak_fun(void) __attribute__ ((weak)) { }; ... weak_fun(); ... (or the alias implementation) I'm trying to grasp the limitations of the current relocation mechanism as I'm afraid I don't have time to dig through all PPC architectures' start.S files to fix their relocation code right now:) Thanks, Peter _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot