public inbox for libffi-discuss@sourceware.org
 help / color / mirror / Atom feed
From: "Kaz Kylheku (libffi)" <382-725-6798@kylheku.com>
To: libffi-discuss@sourceware.org
Subject: Cosure return value issue on Linux PPC64
Date: Sat, 27 May 2017 16:59:00 -0000	[thread overview]
Message-ID: <53985e874a349c551e7943677d21c766@mail.kylheku.com> (raw)

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 ...

             reply	other threads:[~2017-05-27 16:59 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-05-27 16:59 Kaz Kylheku (libffi) [this message]
2017-05-29  7:44 ` Andrew Haley
2017-05-29 12:31 ` Tom Tromey
2017-05-29 15:30   ` Andrew Haley

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=53985e874a349c551e7943677d21c766@mail.kylheku.com \
    --to=382-725-6798@kylheku.com \
    --cc=libffi-discuss@sourceware.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).