On Jun. 30, 2008, 19:22 +0300, Jeff Dike <[EMAIL PROTECTED]> wrote:
> On Sun, Jun 29, 2008 at 10:32:43AM +0300, Benny Halevy wrote:
>> Note that the crash happened with gcc 4.1.2 and it will get the
>> -fno-unit-at-a-time flag with the proposed patch.
>>
>> That said, this option or the lack of it ought not to cause any
>> runtime crashes.  If it does, I'd feel much more comfortable to know
>> exactly what the root cause is before deciding to use the flag to
>> workaround^hide it.
> 
> I agree.
> 
> The constraints on [no-]unit-at-a-time that I see are:
>       i386 uses no-unit-at-a-time for pre-4.0 (not 4.3)
>       x86_64 uses unit-at-a-time always
> 
>       Uli reported a crash on x86_64 with gcc 4.1.2 with unit-at-a-time
>       Ingo reported a gcc internal error with gcc 4.3 with
> no-unit-at-a-time 
>       You are seeing extern inlines not resolved with gcc 4.3 with
> no-unit-at-a-time 
> 
> I'm tempted to follow x86 on this, with the results that
>       extern inlines should be fine
>       Ingo's gcc crash should not reappear
>       Uli's crash may reappear
> 
> If that crash does come back, I'd say we should just debug it.  It's
> likely UML implicitly relying on some gcc behavior anyway.

Agreed.

> 
> This is the patch that I'm dropping into my tree:
> 
> Index: linux-2.6.22/arch/um/Makefile-i386
> ===================================================================
> --- linux-2.6.22.orig/arch/um/Makefile-i386   2008-05-29 11:21:25.000000000 
> -0400
> +++ linux-2.6.22/arch/um/Makefile-i386        2008-06-30 12:20:01.000000000 
> -0400
> @@ -32,4 +32,10 @@ cflags-y += $(call cc-option,-mpreferred
>  # an unresolved reference.
>  cflags-y += -ffreestanding
>  
> +# Disable unit-at-a-time mode on pre-gcc-4.0 compilers, it makes gcc use
> +# a lot more stack due to the lack of sharing of stacklots.  Also, gcc
> +# 4.3.0 needs -funit-at-a-time for extern inline functions.
> +KBUILD_CFLAGS += $(shell if [ $(call cc-version) -lt 0403 ] ; then \

This isn't exactly aligned with the comment above.
Should be -lt 0400, as in 22eecde2f9034764a3fd095eecfa3adfb8ec9a98?

> +                     echo $(call cc-option,-fno-unit-at-a-time); fi ;)
> +
>  KBUILD_CFLAGS += $(cflags-y)
> Index: linux-2.6.22/arch/um/Makefile-x86_64
> ===================================================================
> --- linux-2.6.22.orig/arch/um/Makefile-x86_64 2008-05-29 11:21:25.000000000 
> -0400
> +++ linux-2.6.22/arch/um/Makefile-x86_64      2008-06-30 12:21:01.000000000 
> -0400
> @@ -21,3 +21,6 @@ HEADER_ARCH := x86
>  
>  LINK-$(CONFIG_LD_SCRIPT_DYN) += -Wl,-rpath,/lib64
>  LINK-y += -m64
> +
> +# Do unit-at-a-time unconditionally on x86_64, following the host
> +KBUILD_CFLAGS += $(call cc-option,-funit-at-a-time)

Hmm, arch/um/Makefile includes $(srctree)/$(ARCH_DIR)/Makefile-$(SUBARCH)
before add -fno-unit-at-a-time to KBUILD_CFLAGS.
Will this override the flag set first here?

Benny

> 
>                               Jeff
> 


-------------------------------------------------------------------------
Check out the new SourceForge.net Marketplace.
It's the best place to buy or sell services for
just about anything Open Source.
http://sourceforge.net/services/buy/index.php
_______________________________________________
User-mode-linux-devel mailing list
User-mode-linux-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/user-mode-linux-devel

Reply via email to