1. 26 Oct, 2010 1 commit
  2. 21 Oct, 2010 1 commit
  3. 24 Oct, 2010 1 commit
  4. 26 Oct, 2010 5 commits
    • gwright@antiope.com's avatar
      Fix for #4318 (Linker failure on OS X 10.6) · 73dd6e84
      gwright@antiope.com authored
      This patch fixes two bugs in the Mach-O linker and adds debugging statements
      to the same. The bugs:
      1. The test for symbol->n_value == 0 is removed and replaced by a test of the
      flag field.  Checking the n_value field was just wrong; the value of a
      symbol should only be examined when allocating space for a common block,
      in which case the n_value field gives the size of the block.  This bug
      led to an infrequently occuring linker crash.
      I believe the behavior of the linker now agrees with the intent of the
      sketchy Apple documentation.
      2. Jump islands were being filled with garbage instead of the the location
      of the referenced symbol. This caused relocations of type X86_64_RELOC_GOT and
      X86_64_RELOC_GOT_LOAD to eventually lead to crashes.  The fix is simply to
      look up the symbol.
      Enough debug statements have been added to follow the operation of the Mach-O
      linker while it loads modules.  They are not yet as informative and well
      organized as for ELF.  Improving the debug statements will require some
      reorganization of the code -- the Mach-O linker seems basically sound, but
      is crying out for some refactoring and commenting.
    • Ian Lynagh's avatar
      Use removeDups to find top-level duplicate names · 116134b1
      Ian Lynagh authored
      findDupsEq is quadratic, whereas removeDups is n log n.
      Fixes T1969 regression.
    • Ian Lynagh's avatar
      Remove unnecessary imports · 8c550ede
      Ian Lynagh authored
    • Ian Lynagh's avatar
    • simonpj@microsoft.com's avatar
      Fix a long-standing bug the float-out pass · b284d370
      simonpj@microsoft.com authored
      We were failing to float out a binding that could be floated,
      because of a confusion in the Lam case of floatExpr.
      In investigating this I also discoverd that there is really
      no point at all in giving a different level to variables in
      a binding group, so I've now given them all the same (in 
      The overall difference is quite minor in a nofib run:
              Program           Size    Allocs   Runtime   Elapsed
                  Min          +0.0%     -8.5%    -28.4%    -28.7%
                  Max          +0.0%     +0.7%     -0.7%     -1.1%
       Geometric Mean          +0.0%     -0.0%    -11.6%    -11.8%
      I don't trust those runtimes, but smaller is good!  The 8.5% 
      improvement in allocation in fulsom, and seems real.  The 
      0.7% allocation increase only happens in programs with
      very small allocation.  I tracked one down to a call of this form
          = \ args -> GHC.IO.Handle.Internals.openTextEncoding1
                        mb_codec ha_type
                        (\mb_encoder mb_decoder -> blah)
      With the new floater the argument of openTextEncoding1 becomes
           (let lvl = .. in \mb_encoder mb_decoder -> blah)
      And rightly so.  However in fact this argument is a continuation
      and hence is called once, so the floating is fruitless.
      Roll on one-shot-function analysis (which I know how to do
      but fail to get to!).
  5. 31 Aug, 2010 1 commit
  6. 26 Oct, 2010 3 commits
  7. 25 Oct, 2010 5 commits
  8. 24 Oct, 2010 1 commit
  9. 17 Oct, 2010 1 commit
  10. 23 Oct, 2010 5 commits
  11. 22 Oct, 2010 5 commits
  12. 21 Oct, 2010 11 commits