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


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]