Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Sam Ravnborg
On Fri, Aug 07, 2009 at 09:00:01PM +0100, Russell King - ARM Linux wrote:
> On Fri, Aug 07, 2009 at 03:55:24PM +0200, Albin Tonnerre wrote:
> > That's true for the actual kernel image, but not for the bootstrap code we 
> > use
> > when compiling compressed kernels. arch/arm/boot/compressed/Makefile uses
> > libgcc, unless I'm overlooking something here:
> > 
> >   arm-unknown-linux-uclibcgnueabi-ld -EL--defsym zreladdr=0x20008000
> >   --defsym initrd_phys=0x2041 --defsym params_phys=0x2100 -p
> >   --no-undefined -X
> >   
> > /home/albin/x-tools/arm-unknown-linux-uclibcgnueabi/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.3.2/libgcc.a
> >   -T arch/arm/boot/compressed/vmlinux.lds arch/arm/boot/compressed/head.o
> >   arch/arm/boot/compressed/piggy.gzip.o arch/arm/boot/compressed/misc.o -o
> >   arch/arm/boot/compressed/vmlinux
> 
> It's because libgcc appears in the wrong place in the command line, and
> due to the way kbuild works, we can't get it into the right place easily.
> 
> Linkers are sensitive to the order of archives on the command line - its
> pointless having an archive as the first file argument because none of
> the contained objects will ever be pulled in.
> 
> Sam - any ideas how to solve this?

We could add libgcc as a prerequisite.
Untested patch below.


This is a ittle hackish - otherwise we have to change the
definition of ld or use a private version.

I added explanations for some of the linker symbols when
I was there. I cannot the ld options.

If you decide to use this it has my:

Signed-off-by: Sam Ravnborg 


Sam


diff --git a/arch/arm/boot/compressed/Makefile 
b/arch/arm/boot/compressed/Makefile
index ce39dc5..4f980f2 100644
--- a/arch/arm/boot/compressed/Makefile
+++ b/arch/arm/boot/compressed/Makefile
@@ -87,15 +87,24 @@ endif
 ifneq ($(PARAMS_PHYS),)
 LDFLAGS_vmlinux += --defsym params_phys=$(PARAMS_PHYS)
 endif
-LDFLAGS_vmlinux += -p --no-undefined -X \
-   $(shell $(CC) $(KBUILD_CFLAGS) --print-libgcc-file-name) -T
+
+# ?
+LDFLAGS_vmlinux += -p
+# Report unresolved symbol references
+LDFLAGS_vmlinux += --no-undefined
+# Delete all temporary local symbols
+LDFLAGS_vmlinux += -X
+# Next argument is a linker script
+LDFLAGS_vmlinux += -T
+
+libgcc = $(shell $(CC) $(KBUILD_CFLAGS) --print-libgcc-file-name)
 
 # Don't allow any static data in misc.o, which
 # would otherwise mess up our GOT table
 CFLAGS_misc.o := -Dstatic=
 
 $(obj)/vmlinux: $(obj)/vmlinux.lds $(obj)/$(HEAD) $(obj)/piggy.o \
-   $(addprefix $(obj)/, $(OBJS)) FORCE
+   $(addprefix $(obj)/, $(OBJS)) $(libgcc) FORCE
$(call if_changed,ld)
@:
 


Sam
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread H. Peter Anvin
On 08/07/2009 01:00 PM, Russell King - ARM Linux wrote:
> On Fri, Aug 07, 2009 at 03:55:24PM +0200, Albin Tonnerre wrote:
>> That's true for the actual kernel image, but not for the bootstrap code we 
>> use
>> when compiling compressed kernels. arch/arm/boot/compressed/Makefile uses
>> libgcc, unless I'm overlooking something here:
>>
>>   arm-unknown-linux-uclibcgnueabi-ld -EL--defsym zreladdr=0x20008000
>>   --defsym initrd_phys=0x2041 --defsym params_phys=0x2100 -p
>>   --no-undefined -X
>>   
>> /home/albin/x-tools/arm-unknown-linux-uclibcgnueabi/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.3.2/libgcc.a
>>   -T arch/arm/boot/compressed/vmlinux.lds arch/arm/boot/compressed/head.o
>>   arch/arm/boot/compressed/piggy.gzip.o arch/arm/boot/compressed/misc.o -o
>>   arch/arm/boot/compressed/vmlinux
> 
> It's because libgcc appears in the wrong place in the command line, and
> due to the way kbuild works, we can't get it into the right place easily.
> 
> Linkers are sensitive to the order of archives on the command line - its
> pointless having an archive as the first file argument because none of
> the contained objects will ever be pulled in.
> 
> Sam - any ideas how to solve this?

