Ideas and questions about dynamic linking
Simon Marlow
marlowsd at gmail.com
Tue Jan 5 04:52:48 EST 2010
On 23/12/2009 08:43, Howard B. Golden wrote:
> I've been thinking about the dynamic linking proposal and I have some
> ideas and questions. I am trying to clarify (in my mind) the
> requirements / like-to-haves.
>
> Q1. Is LGPL code acceptable? If so, you might want to consider gmodule
> from glib (see http://library.gnome.org/devel/glib/unstable/glib-
> Dynamic-Loading-of-Modules). According to their documentation, they've
> already done all the work to make dynamic linking work on many
> platforms.
I only took a quick look at it. As far as I can tell, it provides a
system-independent layer over the top of whatever dynamic linking is
provided by the system, much like our Linker API (although rather more
polished).
I don't think this solves any of the immediate problems, and I don't
think the benefits would be worth the LGPL price tag.
> Q2. How is dynamic linking related to GHCi interpretation? Will it ever
> be necessary to be able to link dynamically _to_ interpreted code
> objects? (Linking _from_ interpreted code shouldn't be a problem.)
No, we don't need to link compiled code to interpreted code. GHC's
compilation manager ensures that compiled code only refers to other
compiled code.
> Q3. Would it be acceptable to require compilation with PIC and the use
> of the system linker to turn modules into shared objects in order to use
> dynamic linking? Is it necessary for GHCi to be able to load .o files
> directly?
It's necessary for GHCi to be able to load compiled object files. But
that doesn't mean we have to load the .o's directly, it may be possible
to convert them into .so's first. The only problems here are whether
this is an unacceptable overhead, and the details of where the files go,
how they get cleaned, etc.
As for PIC by default, I don't know the answer - someone needs to do
some experimentation here. We don't have recent measurements of the
overhead of PIC, it may well be small enough to enable by default. Note
the overhead on x86_64 is lower than on x86, so we should measure on both.
> Q4. Currently the Haskell linker (rts/Linker.c) maintains a symbol
> table. Why is this necessary? What would happen if the Haskell code
> called the system's symbol lookup (e.g., dlsym on POSIX or
> g_module_symbol from gmodule)?
The RTS is not currently dynamically linked, so dlsym() doesn't know the
address of RTS symbols. If/when we switch to a dynamically-linked GHCi,
that symbol table can go away (yay!).
> Q5. Are there any platforms that GHCi runs on that don't support shared
> libraries and dynamic linking?
The three object formats we support in the linker (ELF, MACH-O, COFF)
all have dynamic linking support, so I think the answer is no.
Cheers,
Simon
More information about the Cvs-ghc
mailing list