Project

General

Profile

Actions

Bug #20447

closed

Ruby 3.3.1 broken on i686 due to "incompatible pointer type" error

Added by vo.x (Vit Ondruch) about 2 months ago. Updated 19 days ago.

Status:
Closed
Assignee:
-
Target version:
-
ruby -v:
ruby 3.3.1 (2024-04-23 revision c56cd86388) [i686-linux]
[ruby-core:117657]

Description

gcc -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -march=i686 -mtune=generic -msse2 -mfpmath=sse -mstackrealign -fasynchronous-unwind-tables -fstack-clash-protection -fPIC -m32 -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -fno-strict-overflow -fvisibility=hidden -fexcess-precision=standard -DRUBY_EXPORT -I. -I.ext/include/i386-linux -I/builddir/build/BUILD/ruby-3.3.1/include -I/builddir/build/BUILD/ruby-3.3.1 -I/builddir/build/BUILD/ruby-3.3.1/prism -I/builddir/build/BUILD/ruby-3.3.1/enc/unicode/15.0.0      -o time.o -c /builddir/build/BUILD/ruby-3.3.1/time.c
make: Leaving directory '/builddir/build/BUILD/ruby-3.3.1/redhat-linux-build'
/builddir/build/BUILD/ruby-3.3.1/time.c: In function ‘zone_timelocal’:
/builddir/build/BUILD/ruby-3.3.1/time.c:2345:35: error: passing argument 3 of ‘split_second’ from incompatible pointer type [-Wincompatible-pointer-types]
 2345 |     split_second(tobj->timew, &t, &s);
      |                                   ^~
      |                                   |
      |                                   wideval_t * {aka long long unsigned int *}
/builddir/build/BUILD/ruby-3.3.1/time.c:616:58: note: expected ‘VALUE *’ {aka ‘long unsigned int *’} but argument is of type ‘wideval_t *’ {aka ‘long long unsigned int *’}
  616 | split_second(wideval_t timew, wideval_t *timew_p, VALUE *subsecx_p)
      |                                                   ~~~~~~~^~~~~~~~~
make: *** [Makefile:447: time.o] Error 1
make: *** Waiting for unfinished jobs....
make: Entering directory '/builddir/build/BUILD/ruby-3.3.1/redhat-linux-build'

This is presumably due to #20327 / https://github.com/ruby/ruby/pull/10332. There seems to be medicine in master git|055613fd868a8c94e43893f8c58a00cdd2a81f6d or maybe the whole https://github.com/ruby/ruby/pull/10332, not sure

Actions #1

Updated by vo.x (Vit Ondruch) about 2 months ago

  • Subject changed from Ruby 3.3.1 broken on i686 to Ruby 3.3.1 broken on i686 due to "incompatible pointer type" error

Updated by hsbt (Hiroshi SHIBATA) about 2 months ago

Unfortunately, we no longer test with i686 arch. Because AWS that is our main test infrastructure didn't provide i686 VMs.

Updated by vo.x (Vit Ondruch) about 2 months ago

i686 container or just 32bit user space could do the job. @jaruga (Jun Aruga) any chance you would have cycles to look at that?

Updated by jaruga (Jun Aruga) about 2 months ago

I tried several ways to reproduce this issue on Fedora rawhide i686 environment.

Containers

First, I don't find the Fedora rawhide i686 container. I couldn't find the i686 container image on the following Fedora's container registries.

The following command showing the CPU architecture meta data doesn't include i686 container.

$ skopeo inspect --raw docker://registry.fedoraproject.org/fedora:rawhide | jq

Mock

I tried the mock, Fedora's building software.
https://rpm-software-management.github.io/mock/Release-Notes-3.5

The following command to emulate the i686 environment on QEMU didn't work.

$ mock -r fedora-rawhide-i386 --forcearch=i386 *.rpm

setarch

I tried setarch i686 on Fedora rawhide x86_64 environment.

$ cat /etc/fedora-release
Fedora release 41 (Rawhide)

$ rpm -q gcc
gcc-14.0.1-0.15.fc41.x86_64

$ gcc --version
gcc (GCC) 14.0.1 20240411 (Red Hat 14.0.1-0)
Copyright (C) 2024 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

I tried the following commands. But I got the errors. I am not sure why the errors happened.

$ git checkout v3_3_1

$ setarch i686 ./autogen.sh

$ setarch i686 ./configure warnflags="-Wall -Wincompatible-pointer-types"
...
   * arch:                i686-linux
...
   * with coroutine:      x86
...
   * warnflags:           -Wall -Wincompatible-pointer-types


$ setarch i686 make 2>&1 | tee make.log
...
coroutine/x86/Context.S: Assembler messages:
coroutine/x86/Context.S:17: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:18: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:19: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:20: Error: invalid instruction suffix for `push'
coroutine/x86/Context.S:29: Error: invalid instruction suffix for `pop'
coroutine/x86/Context.S:30: Error: invalid instruction suffix for `pop'
coroutine/x86/Context.S:31: Error: invalid instruction suffix for `pop'
coroutine/x86/Context.S:32: Error: invalid instruction suffix for `pop'
make: *** [Makefile:452: coroutine/x86/Context.o] Error 1

Updated by vo.x (Vit Ondruch) about 2 months ago

jaruga (Jun Aruga) wrote in #note-4:

Mock

I tried the mock, Fedora's building software.
https://rpm-software-management.github.io/mock/Release-Notes-3.5

The following command to emulate the i686 environment on QEMU didn't work.

$ mock -r fedora-rawhide-i386 --forcearch=i386 *.rpm

No emulation is needed. $ mock -r fedora-rawhide-i386 *.rpm is enough.

Updated by vo.x (Vit Ondruch) about 2 months ago

And it should also be reproducible on local environment, having 32bit user space libraries installed. And the same applies for container. Having x86_64 container with 32bit userspace libraries should be fine. You just need to use ./configure --target=i686 I believe (but I'm not expert).

Updated by satadru (Satadru Pramanik) 19 days ago

This is presumably due to #20327 / https://github.com/ruby/ruby/pull/10332. There seems to be medicine in master git|055613fd868a8c94e43893f8c58a00cdd2a81f6d or maybe the whole https://github.com/ruby/ruby/pull/10332, not sure

For what it is worth, applying https://github.com/ruby/ruby/pull/10332.patch to Ruby 3.3.2 appears to fix building Ruby 3.3.2 on the 32-bit armv7l and i686 architectures...

Updated by k0kubun (Takashi Kokubun) 19 days ago · Edited

  • Status changed from Open to Closed
  • Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN to 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: REQUIRED

If you want to fix something in Ruby 3.3, i.e. backport something from master to ruby_3_3, please consider filing a ticket as a backport request. It’s documented here https://github.com/ruby/ruby/wiki/How-To-Request-Backport#backport-custom-field. You need to set Backport 3.3: REQUIRED to make it to our backport task list. Ideally you should also close the ticket to signal that it has been already fixed in master and ready for backports.

Anyway, I’ll see if I can backport PR 10332.

Updated by k0kubun (Takashi Kokubun) 19 days ago

  • Backport changed from 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: REQUIRED to 3.0: UNKNOWN, 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: DONE

Updated by k0kubun (Takashi Kokubun) 19 days ago

Can you test ruby_3_3 branch (at b13cf49036f0a454063cde25807785adc00f8995) now?

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0Like0Like0