public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
* [PATCH] fix miscompiling with GCC 4.5 -finline-functions
@ 2011-01-04 15:17 Dzianis Kahanovich
  2011-01-05 23:02 ` Andrew Morton
  0 siblings, 1 reply; 6+ messages in thread
From: Dzianis Kahanovich @ 2011-01-04 15:17 UTC (permalink / raw)
  To: linux-kernel

Fixing broken automatic inlining for GCC 4.5+  (breaks build with
-finline-functions or -O3 on x86_*).

Signed-off-by: Dzianis Kahanovich <mahatma@eu.by>
---
--- a/arch/x86/kvm/vmx.c
+++ b/arch/x86/kvm/vmx.c
@@ -569,7 +569,7 @@ static inline void ept_sync_individual_a
 	}
 }

-static unsigned long vmcs_readl(unsigned long field)
+static noinline unsigned long vmcs_readl(unsigned long field)
 {
 	unsigned long value = 0;

--- a/drivers/media/radio/radio-aimslab.c
+++ b/drivers/media/radio/radio-aimslab.c
@@ -71,7 +71,7 @@ static struct rtrack rtrack_card;

 /* local things */

-static void sleep_delay(long n)
+static noinline void sleep_delay(long n)
 {
 	/* Sleep nicely for 'n' uS */
 	int d = n / msecs_to_jiffies(1000);
--
WBR, Dzianis Kahanovich AKA Denis Kaganovich, http://mahatma.bspu.unibel.by/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] fix miscompiling with GCC 4.5 -finline-functions
  2011-01-04 15:17 [PATCH] fix miscompiling with GCC 4.5 -finline-functions Dzianis Kahanovich
@ 2011-01-05 23:02 ` Andrew Morton
  2011-01-06 17:42   ` Dzianis Kahanovich
  0 siblings, 1 reply; 6+ messages in thread
From: Andrew Morton @ 2011-01-05 23:02 UTC (permalink / raw)
  To: mahatma; +Cc: Dzianis Kahanovich, linux-kernel

On Tue, 04 Jan 2011 17:17:11 +0200
Dzianis Kahanovich <mahatma@bspu.unibel.by> wrote:

> Fixing broken automatic inlining for GCC 4.5+  (breaks build with
> -finline-functions or -O3 on x86_*).
> 

Please always quote the compiler output when addressing build errors
and warnings.

> --- a/arch/x86/kvm/vmx.c
> +++ b/arch/x86/kvm/vmx.c
> @@ -569,7 +569,7 @@ static inline void ept_sync_individual_a
>  	}
>  }
> 
> -static unsigned long vmcs_readl(unsigned long field)
> +static noinline unsigned long vmcs_readl(unsigned long field)
>  {
>  	unsigned long value = 0;
> 
> --- a/drivers/media/radio/radio-aimslab.c
> +++ b/drivers/media/radio/radio-aimslab.c
> @@ -71,7 +71,7 @@ static struct rtrack rtrack_card;
> 
>  /* local things */
> 
> -static void sleep_delay(long n)
> +static noinline void sleep_delay(long n)
>  {
>  	/* Sleep nicely for 'n' uS */
>  	int d = n / msecs_to_jiffies(1000);

A golden rule is that when a programmer reads some code, he should be
able to understand why it's there.  There is no way on this little
earth that a programmer will be able to look at this code and say
"ah-hah, that must be a workaround for gcc-4.5 -finline-functions!".

We fix that problem this way:

--- a/arch/x86/kvm/vmx.c~fix-miscompiling-with-gcc-45-finline-functions-fix
+++ a/arch/x86/kvm/vmx.c
@@ -569,6 +569,7 @@ static inline void ept_sync_individual_a
 	}
 }
 
+/* noinline works around gcc-4.5+ build error with -finline-functions */
 static noinline unsigned long vmcs_readl(unsigned long field)
 {
 	unsigned long value = 0;
--- a/drivers/media/radio/radio-aimslab.c~fix-miscompiling-with-gcc-45-finline-functions-fix
+++ a/drivers/media/radio/radio-aimslab.c
@@ -71,6 +71,7 @@ static struct rtrack rtrack_card;
 
 /* local things */
 
+/* noinline works around gcc-4.5+ build error with -finline-functions */
 static noinline void sleep_delay(long n)
 {
 	/* Sleep nicely for 'n' uS */
_


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] fix miscompiling with GCC 4.5 -finline-functions
  2011-01-05 23:02 ` Andrew Morton
