
Dear Jean,
Jean-Christophe PLAGNIOL-VILLARD wrote:
On 18:29 Wed 05 Nov , Ilko Iliev wrote:
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.
This method of build will not generate a library evenif it's still called libat91.a, it will generate a pre-built object.
I can confirm that your patch works - thank you! Please commit the patch into the mainline.