Moduleghc-9.14.1GHC2021
GHC.Linker.Types
- 14 types
- 22 values
- Packageghc-9.14.1
- Exports36
- LanguageGHC2021
- LicenceBSD-3-Clause
- SourceTypes.hs
Constructors
LoaderStatelinker_env :: !LinkerEnvCurrent global mapping from Names to their true values
bcos_loaded :: !LinkableSetThe currently loaded interpreted modules (home package)
objs_loaded :: !LinkableSetAnd the currently-loaded compiled modules (home package)
pkgs_loaded :: !PkgsLoadedThe currently-loaded packages; always object code haskell libraries, system libraries, transitive dependencies
temp_sos :: ![(FilePath, String)]We need to remember the name of previous temporary DLL/.so libraries so we can link them (see #10322)
linked_breaks :: !LinkedBreaksMapping from loaded modules to their breakpoint arrays
Constructors
LinkerEnvclosure_env :: !ClosureEnvCurrent global mapping from closure Names to their true values
itbl_env :: !ItblEnvThe current global mapping from RdrNames of DataCons to info table addresses. When a new LinkablePart is linked into the running image, or an existing module in the image is replaced, the itbl_env must be updated appropriately.
addr_env :: !AddrEnvLike closure_env and itbl_env, but for top-level
Addr#literals, see Note [Generating code for top-level string literal bindings] in GHC.StgToByteCode.
BreakArrays and CCSs are allocated per-module at link-time.
Specifically, a module's BreakArray is allocated either: - When a BCO for that module is linked - When :break is used on a given module *before* the BCO has been linked.
We keep this structure in the LoaderState
Constructors
LinkedBreaksbreakarray_env :: !ModuleEnv (ForeignRef BreakArray)Each Modules remote pointer of BreakArray.
ccs_env :: !ModuleEnv (Array BreakTickIndex (RemotePtr CostCentre))Each Modules array of remote pointers of CostCentre. Untouched when not profiling.
Union of LinkableSets.
In case of conflict, keep the most recent Linkable (as per linkableTime)
An entry to be inserted into a module's static pointer table. See Note [Grand plan for static forms] in GHC.Iface.Tidy.StaticPtrTable.
Constructors
Instances1Outputable
Outputable SptEntryDefined in ghc-9.14.1 · GHC.Types.SptEntry
Instances1Outputable
Outputable LibrarySpecDefined in ghc-9.14.1 · GHC.Linker.Types
Constructors
LoadedPkgInfoloaded_pkg_uid :: !UnitIdloaded_pkg_hs_objs :: ![LibrarySpec]loaded_pkg_non_hs_objs :: ![LibrarySpec]loaded_pkg_hs_dlls :: ![RemotePtr LoadedDLL]See Note [Looking up symbols in the relevant objects]
loaded_pkg_trans_deps :: UniqDSet UnitId
Instances1Outputable
Outputable LoadedPkgInfoDefined in ghc-9.14.1 · GHC.Linker.Types
Linkable
17 declarationsInformation we can use to dynamically link modules into the compiler
Constructors
LinkablelinkableTime :: !UTCTimeTime at which this linkable was built (i.e. when the bytecodes were produced, or the mod date on the files)
linkableModule :: !ModuleThe linkable module itself
linkableParts :: NonEmpty LinkablePartFiles and chunks of code to link.
Instances1Outputable
Outputable LinkableDefined in ghc-9.14.1 · GHC.Linker.Types
Objects which have yet to be linked by the compiler
Constructors
DotO ObjFile LinkableObjectSortDotA FilePathStatic archive file (.a)
DotDLL FilePathDynamically linked library file (.so, .dll, .dylib)
CoreBindings WholeCoreBindingsSerialised core which we can turn into BCOs (or object files), or used by some other backend See Note [Interface Files with Core Definitions]
LazyBCOs CompiledByteCode [FilePath]BCOs CompiledByteCodeA byte-code object, lives only in memory.
Instances1Outputable
Outputable LinkablePartDefined in ghc-9.14.1 · GHC.Linker.Types
Classify the provenance of .o products.
Constructors
ModuleObjectThe object is the final product for a module. When linking splices, its file extension will be adapted to the interpreter's way if needed.
ForeignObjectThe object was created from generated code for foreign stubs or foreign sources added by the user. Its file extension must be preserved, since there are no objects for alternative ways available.
Return true if the linkable only consists of native code (no BCO)
List the native objects (.o) of a linkable
List the native libraries (.so/.dll) of a linkable
List the paths of the native objects and libraries (.o.so.dll)
List the BCOs parts of a linkable.
This excludes the LazyBCOs and the CoreBindings parts
List the native linkable parts (.o.so.dll) of a linkable
Split linkable parts into (native code parts, BCOs parts)
Get the FilePath of linkable part (if applicable)
Retrieve the compiled byte-code from the linkable part.
Contrary to linkableBCOs, this includes byte-code from LazyBCOs.
Is the part a native object or library? (.o.so.dll)
Is the part a native library? (.so/.dll)
Transform the LinkablePart list in this Linkable to contain only byte code without LazyBCOs. If no LinkablePart remains, return Nothing.
Transform the LinkablePart list in this Linkable to contain only object code files (.o, .a, .so) without LazyBCOs. If no LinkablePart remains, return Nothing.
Split the LinkablePart lists in each Linkable into only object code files (.o, .a, .so) and only byte code, without LazyBCOs, and return two lists containing the nonempty Linkables for each.