OSDN Git Service

2003-02-06 Andreas Tobler <a.tobler@schweiz.ch>
authorandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Feb 2003 04:31:20 +0000 (04:31 +0000)
committerandreast <andreast@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 7 Feb 2003 04:31:20 +0000 (04:31 +0000)
        * libffi/src/powerpc/darwin_closure.S:
        Fix alignement bug, allocate 8 bytes for the result.
        * libffi/src/powerpc/aix_closure.S:
        Likewise.
        * libffi/src/powerpc/ffi_darwin.c:
        Update stackframe description for aix/darwin_closure.S.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@62514 138bc75d-0d04-0410-961f-82ee72b054a4

libffi/ChangeLog
libffi/src/powerpc/aix_closure.S
libffi/src/powerpc/darwin_closure.S
libffi/src/powerpc/ffi_darwin.c

index f0b6853..319315e 100644 (file)
@@ -1,3 +1,12 @@
+2003-02-06  Andreas Tobler <a.tobler@schweiz.ch>
+
+       * libffi/src/powerpc/darwin_closure.S:
+       Fix alignement bug, allocate 8 bytes for the result.
+       * libffi/src/powerpc/aix_closure.S: 
+       Likewise.
+       * libffi/src/powerpc/ffi_darwin.c:
+       Update stackframe description for aix/darwin_closure.S.
 2003-02-06  Jakub Jelinek  <jakub@redhat.com>
 
        * src/s390/ffi.c (ffi_closure_helper_SYSV): Add hidden visibility
index 7fa96f1..d0d50ca 100644 (file)
@@ -1,6 +1,6 @@
 /* -----------------------------------------------------------------------
-   aix_closures.S - Copyright (c) 2002 Free Software Foundation, Inc.
-   based on darwin_closures.S 
+   aix_closure.S - Copyright (c) 2002 2003 Free Software Foundation, Inc.
+   based on darwin_closure.S 
   
    PowerPC Assembly glue.
 
@@ -106,24 +106,25 @@ ffi_closure_ASM:
        /* 24 Bytes (Linkage Area) */
        /* 32 Bytes (params) */
        /* 104 Bytes (13*8 from FPR) */ 
-       /* 4 Bytes (result)
-       /* 164 Bytes */
+       /* 8 Bytes (result)
+       /* 168 Bytes */
        
-       stwu r1,-164(r1)        /* skip over caller save area */
+       stwu r1,-176(r1)        /* skip over caller save area
+                               keep stack aligned to 16  */
 
 /* we want to build up an area for the parameters passed */
 /* in registers (both floating point and integer) */
        
-       /* we store gpr 3 to gpr 10 (aligned to 4) */
-       /* in the parents outgoing area            */
-       stw   r3, 188(r1)
-       stw   r4, 192(r1)
-       stw   r5, 196(r1) 
-       stw   r6, 200(r1)
-       stw   r7, 204(r1)
-       stw   r8, 208(r1) 
-       stw   r9, 212(r1)
-       stw   r10, 216(r1)
+       /* we store gpr 3 to gpr 10 (aligned to 4)
+       in the parents outgoing area  */
+       stw   r3, 200(r1)
+       stw   r4, 204(r1)
+       stw   r5, 208(r1) 
+       stw   r6, 212(r1)
+       stw   r7, 216(r1)
+       stw   r8, 220(r1) 
+       stw   r9, 224(r1)
+       stw   r10, 228(r1)
 
        /* next save fpr 1 to fpr 13 (aligned to 8) */
        stfd  f1, 56(r1)
@@ -148,14 +149,14 @@ ffi_closure_ASM:
        addi r4,r1,160
        
        /* now load up the pointer to the saved gpr registers */
-       addi r5,r1,188
+       addi r5,r1,200
 
        /* now load up the pointer to the saved fpr registers */
        addi r6,r1,56
 
        /* now load up the pointer to the outgoing parameter  */
        /* stack in the previous frame */
-       addi r7,r1,220
+       addi r7,r1,232
        
        /* make the call */
        bl .ffi_closure_helper_DARWIN
@@ -243,7 +244,7 @@ L..58:
 /* case void / done     */
 L..44:
        
-       addi r1,r1,164          /* restore stack pointer */
+       addi r1,r1,176          /* restore stack pointer */
        lwz r0,8(r1)            /* get return address */
        mtlr r0                 /* reset link register */
        blr
index 5420c77..9ae17d8 100644 (file)
@@ -41,27 +41,28 @@ LFB1:
        mflr r0                 /* extract return address  */
        stw r0, 8(r1)           /* save the return address  */
 LCFI0: 
-       /* 24 Bytes (Linkage Area) */
-       /* 32 Bytes (outgoing parameter area, always reserved) */
-       /* 104 Bytes (13*8 from FPR) */ 
-       /* 4 Bytes (result)
-       /* 164 Bytes */
+       /* 24 Bytes (Linkage Area)
+          32 Bytes (outgoing parameter area, always reserved)
+          104 Bytes (13*8 from FPR)    
+          8 Bytes (result)
+          168 Bytes  */
        
