Coverage Report

Created: 2017-04-15 07:07

/home/travis/build/MoarVM/MoarVM/src/core/instance.h
Line
Count
Source
1
/* The various "bootstrap" types, based straight off of some core
2
 * representations. They are used during the 6model bootstrap. */
3
struct MVMBootTypes {
4
    MVMObject *BOOTInt;
5
    MVMObject *BOOTNum;
6
    MVMObject *BOOTStr;
7
    MVMObject *BOOTArray;
8
    MVMObject *BOOTHash;
9
    MVMObject *BOOTCCode;
10
    MVMObject *BOOTCode;
11
    MVMObject *BOOTThread;
12
    MVMObject *BOOTIter;
13
    MVMObject *BOOTContext;
14
    MVMObject *BOOTIntArray;
15
    MVMObject *BOOTNumArray;
16
    MVMObject *BOOTStrArray;
17
    MVMObject *BOOTIO;
18
    MVMObject *BOOTException;
19
    MVMObject *BOOTStaticFrame;
20
    MVMObject *BOOTCompUnit;
21
    MVMObject *BOOTMultiCache;
22
    MVMObject *BOOTContinuation;
23
    MVMObject *BOOTQueue;
24
    MVMObject *BOOTAsync;
25
    MVMObject *BOOTReentrantMutex;
26
};
27
28
/* Various raw types that don't need a HOW */
29
typedef struct {
30
    MVMObject *RawDLLSym;
31
} MVMRawTypes;
32
33
/* Various common string constants. */
34
struct MVMStringConsts {
35
    MVMString *empty;
36
    MVMString *Str;
37
    MVMString *Num;
38
    MVMString *integer;
39
    MVMString *float_str;
40
    MVMString *bits;
41
    MVMString *unsigned_str;
42
    MVMString *find_method;
43
    MVMString *type_check;
44
    MVMString *accepts_type;
45
    MVMString *name;
46
    MVMString *attribute;
47
    MVMString *of;
48
    MVMString *rw;
49
    MVMString *type;
50
    MVMString *typeobj;
51
    MVMString *free_str;
52
    MVMString *callback_args;
53
    MVMString *encoding;
54
    MVMString *inlined;
55
    MVMString *repr;
56
    MVMString *anon;
57
    MVMString *P6opaque;
58
    MVMString *array;
59
    MVMString *box_target;
60
    MVMString *positional_delegate;
61
    MVMString *associative_delegate;
62
    MVMString *auto_viv_container;
63
    MVMString *done;
64
    MVMString *error;
65
    MVMString *stdout_chars;
66
    MVMString *stdout_bytes;
67
    MVMString *stderr_chars;
68
    MVMString *stderr_bytes;
69
    MVMString *buf_type;
70
    MVMString *write;
71
    MVMString *nativeref;
72
    MVMString *refkind;
73
    MVMString *positional;
74
    MVMString *lexical;
75
    MVMString *dimensions;
76
    MVMString *ready;
77
    MVMString *multidim;
78
    MVMString *entry_point;
79
    MVMString *kind;
80
    MVMString *instrumented;
81
    MVMString *heap;
82
    MVMString *translate_newlines;
83
};
84
85
/* An entry in the representations registry. */
86
struct MVMReprRegistry {
87
    /* name of the REPR */
88
    MVMString *name;
89
90
    /* the REPR vtable */
91
    const MVMREPROps *repr;
92
93
    /* the uthash hash handle inline struct. */
94
    UT_hash_handle hash_handle;
95
};
96
97
/* An entry in the persistent object IDs hash, used to give still-movable
98
 * objects a lifetime-unique ID. */
99
struct MVMObjectId {
100
    /* The current object address. */
101
    MVMObject *current;
102
103
    /* Then gen2 address that forms the persistent ID, and where we'll move
104
     * the object to if it lives long enough. */
105
    MVMCollectable *gen2_addr;
106
107
    /* Hash handle. */
108
    UT_hash_handle hash_handle;
109
};
110
111
/* Represents a MoarVM instance. */
112
struct MVMInstance {
113
    /* The main thread. */
114
    MVMThreadContext *main_thread;
115
116
    /* The ID to allocate the next-created thread. */
117
    AO_t next_user_thread_id;
118
119
    /* The event loop thread, a mutex to avoid start-races, a concurrent
120
     * queue of tasks that need to be processed by the event loop thread
121
     * and an array of active tasks, for the purpose of keeping them GC
122
     * marked. */
123
    MVMThreadContext *event_loop_thread;
124
    uv_mutex_t        mutex_event_loop_start;
125
    uv_sem_t          sem_event_loop_started;
126
    MVMObject        *event_loop_todo_queue;
127
    MVMObject        *event_loop_cancel_queue;
128
    MVMObject        *event_loop_active;
129
    uv_async_t       *event_loop_wakeup;
130
131
    /* The VM null object. */
132
    MVMObject *VMNull;
133
134
    /* The KnowHOW meta-object; all other meta-objects (which are
135
     * built in user-space) are built out of this. */
136
    MVMObject *KnowHOW;
137
138
    /* The KnowHOWAttribute meta-object; used for declaring attributes
139
     * on a KnowHOW. */
140
    MVMObject *KnowHOWAttribute;
141
142
    /* The VM's native string type, using MVMString. Note that this is a
143
     * native string, not an object boxing one. */
144
    MVMObject *VMString;
145
146
    /* Serialization context type (known as SCRef, but it's actually the
147
     * serialization context itself). */
148
    MVMObject *SCRef;
149
150
    /* Lexotic type, used in implementing return handling. */
151
    MVMObject *Lexotic;
152
153
    /* CallCapture type, used by custom dispatchers. */
154
    MVMObject *CallCapture;
155
156
    /* Thread type, representing a VM-level thread. */
157
    MVMObject *Thread;
158
159
    /* Set of bootstrapping types. */
160
    MVMBootTypes boot_types;
161
162
    /* Set of raw types. */
163
    MVMRawTypes raw_types;
164
165
    /* Set of string constants. */
166
    MVMStringConsts str_consts;
167
168
    /* int -> str cache */
169
    MVMString **int_to_str_cache;
170
171
    /* Multi-dispatch cache and specialization installation mutexes
172
     * (global, as the additions are quite low contention, so no
173
     * real motivation to have it more fine-grained at present). */
174
    uv_mutex_t mutex_multi_cache_add;
175
    uv_mutex_t mutex_spesh_install;
176
177
    /* Log file for specializations, if we're to log them. */
178
    FILE *spesh_log_fh;
179
180
    /* Log file for dynamic var performance, if we're to log it. */
181
    FILE *dynvar_log_fh;
182
    MVMint64 dynvar_log_lasttime;
183
184
    /* Flag for if spesh (and certain spesh features) are enabled. */
185
    MVMint8 spesh_enabled;
186
    MVMint8 spesh_inline_enabled;
187
    MVMint8 spesh_osr_enabled;
188
    MVMint8 spesh_nodelay;
189
190
    /* Number of specializations produced, and limit on number of
191
     * specializations (zero if no limit). */
192
    MVMint32 spesh_produced;
193
    MVMint32 spesh_limit;
194
195
    /* Flag for if NFA debugging is enabled. */
196
    MVMint8 nfa_debug_enabled;
197
198
    /* Flag for if jit is enabled */
199
    MVMint32 jit_enabled;
200
201
    /* File for JIT logging */
202
    FILE *jit_log_fh;
203
204
    /* Directory name for JIT bytecode dumps */
205
    char *jit_bytecode_dir;
206
    /* File for map of frame information for bytecode dumps */
207
    FILE *jit_bytecode_map;
208
    /* sequence number for JIT compiled frames */
209
    AO_t  jit_seq_nr;
210
211
    /* Number of representations registered so far. */
212
    MVMuint32 num_reprs;
213
214
    /* An array mapping representation IDs to registry entries. */
215
    MVMReprRegistry **repr_list;
216
217
    /* A hash mapping representation names to registry entries. */
218
    MVMReprRegistry *repr_hash;
219
220
    /* Mutex for REPR registration. */
221
    uv_mutex_t mutex_repr_registry;
222
223
    /* Number of permanent GC roots we've got, allocated space for, and
224
     * a list of the addresses to them. The mutex controls writing to the
225
     * list, just in case multiple threads somehow end up doing so. Note
226
     * that during a GC the world is stopped so reading is safe. We also
227
     * keep a list of names for these, for the purpose of heap debugging
228
     * and heap profiling. */
229
    MVMuint32             num_permroots;
230
    MVMuint32             alloc_permroots;
231
    MVMCollectable     ***permroots;
232
    char                **permroot_descriptions;
233
    uv_mutex_t            mutex_permroots;
234
235
    /* The current GC run sequence number. May wrap around over time; that
236
     * is fine since only equality ever matters. */
237
    AO_t gc_seq_number;
238
    /* The number of threads that vote for starting GC. */
239
    AO_t gc_start;
240
    /* The number of threads that still need to vote for considering GC done. */
241
    AO_t gc_finish;
242
    /* Whether the coordinator considers all in-trays clear. */
243
    AO_t gc_intrays_clearing;
244
    /* The number of threads that have yet to acknowledge the finish. */
245
    AO_t gc_ack;
246
    /* Linked list (via forwarder) of STables to free. */
247
    MVMSTable *stables_to_free;
248
    /* Whether the current GC run is a full collection. */
249
    MVMuint32 gc_full_collect;
250
251
    /* How many bytes of data have we promoted from the nursery to gen2
252
     * since we last did a full collection? */
253
    AO_t gc_promoted_bytes_since_last_full;
254
255
    /* Persistent object ID hash, used to give nursery objects a lifetime
256
     * unique ID. Plus a lock to protect it. */
257
    MVMObjectId *object_ids;
258
    uv_mutex_t    mutex_object_ids;
259
260
    /* MVMThreads completed starting, running, and/or exited. */
261
    /* note: used atomically */
262
    MVMThread *threads;
263
264
    /* raw command line args from APR */
265
    char          **raw_clargs;
266
    /* Number of passed command-line args */
267
    MVMint64        num_clargs;
268
    /* executable name */
269
    const char     *exec_name;
270
    /* program name; becomes first clargs entry */
271
    const char     *prog_name;
272
    /* cached parsed command line args */
273
    MVMObject      *clargs;
274
    /* Any --libpath=... options, to prefix in loadbytecode lookups. */
275
    const char     *lib_path[8];
276
277
    /* Hashes of HLLConfig objects. compiler_hll_configs is those for the
278
     * running compiler, and the default. compilee_hll_configs is used if
279
     * hll_compilee_depth is > 0. */
280
    MVMHLLConfig *compiler_hll_configs;
281
    MVMHLLConfig *compilee_hll_configs;
282
    MVMint64      hll_compilee_depth;
283
    uv_mutex_t    mutex_hllconfigs;
284
285
    /* By far the most common integers are between 0 and 8, but we cache up to 15
286
     * so that it lines up properly. */
287
    MVMIntConstCache    *int_const_cache;
288
    uv_mutex_t mutex_int_const_cache;
289
290
    /* Atomically-incremented counter of newly invoked frames, used for
291
     * lexotic caching. */
292
    AO_t num_frames_run;
293
294
    /* Hash of compiler objects keyed by name */
295
    MVMObject          *compiler_registry;
296
    uv_mutex_t    mutex_compiler_registry;
297
298
    /* Hash of hashes of symbol tables per hll. */
299
    MVMObject          *hll_syms;
300
    uv_mutex_t    mutex_hll_syms;
301
302
    MVMContainerRegistry *container_registry;     /* Container registry */
303
    uv_mutex_t      mutex_container_registry;     /* mutex for container registry */
304
305
    /* Hash of all loaded DLLs. */
306
    MVMDLLRegistry  *dll_registry;
307
    uv_mutex_t mutex_dll_registry;
308
309
    /* Hash of all loaded extensions. */
310
    MVMExtRegistry  *ext_registry;
311
    uv_mutex_t mutex_ext_registry;
312
313
    /* Hash of all registered extension ops. */
314
    MVMExtOpRegistry *extop_registry;
315
    uv_mutex_t  mutex_extop_registry;
316
317
    /* Hash of all known serialization contexts. Marked for GC iff
318
     * the item is unresolved. Also, array of all SCs, used for the
319
     * index stored in object headers. When an SC goes away this is
320
     * simply nulled. That makes it a small memory leak if a lot of
321
     * SCs are created and go away over time. */
322
    MVMSerializationContextBody  *sc_weakhash;
323
    uv_mutex_t                    mutex_sc_weakhash;
324
    MVMSerializationContextBody **all_scs;
325
    MVMuint32                     all_scs_next_idx;
326
    MVMuint32                     all_scs_alloc;
327
328
    /* Hash of filenames of compunits loaded from disk. */
329
    MVMLoadedCompUnitName *loaded_compunits;
330
    uv_mutex_t       mutex_loaded_compunits;
331
332
    /* Interned callsites. */
333
    MVMCallsiteInterns *callsite_interns;
334
    uv_mutex_t          mutex_callsite_interns;
335
336
    /* Standard file handles. */
337
    MVMObject *stdin_handle;
338
    MVMObject *stdout_handle;
339
    MVMObject *stderr_handle;
340
341
    /* Fixed size allocator. */
342
    MVMFixedSizeAlloc *fsa;
343
344
    /* Normal Form Grapheme state (synthetics table, lookup, etc.). */
345
    MVMNFGState *nfg;
346
347
    /* Next type cache ID, to go in STable. */
348
    AO_t cur_type_cache_id;
349
350
    /* The current instrumentation level. Each time we turn on/off some kind
351
     * of instrumentation, such as profiling, this is incremented. The next
352
     * entry to a frame then knows it should instrument or switch back to an
353
     * uninstrumented version. As a special case, when we start up this is set
354
     * to 1 which also triggers frame verification. */
355
    MVMuint32 instrumentation_level;
356
357
    /* Whether instrumented profiling is turned on or not. */
358
    MVMuint32 profiling;
359
360
    /* Heap snapshots, if we're doing heap snapshotting. */
361
    MVMHeapSnapshotCollection *heap_snapshots;
362
363
    /* Whether cross-thread write logging is turned on or not, and an output
364
     * mutex for it. */
365
    MVMuint32  cross_thread_write_logging;
366
    MVMuint32  cross_thread_write_logging_include_locked;
367
    uv_mutex_t mutex_cross_thread_write_logging;
368
369
    MVMuint32  coverage_logging;
370
    /* Log file for coverage logging. */
371
    FILE *coverage_log_fh;
372
373
    /* Cached backend config hash. */
374
    MVMObject *cached_backend_config;
375
};
376
377
/* Returns a true value if we have created user threads (and so are running a
378
 * multi-threaded application). */
