bug-guile
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#20567: guile 2.0.11 - test failures on mips64 big-endian with n32 AB


From: Schaefer, Frank
Subject: bug#20567: guile 2.0.11 - test failures on mips64 big-endian with n32 ABI
Date: Wed, 13 May 2015 18:31:12 +0000

I've encountered two test failures with guile 2.0.11 on mips64 big-endian, 
whenever I build with -mabi=n32 (these test failures do not occur with 
-mabi=64).  At least one of them I have resolved with the attached patch.

First testcase failure: test-ffi (fixed by my patch).  The guile code 
apparently assumes that sizeof(ffi_arg)<=sizeof(void **).  This is a faulty 
assumption; it holds on *most* platforms, but with the mips64 n32 ABI, 
sizeof(void **)==4, and sizeof(ffi_arg)==8.  So every foreign function that 
returns a pointer is liable to corrupt data, and anyone retrieving the return 
value as a simple void * is only going to get sign-extension garbage on 
big-endian (usually NULL).

Second testcase failure: check-guile fails due to 'ERROR: foreign.test: 
procedure->pointer: qsort - arguments: ((null-pointer-error 
"pointer->bytevector" "null pointer dereference" () ()))'.  I strongly suspect 
it's related to the ffi_arg issue mentioned above, but I'm still peeling away 
macro ugliness to track it down.  If anyone wants to pitch in with additional 
guidance or patchwork, I'd be happy to listen and test.

(The patch applies against 2.0.11 release or against current HEAD, where it 
also fixes the new testcases for test-foreign-object-scm and 
test-foreign-object-c.  HEAD also fails the test-out-of-memory case, though, 
which precludes further unit tests.)

Attachment: 0001-use-ffi_arg-instead-of-void-to-hold-FFI-call-return-.patch
Description: 0001-use-ffi_arg-instead-of-void-to-hold-FFI-call-return-.patch


reply via email to

[Prev in Thread] Current Thread [Next in Thread]