MIPS: Changed current_thread_info() to an equivalent supported by both clang and GCC
authorDaniel Sanders <daniel.sanders@imgtec.com>
Tue, 24 Feb 2015 15:02:57 +0000 (15:02 +0000)
committerRalf Baechle <ralf@linux-mips.org>
Wed, 1 Apr 2015 15:21:45 +0000 (17:21 +0200)
Without this, a 'break' instruction is executed very early in the boot and
the boot hangs.

The problem is that clang doesn't honour named registers on local variables
and silently treats them as normal uninitialized variables. However, it
does honour them on global variables.

Signed-off-by: Daniel Sanders <daniel.sanders@imgtec.com>
Cc: Ralf Baechle <ralf@linux-mips.org>
Cc: Paul Burton <paul.burton@imgtec.com>
Cc: Markos Chandras <markos.chandras@imgtec.com>
Cc: James Hogan <james.hogan@imgtec.com>
Cc: linux-mips@linux-mips.org
Cc: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Cc: David Daney <ddaney.cavm@gmail.com>
Acked-by: Behan Webster <behanw@converseincode.com>
Patchwork: https://patchwork.linux-mips.org/patch/9311/
Signed-off-by: Ralf Baechle <ralf@linux-mips.org>
arch/mips/include/asm/thread_info.h

index 55ed6602204cae5ae1219ee15f5a98b2c9f2813e..2f0dba36e0a84a40effb2f1ee05f12acf3676503 100644 (file)
@@ -55,10 +55,10 @@ struct thread_info {
 #define init_stack             (init_thread_union.stack)
 
 /* How to get the thread information struct from C.  */
+register struct thread_info *__current_thread_info __asm__("$28");
+
 static inline struct thread_info *current_thread_info(void)
 {
-       register struct thread_info *__current_thread_info __asm__("$28");
-
        return __current_thread_info;
 }