@ 2011-01-06 17:42   ` Dzianis Kahanovich
  2011-01-06 18:07     ` Arnaud Lacombe
  0 siblings, 1 reply; 6+ messages in thread
From: Dzianis Kahanovich @ 2011-01-06 17:42 UTC (permalink / raw)
  To: Andrew Morton; +Cc: mahatma, linux-kernel

Andrew Morton wrote:

>> Fixing broken automatic inlining for GCC 4.5+  (breaks build with
>> -finline-functions or -O3 on x86_*).
>>
> 
> Please always quote the compiler output when addressing build errors
> and warnings.

Sorry. linux-next, yesterday, gcc version 4.5.1 (Gentoo 4.5.1-r1 p1.4, pie-0.4.5):

make -j5 -s HOSTCC=x86_64-pc-linux-gnu-gcc ARCH=i386
CROSS_COMPILE=i586-pc-linux-gnu- all -i
arch/x86/kvm/vmx.c: Assembler messages:
arch/x86/kvm/vmx.c:4036: Error: symbol `.Llaunched' is already defined
arch/x86/kvm/vmx.c:4048: Error: symbol `.Lkvm_vmx_return' is already defined
i586-pc-linux-gnu-ld: cannot find arch/x86/kvm/vmx.o: No such file or directory
...
ERROR: "__bad_udelay" [drivers/media/radio/radio-aimslab.ko] undefined!

I unsure in precise version boundaries, but first found on release tree weeks
ago and first error only sometimes happened on x86_64 (version related?). On my
own builds I used -fno-inline-functions in local Makefile's, but this is more
local fix.

