Hi Duncan, On Wednesday December 2, 2009, Duncan Coutts wrote: > 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.
I agree that it won't do this. > 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. I know there was discussion of replacing Linker.c with a call to the native system linker. This seems to me to be the way to go. However, I don't know what monsters might lurk on that path. > 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. When is this change planned to occur? If soon, maybe this patch should be abandoned. At present, it is possible to say 'ghci -lpcre' or 'addDLL "lpcre"'. For these to work, you have to be able to call the system linker from ghci dynamically. (Therefore, I think it means replacing Linker.c with the native system linker.) Again, I'm all for this, but I don't know the difficulty involved. Regards, Howard _______________________________________________ Cvs-ghc mailing list [email protected] http://www.haskell.org/mailman/listinfo/cvs-ghc
