[2019-12] [merp] Capture Environment.FailFast message in crash report (#18921)
[mono-project.git] / mono / utils / mono-state.h
blob994755a8e9b4ddf647b07a22ba68abbb6058b6af
1 /**
2 * \file
3 * Support for cooperative creation of unmanaged state dumps
5 * Author:
6 * Alexander Kyte (alkyte@microsoft.com)
8 * (C) 2018 Microsoft, Inc.
11 #ifndef __MONO_UTILS_NATIVE_STATE__
12 #define __MONO_UTILS_NATIVE_STATE__
14 #ifndef DISABLE_CRASH_REPORTING
16 #include <mono/utils/mono-publib.h>
17 #include <mono/utils/mono-context.h>
18 #include <mono/metadata/threads-types.h>
19 #include <mono/utils/json.h>
21 #define MONO_NATIVE_STATE_PROTOCOL_VERSION "0.0.6"
23 typedef enum {
24 MonoSummaryNone = 0,
25 MonoSummarySetup,
26 MonoSummarySuspendHandshake,
27 MonoSummaryUnmanagedStacks,
28 MonoSummaryManagedStacks,
29 MonoSummaryStateWriter,
30 MonoSummaryStateWriterDone,
31 MonoSummaryMerpWriter,
32 MonoSummaryMerpInvoke,
33 MonoSummaryCleanup,
34 MonoSummaryDone,
36 MonoSummaryDoubleFault
37 } MonoSummaryStage;
39 typedef struct {
40 char *output_str;
41 int len;
42 int allocated_len;
43 int indent;
44 } MonoStateWriter;
46 typedef struct {
47 gpointer *mem;
48 gsize size;
50 // File Information
51 gint handle;
52 gint64 tag;
53 } MonoStateMem;
55 // Logging
56 gboolean
57 mono_summarize_set_timeline_dir (const char *directory);
59 void
60 mono_summarize_timeline_start (void);
62 void
63 mono_summarize_timeline_phase_log (MonoSummaryStage stage);
65 void
66 mono_summarize_double_fault_log (void);
68 MonoSummaryStage
69 mono_summarize_timeline_read_level (const char *directory, gboolean clear);
71 // Enable checked-build assertions on summary workflow
72 // Turns all potential hangs into instant faults
73 void
74 mono_summarize_toggle_assertions (gboolean enable);
76 // Json State Writer
79 * These use static memory, can only be called once
82 void
83 mono_summarize_native_state_begin (MonoStateWriter *writer, gchar *mem, int size);
85 char *
86 mono_summarize_native_state_end (MonoStateWriter *writer);
88 void
89 mono_summarize_native_state_add_thread (MonoStateWriter *writer, MonoThreadSummary *thread, MonoContext *ctx, gboolean crashing_thread);
92 * These use memory from the caller
94 void
95 mono_state_writer_init (MonoStateWriter *writer, gchar *output_str, int len);
97 void
98 mono_native_state_init (MonoStateWriter *writer);
100 char *
101 mono_native_state_emit (MonoStateWriter *writer);
103 char *
104 mono_native_state_free (MonoStateWriter *writer, gboolean free_data);
106 void
107 mono_native_state_add_thread (MonoStateWriter *writer, MonoThreadSummary *thread, MonoContext *ctx, gboolean first_thread, gboolean crashing_thread);
109 void
110 mono_crash_dump (const char *jsonFile, MonoStackHash *hashes);
112 // Signal-safe file allocators
114 gboolean
115 mono_state_alloc_mem (MonoStateMem *mem, long tag, size_t size);
117 void
118 mono_state_free_mem (MonoStateMem *mem);
120 char*
121 mono_crash_save_failfast_msg (char *msg);
123 const char*
124 mono_crash_get_failfast_msg (void);
126 #endif // DISABLE_CRASH_REPORTING
128 // Dump context functions (enter/leave)
130 gboolean
131 mono_dump_start (void);
132 gboolean
133 mono_dump_complete (void);
135 #endif // MONO_UTILS_NATIVE_STATE