Project

General

Profile

Actions

Bug #18645

closed

fiddle.rb assumes wrong file name for glibc shared object on Alpha

Added by glaubitz (John Paul Adrian Glaubitz) 9 months ago. Updated 9 months ago.

Status:
Third Party's Issue
Priority:
Normal
Target version:
-
[ruby-core:107970]

Description

On Alpha, the fiddle.rb test fails because the code in helper.rb assumes that the name for the libc shared object file is "libc.so.6" which is not correct for all architectures:

ruby -v: ruby 3.0.3p157 (2021-11-24 revision 3fb7d2cadc) [alpha-linux-gnu]
exec ./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems "./test/runner.rb" --ruby="./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems" --excludes-dir=./test/excludes --name=!/memory_leak/ -v --excludes-dir=debian/tests/excludes/any/ --excludes-dir=debian/tests/excludes/alpha/
/<<PKGBUILDDIR>>/.ext/common/fiddle.rb:61:in `initialize': libc.so.6: cannot open shared object file: No such file or directory (Fiddle::DLError)
	from /<<PKGBUILDDIR>>/.ext/common/fiddle.rb:61:in `new'
	from /<<PKGBUILDDIR>>/.ext/common/fiddle.rb:61:in `dlopen'
	from /<<PKGBUILDDIR>>/.ext/common/fiddle/import.rb:86:in `block in dlload'
	from /<<PKGBUILDDIR>>/.ext/common/fiddle/import.rb:77:in `collect'
	from /<<PKGBUILDDIR>>/.ext/common/fiddle/import.rb:77:in `dlload'
	from /<<PKGBUILDDIR>>/test/fiddle/test_import.rb:12:in `<module:LIBC>'
	from /<<PKGBUILDDIR>>/test/fiddle/test_import.rb:10:in `<module:Fiddle>'
	from /<<PKGBUILDDIR>>/test/fiddle/test_import.rb:9:in `<top (required)>'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1049:in `require'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1049:in `block in non_options'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1043:in `each'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1043:in `non_options'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:65:in `process_args'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:143:in `process_args'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1237:in `process_args'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1242:in `run'
	from /<<PKGBUILDDIR>>/tool/lib/test/unit.rb:1249:in `run'
	from /<<PKGBUILDDIR>>/tool/test/runner.rb:23:in `<top (required)>'
	from ./test/runner.rb:11:in `require_relative'
	from ./test/runner.rb:11:in `<main>'

Full log: https://buildd.debian.org/status/fetch.php?pkg=ruby3.0&arch=alpha&ver=3.0.3-1&stamp=1647549307&raw=0

The code in question is located in test/fiddle/helper.rb:

  # Handle musl libc
  libc_so, = Dir.glob(File.join(libdir, "libc.musl*.so*"))
  if libc_so
    libm_so = libc_so
  else
    # glibc
    libc_so = "libc.so.6"
    libm_so = "libm.so.6"
  end

On a machine running Linux on Alpha, the filename for the shared library is libc.so.6.1, the same applies for Itanium:

root@alpha-test-01:~# uname -a
Linux alpha-test-01 5.14.0-3-alpha-generic #1 Debian 5.14.12-1 (2021-10-14) alpha GNU/Linux
root@alpha-test-01:~# ls -l /lib/alpha-linux-gnu/libc.so*
-rw-r--r-- 1 root root 273 Feb 21 09:47 /lib/alpha-linux-gnu/libc.so
lrwxrwxrwx 1 root root  12 Feb 21 09:47 /lib/alpha-linux-gnu/libc.so.6.1 -> libc-2.33.so
root@alpha-test-01:~#
root@yttrium:~# uname -a
Linux yttrium 5.15.0-2-mckinley #1 SMP Debian 5.15.5-1 (2021-11-26) ia64 GNU/Linux
root@yttrium:~# ls -l /lib/ia64-linux-gnu/libc.so*
lrwxrwxrwx 1 root root 12 Jan 26 22:01 /lib/ia64-linux-gnu/libc.so.6.1 -> libc-2.33.so
root@yttrium:~#

The code in helper.rb should be modified to set the name for libc_so on Alpha and IA64 to "libc.so.6.1".

Updated by kou (Kouhei Sutou) 9 months ago

  • Status changed from Open to Third Party's Issue
  • Assignee set to kou (Kouhei Sutou)

Could you report this to https://github.com/ruby/fiddle/ because ruby/fiddle is the upstream?

Updated by nobu (Nobuyoshi Nakada) 9 months ago

I think the current hard code is a bad habit, and ldd should be primary.

Actions

Also available in: Atom PDF

Like0
Like0Like0