Messages in this thread | | | Date | Thu, 06 Jan 2011 19:42:06 +0200 | From | Dzianis Kahanovich <> | Subject | Re: [PATCH] fix miscompiling with GCC 4.5 -finline-functions |
| |
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/
| |