[commit: ghc] ghc-7.10: CMM: add a mechanism to import C .data labels (a993712)

git at git.haskell.org git at git.haskell.org
Mon Jan 19 22:26:26 UTC 2015


Repository : ssh://git@git.haskell.org/ghc

On branch  : ghc-7.10
Link       : http://ghc.haskell.org/trac/ghc/changeset/a993712d16691829c3bf6d1ea552112abb2d4f9f/ghc

>---------------------------------------------------------------

commit a993712d16691829c3bf6d1ea552112abb2d4f9f
Author: Sergei Trofimovich <siarheit at google.com>
Date:   Mon Jan 19 16:27:06 2015 -0600

    CMM: add a mechanism to import C .data labels
    
    Summary:
    This introduces new .cmm syntax for import:
    
        'import' 'CLOSURE' <identifier>;
    
    Currently cmm syntax allows importing only function labels:
    
        import pthread_mutex_lock;
    
    but sometimes ghc needs to import global gariables
    or haskell closures:
    
        import ghczmprim_GHCziTypes_True_closure;
        import base_ControlziExceptionziBase_nestedAtomically_closure;
        import ghczmprim_GHCziTypes_False_closure;
        import sm_mutex;
    
    It breaks on ia64 where there is a difference in
    pointers to data and pointer to functions.
    
    Patch fixes threaded runtime on ia64 where
    dereference of 'sm_mutex' from CMM led to
    incurrect location.
    
    Exact breakage machanics are the same as in e18525fae273f4c1ad8d6cbe1dea4fc074cac721
    
    Merge into the 7.10 branch
    
    Signed-off-by: Sergei Trofimovich <siarheit at google.com>
    
    Test Plan: passes ./validate, makes ghci work on ghc-7.8.4
    
    Reviewers: simonmar, simonpj, austin
    
    Reviewed By: austin
    
    Subscribers: thomie
    
    Differential Revision: https://phabricator.haskell.org/D622
    
    (cherry picked from commit d82f592522eb8e063276a8a8c87ab93e18353c6b)


>---------------------------------------------------------------

a993712d16691829c3bf6d1ea552112abb2d4f9f
 compiler/cmm/CmmParse.y | 4 ++++
 rts/Exception.cmm       | 2 +-
 rts/PrimOps.cmm         | 6 +++---
 3 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/compiler/cmm/CmmParse.y b/compiler/cmm/CmmParse.y
index 6b51e51..fd9489b 100644
--- a/compiler/cmm/CmmParse.y
+++ b/compiler/cmm/CmmParse.y
@@ -575,6 +575,10 @@ importName
         : NAME  
         { ($1, mkForeignLabel $1 Nothing ForeignLabelInExternalPackage IsFunction) }
 
+        -- as previous 'NAME', but 'IsData'
+        | 'CLOSURE' NAME
+        { ($2, mkForeignLabel $2 Nothing ForeignLabelInExternalPackage IsData) }
+
         -- A label imported with an explicit packageId.
         | STRING NAME
         { ($2, mkCmmCodeLabel (fsToPackageKey (mkFastString $1)) $2) }
diff --git a/rts/Exception.cmm b/rts/Exception.cmm
index 5007ef3..8d19c14 100644
--- a/rts/Exception.cmm
+++ b/rts/Exception.cmm
@@ -13,7 +13,7 @@
 #include "Cmm.h"
 #include "RaiseAsync.h"
 
-import ghczmprim_GHCziTypes_True_closure;
+import CLOSURE ghczmprim_GHCziTypes_True_closure;
 
 /* -----------------------------------------------------------------------------
    Exception Primitives
diff --git a/rts/PrimOps.cmm b/rts/PrimOps.cmm
index 3e8612c..2e6ca46 100644
--- a/rts/PrimOps.cmm
+++ b/rts/PrimOps.cmm
@@ -28,12 +28,12 @@
 import pthread_mutex_lock;
 import pthread_mutex_unlock;
 #endif
-import base_ControlziExceptionziBase_nestedAtomically_closure;
+import CLOSURE base_ControlziExceptionziBase_nestedAtomically_closure;
 import EnterCriticalSection;
 import LeaveCriticalSection;
-import ghczmprim_GHCziTypes_False_closure;
+import CLOSURE ghczmprim_GHCziTypes_False_closure;
 #if defined(USE_MINIINTERPRETER) || !defined(mingw32_HOST_OS)
-import sm_mutex;
+import CLOSURE sm_mutex;
 #endif
 
 /*-----------------------------------------------------------------------------



More information about the ghc-commits mailing list