
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.
Best Regards, J.