From: normalperson@... Date: 2014-03-01T19:33:10+00:00 Subject: [ruby-core:61193] [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 Eric Wong. rubylang.10.webmeister@spamgourmet.com wrote: > My config.h for ARMv5 contains both `#define HAVE_LONG_LONG 1` and > `#define HAVE_UINT64_T 1`, so for all versions of the code it will > always take the first path. The `unsigned long long` variant as well > as the `uint64_t` variant seem to be broken on ARMv5, so I decided to > try the third one (`unsigned long`) by simply removing all other > alternatives (patch attached). This successfully fixes the problem. Could be a compiler problem with 64-bit emulation. Which compiler/version is this? Can you try a newer one? Can you try any other code which uses 64-bit math? Also, it could be an alignment problem; but I don't see places where rb_serial_t is not 32-bit aligned... > I'm not sure why you use the different types in the first place. If it > works with `unsigned long` (i.e. you do not need more than 32 bits), > what is the benefit of using `unsigned long long`? If it does bring > some benefit for other architectures, could you disable its usage at > least on ARMv5 or check your code whether it makes some assumptions > about these types that do not hold on ARMv5? 64-bits is needed to avoid overflow on VM state changes. Otherwise our caches could give false hits and crash. ---------------------------------------- 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-45551 * 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/