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 <[EMAIL PROTECTED]> 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. _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot