Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
7795 commits behind, 700 commits ahead of the upstream repository.
  • Sven Tennie's avatar
    29717ecb
    Use Info Table Provenances to decode cloned stack (#18163) · 29717ecb
    Sven Tennie authored and Marge Bot's avatar Marge Bot committed
    Emit an Info Table Provenance Entry (IPE) for every stack represeted info table
    if -finfo-table-map is turned on.
    
    To decode a cloned stack, lookupIPE() is used. It provides a mapping between
    info tables and their source location.
    
    Please see these notes for details:
    
    - [Stacktraces from Info Table Provenance Entries (IPE based stack unwinding)]
    - [Mapping Info Tables to Source Positions]
    
    Metric Increase:
        T12545
    29717ecb
    History
    Use Info Table Provenances to decode cloned stack (#18163)
    Sven Tennie authored and Marge Bot's avatar Marge Bot committed
    Emit an Info Table Provenance Entry (IPE) for every stack represeted info table
    if -finfo-table-map is turned on.
    
    To decode a cloned stack, lookupIPE() is used. It provides a mapping between
    info tables and their source location.
    
    Please see these notes for details:
    
    - [Stacktraces from Info Table Provenance Entries (IPE based stack unwinding)]
    - [Mapping Info Tables to Source Positions]
    
    Metric Increase:
        T12545
CloneStack.h 1.08 KiB
/* ---------------------------------------------------------------------------
 *
 * (c) The GHC Team, 2020-2021
 *
 * Stack snapshotting and decoding. (Cloning and unwinding.)
 *
 *---------------------------------------------------------------------------*/

#pragma once

extern StgClosure DLL_IMPORT_DATA_VARNAME(base_GHCziStackziCloneStack_StackSnapshot_closure);
#define StackSnapshot_constructor_closure DLL_IMPORT_DATA_REF(base_GHCziStackziCloneStack_StackSnapshot_closure)

StgStack* cloneStack(Capability* capability, const StgStack* stack);

void sendCloneStackMessage(StgTSO *tso, HsStablePtr mvar);

StgMutArrPtrs* decodeClonedStack(Capability *cap, StgStack* stack);

#include "BeginPrivate.h"

#if defined(THREADED_RTS)
void handleCloneStackMessage(MessageCloneStack *msg);
#endif

StgWord getStackFrameCount(StgStack* stack);
StgWord getStackChunkClosureCount(StgStack* stack);
void copyPtrsToArray(Capability *cap, StgMutArrPtrs* arr, StgStack* stack);
StgClosure* createPtrClosure(Capability* cap, InfoProvEnt* ipe);
StgMutArrPtrs* allocateMutableArray(StgWord size);

#include "EndPrivate.h"