summaryrefslogtreecommitdiff
path: root/libffi
diff options
context:
space:
mode:
authoramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-25 00:54:54 +0000
committeramodra <amodra@138bc75d-0d04-0410-961f-82ee72b054a4>2005-08-25 00:54:54 +0000
commit5497bbdf19c7c89759bea02527ef83c85eb83f8f (patch)
tree502e280b7eb2fda62c32917c5855be5aa668c880 /libffi
parentef198e076f7e5824d21d3a2202b99cd4ed72a8ed (diff)
downloadgcc-5497bbdf19c7c89759bea02527ef83c85eb83f8f.tar.gz
PR target/23404
* src/powerpc/ffi.c (ffi_prep_args_SYSV): Correct placement of stack homed fp args. (ffi_status ffi_prep_cif_machdep): Correct stack sizing for same. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@103462 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi')
-rw-r--r--libffi/ChangeLog7
-rw-r--r--libffi/src/powerpc/ffi.c6
2 files changed, 11 insertions, 2 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index 33fe14ae332..fd61c4b80d6 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,10 @@
+2005-08-25 Alan Modra <amodra@bigpond.net.au>
+
+ PR target/23404
+ * src/powerpc/ffi.c (ffi_prep_args_SYSV): Correct placement of stack
+ homed fp args.
+ (ffi_status ffi_prep_cif_machdep): Correct stack sizing for same.
+
2005-08-11 Jakub Jelinek <jakub@redhat.com>
* configure.ac (HAVE_HIDDEN_VISIBILITY_ATTRIBUTE): New test.
diff --git a/libffi/src/powerpc/ffi.c b/libffi/src/powerpc/ffi.c
index ed02bf38d56..cc410bc6bdc 100644
--- a/libffi/src/powerpc/ffi.c
+++ b/libffi/src/powerpc/ffi.c
@@ -155,7 +155,8 @@ void ffi_prep_args_SYSV(extended_cif *ecif, unsigned *const stack)
if (fparg_count >= NUM_FPR_ARG_REGISTERS)
{
- if (intarg_count%2 != 0)
+ if (intarg_count >= NUM_GPR_ARG_REGISTERS
+ && intarg_count % 2 != 0)
{
intarg_count++;
next_arg++;
@@ -575,7 +576,8 @@ ffi_status ffi_prep_cif_machdep(ffi_cif *cif)
/* If this FP arg is going on the stack, it must be
8-byte-aligned. */
if (fparg_count > NUM_FPR_ARG_REGISTERS
- && intarg_count%2 != 0)
+ && intarg_count >= NUM_GPR_ARG_REGISTERS
+ && intarg_count % 2 != 0)
intarg_count++;
break;