[U-Boot] [PATCH] at91: board specific lowlevel_init.S

Jean-Christophe PLAGNIOL-VILLARD plagnioj at jcrosoft.com
Wed Nov 5 18:37:28 CET 2008


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 at 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.


More information about the U-Boot mailing list