From: Naohisa Goto Date: 2011-08-08T22:30:30+09:00 Subject: [ruby-core:38850] [Ruby 1.9 - Bug #3861][Open] Endian bugs in fiddle/dl on sparc64 Issue #3861 has been updated by Naohisa Goto. File fiddle-sparcv9.patch added Status changed from Rejected to Open Priority changed from Low to Normal ruby -v changed from ruby 1.9.2p0 (2010-08-18 revision 29036) [sparc64-openbsd4.8] to ruby 1.9.4dev (2011-08-05 trunk 32863) [sparc64-solaris2.10] This is also reproduced on sparc64 Solaris10 with latest Ruby. This is not because of endian, nor libffi bug, but a bug of Fiddle. Patch is attached. The manpage of ffi_call(3) (http://linux.die.net/man/3/ffi_call ) says: "rvalue must point to storage that is sizeof(long) or larger. For smaller return value sizes, the ffi_arg or ffi_sarg integral type must be used to hold the return value." but Fiddle did not use ffi_arg nor ffi_sarg for getting the "rvalue" after ffi_call and closure callback. Note that value_to_generic and generic_to_value are asymmetric after the patch. In addition, to avoid potential bug in big-endian architecture, the patch also modifies value_to_generic() to strictly distinguish char, short and int. ---------------------------------------- Bug #3861: Endian bugs in fiddle/dl on sparc64 http://redmine.ruby-lang.org/issues/3861 Author: Jeremy Evans Status: Open Priority: Normal Assignee: Aaron Patterson Category: lib Target version: ruby -v: ruby 1.9.4dev (2011-08-05 trunk 32863) [sparc64-solaris2.10] =begin Running the test suite for 1.9.2 on sparc64 on OpenBSD, the following errors on received: 2) Failure: test_callback(DL::TestDL) [/usr/ports/pobj/ruby-1.9.2-p0/ruby-1.9.2-p0/test/dl/test_dl2.rb:144]: <"aabbfoorz"> expected but was <"zabrfbooa">. 3) Failure: test_isdigit(DL::TestFunc) [/usr/ports/pobj/ruby-1.9.2-p0/ruby-1.9.2-p0/test/dl/test_func.rb:67]: Expected 0 to be > 0. 4) Failure: test_qsort1(DL::TestFunc) [/usr/ports/pobj/ruby-1.9.2-p0/ruby-1.9.2-p0/test/dl/test_func.rb:95]: <"1349"> expected but was <"9341">. 5) Failure: test_qsort2(DL::TestFunc) [/usr/ports/pobj/ruby-1.9.2-p0/ruby-1.9.2-p0/test/dl/test_func.rb:105]: <"1349"> expected but was <"9341">. 6) Failure: test_isdigit(DL::TestImport) [/usr/ports/pobj/ruby-1.9.2-p0/ruby-1.9.2-p0/test/dl/test_import.rb:126]: Expected 0 to be > 0. It's possible this is an upstream issue with libffi. If so, please let me know and I'll report it to the libffi developers. =end -- http://redmine.ruby-lang.org