long doubles are only aligned to word boundaries when passed via the stack (ie. to a function that uses more than 8 fp regs for other parameters). The va_arg support expects long doubles to be double word aligned, resulting in a mismatch between caller and callee for variable argument functions.
-- Summary: 128-bit IBM long double misaligned on stack Product: gcc Version: 4.2.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target AssignedTo: unassigned at gcc dot gnu dot org ReportedBy: amodra at bigpond dot net dot au GCC target triplet: powerpc-linux http://gcc.gnu.org/bugzilla/show_bug.cgi?id=28207