Can we use the group feature of ld for this?

-hpa

--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Russell King - ARM Linux
On Fri, Aug 07, 2009 at 03:55:24PM +0200, Albin Tonnerre wrote:
> That's true for the actual kernel image, but not for the bootstrap code we use
> when compiling compressed kernels. arch/arm/boot/compressed/Makefile uses
> libgcc, unless I'm overlooking something here:
> 
>   arm-unknown-linux-uclibcgnueabi-ld -EL--defsym zreladdr=0x20008000
>   --defsym initrd_phys=0x2041 --defsym params_phys=0x2100 -p
>   --no-undefined -X
>   
> /home/albin/x-tools/arm-unknown-linux-uclibcgnueabi/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.3.2/libgcc.a
>   -T arch/arm/boot/compressed/vmlinux.lds arch/arm/boot/compressed/head.o
>   arch/arm/boot/compressed/piggy.gzip.o arch/arm/boot/compressed/misc.o -o
>   arch/arm/boot/compressed/vmlinux

It's because libgcc appears in the wrong place in the command line, and
due to the way kbuild works, we can't get it into the right place easily.

Linkers are sensitive to the order of archives on the command line - its
pointless having an archive as the first file argument because none of
the contained objects will ever be pulled in.

Sam - any ideas how to solve this?
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Albin Tonnerre
On Fri, Aug 07, 2009 at 03:27:00PM +0200, Matthieu CASTET wrote :
> Albin Tonnerre a écrit :
> > On Fri, Aug 07, 2009 at 01:50:03PM +0200, Matthieu CASTET wrote :
> >> Albin Tonnerre a écrit :
> >>> On Fri, Aug 07, 2009 at 11:36:56AM +0200, Alain Knaff wrote :
>  On 08/07/09 11:24, Albin Tonnerre wrote:

> > Regards,

>  Could it be that the patches that remove division (zutil.h and inflate.c)
>  have somehow not been applied?

> >>> Indeed, they've not been applied. However, I'd rather try to understand 
> >>> why
> >>> exactly this is an issue when compiling with -Os and not -O2 instead of 
> >>> working
> >>> around it by removing the divisions.

> >> Look at the generated code.

> >> Arm doesn't have division instruction.
> >> May be at -Os gcc emit a call to the software division, but at -O2 it
> >> manage to optimise the division (transform it in shift, inline some
> >> builtin, ...).

> > Yes, I figured that out. What I don't get, though, is that it fails while 
> > the
> > software division symbol (__aeabi_uidivmod here) does seem to be provided by
> > libgcc.

> AFAIK we don't link the kernel with libgcc.
> That's why the kernel provide __aeabi_* in arch/arm/lib

That's true for the actual kernel image, but not for the bootstrap code we use
when compiling compressed kernels. arch/arm/boot/compressed/Makefile uses
libgcc, unless I'm overlooking something here:

  arm-unknown-linux-uclibcgnueabi-ld -EL--defsym zreladdr=0x20008000
  --defsym initrd_phys=0x2041 --defsym params_phys=0x2100 -p
  --no-undefined -X
  
/home/albin/x-tools/arm-unknown-linux-uclibcgnueabi/lib/gcc/arm-unknown-linux-uclibcgnueabi/4.3.2/libgcc.a
  -T arch/arm/boot/compressed/vmlinux.lds arch/arm/boot/compressed/head.o
  arch/arm/boot/compressed/piggy.gzip.o arch/arm/boot/compressed/misc.o -o
  arch/arm/boot/compressed/vmlinux


Regards,
-- 
Albin Tonnerre, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Matthieu CASTET
Albin Tonnerre a écrit :
> On Fri, Aug 07, 2009 at 01:50:03PM +0200, Matthieu CASTET wrote :
>> Albin Tonnerre a écrit :
>>> On Fri, Aug 07, 2009 at 11:36:56AM +0200, Alain Knaff wrote :
 On 08/07/09 11:24, Albin Tonnerre wrote:
> 
> Regards,
> 
 Could it be that the patches that remove division (zutil.h and inflate.c)
 have somehow not been applied?
