aboutsummaryrefslogtreecommitdiff
path: root/libffi
diff options
context:
space:
mode:
authorAndreas Tobler <a.tobler@schweiz.ch>2003-02-07 05:31:20 +0100
committerAndreas Tobler <andreast@gcc.gnu.org>2003-02-07 05:31:20 +0100
commit79e43f898d6a106963de1aa0df94ceab3e64dc68 (patch)
treec7f2deadecfdd8f8fb0e29584ab31a84941b6293 /libffi
parentf39a753b0930bad0d7a994a28bf1d688302bdc47 (diff)
downloadgcc-79e43f898d6a106963de1aa0df94ceab3e64dc68.zip
gcc-79e43f898d6a106963de1aa0df94ceab3e64dc68.tar.gz
gcc-79e43f898d6a106963de1aa0df94ceab3e64dc68.tar.bz2
darwin_closure.S: Fix alignement bug, allocate 8 bytes for the result.
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. From-SVN: r62514
Diffstat (limited to 'libffi')
-rw-r--r--libffi/ChangeLog9
-rw-r--r--libffi/src/powerpc/aix_closure.S37
-rw-r--r--libffi/src/powerpc/darwin_closure.S51
-rw-r--r--libffi/src/powerpc/ffi_darwin.c44
4 files changed, 77 insertions, 64 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index f0b6853..319315e 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -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
diff --git a/libffi/src/powerpc/aix_closure.S b/libffi/src/powerpc/aix_closure.S
index 7fa96f1..d0d50ca 100644
--- a/libffi/src/powerpc/aix_closure.S
+++ b/libffi/src/powerpc/aix_closure.S
@@ -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
diff --git a/libffi/src/powerpc/darwin_closure.S b/libffi/src/powerpc/darwin_closure.S
index 5420c77..9ae17d8 100644
--- a/libffi/src/powerpc/darwin_closure.S
+++ b/libffi/src/powerpc/darwin_closure.S
@@ -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
diff --git a/libffi/src/powerpc/ffi_darwin.c b/libffi/src/powerpc/ffi_darwin.c
index 5773644..3f70527 100644
--- a/libffi/src/powerpc/ffi_darwin.c
+++ b/libffi/src/powerpc/ffi_darwin.c
@@ -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
*/