Project

General

Profile

Actions

Bug #20447

open

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

Added by vo.x (Vit Ondruch) 10 days ago. Updated 8 days ago.

Status:
Open
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) 10 days 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) 10 days 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) 9 days 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) 8 days 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) 8 days 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) 8 days 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).

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0