> 
>>> Indeed, they've not been applied. However, I'd rather try to understand why
>>> exactly this is an issue when compiling with -Os and not -O2 instead of 
>>> working
>>> around it by removing the divisions.
> 
>> Look at the generated code.
> 
>> Arm doesn't have division instruction.
>> May be at -Os gcc emit a call to the software division, but at -O2 it
>> manage to optimise the division (transform it in shift, inline some
>> builtin, ...).
> 
> Yes, I figured that out. What I don't get, though, is that it fails while the
> software division symbol (__aeabi_uidivmod here) does seem to be provided by
> libgcc.
> 
AFAIK we don't link the kernel with libgcc.
That's why the kernel provide __aeabi_* in arch/arm/lib
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Albin Tonnerre
On Fri, Aug 07, 2009 at 01:50:03PM +0200, Matthieu CASTET wrote :
> Albin Tonnerre a écrit :
> > On Fri, Aug 07, 2009 at 11:36:56AM +0200, Alain Knaff wrote :
> >> On 08/07/09 11:24, Albin Tonnerre wrote:

> >>> Regards,

> >> Could it be that the patches that remove division (zutil.h and inflate.c)
> >> have somehow not been applied?

> > Indeed, they've not been applied. However, I'd rather try to understand why
> > exactly this is an issue when compiling with -Os and not -O2 instead of 
> > working
> > around it by removing the divisions.

> Look at the generated code.

> Arm doesn't have division instruction.
> May be at -Os gcc emit a call to the software division, but at -O2 it
> manage to optimise the division (transform it in shift, inline some
> builtin, ...).

Yes, I figured that out. What I don't get, though, is that it fails while the
software division symbol (__aeabi_uidivmod here) does seem to be provided by
libgcc.

Regards,
-- 
Albin Tonnerre, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Matthieu CASTET
Albin Tonnerre a écrit :
> On Fri, Aug 07, 2009 at 11:36:56AM +0200, Alain Knaff wrote :
>> On 08/07/09 11:24, Albin Tonnerre wrote:
> 
>>> Regards,
> 
>> Could it be that the patches that remove division (zutil.h and inflate.c)
>> have somehow not been applied?
> 
> Indeed, they've not been applied. However, I'd rather try to understand why
> exactly this is an issue when compiling with -Os and not -O2 instead of 
> working
> around it by removing the divisions.
> 
Look at the generated code.

Arm doesn't have division instruction.
May be at -Os gcc emit a call to the software division, but at -O2 it
manage to optimise the division (transform it in shift, inline some
builtin, ...).


Matthieu
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Alain Knaff
On 08/07/09 12:21, Albin Tonnerre wrote:

> Indeed, they've not been applied. However, I'd rather try to understand why
> exactly this is an issue when compiling with -Os and not -O2 instead of 
> working
> around it by removing the divisions.
> 
> Regards,

Well, I for myself couldn't get it to compile _at_all_ for ARM as long as
there were any division operations in the code. My theory was that the ARM
processor doesn't have native division, and that this is being supplied by
some kind of run-time library, which is not linked with when building the
pre-boot environment. But if it works with some compilation flags but not
others, something more complex must be going on...

... or could it be that with some flags, the compiler generates "division
emulation" code, but not with others (such as when optimizing for size?)

Regards,

Alain
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Albin Tonnerre
On Fri, Aug 07, 2009 at 11:36:56AM +0200, Alain Knaff wrote :
> On 08/07/09 11:24, Albin Tonnerre wrote:
> > On Thu, Aug 06, 2009 at 11:40:55PM +0100, Russell King - ARM Linux wrote :
> >> On Mon, Aug 03, 2009 at 04:58:19PM +0200, Albin Tonnerre wrote:
> >>> This is the second part of patch. This part includes:
> >>>  - changes to ach/arch/boot/Makefile to make it easier to add new
> >>>compression types
> >>>  - new piggy.lzo.S necessary for lzo compression
> >>>  - changes in arch/arm/boot/compressed/misc.c to allow the use of lzo or
> >>>gzip, depending on the config
> >>>  - Kconfig support

> >> FYI, with these patches applied and selecting GZIP method, I get
> >> linker errors.  I've been unable to track down what's going on, but
> >> it appears to be a libgcc issue.

> >> In spite of the decompressor being built as an EABI object, gcc seems
> >> to be issuing calls to __umodsi3, which isn't in the EABI libgcc
> >> (they're called something different - don't ask.)

> > I also happen to have issues related to the linker not finding 
> > __aeabi_uidivmod,
> > but only when compiling with CONFIG_CC_OPTIMIZE_FOR_SIZE. Is it similar for 
> > you,
> > or does it also fail when compiling with -O2 ?

