Hello All,

>>>>   All instances have been replaced by empty functions with an alias. e.g.
>>>>      void __do_something (args) {}
>>>>      do_something(args) __atttribute__((weak, alias("__do_something")));
> Good to know.  This doc also helps:
> http://docs.sun.com/app/docs/doc/817-1984/chapter2-11?l=en&a=view
> Then,
> - we must try to not leave undefined weak symbols at all,
> - or check the symbol before invocation for the safety in case of NULL
>  dereference.

My 2 cents:
And here an example from the linux kernel that just does the first option:

Create a default fallback routine that can be used if there is no
strong implementation:
-------------------------------------------------------------------------------------------
__attribute__((weak)) unsigned long long printk_clock(void)
{
        return sched_clock();
}
-------------------------------------------------------------------------------------------
and here is an example of the strong implementation (from the ARM architecture):
-------------------------------------------------------------------------------------------
unsigned long long printk_clock(void)
{
        return (unsigned long long)(jiffies - INITIAL_JIFFIES) *
                        (1000000000 / HZ);
}
-------------------------------------------------------------------------------------------

If the strong implementation is available, the weak is simply
discarded during linking, if the strong is omitted, the weak is used
as fallback. This is a clean, lean and mean example without
complex/superfluous aliases or checks for NULL pointers.
It should not get any harder than this...

Kind Regards,

Remy
_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to