Update __set_cr27() to mark r31 clobbered.
authorCarlos O'Donell <carlos@systemhalted.org>
Tue, 2 Feb 2010 21:40:28 +0000 (16:40 -0500)
committerCarlos O'Donell <carlos@systemhalted.org>
Wed, 17 Feb 2010 14:27:41 +0000 (09:27 -0500)
The function __set_cr27() uses the `ble`
instruction without marking the link register
r31 as clobbered. This change adds r31 to the
list of clobbers. The TLS thread register is
cr27 and is set by calling __set_cr27().

ChangeLog.hppa
sysdeps/hppa/nptl/tls.h

index ef38909..4ddd2c3 100644 (file)
@@ -1,5 +1,10 @@
 2010-02-02  Carlos O'Donell  <carlos@codesourcery.com>
 
+       * sysdeps/hppa/nptl/tls.h (__set_cr27): Clobber
+       link register r31.
+
+2010-02-02  Carlos O'Donell  <carlos@codesourcery.com>
+
        * sysdeps/unix/sysv/linux/hppa/makecontext.c (__makecontext):
        Support more than 8 arguments. 
 
index 2810d71..389cbb9 100644 (file)
@@ -1,5 +1,5 @@
 /* Definition for thread-local data handling.  NPTL/hppa version.
-   Copyright (C) 2005, 2007 Free Software Foundation, Inc.
+   Copyright (C) 2005, 2007, 2010 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -140,11 +140,13 @@ static inline struct pthread *__get_cr27(void)
   return (struct pthread *) cr27;
 }
 
+/* We write to cr27, clobber r26 as the input argument, and clobber
+   r31 as the link register.  */
 static inline void __set_cr27(struct pthread *cr27)
 {
   asm ( "ble   0xe0(%%sr2, %%r0)\n\t"
        "copy   %0, %%r26"
-       : : "r" (cr27) : "r26" );
+       : : "r" (cr27) : "r26", "r31" );
 }
 
 /* Get and set the global scope generation counter in struct pthread.  */