
Dear Jean,
Jean-Christophe PLAGNIOL-VILLARD wrote:
On 12:45 Tue 28 Oct , Ilko Iliev wrote:
Dear Jean-Christophe,
Jean-Christophe PLAGNIOL-VILLARD wrote:
On 22:20 Mon 27 Oct , Wolfgang Denk wrote:
Dear Jean-Christophe PLAGNIOL-VILLARD,
In message 20081027164336.GA1778@game.jcrosoft.org you wrote:
I've found that weak functions are only overwritten if the overwriting function is in a file (not archive) that has strongly-linked symbols. Admittedly, I've only done this with C code but expect that the assembly equivalent works the same way. The idea of using weak functions seems great, but suffers from some pretty cumbersome weaknesses :)
I've found a solution but it's need to update the all u-boot linking method.
Move from AR to LD.
Well, that is exactly what Ben just described.
Which need some work to fit on all boards.
Well, actually only the file lowlevel_init.o needs to be treated that way, so the needed hcanges look not too complicated to me.
I'll send a patch to move cpu/at91 to it only and an example to use it with board dir
Could you try this
diff --git a/config.mk b/config.mk index 5a9334c..0d81ab3 100644 --- a/config.mk +++ b/config.mk @@ -80,6 +80,9 @@ STRIP = $(CROSS_COMPILE)strip OBJCOPY = $(CROSS_COMPILE)objcopy OBJDUMP = $(CROSS_COMPILE)objdump RANLIB = $(CROSS_COMPILE)RANLIB +cmd_link_o_target = $(if $(strip $(2)),\
$(LD) $(PLATFORM_LDFLAGS) -r -o $(1) $(2) ,\
rm -f $@; $(AR) rcs $(1))
#########################################################################
diff --git a/cpu/arm926ejs/at91/Makefile b/cpu/arm926ejs/at91/Makefile index 2d2a888..662657c 100644 --- a/cpu/arm926ejs/at91/Makefile +++ b/cpu/arm926ejs/at91/Makefile @@ -36,7 +36,7 @@ OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS-y)) all: $(obj).depend $(LIB)
$(LIB): $(OBJS)
- $(AR) $(ARFLAGS) $@ $(OBJS)
- $(call cmd_link_o_target, $@, $(OBJS))
#########################################################################
and modify your board lib build by
- $(AR) $(ARFLAGS) $@ $(OBJS)
- $(call cmd_link_o_target, $@, $(OBJS))
Best Regards, J.
Your patch doesn't resolve the problem - the lowlevel_init.o is still a part of libat91.s: arm-elf-ld -r -o libat91.a lowlevel_init.o timer.o spi.o usb.o make[1]: Leaving directory `/home/develop/u-boot-last/u-boot/u-boot-2008-11-03/u-boot/cpu/arm926ejs/at91'
The attribute ".weak" works only if the file where is the weak function is not in a library. I'm not familiar with the makefile scripting, but I can't see a possibility to link both lowlevel_init.o files into the u-boot.elf without to change the main Makefile.
I think my last patch is a possible solution, but I don't know if the following is a potential problem:
- $(MAKE) -C cpu/$(CPU) $(if $(REMOTE_BUILD),$@,$(notdir $@)) + $(MAKE) -C cpu/$(CPU)
I haven't the possibility to compile U-BOOT for all targets - maybe someone can test all targets with my last patch (email from 28.10.2008).