Hello,
On Tue, Jun 10, 2008 at 10:55 PM, Ben Warren <[EMAIL PROTECTED]> wrote: > Hi, > > Not specifically U-boot related, but hopefully a smart person here can help. > > I have a weak symbol defined as: > int cpu_eth_init(bd_t *bis) __attribute((weak, alias("__def_eth_init"))); (1) > > I've created a new file in cpu/mpc83xx that includes a real > implementation of the function: > int cpu_eth_init(bd_t *bis) (2) > > Using objdump, I've verified that this function is making it into > libmpc8xxx.a, however it doesn't get linked into the final U-boot > executable. System.map shows cpu_eth_init at the same address as > __def_eth_init. > > If I change (1) to: > extern int cpu_eth_init(bd_t *bis), (2) gets linked in OK. Of course, > that's not what I want to do. > > I've tried changing the order of the archives that get linked together > by ld, but nothing seems to work. Since I don't really know what I'm > doing, I guess that shouldn't be surprising. > > Any help would be appreciated. > > thanks, > Ben > I've played around a bit more and found that if I move my function to an existing file containing functions called from elsewhere, my code gets linked in. Further research shows that a 'feature' of ld is that it won't pull in a module that only has symbols that have already been resolved, even if the previously found version is weak. Mike F, please correct me if I'm wrong but that's what I gather from a conversion I found you having with the binutils mailing list: http://sourceware.org/ml/binutils/2008-01/msg00302.html IMHO, developers should be able to write board and cpu code to override weak symbols in libraries/drivers without having to worry about whether the intention was obeyed or not. ld has a switch '--whole-archive', that will pull in an entire archive, not just the modules that are referenced elsewhere with strong linkage. I propose to wrap both the 'board/$(BOARDDIR)/lib$(BOARD).a' and 'cpu/$(CPU)/lib$(CPU).a' arguments to ld in --whole-module/--no-whole-module in order to accomplish this goal. We definitely don't want to do this across the board because image size will increase quite a bit due to unused code. I believe that the board and cpu code, though, should be mostly free of cruft. If not, it should be restructured with appropriate CONFIGs, either in Makefiles or C code. thoughts? regards, Ben ------------------------------------------------------------------------- Check out the new SourceForge.net Marketplace. It's the best place to buy or sell services for just about anything Open Source. http://sourceforge.net/services/buy/index.php _______________________________________________ U-Boot-Users mailing list U-Boot-Users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/u-boot-users