summaryrefslogtreecommitdiffstats
path: root/libffi
diff options
context:
space:
mode:
authorjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-01-19 10:47:59 +0000
committerjakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4>2012-01-19 10:47:59 +0000
commit74055335e9e80b91676a778f234ed63ac6778b1c (patch)
tree83a63eaea4b540c1affedf2bb26c8d6d1de58c22 /libffi
parentd075e3bd441193d2e72f393bd72f47683c7a3e86 (diff)
downloadppe42-gcc-74055335e9e80b91676a778f234ed63ac6778b1c.tar.gz
ppe42-gcc-74055335e9e80b91676a778f234ed63ac6778b1c.zip
PR rtl-optimization/48496
* src/ia64/ffi.c (ffi_call): Fix up aliasing violations. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@183301 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libffi')
-rw-r--r--libffi/ChangeLog5
-rw-r--r--libffi/src/ia64/ffi.c10
2 files changed, 12 insertions, 3 deletions
diff --git a/libffi/ChangeLog b/libffi/ChangeLog
index a13e39c1fd0..75ce3bf230f 100644
--- a/libffi/ChangeLog
+++ b/libffi/ChangeLog
@@ -1,3 +1,8 @@
+2012-01-19 Jakub Jelinek <jakub@redhat.com>
+
+ PR rtl-optimization/48496
+ * src/ia64/ffi.c (ffi_call): Fix up aliasing violations.
+
2012-01-09 Rainer Orth <ro@CeBiTec.Uni-Bielefeld.DE>
* configure.ac (i?86-*-*): Set TARGET to X86_64.
diff --git a/libffi/src/ia64/ffi.c b/libffi/src/ia64/ffi.c
index 84b144868ed..79e29b45a89 100644
--- a/libffi/src/ia64/ffi.c
+++ b/libffi/src/ia64/ffi.c
@@ -1,5 +1,5 @@
/* -----------------------------------------------------------------------
- ffi.c - Copyright (c) 1998, 2007, 2008 Red Hat, Inc.
+ ffi.c - Copyright (c) 1998, 2007, 2008, 2012 Red Hat, Inc.
Copyright (c) 2000 Hewlett Packard Company
IA64 Foreign Function Interface
@@ -324,13 +324,17 @@ ffi_call(ffi_cif *cif, void (*fn)(void), void *rvalue, void **avalue)
case FFI_TYPE_FLOAT:
if (gpcount < 8 && fpcount < 8)
stf_spill (&stack->fp_regs[fpcount++], *(float *)avalue[i]);
- stack->gp_regs[gpcount++] = *(UINT32 *)avalue[i];
+ {
+ UINT32 tmp;
+ memcpy (&tmp, avalue[i], sizeof (UINT32));
+ stack->gp_regs[gpcount++] = tmp;
+ }
break;
case FFI_TYPE_DOUBLE:
if (gpcount < 8 && fpcount < 8)
stf_spill (&stack->fp_regs[fpcount++], *(double *)avalue[i]);
- stack->gp_regs[gpcount++] = *(UINT64 *)avalue[i];
+ memcpy (&stack->gp_regs[gpcount++], avalue[i], sizeof (UINT64));
break;
case FFI_TYPE_LONGDOUBLE:
OpenPOWER on IntegriCloud