Cheng Shao pushed to branch wip/T26166 at Glasgow Haskell Compiler / GHC

Commits:

5 changed files:

Changes:

  • libraries/ghc-internal/cbits/RtsIface.c
    ... ... @@ -25,7 +25,7 @@ void init_ghc_hs_iface(void);
    25 25
     #define UNDEF_CLOSURE(module, symbol)
    
    26 26
     
    
    27 27
     #define INFO_TBL(module, symbol) \
    
    28
    -    extern StgInfoTable ghczminternal_##module##_##symbol;
    
    28
    +    extern const StgInfoTable ghczminternal_##module##_##symbol;
    
    29 29
     
    
    30 30
     #include "RtsIfaceSymbols.h"
    
    31 31
     
    
    ... ... @@ -43,7 +43,7 @@ void init_ghc_hs_iface(void);
    43 43
     #define INFO_TBL(module, symbol) \
    
    44 44
         .symbol = &ghczminternal_##module##_##symbol,
    
    45 45
     
    
    46
    -static const HsIface the_ghc_hs_iface = {
    
    46
    +static HsIface the_ghc_hs_iface = {
    
    47 47
     #include "RtsIfaceSymbols.h"
    
    48 48
     };
    
    49 49
     
    

  • libraries/ghc-internal/include/RtsIfaceSymbols.h
    ... ... @@ -60,7 +60,7 @@ CLOSURE(GHCziInternalziExceptionziType, overflowException_closure)
    60 60
     CLOSURE(GHCziInternalziCString, unpackCStringzh_closure)
    
    61 61
     INFO_TBL(GHCziInternalziCString, unpackCStringzh_info)
    
    62 62
     INFO_TBL(GHCziInternalziCString, unpackCStringUtf8zh_info)
    
    63
    -#if defined(wasm32_HOST_ARCH)
    
    63
    +#if defined(wasm32_HOST_ARCH) && defined(__PIC__)
    
    64 64
     CLOSURE(GHCziInternalziWasmziPrimziImports, raiseJSException_closure)
    
    65 65
     INFO_TBL(GHCziInternalziWasmziPrimziTypes, JSVal_con_info)
    
    66 66
     CLOSURE(GHCziInternalziWasmziPrimziConcziInternal, threadDelay_closure)
    

  • rts/RtsToHsIface.c
    ... ... @@ -56,4 +56,4 @@
    56 56
     
    
    57 57
     // This captures the symbols provided by ghc-internal which
    
    58 58
     // are needed by the RTS.
    
    59
    -const HsIface *ghc_hs_iface = NULL;
    59
    +HsIface *ghc_hs_iface = NULL;

  • rts/include/rts/RtsToHsIface.h
    ... ... @@ -36,36 +36,36 @@ typedef struct {
    36 36
         StgClosure *runHandlersPtr_closure;  // GHC.Internal.Conc.Signal.runHandlersPtr_closure
    
    37 37
         StgClosure *flushStdHandles_closure;  // GHC.Internal.TopHandler.flushStdHandles_closure
    
    38 38
         StgClosure *runMainIO_closure;  // GHC.Internal.TopHandler.runMainIO_closure
    
    39
    -    StgInfoTable *Czh_con_info;  // GHC.Internal.Types.Czh_con_info
    
    40
    -    StgInfoTable *Izh_con_info;  // GHC.Internal.Types.Izh_con_info
    
    41
    -    StgInfoTable *Fzh_con_info;  // GHC.Internal.Types.Fzh_con_info
    
    42
    -    StgInfoTable *Dzh_con_info;  // GHC.Internal.Types.Dzh_con_info
    
    43
    -    StgInfoTable *Wzh_con_info;  // GHC.Internal.Types.Wzh_con_info
    
    39
    +    const StgInfoTable *Czh_con_info;  // GHC.Internal.Types.Czh_con_info
    
    40
    +    const StgInfoTable *Izh_con_info;  // GHC.Internal.Types.Izh_con_info
    
    41
    +    const StgInfoTable *Fzh_con_info;  // GHC.Internal.Types.Fzh_con_info
    
    42
    +    const StgInfoTable *Dzh_con_info;  // GHC.Internal.Types.Dzh_con_info
    
    43
    +    const StgInfoTable *Wzh_con_info;  // GHC.Internal.Types.Wzh_con_info
    
    44 44
         StgClosure *absentSumFieldError_closure;  // GHC.Internal.Prim.Panic.absentSumFieldError_closure
    
    45 45
         StgClosure *runAllocationLimitHandler_closure;  // GHC.Internal.AllocationLimitHandler.runAllocationLimitHandler_closure
    
    46
    -    StgInfoTable *Ptr_con_info;  // GHC.Internal.Ptr.Ptr_con_info
    
    47
    -    StgInfoTable *FunPtr_con_info;  // GHC.Internal.Ptr.FunPtr_con_info
    
    48
    -    StgInfoTable *I8zh_con_info;  // GHC.Internal.Int.I8zh_con_info
    
    49
    -    StgInfoTable *I16zh_con_info;  // GHC.Internal.Int.I16zh_con_info
    
    50
    -    StgInfoTable *I32zh_con_info;  // GHC.Internal.Int.I32zh_con_info
    
    51
    -    StgInfoTable *I64zh_con_info;  // GHC.Internal.Int.I64zh_con_info
    
    52
    -    StgInfoTable *W8zh_con_info;  // GHC.Internal.Word.W8zh_con_info
    
    53
    -    StgInfoTable *W16zh_con_info;  // GHC.Internal.Word.W16zh_con_info
    
    54
    -    StgInfoTable *W32zh_con_info;  // GHC.Internal.Word.W32zh_con_info
    
    55
    -    StgInfoTable *W64zh_con_info;  // GHC.Internal.Word.W64zh_con_info
    
    56
    -    StgInfoTable *StablePtr_con_info;  // GHC.Internal.Stable.StablePtr_con_info
    
    46
    +    const StgInfoTable *Ptr_con_info;  // GHC.Internal.Ptr.Ptr_con_info
    
    47
    +    const StgInfoTable *FunPtr_con_info;  // GHC.Internal.Ptr.FunPtr_con_info
    
    48
    +    const StgInfoTable *I8zh_con_info;  // GHC.Internal.Int.I8zh_con_info
    
    49
    +    const StgInfoTable *I16zh_con_info;  // GHC.Internal.Int.I16zh_con_info
    
    50
    +    const StgInfoTable *I32zh_con_info;  // GHC.Internal.Int.I32zh_con_info
    
    51
    +    const StgInfoTable *I64zh_con_info;  // GHC.Internal.Int.I64zh_con_info
    
    52
    +    const StgInfoTable *W8zh_con_info;  // GHC.Internal.Word.W8zh_con_info
    
    53
    +    const StgInfoTable *W16zh_con_info;  // GHC.Internal.Word.W16zh_con_info
    
    54
    +    const StgInfoTable *W32zh_con_info;  // GHC.Internal.Word.W32zh_con_info
    
    55
    +    const StgInfoTable *W64zh_con_info;  // GHC.Internal.Word.W64zh_con_info
    
    56
    +    const StgInfoTable *StablePtr_con_info;  // GHC.Internal.Stable.StablePtr_con_info
    
    57 57
         StgClosure *StackSnapshot_closure;  // GHC.Internal.Stack.CloneStack.StackSnapshot_closure
    
    58 58
         StgClosure *divZZeroException_closure;  // GHC.Internal.Exception.Type.divZeroException_closure
    
    59 59
         StgClosure *underflowException_closure;  // GHC.Internal.Exception.Type.underflowException_closure
    
    60 60
         StgClosure *overflowException_closure;  // GHC.Internal.Exception.Type.overflowException_closure
    
    61 61
         StgClosure *unpackCStringzh_closure;  // GHC.Internal.CString.unpackCStringzh_closure
    
    62
    -    StgInfoTable *unpackCStringzh_info;  // GHC.Internal.CString.unpackCStringzh_info
    
    63
    -    StgInfoTable *unpackCStringUtf8zh_info;  // GHC.Internal.CString.unpackCStringUtf8zh_info
    
    62
    +    const StgInfoTable *unpackCStringzh_info;  // GHC.Internal.CString.unpackCStringzh_info
    
    63
    +    const StgInfoTable *unpackCStringUtf8zh_info;  // GHC.Internal.CString.unpackCStringUtf8zh_info
    
    64 64
     #if defined(wasm32_HOST_ARCH)
    
    65 65
         StgClosure *raiseJSException_closure;  // GHC.Internal.Wasm.Prim.Imports.raiseJSException_closure
    
    66
    -    StgInfoTable *JSVal_con_info;  // GHC.Internal.Wasm.Prim.Types.JSVal_con_info
    
    66
    +    const StgInfoTable *JSVal_con_info;  // GHC.Internal.Wasm.Prim.Types.JSVal_con_info
    
    67 67
         StgClosure *threadDelay_closure;  // GHC.Internal.Wasm.Prim.Conc.Internal.threadDelay_closure
    
    68 68
     #endif
    
    69 69
     } HsIface;
    
    70 70
     
    
    71
    -extern const HsIface *ghc_hs_iface;
    71
    +extern HsIface *ghc_hs_iface;

  • rts/wasm/JSFFI.c
    ... ... @@ -15,6 +15,22 @@ extern HsStablePtr rts_threadDelay_impl;
    15 15
     __attribute__((__weak__))
    
    16 16
     int __main_argc_argv(int argc, char *argv[]);
    
    17 17
     
    
    18
    +#if !defined(__PIC__)
    
    19
    +void init_ghc_hs_iface(void);
    
    20
    +
    
    21
    +extern StgClosure ghczminternal_GHCziInternalziWasmziPrimziImports_raiseJSException_closure;
    
    22
    +extern const StgInfoTable ghczminternal_GHCziInternalziWasmziPrimziTypes_JSVal_con_info;
    
    23
    +extern StgClosure ghczminternal_GHCziInternalziWasmziPrimziConcziInternal_threadDelay_closure;
    
    24
    +
    
    25
    +__attribute__((constructor(100)))
    
    26
    +static void __init_ghc_hs_iface_jsffi(void) {
    
    27
    +  init_ghc_hs_iface();
    
    28
    +  ghc_hs_iface->raiseJSException_closure = &ghczminternal_GHCziInternalziWasmziPrimziImports_raiseJSException_closure;
    
    29
    +  ghc_hs_iface->JSVal_con_info = &ghczminternal_GHCziInternalziWasmziPrimziTypes_JSVal_con_info;
    
    30
    +  ghc_hs_iface->threadDelay_closure = &ghczminternal_GHCziInternalziWasmziPrimziConcziInternal_threadDelay_closure;
    
    31
    +}
    
    32
    +#endif
    
    33
    +
    
    18 34
     // Note [JSFFI initialization]
    
    19 35
     // ~~~~~~~~~~~~~~~~~~~~~~~~~~~
    
    20 36
     //