-
-
Notifications
You must be signed in to change notification settings - Fork 106
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
libdlfaker.so interferes with library specific RPATHs #266
Comments
I see gcc has a
Could it be as simple as that (well, a bit more complex actually, as the final call is actually two levels deep with a comment that there must have been a good reason for this...)? |
Having debugged this with @twhitehead I was wondering about the reason for using |
It's perhaps even more common now than it used to be. There are entire frameworks that use |
For completeness the sequence here is as follows (why Paraview crashes here):
Hope that helps for reference. |
I tried the same version of ParaView (v5.11.2) that you appear to be using, but I can't reproduce the issue on my machine. Is there something special I need to do to configure it? |
@dcommander I'll try to get a reproducible build recipe for you, since there are probably some subtleties here. For sure it needs OSpray and ISPC as dependencies, with the ISPC runtime in a non-standard location. |
Unfortunately, it appears as if If ParaView doesn't use |
BTW, the issue can be reproduced by cleaning the VirtualGL build directory, applying the attached VirtualGL build system patch, rebuilding VirtualGL, and running I have never been completely clear as to why the issue occurs. My understanding of Unless more information emerges that might enable a workaround within VirtualGL, unfortunately there is nothing I can do about this at the moment. The proposed workaround is incompatible with our official build system, and since the issue cannot be reproduced with the default builds of ParaView, it does not warrant an application recipe. |
When libdlfaker.so hooks
dlopen
it causes the ultimatedlopen
call to come from libdlfaker.so instead of the original library. This results in anyRPATH
s in that library not being used to search for the library beingdlopen
ed.I discovered this on the Digital Research Alliance of Canada's clusters when when using the newest ParaView. Here is a screenshot of showing how ParaView fails to load due a dependent library not finding a library it requires
Here is a screenshot showing how the libraries do properly resolve when your remove libdlfaker.so from sitting between the library and
glibc
I realize this is probably a difficult items to resolve, but I opened this ticket to at least document the issue.
That said, I think it is actually technically possible as the final libdlfaker.so call to the actual
dlopen
is always (except when tracing in enabled) in a tail call position. That is, it looks likewhich means your could technically tail call the real
dlopen_real
(i.e., drop the libdlfaker.so's stack frame and jump to thedlopen_real
instead of calling it) so the the top-level return address would be in the original library's address space and glibc would then presumably apply itsRPATH
.The text was updated successfully, but these errors were encountered: