Import Upstream version 20180207
[hcoop/debian/mlton.git] / runtime / gc / gc_state.h
CommitLineData
7f918cf1
CE
1/* Copyright (C) 2012,2014 Matthew Fluet.
2 * Copyright (C) 1999-2008 Henry Cejtin, Matthew Fluet, Suresh
3 * Jagannathan, and Stephen Weeks.
4 * Copyright (C) 1997-2000 NEC Research Institute.
5 *
6 * MLton is released under a BSD-style license.
7 * See the file MLton-LICENSE for details.
8 */
9
10#if (defined (MLTON_GC_INTERNAL_TYPES))
11
12struct GC_state {
13 /* These fields are at the front because they are the most commonly
14 * referenced, and having them at smaller offsets may decrease code
15 * size and improve cache performance.
16 */
17 pointer frontier; /* heap.start <= frontier < limit */
18 pointer limit; /* limit = heap.start + heap.size */
19 pointer stackTop; /* Top of stack in current thread. */
20 pointer stackLimit; /* stackBottom + stackSize - maxFrameSize */
21 size_t exnStack;
22 /* Alphabetized fields follow. */
23 size_t alignment; /* */
24 bool amInGC;
25 bool amOriginal;
26 char **atMLtons; /* Initial @MLton args, processed before command line. */
27 int atMLtonsLength;
28 uint32_t atomicState;
29 objptr callFromCHandlerThread; /* Handler for exported C calls (in heap). */
30 struct GC_callStackState callStackState;
31 bool canMinor; /* TRUE iff there is space for a minor gc. */
32 struct GC_controls controls;
33 struct GC_cumulativeStatistics cumulativeStatistics;
34 objptr currentThread; /* Currently executing thread (in heap). */
35 struct GC_forwardState forwardState;
36 GC_frameLayout frameLayouts; /* Array of frame layouts. */
37 uint32_t frameLayoutsLength; /* Cardinality of frameLayouts array. */
38 struct GC_generationalMaps generationalMaps;
39 objptr *globals;
40 uint32_t globalsLength;
41 bool hashConsDuringGC;
42 struct GC_heap heap;
43 struct GC_lastMajorStatistics lastMajorStatistics;
44 pointer limitPlusSlop; /* limit + GC_HEAP_LIMIT_SLOP */
45 int (*loadGlobals)(FILE *f); /* loads the globals from the file. */
46 uint32_t magic; /* The magic number for this executable. */
47 uint32_t maxFrameSize;
48 bool mutatorMarksCards;
49 GC_objectHashTable objectHashTable;
50 GC_objectType objectTypes; /* Array of object types. */
51 uint32_t objectTypesLength; /* Cardinality of objectTypes array. */
52 struct GC_profiling profiling;
53 GC_frameIndex (*returnAddressToFrameIndex) (GC_returnAddress ra);
54 objptr savedThread; /* Result of GC_copyCurrentThread.
55 * Thread interrupted by arrival of signal.
56 */
57 int (*saveGlobals)(FILE *f); /* saves the globals to the file. */
58 bool saveWorldStatus; /* */
59 struct GC_heap secondaryHeap; /* Used for major copying collection. */
60 objptr signalHandlerThread; /* Handler for signals (in heap). */
61 struct GC_signalsInfo signalsInfo;
62 struct GC_sourceMaps sourceMaps;
63 pointer stackBottom; /* Bottom of stack in current thread. */
64 struct GC_sysvals sysvals;
65 struct GC_translateState translateState;
66 struct GC_vectorInit *vectorInits;
67 uint32_t vectorInitsLength;
68 GC_weak weaks; /* Linked list of (live) weak pointers */
69};
70
71#endif /* (defined (MLTON_GC_INTERNAL_TYPES)) */
72
73#if (defined (MLTON_GC_INTERNAL_FUNCS))
74
75static void displayGCState (GC_state s, FILE *stream);
76
77static inline size_t sizeofGCStateCurrentStackUsed (GC_state s);
78static inline void setGCStateCurrentThreadAndStack (GC_state s);
79static void setGCStateCurrentHeap (GC_state s,
80 size_t oldGenBytesRequested,
81 size_t nurseryBytesRequested);
82
83#endif /* (defined (MLTON_GC_INTERNAL_FUNCS)) */
84
85#if (defined (MLTON_GC_INTERNAL_BASIS))
86
87PRIVATE bool GC_getAmOriginal (GC_state s);
88PRIVATE void GC_setAmOriginal (GC_state s, bool b);
89PRIVATE void GC_setControlsMessages (GC_state s, bool b);
90PRIVATE void GC_setControlsSummary (GC_state s, bool b);
91PRIVATE void GC_setControlsRusageMeasureGC (GC_state s, bool b);
92PRIVATE uintmax_t GC_getCumulativeStatisticsBytesAllocated (GC_state s);
93PRIVATE uintmax_t GC_getCumulativeStatisticsNumCopyingGCs (GC_state s);
94PRIVATE uintmax_t GC_getCumulativeStatisticsNumMarkCompactGCs (GC_state s);
95PRIVATE uintmax_t GC_getCumulativeStatisticsNumMinorGCs (GC_state s);
96PRIVATE size_t GC_getCumulativeStatisticsMaxBytesLive (GC_state s);
97PRIVATE void GC_setHashConsDuringGC (GC_state s, bool b);
98PRIVATE size_t GC_getLastMajorStatisticsBytesLive (GC_state s);
99
100PRIVATE pointer GC_getCallFromCHandlerThread (GC_state s);
101PRIVATE void GC_setCallFromCHandlerThread (GC_state s, pointer p);
102PRIVATE pointer GC_getCurrentThread (GC_state s);
103PRIVATE pointer GC_getSavedThread (GC_state s);
104PRIVATE void GC_setSavedThread (GC_state s, pointer p);
105PRIVATE void GC_setSignalHandlerThread (GC_state s, pointer p);
106
107#endif /* (defined (MLTON_GC_INTERNAL_BASIS)) */
108
109PRIVATE struct rusage* GC_getRusageGCAddr (GC_state s);
110
111PRIVATE sigset_t* GC_getSignalsHandledAddr (GC_state s);
112PRIVATE sigset_t* GC_getSignalsPendingAddr (GC_state s);
113PRIVATE void GC_setGCSignalHandled (GC_state s, bool b);
114PRIVATE bool GC_getGCSignalPending (GC_state s);
115PRIVATE void GC_setGCSignalPending (GC_state s, bool b);