On Mon, 2009-11-30 at 22:49 -0800, Howard B. Golden wrote:
> Mon Nov 30 22:12:34 PST 2009  [email protected]
>   * Fix GHC ticket 2615 (linker scripts in .so files)
>   This patch only applies to systems that use ELF format files.
>   The patch modifies the addDLL function so that it recognizes
>   "invalid ELF header" errors. If these occur, the file that was opened
>   is scanned for a linker script GROUP ( ... ) directive. If found,
>   the first file inside the GROUP ( ... ) will be sent to dlopen.
>   Any errors reported by dlopen then will be reported  to the caller.

First of all. I'm happy enough with this approach as an interim measure.
We know it will not work in all cases, eg it cannot cope with:

GROUP ( /lib64/libpthread.so.0 /usr/lib64/libpthread_nonshared.a )

because we cannot obtain any of the symbols from the nonshared version.

For the funny Gentoo ld script hackery like /usr/lib64/libpcre.so:

GROUP ( /lib64/libpcre.so.0 )

it should work. However I think we could do better. We talked to one of
the Gentoo hackers and he pointed out that really we ought to be
dlopen'ing /lib64/libpcre.so.0 in the first place. A compiled installed
package ought to be referring to a specific SONAME including the .0 or
whatever version number. That could be dlopened fine.

What remains is to work out a way to resolve -lpthread
to /lib64/libpcre.so.0 which could be recorded in the package
description. Of course this is exactly what the native system linker
does.

So another way to look at this is that this will all go away when we
build Haskell packages for ghci as shared libs using the native linker.

Duncan

_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc

Reply via email to