[Hackage] #853: Building mixed-language programs with Apple's Objective-C garbage-collection feature is difficult

Hackage cvs-ghc at haskell.org
Tue May 31 09:20:57 CEST 2011


#853: Building mixed-language programs with Apple's Objective-C garbage-
collection feature is difficult
----------------------------+-----------------------------------------------
  Reporter:  dankna         |        Owner:      
      Type:  enhancement    |       Status:  new 
  Priority:  normal         |    Milestone:      
 Component:  Cabal library  |      Version:  HEAD
  Severity:  normal         |     Keywords:      
Difficulty:  unknown        |   Ghcversion:      
  Platform:                 |  
----------------------------+-----------------------------------------------
 Ideally, there would be a single flag to set the ObjC garbage collection
 mode.  The three possibilities are, semantically, disabled, optional, and
 mandatory; I was experimenting with the mandatory mode, but there will be
 related issues with the others.

 One might expect the following to work:

   ld-options: -fobjc-gc-only

 In fact this will compile successfully but the linked object will have
 very subtle heap corruption due to the lack of a write barrier (which is
 implemented by gcc by hooking all field accessors, transparently to the
 developer).  Why yes, this /did/ take me a while to track down!  It is
 necessary to also add:

   cc-options:  -fobjc-gc-only

 But once this is added, it is impossible to link any Haskell objects in,
 because they do not contain the magic flag which tells the linker they are
 GC-aware.  We therefore need:

   ghc-options: -optc-fobjc-gc-only

 (I think this might force compilation via C when it wouldn't otherwise be
 used, which is of course undesirable, but I haven't looked into it.)

 This is somewhat of an ugly situation, but fortuitously, it is simple to
 remedy - Cabal merely needs to understand what needs to be done and do it!

 I propose to put the new field in BuildInfo, as it applies to both
 libraries and executables; to call it "objc-gc:", and to give it the
 values "Disabled", "Optional", and "Mandatory".  I expect to have a patch
 for this ready sometime tomorrow.

-- 
Ticket URL: <http://hackage.haskell.org/trac/hackage/ticket/853>
Hackage <http://haskell.org/cabal/>
Hackage: Cabal and related projects



More information about the cabal-devel mailing list