http://gcc.gnu.org/bugzilla/show_bug.cgi?id=48623
Michael Matz <matz at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |RESOLVED CC| |matz at gcc dot gnu.org Resolution| |INVALID --- Comment #10 from Michael Matz <matz at gcc dot gnu.org> 2011-04-15 22:03:05 UTC --- You didn't change the current_thread_info carefully enough as per comment #3. It still reads: static inline __attribute__((always_inline)) struct thread_info *current_thread_info(void) { struct thread_info *ti; void *p; unsigned long mask = ((1 << 0) * ((1UL) << 12)) - 1; asm volatile ("" : "=r" (p) : "0" (&ti)); ti = (struct thread_info *) (((unsigned long) &ti) & ~mask); return ti; } You have to make use of 'p' of course. Your return value still is based on &ti.