379
32.1M
MVM_STATIC_INLINE MVMint32 MVM_instance_have_user_threads(MVMThreadContext *tc) {
380
32.1M
    return tc->instance->next_user_thread_id != 2;
381
32.1M
}
Unexecuted instantiation: NativeRef.c:MVM_instance_have_user_threads
Unexecuted instantiation: CUnion.c:MVM_instance_have_user_threads
Unexecuted instantiation: ReentrantMutex.c:MVM_instance_have_user_threads
Unexecuted instantiation: ConditionVariable.c:MVM_instance_have_user_threads
Unexecuted instantiation: Semaphore.c:MVM_instance_have_user_threads
Unexecuted instantiation: ConcBlockingQueue.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMAsyncTask.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMNull.c:MVM_instance_have_user_threads
Unexecuted instantiation: CPPStruct.c:MVM_instance_have_user_threads
Unexecuted instantiation: CStruct.c:MVM_instance_have_user_threads
Unexecuted instantiation: MultiDimArray.c:MVM_instance_have_user_threads
Unexecuted instantiation: Decoder.c:MVM_instance_have_user_threads
Unexecuted instantiation: 6model.c:MVM_instance_have_user_threads
Unexecuted instantiation: bootstrap.c:MVM_instance_have_user_threads
Unexecuted instantiation: sc.c:MVM_instance_have_user_threads
Unexecuted instantiation: serialization.c:MVM_instance_have_user_threads
Unexecuted instantiation: compiler.c:MVM_instance_have_user_threads
Unexecuted instantiation: driver.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMException.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMThread.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMIter.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMContext.c:MVM_instance_have_user_threads
Unexecuted instantiation: SCRef.c:MVM_instance_have_user_threads
Unexecuted instantiation: Lexotic.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMCallCapture.c:MVM_instance_have_user_threads
Unexecuted instantiation: P6bigint.c:MVM_instance_have_user_threads
Unexecuted instantiation: NFA.c:MVM_instance_have_user_threads
Unexecuted instantiation: dump.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMDLLSym.c:MVM_instance_have_user_threads
MVMMultiCache.c:MVM_instance_have_user_threads
Line
Count
Source
379
3.87k
MVM_STATIC_INLINE MVMint32 MVM_instance_have_user_threads(MVMThreadContext *tc) {
380
3.87k
    return tc->instance->next_user_thread_id != 2;
381
3.87k
}
Unexecuted instantiation: MVMContinuation.c:MVM_instance_have_user_threads
Unexecuted instantiation: NativeCall.c:MVM_instance_have_user_threads
Unexecuted instantiation: CPointer.c:MVM_instance_have_user_threads
Unexecuted instantiation: CStr.c:MVM_instance_have_user_threads
Unexecuted instantiation: CArray.c:MVM_instance_have_user_threads
Unexecuted instantiation: profile.c:MVM_instance_have_user_threads
Unexecuted instantiation: nfg.c:MVM_instance_have_user_threads
Unexecuted instantiation: unicode.c:MVM_instance_have_user_threads
Unexecuted instantiation: normalize.c:MVM_instance_have_user_threads
Unexecuted instantiation: latin1.c:MVM_instance_have_user_threads
Unexecuted instantiation: utf16.c:MVM_instance_have_user_threads
Unexecuted instantiation: windows1252.c:MVM_instance_have_user_threads
Unexecuted instantiation: bigintops.c:MVM_instance_have_user_threads
Unexecuted instantiation: instrument.c:MVM_instance_have_user_threads
Unexecuted instantiation: utf8_c8.c:MVM_instance_have_user_threads
Unexecuted instantiation: heapsnapshot.c:MVM_instance_have_user_threads
Unexecuted instantiation: crossthreadwrite.c:MVM_instance_have_user_threads
Unexecuted instantiation: line_coverage.c:MVM_instance_have_user_threads
Unexecuted instantiation: moar.c:MVM_instance_have_user_threads
Unexecuted instantiation: mmap.c:MVM_instance_have_user_threads
Unexecuted instantiation: time.c:MVM_instance_have_user_threads
Unexecuted instantiation: sys.c:MVM_instance_have_user_threads
Unexecuted instantiation: emit_posix_x64.c:MVM_instance_have_user_threads
Unexecuted instantiation: threshold.c:MVM_instance_have_user_threads
Unexecuted instantiation: graph.c:MVM_instance_have_user_threads
Unexecuted instantiation: codegen.c:MVM_instance_have_user_threads
Unexecuted instantiation: candidate.c:MVM_instance_have_user_threads
Unexecuted instantiation: manipulate.c:MVM_instance_have_user_threads
Unexecuted instantiation: facts.c:MVM_instance_have_user_threads
Unexecuted instantiation: optimize.c:MVM_instance_have_user_threads
Unexecuted instantiation: deopt.c:MVM_instance_have_user_threads
Unexecuted instantiation: log.c:MVM_instance_have_user_threads
Unexecuted instantiation: HashAttrStore.c:MVM_instance_have_user_threads
Unexecuted instantiation: inline.c:MVM_instance_have_user_threads
Unexecuted instantiation: osr.c:MVM_instance_have_user_threads
Unexecuted instantiation: lookup.c:MVM_instance_have_user_threads
Unexecuted instantiation: compile.c:MVM_instance_have_user_threads
Unexecuted instantiation: decode_stream.c:MVM_instance_have_user_threads
Unexecuted instantiation: ascii.c:MVM_instance_have_user_threads
Unexecuted instantiation: utf8.c:MVM_instance_have_user_threads
Unexecuted instantiation: orchestrate.c:MVM_instance_have_user_threads
Unexecuted instantiation: ext.c:MVM_instance_have_user_threads
Unexecuted instantiation: nativecall.c:MVM_instance_have_user_threads
Unexecuted instantiation: nativecall_dyncall.c:MVM_instance_have_user_threads
Unexecuted instantiation: continuation.c:MVM_instance_have_user_threads
Unexecuted instantiation: intcache.c:MVM_instance_have_user_threads
fixedsizealloc.c:MVM_instance_have_user_threads
Line
Count
Source
379
32.1M
MVM_STATIC_INLINE MVMint32 MVM_instance_have_user_threads(MVMThreadContext *tc) {
380
32.1M
    return tc->instance->next_user_thread_id != 2;
381
32.1M
}
Unexecuted instantiation: regionalloc.c:MVM_instance_have_user_threads
Unexecuted instantiation: config.c:MVM_instance_have_user_threads
Unexecuted instantiation: dll.c:MVM_instance_have_user_threads
Unexecuted instantiation: allocation.c:MVM_instance_have_user_threads
Unexecuted instantiation: worklist.c:MVM_instance_have_user_threads
Unexecuted instantiation: roots.c:MVM_instance_have_user_threads
Unexecuted instantiation: collect.c:MVM_instance_have_user_threads
Unexecuted instantiation: gen2.c:MVM_instance_have_user_threads
Unexecuted instantiation: wb.c:MVM_instance_have_user_threads
Unexecuted instantiation: objectid.c:MVM_instance_have_user_threads
Unexecuted instantiation: finalize.c:MVM_instance_have_user_threads
Unexecuted instantiation: validation.c:MVM_instance_have_user_threads
Unexecuted instantiation: args.c:MVM_instance_have_user_threads
Unexecuted instantiation: exceptions.c:MVM_instance_have_user_threads
Unexecuted instantiation: interp.c:MVM_instance_have_user_threads
Unexecuted instantiation: threadcontext.c:MVM_instance_have_user_threads
Unexecuted instantiation: compunit.c:MVM_instance_have_user_threads
Unexecuted instantiation: bytecode.c:MVM_instance_have_user_threads
Unexecuted instantiation: frame.c:MVM_instance_have_user_threads
Unexecuted instantiation: callstack.c:MVM_instance_have_user_threads
Unexecuted instantiation: debug.c:MVM_instance_have_user_threads
Unexecuted instantiation: bytecodedump.c:MVM_instance_have_user_threads
Unexecuted instantiation: threads.c:MVM_instance_have_user_threads
Unexecuted instantiation: ops.c:MVM_instance_have_user_threads
Unexecuted instantiation: hll.c:MVM_instance_have_user_threads
Unexecuted instantiation: loadbytecode.c:MVM_instance_have_user_threads
Unexecuted instantiation: num.c:MVM_instance_have_user_threads
Unexecuted instantiation: coerce.c:MVM_instance_have_user_threads
Unexecuted instantiation: P6opaque.c:MVM_instance_have_user_threads
Unexecuted instantiation: parametric.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMString.c:MVM_instance_have_user_threads
Unexecuted instantiation: VMArray.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMHash.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMCFunction.c:MVM_instance_have_user_threads
Unexecuted instantiation: KnowHOWREPR.c:MVM_instance_have_user_threads
Unexecuted instantiation: KnowHOWAttributeREPR.c:MVM_instance_have_user_threads
Unexecuted instantiation: P6str.c:MVM_instance_have_user_threads
Unexecuted instantiation: containers.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMCode.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMOSHandle.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMCompUnit.c:MVM_instance_have_user_threads
Unexecuted instantiation: MVMStaticFrame.c:MVM_instance_have_user_threads
Unexecuted instantiation: P6int.c:MVM_instance_have_user_threads
Unexecuted instantiation: P6num.c:MVM_instance_have_user_threads
Unexecuted instantiation: Uninstantiable.c:MVM_instance_have_user_threads
Unexecuted instantiation: procops.c:MVM_instance_have_user_threads
Unexecuted instantiation: io.c:MVM_instance_have_user_threads
Unexecuted instantiation: eventloop.c:MVM_instance_have_user_threads
Unexecuted instantiation: syncfile.c:MVM_instance_have_user_threads
Unexecuted instantiation: syncstream.c:MVM_instance_have_user_threads
Unexecuted instantiation: syncpipe.c:MVM_instance_have_user_threads
Unexecuted instantiation: syncsocket.c:MVM_instance_have_user_threads
Unexecuted instantiation: fileops.c:MVM_instance_have_user_threads
Unexecuted instantiation: dirops.c:MVM_instance_have_user_threads
Unexecuted instantiation: callsite.c:MVM_instance_have_user_threads
Unexecuted instantiation: timers.c:MVM_instance_have_user_threads
Unexecuted instantiation: filewatchers.c:MVM_instance_have_user_threads
Unexecuted instantiation: signals.c:MVM_instance_have_user_threads
Unexecuted instantiation: asyncsocket.c:MVM_instance_have_user_threads
Unexecuted instantiation: asyncsocketudp.c:MVM_instance_have_user_threads
Unexecuted instantiation: reprs.c:MVM_instance_have_user_threads
Unexecuted instantiation: reprconv.c:MVM_instance_have_user_threads