-       stwu r1,-164(r1)        /* skip over caller save area  */
+       stwu r1,-176(r1)        /* skip over caller save area
+                               keep stack aligned to 16  */
 LCFI1:         
        /* we want to build up an area for the parameters passed
        in registers (both floating point and integer)  */
        
-       /* we store gpr 3 to gpr 10 (aligned to 4) */
-       /* in the parents outgoing area            */
-       stw   r3, 188(r1)
-       stw   r4, 192(r1)
-       stw   r5, 196(r1) 
-       stw   r6, 200(r1)
-       stw   r7, 204(r1)
-       stw   r8, 208(r1) 
-       stw   r9, 212(r1)
-       stw   r10, 216(r1)
+       /* we store gpr 3 to gpr 10 (aligned to 4)
+       in the parents outgoing area  */
+       stw   r3, 200(r1)
+       stw   r4, 204(r1)
+       stw   r5, 208(r1) 
+       stw   r6, 212(r1)
+       stw   r7, 216(r1)
+       stw   r8, 220(r1) 
+       stw   r9, 224(r1)
+       stw   r10, 228(r1)
 
        /* we save fpr 1 to fpr 13 (aligned to 8) */
        stfd  f1, 56(r1)
@@ -85,15 +86,15 @@ LCFI1:
        /* now load up the pointer to the result storage */
        addi r4,r1,160
        
-       /* now load up the pointer to the saved gpr registers */
-       addi r5,r1,188
+       /* now load up the pointer to the saved gpr registers  */
+       addi r5,r1,200
 
        /* now load up the pointer to the saved fpr registers */
        addi r6,r1,56
 
-       /* now load up the pointer to the outgoing parameter  */
-       /* stack in the previous frame */
-       addi r7,r1,220
+       /* now load up the pointer to the outgoing parameter
+       stack in the previous frame  */
+       addi r7,r1,232
        
        /* make the call */
        bl L(_ffi_closure_helper_DARWIN)
@@ -182,9 +183,9 @@ LFE1:
 /* case void / done     */
 .L44:
        
-       addi r1,r1,164          /* restore stack pointer */
-       lwz r0,8(r1)            /* get return address */
-       mtlr r0                 /* reset link register */
+       addi r1,r1,176          /* restore stack pointer  */
+       lwz r0,8(r1)            /* get return address  */
+       mtlr r0                 /* reset link register  */
        blr
        
 /* END(ffi_closure_ASM)  */
@@ -223,7 +224,7 @@ LASFDE1:
        .set    L$set$3,LCFI1-LCFI0
        .long   L$set$3
        .byte   0xe     ; DW_CFA_def_cfa_offset
-       .byte   164,1   ; uleb128 164
+       .byte   176,1   ; uleb128 176
        .byte   0x4     ; DW_CFA_advance_loc4
        .set    L$set$4,LCFI0-LFB1
        .long   L$set$4
index 5773644..3f70527 100644 (file)
@@ -410,38 +410,40 @@ typedef struct aix_fd_struct {
                   +---------------------------------------+ 20
                   | saved TOC pointer 4                   | 
                   +---------------------------------------+ 24
-                  | always reserved 8*4=32  (revious GPRs)| 
+                  | always reserved 8*4=32 (previous GPRs)| 
                   | according to the linkage convention   |
-                  | from AIX                             |
+                  | from AIX                              |
                   +---------------------------------------+ 56
-                  | our FPR area 13*8=104                |
-                  | f1                                   |
-                  | .                                    |
-                  | f13                                  | 
+                  | our FPR area 13*8=104                 |
+                  | f1                                    |
+                  | .                                     |
+                  | f13                                   
                   +---------------------------------------+ 160
-                  | result area 4                         | 
-SP current -->    +---------------------------------------+ 164 <- parent frame
-                  | back chain to caller 4                | 
+                  | result area 8                         |
                   +---------------------------------------+ 168
+                  | alignement to the next multiple of 16 |
+SP current -->    +---------------------------------------+ 176 <- parent frame
+                  | back chain to caller 4                | 
+                  +---------------------------------------+ 180
                   | saved CR 4                            | 
-                  +---------------------------------------+ 172
+                  +---------------------------------------+ 184
                   | saved LR 4                            | 
-                  +---------------------------------------+ 176
+                  +---------------------------------------+ 188
                   | reserved for compilers 4              | 
-                  +---------------------------------------+ 180
+                  +---------------------------------------+ 192
                   | reserved for binders 4                | 
-                  +---------------------------------------+ 184
+                  +---------------------------------------+ 196
                   | saved TOC pointer 4                   | 
-                  +---------------------------------------+ 188
+                  +---------------------------------------+ 200
                   | always reserved 8*4=32  we store our  |
-                  | GPRs here                            |
-                  | r3                                   |
-                  | .                                    |
-                  | r10                                  |
-                  +---------------------------------------+ 220
-                  | PST area, overflow part              | 
+                  | GPRs here                             |
+                  | r3                                    |
+                  | .                                     |
+                  | r10                                   |
+                  +---------------------------------------+ 232
+                  | PST area, overflow part               
                   +---------------------------------------+ xxx
-                  | ????                                 | 
+                  | ????                                  
                   +---------------------------------------+ xxx
 
 */