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) about 1 month ago. Updated about 1 month 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) about 1 month 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 1 month 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 1 month 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 1 month 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 1 month 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 1 month 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