#3654: Mach-O GHCi linker lacks support for a range of relocation entries
--------------------+-------------------------------------------------------
Reporter:  chak     |          Owner:                  
    Type:  bug      |         Status:  new             
Priority:  normal   |      Component:  Runtime System  
 Version:  6.13     |       Severity:  normal          
Keywords:           |       Testcase:                  
      Os:  MacOS X  |   Architecture:  Unknown/Multiple
--------------------+-------------------------------------------------------
 The Mach-O code of the GHCi linker `rts/Linker.c` lacks support for a
 range of relocation entries.  It used to silently ignore many of them.
 The following patch makes it barf() when it encounters an unsupported
 entry:
 {{{
 Wed Nov 11 13:07:12 EST 2009  Manuel M T Chakravarty
 <[email protected]>
   * Barf on unhandled Mach-O relocations in the ghci linker

   - It might be worthwhile to MERGE this to 6.12, BUT somebody should
 validate
     it on PPC/Mac OS X first.
 }}}
 Moreover, at least one entry type —i.e., `GENERIC_RELOC_LOCAL_SECTDIFF`—
 is not correctly implemented.

 This is an unsatisfactory situation as the transition from Mac OS X 10.5
 (Leopard) to 10.6 (Snow Leopard) showed.  In that case, changes in `ld`
 suddenly created a so far unsupported entry type.  This was before the
 above patch; so, the ignored entry led to an incorrectly relocated image,
 which crashed GHCi with a SIGBUS.

 Instead of trying to improve the dynamic linker, IMHO, GHC should use
 dynamic libraries with `dlopen()` and leave the implementation of dynamic
 linking to the OS vendor.  This has a number of advantages:
  * The RTS gets smaller & simpler, and we eliminate a whole category of
 potentially tricky bugs.
  * Dynamically loaded code can use dtrace probes (and other features
 requiring linker trickery).
  * Packages that GHC links to, don't need to be in memory twice (once
 statically and once dynamically linked).
  * Potential performance advantage due to optimisations in the OS' dynamic
 linker.

 The main obstacle with using dynamic libraries and `dlopen()` appears to
 be the required on-the-fly conversion of GHC-generated object files into
 dynamic libraries.  Otherwise, SimonM says that it is already possible to
 compile GHC itself dynamically-linked at the moment that the linker will
 then use `dlopen()` for loading packages.

 More details are in the following thread on `[email protected]`:
   [http://www.haskell.org/pipermail/cvs-ghc/2009-November/050941.html]
   [http://www.haskell.org/pipermail/cvs-ghc/2009-October/050893.html]

-- 
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/3654>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
_______________________________________________
Glasgow-haskell-bugs mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to