On Thu, 2006-09-21 at 23:54 -0400, Jack Howarth wrote: > We have > the same issue in gcc-4.2-20060915/libffi/src/powerpc/ffi_darwin.c > (which might explain why it fails so many tests at -m64). > > http://gcc.gnu.org/ml/gcc/2006-09/msg00277.html
For this thread, you have: *next_arg++ = (unsigned)(char *)ecif->rvalue; Digging through the types, you have: libffi/include/ffi_common.h: typedef struct { ffi_cif *cif; void *rvalue; void **avalue; } extended_cif; and from libffi/src/powerpc/ffi_darwin.c: unsigned *next_arg = stack + 6; /* 6 reserved positions. */ So for -m64, you're taking the 8 byte rvalue void * pointer and casting it to an 8 byte char * pointer, so that part is ok. However, you then cast it to a 4 byte unsigned type and store it to a 4 byte unsigned memory location pointed to by next_arg. Yes, this code is not 64-bit clean. Peter