> 
>> --- a/arch/x86/kvm/vmx.c
>> +++ b/arch/x86/kvm/vmx.c
>> @@ -569,7 +569,7 @@ static inline void ept_sync_individual_a
>>  	}
>>  }
>>
>> -static unsigned long vmcs_readl(unsigned long field)
>> +static noinline unsigned long vmcs_readl(unsigned long field)
>>  {
>>  	unsigned long value = 0;
>>
>> --- a/drivers/media/radio/radio-aimslab.c
>> +++ b/drivers/media/radio/radio-aimslab.c
>> @@ -71,7 +71,7 @@ static struct rtrack rtrack_card;
>>
>>  /* local things */
>>
>> -static void sleep_delay(long n)
>> +static noinline void sleep_delay(long n)
>>  {
>>  	/* Sleep nicely for 'n' uS */
>>  	int d = n / msecs_to_jiffies(1000);
> 
> A golden rule is that when a programmer reads some code, he should be
> able to understand why it's there.  There is no way on this little
> earth that a programmer will be able to look at this code and say
> "ah-hah, that must be a workaround for gcc-4.5 -finline-functions!".
> 
> We fix that problem this way:
> 
> --- a/arch/x86/kvm/vmx.c~fix-miscompiling-with-gcc-45-finline-functions-fix
> +++ a/arch/x86/kvm/vmx.c
> @@ -569,6 +569,7 @@ static inline void ept_sync_individual_a
>  	}
>  }
>  
> +/* noinline works around gcc-4.5+ build error with -finline-functions */
>  static noinline unsigned long vmcs_readl(unsigned long field)
>  {
>  	unsigned long value = 0;
> --- a/drivers/media/radio/radio-aimslab.c~fix-miscompiling-with-gcc-45-finline-functions-fix
> +++ a/drivers/media/radio/radio-aimslab.c
> @@ -71,6 +71,7 @@ static struct rtrack rtrack_card;
>  
>  /* local things */
>  
> +/* noinline works around gcc-4.5+ build error with -finline-functions */
>  static noinline void sleep_delay(long n)
>  {
>  	/* Sleep nicely for 'n' uS */
> _
> 
> 
> 


-- 
WBR, Dzianis Kahanovich AKA Denis Kaganovich, http://mahatma.bspu.unibel.by/

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] fix miscompiling with GCC 4.5 -finline-functions
  2011-01-06 17:42   ` Dzianis Kahanovich
@ 2011-01-06 18:07     ` Arnaud Lacombe
  2011-01-08  1:02       ` mahatma
  2011-01-08  1:05       ` Denis Kaganovich
  0 siblings, 2 replies; 6+ messages in thread
From: Arnaud Lacombe @ 2011-01-06 18:07 UTC (permalink / raw)
  To: mahatma; +Cc: Andrew Morton, linux-kernel

Hi,

On Thu, Jan 6, 2011 at 12:42 PM, Dzianis Kahanovich
<mahatma@bspu.unibel.by> wrote:
> Andrew Morton wrote:
>
>>> Fixing broken automatic inlining for GCC 4.5+  (breaks build with
>>> -finline-functions or -O3 on x86_*).
>>>
>>
>> Please always quote the compiler output when addressing build errors
>> and warnings.
>
> Sorry. linux-next, yesterday, gcc version 4.5.1 (Gentoo 4.5.1-r1 p1.4, pie-0.4.5):
>
> make -j5 -s HOSTCC=x86_64-pc-linux-gnu-gcc ARCH=i386
> CROSS_COMPILE=i586-pc-linux-gnu- all -i
> arch/x86/kvm/vmx.c: Assembler messages:
> arch/x86/kvm/vmx.c:4036: Error: symbol `.Llaunched' is already defined
> arch/x86/kvm/vmx.c:4048: Error: symbol `.Lkvm_vmx_return' is already defined
> i586-pc-linux-gnu-ld: cannot find arch/x86/kvm/vmx.o: No such file or directory
> ...
> ERROR: "__bad_udelay" [drivers/media/radio/radio-aimslab.ko] undefined!
>
did you report this to gcc folks ?

Btw, you said it showed with "-O3" or "-finline-functions", but I do
not see any specific option passed to make. Could you remove the "-j5"
switch and add "V=1" to see the full compiler command line ?

Generally speaking, neither "-O3" or "-finline-functions" seems to be
passed by default by kbuild, so I am not sure they are meant to be
supported at all.

 - Arnaud

> I unsure in precise version boundaries, but first found on release tree weeks
> ago and first error only sometimes happened on x86_64 (version related?). On my
> own builds I used -fno-inline-functions in local Makefile's, but this is more
> local fix.
>
>>
>>> --- a/arch/x86/kvm/vmx.c
>>> +++ b/arch/x86/kvm/vmx.c
>>> @@ -569,7 +569,7 @@ static inline void ept_sync_individual_a
>>>      }
>>>  }
>>>
>>> -static unsigned long vmcs_readl(unsigned long field)
>>> +static noinline unsigned long vmcs_readl(unsigned long field)
>>>  {
>>>      unsigned long value = 0;
>>>
>>> --- a/drivers/media/radio/radio-aimslab.c
>>> +++ b/drivers/media/radio/radio-aimslab.c
>>> @@ -71,7 +71,7 @@ static struct rtrack rtrack_card;
>>>
>>>  /* local things */
>>>
>>> -static void sleep_delay(long n)
>>> +static noinline void sleep_delay(long n)
>>>  {
>>>      /* Sleep nicely for 'n' uS */
>>>      int d = n / msecs_to_jiffies(1000);
>>
>> A golden rule is that when a programmer reads some code, he should be
>> able to understand why it's there.  There is no way on this little
>> earth that a programmer will be able to look at this code and say
>> "ah-hah, that must be a workaround for gcc-4.5 -finline-functions!".
>>
>> We fix that problem this way:
>>
>> --- a/arch/x86/kvm/vmx.c~fix-miscompiling-with-gcc-45-finline-functions-fix
>> +++ a/arch/x86/kvm/vmx.c
>> @@ -569,6 +569,7 @@ static inline void ept_sync_individual_a
>>       }
>>  }
>>
>> +/* noinline works around gcc-4.5+ build error with -finline-functions */
>>  static noinline unsigned long vmcs_readl(unsigned long field)
>>  {
>>       unsigned long value = 0;
>> --- a/drivers/media/radio/radio-aimslab.c~fix-miscompiling-with-gcc-45-finline-functions-fix
>> +++ a/drivers/media/radio/radio-aimslab.c
>> @@ -71,6 +71,7 @@ static struct rtrack rtrack_card;
>>
>>  /* local things */
>>
>> +/* noinline works around gcc-4.5+ build error with -finline-functions */
>>  static noinline void sleep_delay(long n)
>>  {
>>       /* Sleep nicely for 'n' uS */
>> _
>>
>>
>>
>
>
> --
> WBR, Dzianis Kahanovich AKA Denis Kaganovich, http://mahatma.bspu.unibel.by/
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at  http://www.tux.org/lkml/
>

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] fix miscompiling with GCC 4.5 -finline-functions
  2011-01-06 18:07     ` Arnaud Lacombe
@ 2011-01-08  1:02       ` mahatma
  2011-01-08  1:05       ` Denis Kaganovich
  1 sibling, 0 replies; 6+ messages in thread
From: mahatma @ 2011-01-08  1:02 UTC (permalink / raw)
  To: Arnaud Lacombe; +Cc: Andrew Morton, linux-kernel

 On Thu, 6 Jan 2011 13:07:01 -0500, Arnaud Lacombe wrote:
> On Thu, Jan 6, 2011 at 12:42 PM, Dzianis Kahanovich
> <mahatma@bspu.unibel.by> wrote:
>> Andrew Morton wrote:
>>
>>>> Fixing broken automatic inlining for GCC 4.5+  (breaks build with
>>>> -finline-functions or -O3 on x86_*).
>>>>
>>>
>>> Please always quote the compiler output when addressing build 
>>> errors
>>> and warnings.
>>
>> Sorry. linux-next, yesterday, gcc version 4.5.1 (Gentoo 4.5.1-r1 
>> p1.4, pie-0.4.5):
>>
>> make -j5 -s HOSTCC=x86_64-pc-linux-gnu-gcc ARCH=i386
>> CROSS_COMPILE=i586-pc-linux-gnu- all -i
>> arch/x86/kvm/vmx.c: Assembler messages:
>> arch/x86/kvm/vmx.c:4036: Error: symbol `.Llaunched' is already 
>> defined
>> arch/x86/kvm/vmx.c:4048: Error: symbol `.Lkvm_vmx_return' is already 
>> defined
>> i586-pc-linux-gnu-ld: cannot find arch/x86/kvm/vmx.o: No such file 
>> or directory
>> ...
>> ERROR: "__bad_udelay" [drivers/media/radio/radio-aimslab.ko] 
>> undefined!
>>
> did you report this to gcc folks ?
>
> Btw, you said it showed with "-O3" or "-finline-functions", but I do
> not see any specific option passed to make. Could you remove the 
> "-j5"
> switch and add "V=1" to see the full compiler command line ?

 Yes, big sorry. Distilling output again I found - there are problem of 
 conjunction of "-finline-function -ftracer". Time ago I report similar 
 problem about -ftracer in gcc bugzilla ("make defconfig && make all" 
 with -ftracer, in various places in various versions).

 BUT: First time (weeks ago) "-ftracer" must be first candidate for me 
 to strip. Or I got this error first time without -ftracer or it is some 
 kind of my own bug. Just fyi.

 But output anymore ;) for first bug only:

 make HOSTCC=x86_64-pc-linux-gnu-gcc ARCH=i386 
 CROSS_COMPILE=i586-pc-linux-gnu- all
 ...
   i586-pc-linux-gnu-gcc -Wp,-MD,arch/x86/kvm/.vmx.o.d  -nostdinc 
 -isystem /usr/lib/gcc/i586-pc-linux-gnu/4.5.1/include 
 -I/var/tmp/portage/sys-kernel/next-sources-9999/work/linux-9999/arch/x86/include 
 -Iinclude  -include include/generated/autoconf.h -D__KERNEL__ -Wall 
 -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing 
 -fno-common -Werror-implicit-function-declaration -Wno-format-security 
 -fno-delete-null-pointer-checks -O2 -finline-functions -ftracer -m32 
 -msoft-float -mregparm=3 -freg-struct-return 
 -mpreferred-stack-boundary=2 -Wa, -ffreestanding -DCONFIG_AS_CFI=1 
 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe 
 -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx 
 -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -fno-stack-protector 
 -fomit-frame-pointer -Wdeclaration-after-statement -Wno-pointer-sign 
 -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -Ivirt/kvm 
 -Iarch/x86/kvm -I.  -DMODULE  -D"KBUILD_STR(s)=#s" 
 -D"KBUILD_BASENAME=KBUILD_STR(vmx)"  
 -D"KBUILD_MODNAME=KBUILD_STR(kvm_intel)" -c -o arch/x86/kvm/vmx.o 
 arch/x86/kvm/vmx.c
 arch/x86/kvm/vmx.c: Assembler messages:
 arch/x86/kvm/vmx.c:4036: Error: symbol `.Llaunched' is already defined
 arch/x86/kvm/vmx.c:4048: Error: symbol `.Lkvm_vmx_return' is already 
 defined


>
> Generally speaking, neither "-O3" or "-finline-functions" seems to be
> passed by default by kbuild, so I am not sure they are meant to be
> supported at all.

 I know, -O3 is "uncommon" subject. Just I see "noinline" wide used, 
 then sometimes sources adopted to auto-inlining. But -ftracer even more 
 ncommon subject? yes & sorry...

>
>  - Arnaud
>
>> I unsure in precise version boundaries, but first found on release 
>> tree weeks
>> ago and first error only sometimes happened on x86_64 (version 
>> related?). On my
>> own builds I used -fno-inline-functions in local Makefile's, but 
>> this is more
>> local fix.
>>
>>>
>>>> --- a/arch/x86/kvm/vmx.c
>>>> +++ b/arch/x86/kvm/vmx.c
>>>> @@ -569,7 +569,7 @@ static inline void ept_sync_individual_a
>>>>      }
>>>>  }
>>>>
>>>> -static unsigned long vmcs_readl(unsigned long field)
>>>> +static noinline unsigned long vmcs_readl(unsigned long field)
>>>>  {
>>>>      unsigned long value = 0;
>>>>
>>>> --- a/drivers/media/radio/radio-aimslab.c
>>>> +++ b/drivers/media/radio/radio-aimslab.c
>>>> @@ -71,7 +71,7 @@ static struct rtrack rtrack_card;
>>>>
>>>>  /* local things */
>>>>
>>>> -static void sleep_delay(long n)
>>>> +static noinline void sleep_delay(long n)
>>>>  {
>>>>      /* Sleep nicely for 'n' uS */
>>>>      int d = n / msecs_to_jiffies(1000);
>>>
>>> A golden rule is that when a programmer reads some code, he should 
>>> be
>>> able to understand why it's there.  There is no way on this little
>>> earth that a programmer will be able to look at this code and say
>>> "ah-hah, that must be a workaround for gcc-4.5 
>>> -finline-functions!".
>>>
>>> We fix that problem this way:
>>>
>>> --- 
>>> a/arch/x86/kvm/vmx.c~fix-miscompiling-with-gcc-45-finline-functions-fix
>>> +++ a/arch/x86/kvm/vmx.c
>>> @@ -569,6 +569,7 @@ static inline void ept_sync_individual_a
>>>       }
>>>  }
>>>
>>> +/* noinline works around gcc-4.5+ build error with 
>>> -finline-functions */
>>>  static noinline unsigned long vmcs_readl(unsigned long field)
>>>  {
>>>       unsigned long value = 0;
>>> --- 
>>> a/drivers/media/radio/radio-aimslab.c~fix-miscompiling-with-gcc-45-finline-functions-fix
>>> +++ a/drivers/media/radio/radio-aimslab.c
>>> @@ -71,6 +71,7 @@ static struct rtrack rtrack_card;
>>>
>>>  /* local things */
>>>
>>> +/* noinline works around gcc-4.5+ build error with 
>>> -finline-functions */
>>>  static noinline void sleep_delay(long n)
>>>  {
>>>       /* Sleep nicely for 'n' uS */
>>> _
>>>
>>>
>>>
>>


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] fix miscompiling with GCC 4.5 -finline-functions
  2011-01-06 18:07     ` Arnaud Lacombe
  2011-01-08  1:02       ` mahatma
@ 2011-01-08  1:05       ` Denis Kaganovich
  1 sibling, 0 replies; 6+ messages in thread
From: Denis Kaganovich @ 2011-01-08  1:05 UTC (permalink / raw)
  To: Arnaud Lacombe; +Cc: Andrew Morton, linux-kernel

 On Thu, 6 Jan 2011 13:07:01 -0500, Arnaud Lacombe wrote:
> On Thu, Jan 6, 2011 at 12:42 PM, Dzianis Kahanovich
> <mahatma@bspu.unibel.by> wrote:
>> Andrew Morton wrote:
>>
>>>> Fixing broken automatic inlining for GCC 4.5+  (breaks build with
>>>> -finline-functions or -O3 on x86_*).
>>>>
>>>
>>> Please always quote the compiler output when addressing build 
>>> errors
>>> and warnings.
>>
>> Sorry. linux-next, yesterday, gcc version 4.5.1 (Gentoo 4.5.1-r1 
>> p1.4, pie-0.4.5):
>>
>> make -j5 -s HOSTCC=x86_64-pc-linux-gnu-gcc ARCH=i386
>> CROSS_COMPILE=i586-pc-linux-gnu- all -i
>> arch/x86/kvm/vmx.c: Assembler messages:
>> arch/x86/kvm/vmx.c:4036: Error: symbol `.Llaunched' is already 
>> defined
>> arch/x86/kvm/vmx.c:4048: Error: symbol `.Lkvm_vmx_return' is already 
>> defined
>> i586-pc-linux-gnu-ld: cannot find arch/x86/kvm/vmx.o: No such file 
>> or directory
>> ...
>> ERROR: "__bad_udelay" [drivers/media/radio/radio-aimslab.ko] 
>> undefined!
>>
> did you report this to gcc folks ?
>
> Btw, you said it showed with "-O3" or "-finline-functions", but I do
> not see any specific option passed to make. Could you remove the 
> "-j5"
> switch and add "V=1" to see the full compiler command line ?

 Yes, big sorry. Distilling output again I found - there are problem of 
 conjunction of "-finline-function -ftracer". Time ago I report similar 
 problem about -ftracer in gcc bugzilla ("make defconfig && make all" 
 with -ftracer, in various places in various versions).

 BUT: First time (weeks ago) "-ftracer" must be first candidate for me 
 to strip. Or I got this error first time without -ftracer or it is some 
 kind of my own bug. Just fyi.

 But output anymore ;) for first bug only:

 make HOSTCC=x86_64-pc-linux-gnu-gcc ARCH=i386 
 CROSS_COMPILE=i586-pc-linux-gnu- all
 ...
   i586-pc-linux-gnu-gcc -Wp,-MD,arch/x86/kvm/.vmx.o.d  -nostdinc 
 -isystem /usr/lib/gcc/i586-pc-linux-gnu/4.5.1/include 
 -I/var/tmp/portage/sys-kernel/next-sources-9999/work/linux-9999/arch/x86/include 
 -Iinclude  -include include/generated/autoconf.h -D__KERNEL__ -Wall 
 -Wundef -Wstrict-prototypes -Wno-trigraphs -fno-strict-aliasing 
 -fno-common -Werror-implicit-function-declaration -Wno-format-security 
 -fno-delete-null-pointer-checks -O2 -finline-functions -ftracer -m32 
 -msoft-float -mregparm=3 -freg-struct-return 
 -mpreferred-stack-boundary=2 -Wa, -ffreestanding -DCONFIG_AS_CFI=1 
 -DCONFIG_AS_CFI_SIGNAL_FRAME=1 -DCONFIG_AS_CFI_SECTIONS=1 -pipe 
 -Wno-sign-compare -fno-asynchronous-unwind-tables -mno-sse -mno-mmx 
 -mno-sse2 -mno-3dnow -Wframe-larger-than=2048 -fno-stack-protector 
 -fomit-frame-pointer -Wdeclaration-after-statement -Wno-pointer-sign 
 -fno-strict-overflow -fconserve-stack -DCC_HAVE_ASM_GOTO -Ivirt/kvm 
 -Iarch/x86/kvm -I.  -DMODULE  -D"KBUILD_STR(s)=#s" 
 -D"KBUILD_BASENAME=KBUILD_STR(vmx)"  
 -D"KBUILD_MODNAME=KBUILD_STR(kvm_intel)" -c -o arch/x86/kvm/vmx.o 
 arch/x86/kvm/vmx.c
 arch/x86/kvm/vmx.c: Assembler messages:
 arch/x86/kvm/vmx.c:4036: Error: symbol `.Llaunched' is already defined
 arch/x86/kvm/vmx.c:4048: Error: symbol `.Lkvm_vmx_return' is already 
 defined


