lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <COL101-W165ED5CB17434202CE273DE2AD0@phx.gbl>
Date:	Thu, 14 Apr 2011 19:50:13 +0000
From:	James McMechan <james_mcmechan@...mail.com>
To:	<richard@....at>, <mikpe@...uu.se>
CC:	<linux-kernel@...r.kernel.org>,
	uml devel <user-mode-linux-devel@...ts.sourceforge.net>
Subject: RE: [uml-devel] gcc-4.6.0 generates no code for sub_preempt_count()


> 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

 		 	   		  --
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