public inbox for libffi-discuss@sourceware.org
 help / color / mirror / Atom feed
* Cosure return value issue on Linux PPC64
@ 2017-05-27 16:59 Kaz Kylheku (libffi)
  2017-05-29  7:44 ` Andrew Haley
  2017-05-29 12:31 ` Tom Tromey
  0 siblings, 2 replies; 4+ messages in thread
From: Kaz Kylheku (libffi) @ 2017-05-27 16:59 UTC (permalink / raw)
  To: libffi-discuss

Hi all,

My interpreted language's test suite failed on a PPC64 Linux box 
(gcc110.fsffrance.org).

The test in question uses the qsort C library function to sort a Lisp 
vector, using a Lisp callback.

Unfortunately, the int return value from the callback turns to garbage.  
The problem reproduces with current libffi from git.

The following test patch makes the problem go away and all tests pass:


diff --git a/src/powerpc/linux64_closure.S 
b/src/powerpc/linux64_closure.S
index 6487d2a..28a191a 100644
--- a/src/powerpc/linux64_closure.S
+++ b/src/powerpc/linux64_closure.S
@@ -27,7 +27,8 @@
  #define LIBFFI_ASM
  #include <fficonfig.h>
  #include <ffi.h>
-
+#undef __LITTLE_ENDIAN__
+#define __LITTLE_ENDIAN__ 1
         .file   "linux64_closure.S"

  #ifdef POWERPC64


The problem is that all the big endian cases are expecting the caller to 
place the return value at a displaced address.  If the type is int, for 
instance, the expectation is that the return value is to be stored at 
*(int *)(retval + 4).  If it is short, then at *(short *)(retval + 6) 
and so on.

Is this documented somewhere?

My code is storing everything at just the retval base address, 
regardless of size.

Cheers ...

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2017-05-29 15:30 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-05-27 16:59 Cosure return value issue on Linux PPC64 Kaz Kylheku (libffi)
2017-05-29  7:44 ` Andrew Haley
2017-05-29 12:31 ` Tom Tromey
2017-05-29 15:30   ` Andrew Haley

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).