>
> Generally speaking, neither "-O3" or "-finline-functions" seems to be
> passed by default by kbuild, so I am not sure they are meant to be
> supported at all.

 I know, -O3 is "uncommon" subject. Just I see "noinline" wide used, 
 then sometimes sources adopted to auto-inlining. But -ftracer even more 
 ncommon subject? yes & sorry...

>
>  - Arnaud
>
>> I unsure in precise version boundaries, but first found on release 
>> tree weeks
>> ago and first error only sometimes happened on x86_64 (version 
>> related?). On my
>> own builds I used -fno-inline-functions in local Makefile's, but 
>> this is more
>> local fix.
>>
>>>
>>>> --- a/arch/x86/kvm/vmx.c
>>>> +++ b/arch/x86/kvm/vmx.c
>>>> @@ -569,7 +569,7 @@ static inline void ept_sync_individual_a
>>>>      }
>>>>  }
>>>>
>>>> -static unsigned long vmcs_readl(unsigned long field)
>>>> +static noinline unsigned long vmcs_readl(unsigned long field)
>>>>  {
>>>>      unsigned long value = 0;
>>>>
>>>> --- a/drivers/media/radio/radio-aimslab.c
>>>> +++ b/drivers/media/radio/radio-aimslab.c
>>>> @@ -71,7 +71,7 @@ static struct rtrack rtrack_card;
>>>>
>>>>  /* local things */
>>>>
>>>> -static void sleep_delay(long n)
>>>> +static noinline void sleep_delay(long n)
>>>>  {
>>>>      /* Sleep nicely for 'n' uS */
>>>>      int d = n / msecs_to_jiffies(1000);
>>>
>>> A golden rule is that when a programmer reads some code, he should 
>>> be
>>> able to understand why it's there.  There is no way on this little
>>> earth that a programmer will be able to look at this code and say
>>> "ah-hah, that must be a workaround for gcc-4.5 
>>> -finline-functions!".
>>>
>>> We fix that problem this way:
>>>
>>> --- 
>>> a/arch/x86/kvm/vmx.c~fix-miscompiling-with-gcc-45-finline-functions-fix
>>> +++ a/arch/x86/kvm/vmx.c
>>> @@ -569,6 +569,7 @@ static inline void ept_sync_individual_a
>>>       }
>>>  }
>>>
>>> +/* noinline works around gcc-4.5+ build error with 
>>> -finline-functions */
>>>  static noinline unsigned long vmcs_readl(unsigned long field)
>>>  {
>>>       unsigned long value = 0;
>>> --- 
>>> a/drivers/media/radio/radio-aimslab.c~fix-miscompiling-with-gcc-45-finline-functions-fix
>>> +++ a/drivers/media/radio/radio-aimslab.c
>>> @@ -71,6 +71,7 @@ static struct rtrack rtrack_card;
>>>
>>>  /* local things */
>>>
>>> +/* noinline works around gcc-4.5+ build error with 
>>> -finline-functions */
>>>  static noinline void sleep_delay(long n)
>>>  {
>>>       /* Sleep nicely for 'n' uS */
>>> _
>>>
>>>
>>>
>>


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2011-01-08  1:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-01-04 15:17 [PATCH] fix miscompiling with GCC 4.5 -finline-functions Dzianis Kahanovich
2011-01-05 23:02 ` Andrew Morton
2011-01-06 17:42   ` Dzianis Kahanovich
2011-01-06 18:07     ` Arnaud Lacombe
2011-01-08  1:02       ` mahatma
2011-01-08  1:05       ` Denis Kaganovich

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox