From: Richard W. <ri...@no...> - 2011-04-13 19:50:15
|
Hi, I'm facing a very strange issue with gcc-4.6.0 and UML. Within __local_bh_enable() gcc generates no code for sub_preempt_count(). See: http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc460.txt vs. http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc431.txt Interestingly it generates code for add_preempt_count(). I can reproduce this on x86 and x86_64. The problem has to do with UML's current_thread_info() function. When I replace it with arch/x86's (unportable) variant gcc generates code. Any ideas whether this is a gcc or a kernel issue? Thanks, //richard |
From: Richard W. <ri...@no...> - 2011-04-14 13:52:51
|
Am Donnerstag 14 April 2011, 09:49:14 schrieb Mikael Pettersson: > Richard Weinberger writes: > > Hi, > > > > I'm facing a very strange issue with gcc-4.6.0 and UML. > > Within __local_bh_enable() gcc generates no code for > > sub_preempt_count(). > > > > See: > > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc460.txt > > vs. > > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc431.txt > > > > Interestingly it generates code for add_preempt_count(). > > I can reproduce this on x86 and x86_64. > > > > The problem has to do with UML's current_thread_info() function. > > When I replace it with arch/x86's (unportable) variant gcc generates > > code. > > > > Any ideas whether this is a gcc or a kernel issue? > > Please provide a standalone test case. There you go! http://userweb.kernel.org/~rw/uml-gcc460/testcase.c Thanks, //richard |
From: Mikael P. <mi...@it...> - 2011-04-14 08:17:12
|
Richard Weinberger writes: > Hi, > > I'm facing a very strange issue with gcc-4.6.0 and UML. > Within __local_bh_enable() gcc generates no code for sub_preempt_count(). > > See: > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc460.txt > vs. > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc431.txt > > Interestingly it generates code for add_preempt_count(). > I can reproduce this on x86 and x86_64. > > The problem has to do with UML's current_thread_info() function. > When I replace it with arch/x86's (unportable) variant gcc generates code. > > Any ideas whether this is a gcc or a kernel issue? Please provide a standalone test case. |
From: masterkom m. <mas...@gm...> - 2011-04-14 14:43:31
|
Hi,, I have the project to make Operating System using linux kernel. That system is multiplatform, which is combine linux and window . This project hope All people that who has familiar with windows can use this operating system without sin. This project is free.. I hape there people can help us to done this project ,, thx,,, On 4/14/11, Richard Weinberger <ri...@no...> wrote: > Hi, > > I'm facing a very strange issue with gcc-4.6.0 and UML. > Within __local_bh_enable() gcc generates no code for sub_preempt_count(). > > See: > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc460.txt > vs. > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc431.txt > > Interestingly it generates code for add_preempt_count(). > I can reproduce this on x86 and x86_64. > > The problem has to do with UML's current_thread_info() function. > When I replace it with arch/x86's (unportable) variant gcc generates code. > > Any ideas whether this is a gcc or a kernel issue? > Thanks, > //richard > -- > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in > the body of a message to maj...@vg... > More majordomo info at http://vger.kernel.org/majordomo-info.html > Please read the FAQ at http://www.tux.org/lkml/ > |
From: James M. <jam...@ho...> - 2011-04-14 19:50:20
|
> Am Donnerstag 14 April 2011, 09:49:14 schrieb Mikael Pettersson: > > Richard Weinberger writes: > > > Hi, > > > > > > I'm facing a very strange issue with gcc-4.6.0 and UML. > > > Within __local_bh_enable() gcc generates no code for > > > sub_preempt_count(). > > > > > > See: > > > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc460.txt > > > vs. > > > http://userweb.kernel.org/~rw/uml-gcc460/__local_bh_enable-gcc431.txt > > > > > > Interestingly it generates code for add_preempt_count(). > > > I can reproduce this on x86 and x86_64. > > > > > > The problem has to do with UML's current_thread_info() function. > > > When I replace it with arch/x86's (unportable) variant gcc generates > > > code. > > > > > > Any ideas whether this is a gcc or a kernel issue? It looks like a gcc error with one of the optimization passes > > Please provide a standalone test case. > > There you go! > http://userweb.kernel.org/~rw/uml-gcc460/testcase.c Replacing inline with __attribute__((noinline)) makes it produce code again without requiring asm("esp")/asm("rsp") tricks and the code appears to be working I think gcc is assuming only low bits in the address of stack vars and thought they were all masked out :( with this change my test version of gcc-4.6.0 works for x86/amd64 I have not yet gotten 4.6.0 to install yet so I was testing with xgcc from the failed build --- testcase.orig 2011-04-14 08:34:24.000000000 -0700 +++ testcase.c 2011-04-14 12:17:44.000000000 -0700 @@ -31,7 +31,7 @@ } #else /* UML */ -static inline struct thread_info *current_thread_info(void) +static __attribute__((noinline)) struct thread_info *current_thread_info(void) { struct thread_info *ti; unsigned long mask = THREAD_SIZE - 1;> > Thanks, > //richard |
From: Richard W. <ri...@no...> - 2011-04-15 15:17:57
|
Am Donnerstag 14 April 2011, 21:50:13 schrieb James McMechan: > > > > Any ideas whether this is a gcc or a kernel issue? > > It looks like a gcc error with one of the optimization passes I've submitted a bug report. http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48623 Thanks, //richard |