Bug 134519
Summary: | 32bit apprication doesn't run on IA32EL. | ||
---|---|---|---|
Product: | Red Hat Enterprise Linux 4 | Reporter: | L3support <linux-sid> |
Component: | glibc | Assignee: | Jakub Jelinek <jakub> |
Status: | CLOSED CURRENTRELEASE | QA Contact: | Brian Brock <bbrock> |
Severity: | medium | Docs Contact: | |
Priority: | medium | ||
Version: | 4.0 | CC: | bennet, davej, dwmw2, jturner, vaibhav.khanduja, yoav.zach |
Target Milestone: | --- | ||
Target Release: | --- | ||
Hardware: | ia64 | ||
OS: | Linux | ||
Whiteboard: | |||
Fixed In Version: | Doc Type: | Bug Fix | |
Doc Text: | Story Points: | --- | |
Clone Of: | Environment: | ||
Last Closed: | 2005-07-25 22:31:38 UTC | Type: | --- |
Regression: | --- | Mount Type: | --- |
Documentation: | --- | CRM: | |
Verified Versions: | Category: | --- | |
oVirt Team: | --- | RHEL 7.3 requirements from Atomic Host: | |
Cloudforms Team: | --- | Target Upstream Version: | |
Embargoed: | |||
Bug Depends On: | 134751 | ||
Bug Blocks: | 135876 |
Description
L3support
2004-10-04 11:48:19 UTC
Can you confirm which version of ia32el you're using? 1.1-2 (least the one we have) conflicts with the glibc which is in Beta1, so not sure how you're getting it installed. Either way, I'm able to reproduce your failures with 1.1-3. the problem is with the dynamic loader - you can see by the results of pread that the system opens the ia64 library instead of the ia32 library, as it is supposed to do for processes with personality PER_LINUX32. the bug report omits this line in the trace, but libia32x.so changes the personality of the process to PER_LINUX32 before opening ld-linux.so.2. something in the system does not work as expected - the kernel should be looking for the 32 bit version of ld-linux.so.2 in the emul directory before falling back to the 64 bit version. apparently this is not done, and it should be fixed. thanks, yoav. *** Bug 134616 has been marked as a duplicate of this bug. *** There seem to be multiple problems. The first is that for some reason there is /lib/ld-linux.so.2 -> ld-2.3.3.so symlink, not owned by any package. I don't think it is glibc that puts it there, also if I remove it and rerun ldconfig it is not recreated. So the question is what package created it there. When I remove this bogus symlink: ls -l /lib/ld-linux.so.2 /emul/ia32-linux/lib/ld-linux.so.2 ls: /lib/ld-linux.so.2: No such file or directory lrwxrwxrwx 1 root root 11 Oct 1 17:18 /emul/ia32-linux/lib/ld-linux.so.2 -> ld-2.3.3.so things don't work either: personality(PER_LINUX32) = 0 stat("/tmp/echo", {st_mode=S_IFREG|0755, st_size=12252, ...}) = 0 open("/tmp/echo", O_RDONLY) = 3 pread(3, "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\2\0\3\0\1\0\0\0\240\211"..., 52, 0) = 52 pread(3, "\6\0\0\0004\0\0\0004\200\4\0104\200\4\10\340\0\0\0\340"..., 224, 52) = 224 readlink("/proc/self/fd/3", "/tmp/echo", 4096) = 9 pread(3, "/lib/ld-linux.so.2\0", 19, 276) = 19 open("/lib/ld-linux.so.2", O_RDONLY) = -1 ENOENT (No such file or directory) That looks like the /emul/ia32-linux/ ugly hack in the kernel doesn't work. ia32el not the kernel is supposed to take care of all of this. BTW, kernel has: # CONFIG_IA32_SUPPORT is not set # CONFIG_COMPAT is not set which means /emul/ia32-linux hack is not present in the kernel and ia32el is always needed to run 32-bit apps. So, following things need to change: 1) ia32el needs to be changed so that it handles the /emul/ia32-linux hack itself in its open/stat/lstat/whatever else wrappers 2) we need to figure out where the bogus /lib/ld-linux.so.2 symlink came from 3) we need to figure out how to install 32-bit rpms on IA-64 at all, given that ia32el is on LACD, not in the base OS, and all .i386.rpm's require ia32el to be even installed (and ia32el requires glibc-2*.i686.rpm) In order to enable -EL, there is a new upstream syscall added in 2.6.10 which got accepted after we took the RHEL4 B2 snapshot of 2.6.9. We need to backport that change from 2.6.10 after we open up the RHEL4 RC baselevel. Ah, the syscall from above comment is represented in bug #134751. Well, I wouldn't talk about kernel bug here but kernel enhancement request instead. Certainly, setaltroot syscall got removed again from upstream kernel and I haven't seen setaltroot patches without the security hole in it so far. So, for the time being ia32el as is (i.e. with userland /emul/ia32-linux handling) is all we have. This is now working correctly with -9 ia32el, pending that the /lib/ld-linux.so.2 -> /emul/ia32-linux/lib/ld-linux.so.2 symlink is present (which is the topic of bug 133822) I'm closing out this bug for now. As it has been mentioned here that "BTW, kernel has: # CONFIG_IA32_SUPPORT is not set # CONFIG_COMPAT is not set which means /emul/ia32-linux hack is not present in the kernel and ia32el is always needed to run 32-bit apps." so we would be able to run our 32 bit apps without ia32el service. I have a problem with this. My 32 application makes use of dce rpc communication, which is based on freedce http://sourceforge.net/projects/freedce/ what I see here when I run my 32 application with this service on the dce/rpc communication fails. We have been shipping our 32 bit application on ia64 without this service on till RHEL 3.0 and no problem is seen till yet. I would like to know if Redhat has released any kernel patch which would make my 32bit application run without ia32el service. Please let me know as this is very urgent. I know this bug has been closed but I still request you to get back to me on my issue. you need ia32el service period. The in hardware emulation is both slow and optional to the cpu (and there have been public statements that it is going away/has gone away in latest cpus). The OS comes with ia32el included, both in rhel3 and rhel4 however. So we have not and will not release a patch that runs 32 bit sw without ia32el Can you please open a bugzilla for the problem you have with IA32EL and include a test case to demonstrate it ? Thanks, Yoav. I think the bug is reopened due to the new comment. Closing it again. |