From: pedz@... Date: 2014-01-27T13:52:40+00:00 Subject: [ruby-core:60139] [ruby-trunk - Bug #9437] Build of ruby 2.1.0 fails on AIX 6.1 Issue #9437 has been updated by Perry Smith. I believe (rather strongly) that the ssh report is incorrect. I recall a test deep inside the loader that does not load libraries under dangerous conditions. I recall seeing this flaw myself but when I tried to take advantage of it, I could not. I finally reviewed the loader source code (which I can do) and figured out why. This is a rather vague memory and I am not sure of the details. I need to go back and review that and recall the details. My thought (which I plan to try and implement today or tomorrow) is to have a simple program but when that simple program is linked, tell gcc to use another script, maybe called "pretend-ld" in place of ld. pretend-ld will scan the arguments passed to it and emit a suitable list of directories to be included in libpath. We would use this during the configure stage. In essence, what we need to do (if you want to keep setting libpath) is to dig out the directories that gcc adds somehow. Another approach is to just link a simple program and use dump -H along with a script to dig out the libpath set in the executable. ---------------------------------------- Bug #9437: Build of ruby 2.1.0 fails on AIX 6.1 https://bugs.ruby-lang.org/issues/9437#change-44633 * Author: Perry Smith * Status: Feedback * Priority: Normal * Assignee: Yutaka Kanemoto * Category: platform/aix * Target version: current: 2.2.0 * ruby -v: - * Backport: 1.9.3: DONTNEED, 2.0.0: DONTNEED, 2.1: REQUIRED ---------------------------------------- miniruby will not load and gets an error of: ``` linking miniruby Could not load program ./miniruby: Dependent module libgmp.a(libgmp.so.10) could not be loaded. Could not load module libgmp.a(libgmp.so.10). System error: No such file or directory make: *** [.rbconfig.time] Error 255 ``` The dump -H of miniruby shows: ``` dump -H miniruby miniruby: ***Loader Section*** Loader Header Information VERSION# #SYMtableENT #RELOCent LENidSTR 0x00000001 0x00000811 0x000031ec 0x000000b9 #IMPfilID OFFidSTR LENstrTBL OFFstrTBL 0x00000007 0x000318c8 0x0000942e 0x00031981 ***Import File Strings*** INDEX PATH BASE MEMBER 0 /gsa/ausgsa/projects/r/ruby/prvm/ruby-2.1.0/lib:/usr/lib:/lib 1 libpthread.a shr_comm.o 2 libpthread.a shr_xpg5.o 3 libgmp.a libgmp.so.10 4 libcrypt.a shr.o 5 libc.a shr.o 6 librtl.a shr.o ``` Note the dependency of libgmp. libgmp is not in /usr/lib or /lib but is in another directory that the compiler knows about via the prefix path but Ruby does not. So the link succeeds because ld knows how to find libgmp but the execution does not because of the embedded LIBPATH (element 0 above). This has come up before. I can work around the issue by various ways but I thought I should open an issue. I'm happy to help out with debug or more data. -- http://bugs.ruby-lang.org/