]> git.hungrycats.org Git - linux/commitdiff
ia64: Prevent GCC from clobbering r13. Found by Luming You.
authorDavid Mosberger <davidm@tiger.hpl.hp.com>
Wed, 17 Mar 2004 02:18:16 +0000 (18:18 -0800)
committerDavid Mosberger <davidm@tiger.hpl.hp.com>
Wed, 17 Mar 2004 02:18:16 +0000 (18:18 -0800)
Without this change, GCC thinks it's OK to clobber r13.  It doesn't do it
very often, but it's enough if it does it once and it turns out
acpi_bus_receive_event() had code that would trigger this issue.
Fix by declaring r13 as a global register variable.

include/asm-ia64/gcc_intrin.h

index 5175f0345555c36376ff557c0d4cbafcd774bfe6..a2274aa3fb8fbce073d7e6a428542358932d0281 100644 (file)
@@ -23,6 +23,8 @@
 extern void ia64_bad_param_for_setreg (void);
 extern void ia64_bad_param_for_getreg (void);
 
+register unsigned long ia64_r13 asm ("r13");
+
 #define ia64_setreg(regnum, val)                                               \
 ({                                                                             \
        switch (regnum) {                                                       \
@@ -67,10 +69,7 @@ extern void ia64_bad_param_for_getreg (void);
                asm volatile ("mov %0=psr" : "=r"(ia64_intri_res));             \
                break;                                                          \
        case _IA64_REG_TP:      /* for current() */                             \
-               {                                                               \
-                       register __u64 ia64_r13 asm ("r13");                    \
-                       ia64_intri_res = ia64_r13;                              \
-               }                                                               \
+               ia64_intri_res = ia64_r13;                                      \
                break;                                                          \
        case _IA64_REG_AR_KR0 ... _IA64_REG_AR_EC:                              \
                asm volatile ("mov %0=ar%1" : "=r" (ia64_intri_res)             \