From: rubylang.10.webmeister@... Date: 2014-03-01T20:58:17+00:00 Subject: [ruby-core:61195] [ruby-trunk - Bug #9507] Ruby 2.1.0 is broken on ARMv5: tried to create Proc object without a block Issue #9507 has been updated by _ _.
Which compiler/version is this? Can you try a newer one?
The compiler is gcc (GCC) 4.8.2 20131219 (prerelease) on the ARMv5 device and arm-unknown-linux-gnueabi-gcc (crosstool-NG 1.19.0) 4.8.3 20131219 (prerelease) for [cross-compiling](http://archlinuxarm.org/developers/distcc-cross-compiling). GCC 4.8.2 is already the newest release. Out of curiosity, I gave Clang 3.4 a try, but it fails already during configure: checking size of int... 0 checking size of short... 0 checking size of long... 0 checking size of long long... configure: error: in `/root/clang/ruby/src/ruby-2.1.0': configure: error: cannot compute sizeof (long long) See `config.log' for more details I'm not sure what the problem here is, Clang compiles a simple `printf("%d", sizeof(long long));` just fine. Maybe some incompatibility in the configure script?
Can you try any other code which uses 64-bit math?
Can you recommend any test code? Those compilers build the whole Arch Linux ARM repository, so if it were a common problem, it should have been noticed by now.
64-bits is needed to avoid overflow on VM state changes. Otherwise our caches could give false hits and crash.
I see. But isn't it dangerous then to fall back to `unsigned long`, which only guarantees at least 32 bits? Or is the probability for a crash with only 32 bits still very low, and 64 bits just provide some extra safety? ---------------------------------------- Bug #9507: Ruby 2.1.0 is broken on ARMv5: tried to create Proc object without a block https://bugs.ruby-lang.org/issues/9507#change-45553 * Author: _ _ * Status: Open * Priority: Normal * Assignee: Charlie Somerville * Category: core * Target version: current: 2.2.0 * ruby -v: ruby 2.1.0dev (2013-09-04 trunk 42822) [armv5tel-linux-eabi] * Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- I'm using Arch Linux ARM which currently ships with Ruby 2.1.0. On all my ARMv5 devices, trying to run Ruby fails with a strange error, which has also been reported here: https://github.com/archlinuxarm/PKGBUILDs/issues/705 ARMv6 and ARMv7 devices on the other hand seem to be fine. Using git-bisect I was able to determine that the first bad commit is 2f522b9cc6f3e184404040b12af4486520a73b26 (r42822), which implements #8426: [root@alarm ~]# ruby --version ruby 2.1.0dev (2013-09-04 trunk 42822) [armv5tel-linux-eabi] [root@alarm ~]# ruby -e 'puts "foo"' /usr/lib/ruby/2.1.0/rubygems/requirement.rb:26:in `lambda': tried to create Proc object without a block (ArgumentError) from /usr/lib/ruby/2.1.0/rubygems/requirement.rb:26:in `' from /usr/lib/ruby/2.1.0/rubygems/requirement.rb:18:in `' from /usr/lib/ruby/2.1.0/rubygems/specification.rb:10:in `require' from /usr/lib/ruby/2.1.0/rubygems/specification.rb:10:in `' from /usr/lib/ruby/2.1.0/rubygems.rb:1161:in `require' from /usr/lib/ruby/2.1.0/rubygems.rb:1161:in `' from /usr/lib/ruby/2.1.0/rubygems.rb:114:in `' from :1:in `require' from :1:in `' The previous commit works correctly: [root@alarm ~]# ruby --version ruby 2.1.0dev (2013-09-04 trunk 42821) [armv5tel-linux-eabi] [root@alarm ~]# ruby -e 'puts "foo"' foo The problem is still present in trunk (r44896). ---Files-------------------------------- 0002-Use-only-unsigned-long-for-rb_serial_t.patch (538 Bytes) -- http://bugs.ruby-lang.org/