OSDN Git Service

2010-05-05 Andrew Pinski <andrew.pinski@caviumnetworks.com>
[pf3gnuchains/gcc-fork.git] / gcc / config / rs6000 / darwin-tramp.asm
index 6d0fab2..5188c98 100644 (file)
@@ -1,36 +1,26 @@
 /*  Special support for trampolines
  *
- *   Copyright (C) 1996, 1997, 2000, 2004 Free Software Foundation, Inc.
+ *   Copyright (C) 1996, 1997, 2000, 2004, 2005, 2009 Free Software Foundation, Inc.
  *   Written By Michael Meissner
  * 
  * This file is free software; you can redistribute it and/or modify it
  * under the terms of the GNU General Public License as published by the
- * Free Software Foundation; either version 2, or (at your option) any
+ * Free Software Foundation; either version 3, or (at your option) any
  * later version.
  * 
- * In addition to the permissions in the GNU General Public License, the
- * Free Software Foundation gives you unlimited permission to link the
- * compiled version of this file with other programs, and to distribute
- * those programs without any restriction coming from the use of this
- * file.  (The General Public License restrictions do apply in other
- * respects; for example, they cover modification of the file, and
- * distribution when not linked into another program.)
- * 
  * This file is distributed in the hope that it will be useful, but
  * WITHOUT ANY WARRANTY; without even the implied warranty of
  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
  * General Public License for more details.
  * 
- * You should have received a copy of the GNU General Public License
- * along with this program; see the file COPYING.  If not, write to
- * the Free Software Foundation, 59 Temple Place - Suite 330,
- * Boston, MA 02111-1307, USA.
- * 
- *  As a special exception, if you link this library with files
- *  compiled with GCC to produce an executable, this does not cause the
- *  resulting executable to be covered by the GNU General Public License.
- *  This exception does not however invalidate any other reasons why the
- *  executable file might be covered by the GNU General Public License.
+ * Under Section 7 of GPL version 3, you are granted additional
+ * permissions described in the GCC Runtime Library Exception, version
+ * 3.1, as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License and
+ * a copy of the GCC Runtime Library Exception along with this program;
+ * see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
+ * <http://www.gnu.org/licenses/>.
  */ 
 
 #include "darwin-asm.h"
@@ -68,11 +58,11 @@ LCF0:
         mflr   r11
         addis  r7,r11,ha16(LTRAMP-LCF0)
        lg      r7,lo16(LTRAMP-LCF0)(r7)
-       subi    r7,r7,GPR_BYTES
+       subi    r7,r7,4
        li      r8,trampoline_size      /* verify trampoline big enough */
        cmpg    cr1,r8,r4
        srwi    r4,r4,2                 /* # words to move (insns always 4-byte) */
-       addi    r9,r3,-GPR_BYTES        /* adjust pointer for lgu */
+       addi    r9,r3,-4        /* adjust pointer for lgu */
        mtctr   r4
        blt     cr1,Labort
 
@@ -80,8 +70,8 @@ LCF0:
 
        /* Copy the instructions to the stack */
 Lmove:
-       lgu     r10,GPR_BYTES(r7)
-       stgu    r10,GPR_BYTES(r9)
+       lwzu    r10,4(r7)
+       stwu    r10,4(r9)
        bdnz    Lmove
 
        /* Store correct function and static chain */
@@ -96,10 +86,12 @@ Lcache:
        addi    r3,r3,4
        bdnz    Lcache
 
-       /* Finally synchronize things & return */
+       /* Ensure cache-flushing has finished.  */
        sync
        isync
-       blr
+
+       /* Make stack writeable.  */
+       b       ___enable_execute_stack
 
 Labort:
 #ifdef __DYNAMIC__