Re: [PATCH 4/6] Add support for LZO-compressed kernels for ARM
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
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
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
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
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
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
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
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
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
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
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
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