> >> So I think these patches need further testing and evaluation on ARM
> >> before they can be merged.  Moreover, I'd like to see some comparisons
> >> between the _current_ gzip method, the new gzip method and the lzo
> >> method on ARM.

> > I don't have my ARM platforms at hand, but I'll so these comparisons in a 
> > couple
> > days when I access to them again.

> > Regards,

> Could it be that the patches that remove division (zutil.h and inflate.c)
> have somehow not been applied?

Indeed, they've not been applied. However, I'd rather try to understand why
exactly this is an issue when compiling with -Os and not -O2 instead of working
around it by removing the divisions.

Regards,
-- 
Albin Tonnerre, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Alain Knaff
On 08/07/09 11:24, Albin Tonnerre wrote:
> On Thu, Aug 06, 2009 at 11:40:55PM +0100, Russell King - ARM Linux wrote :
>> On Mon, Aug 03, 2009 at 04:58:19PM +0200, Albin Tonnerre wrote:
>>> This is the second part of patch. This part includes:
>>>  - changes to ach/arch/boot/Makefile to make it easier to add new
>>>compression types
>>>  - new piggy.lzo.S necessary for lzo compression
>>>  - changes in arch/arm/boot/compressed/misc.c to allow the use of lzo or
>>>gzip, depending on the config
>>>  - Kconfig support
> 
>> FYI, with these patches applied and selecting GZIP method, I get
>> linker errors.  I've been unable to track down what's going on, but
>> it appears to be a libgcc issue.
> 
>> In spite of the decompressor being built as an EABI object, gcc seems
>> to be issuing calls to __umodsi3, which isn't in the EABI libgcc
>> (they're called something different - don't ask.)
> 
> I also happen to have issues related to the linker not finding 
> __aeabi_uidivmod,
> but only when compiling with CONFIG_CC_OPTIMIZE_FOR_SIZE. Is it similar for 
> you,
> or does it also fail when compiling with -O2 ?
> 
>> So I think these patches need further testing and evaluation on ARM
>> before they can be merged.  Moreover, I'd like to see some comparisons
>> between the _current_ gzip method, the new gzip method and the lzo
>> method on ARM.
> 
> I don't have my ARM platforms at hand, but I'll so these comparisons in a 
> couple
> days when I access to them again.
> 
> Regards,

Could it be that the patches that remove division (zutil.h and inflate.c)
have somehow not been applied?

Regards,

Alain
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Russell King - ARM Linux
On Fri, Aug 07, 2009 at 11:24:52AM +0200, Albin Tonnerre wrote:
> I also happen to have issues related to the linker not finding 
> __aeabi_uidivmod,
> but only when compiling with CONFIG_CC_OPTIMIZE_FOR_SIZE. Is it similar for 
> you,
> or does it also fail when compiling with -O2 ?

I tend not to build with -O2 because it seems to tickle compiler bugs
(which is the reverse of -Os on x86.)  I'll give it a go over the
next few days.
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM

2009-08-07 Thread Albin Tonnerre
On Thu, Aug 06, 2009 at 11:40:55PM +0100, Russell King - ARM Linux wrote :
> On Mon, Aug 03, 2009 at 04:58:19PM +0200, Albin Tonnerre wrote:
> > This is the second part of patch. This part includes:
> >  - changes to ach/arch/boot/Makefile to make it easier to add new
> >compression types
> >  - new piggy.lzo.S necessary for lzo compression
> >  - changes in arch/arm/boot/compressed/misc.c to allow the use of lzo or
> >gzip, depending on the config
> >  - Kconfig support

> FYI, with these patches applied and selecting GZIP method, I get
> linker errors.  I've been unable to track down what's going on, but
> it appears to be a libgcc issue.

> In spite of the decompressor being built as an EABI object, gcc seems
> to be issuing calls to __umodsi3, which isn't in the EABI libgcc
> (they're called something different - don't ask.)

I also happen to have issues related to the linker not finding __aeabi_uidivmod,
but only when compiling with CONFIG_CC_OPTIMIZE_FOR_SIZE. Is it similar for you,
or does it also fail when compiling with -O2 ?

> So I think these patches need further testing and evaluation on ARM
> before they can be merged.  Moreover, I'd like to see some comparisons
> between the _current_ gzip method, the new gzip method and the lzo
> method on ARM.

I don't have my ARM platforms at hand, but I'll so these comparisons in a couple
days when I access to them again.

Regards,
-- 
Albin Tonnerre, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe linux-embedded" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html