This is the mail archive of the newlib@sourceware.org mailing list for the newlib project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

RE: [PATCH, ARM/libgloss]fix compilation error in linux-crt0.c when '-ffunction-sections' is specified


Sorry, this is the patch, and please ignore the previous.

Thanks

> -----Original Message-----
> From: newlib-owner@sourceware.org [mailto:newlib-owner@sourceware.org] On
> Behalf Of Bin Cheng
> Sent: Tuesday, January 17, 2012 11:53 AM
> To: Matthew Gretton-Dann
> Cc: newlib@sources.redhat.com
> Subject: RE: [PATCH, ARM/libgloss]fix compilation error in linux-crt0.c
when
> '-ffunction-sections' is specified
> 
> Hi Matt & all,
> Thanks for reminding, here is the new patch. Please review.
> 
> Thanks-chengbin
> 
> > -----Original Message-----
> > From: Matthew Gretton-Dann
> > Sent: Monday, January 16, 2012 6:50 PM
> > To: Bin Cheng
> > Cc: newlib@sources.redhat.com
> > Subject: Re: [PATCH, ARM/libgloss]fix compilation error in
> > linux-crt0.c
> when
> > '-ffunction-sections' is specified
> >
> > On Mon, Jan 16, 2012 at 06:51:51AM +0000, Bin Cheng wrote:
> > > Hi,
> > > Currently libgloss/arm/linux-crt0.c uses adr to get the address of
> > > _start_thumb function.
> > > It breaks the compilation when '-ffunction-sections' is specified,
> > > of
> which
> > > we want to
> > > take advantage to decrease code size in binary.
> > >
> > > Here is a patch fix this issue.
> > > I have compiled newlib/libgloss for various processor with or
> > > without "-ffunction-sections"
> > > successfully, Is it OK?
> > >
> > > Thanks
> > >
> > >
> > > 2012-01-16  Bin Cheng  <bin.cheng@arm.com>
> > >
> > > libgloss/
> > > 	* arm/linux-crt0.c: Use ldr instead of adr to get address of
> > > _start_thumb.
> >
> > > Index: libgloss/arm/linux-crt0.c
> > > ===================================================================
> > > RCS file: /cvs/src/src/libgloss/arm/linux-crt0.c,v
> > > retrieving revision 1.3
> > > diff -u -a -r1.3 linux-crt0.c
> > > --- libgloss/arm/linux-crt0.c	13 Jul 2011 15:06:21 -0000	1.3
> > > +++ libgloss/arm/linux-crt0.c	12 Jan 2012 09:56:28 -0000
> > > @@ -18,7 +18,7 @@
> > >  	".global _start\n"
> > >  	".type _start, %function\n"
> > >  	"_start:\n"
> > > -	"\tadr r0, _start_thumb+1\n"
> > > +	"\tldr r0, =_start_thumb\n"
> > >  	"\tbx r0\n"
> > >  	".size _start, .-_start\n");
> > >
> >
> > This causes an implicit literal pool entry to be generated, which will
> > be generated in an arbitrary location decided by the linker (as there
> > is no .ltorg directive).  This is probably best avoided in libgloss.
> >
> > Better would be something like:
> >
> >    _start:
> >       ldr r0, .LC0
> >       bx  r0
> >   LC0: .word _start_thumb
> >       .size _start .-_start
> >
> > Thanks,
> >
> > Matt
> >
> >
> > --
> > Matthew Gretton-Dann
> > Principal Engineer, PD Software, ARM Ltd.

Attachment: arm-function-section-20120117.txt
Description: Text document


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]