Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Mono]: Add dotnet-gcdump support. #88634

Merged
merged 10 commits into from
Jul 16, 2023
28 changes: 25 additions & 3 deletions src/coreclr/scripts/genEventPipe.py
Original file line number Diff line number Diff line change
Expand Up @@ -662,8 +662,16 @@ def getMonoEventPipeHelperFileImplPrefix():
size_t *size,
bool *fixed_buffer)
{
if (!value)
if (!value || value_len == 0) {
value_len = sizeof (ep_char16_t);
if ((value_len + *offset) > *size)
ep_raise_error_if_nok (resize_buffer (buffer, size, *offset, *size + value_len, fixed_buffer));
(*buffer) [*offset] = 0;
(*offset)++;
(*buffer) [*offset] = 0;
(*offset)++;
return true;
}

GFixedBufferCustomAllocatorData custom_alloc_data;
custom_alloc_data.buffer = *buffer + *offset;
Expand Down Expand Up @@ -695,9 +703,23 @@ def getMonoEventPipeHelperFileImplPrefix():
bool *fixed_buffer)
{
if (!value)
return true;
value_len = 0;

if ((value_len + 1 + *offset) > *size)
ep_raise_error_if_nok (resize_buffer (buffer, size, *offset, *size + value_len + 1, fixed_buffer));

if (value_len != 0) {
memcpy (*buffer + *offset, value, value_len);
*offset += value_len;
}

return write_buffer ((const uint8_t *)value, (value_len + 1) * sizeof(*value), buffer, offset, size, fixed_buffer);
(*buffer) [*offset] = 0;
(*offset)++;

return true;

ep_on_error:
return false;
}

"""
Expand Down
6 changes: 3 additions & 3 deletions src/coreclr/scripts/genEventing.py
Original file line number Diff line number Diff line change
Expand Up @@ -731,7 +731,7 @@ def generatePlatformIndependentFiles(sClrEtwAllMan, incDir, etmDummyFile, extern

eventpipeProviderCtxName = providerSymbol + "_EVENTPIPE_Context"
if is_windows:
Clrallevents.write(('constexpr ' if target_cpp else '') + 'EVENTPIPE_TRACE_CONTEXT ' + eventpipeProviderCtxName + ' = { W("' + providerName + '"), 0, false, 0 };\n')
Clrallevents.write(('constexpr ' if target_cpp else 'static const ') + 'EVENTPIPE_TRACE_CONTEXT ' + eventpipeProviderCtxName + ' = { W("' + providerName + '"), 0, false, 0 };\n')

if not is_windows and not write_xplatheader:
Clrallevents.write('__attribute__((weak)) EVENTPIPE_TRACE_CONTEXT ' + eventpipeProviderCtxName + ' = { W("' + providerName + '"), 0, false, 0 };\n')
Expand Down Expand Up @@ -782,14 +782,14 @@ def generatePlatformIndependentFiles(sClrEtwAllMan, incDir, etmDummyFile, extern
symbolName = eventNode.getAttribute('symbol')
keywords = eventNode.getAttribute('keywords')
level = convertToLevelId(levelName)
Clrproviders.write(("constexpr " if target_cpp else "const ") + "EVENT_DESCRIPTOR " + symbolName + " = { " + str(level) + ", " + hex(getKeywordsMaskCombined(keywords, keywordsToMask)) + " };\n")
Clrproviders.write(("constexpr " if target_cpp else "static const ") + "EVENT_DESCRIPTOR " + symbolName + " = { " + str(level) + ", " + hex(getKeywordsMaskCombined(keywords, keywordsToMask)) + " };\n")

allProviders.append("&" + providerSymbol + "_LTTNG_Context")

# define and initialize runtime providers' DOTNET_TRACE_CONTEXT depending on the platform
if not is_windows:
Clrproviders.write('#define NB_PROVIDERS ' + str(nbProviders) + '\n')
Clrproviders.write(('constexpr ' if target_cpp else 'const ') + 'LTTNG_TRACE_CONTEXT * ALL_LTTNG_PROVIDERS_CONTEXT[NB_PROVIDERS] = { ')
Clrproviders.write(('constexpr ' if target_cpp else 'static const ') + 'LTTNG_TRACE_CONTEXT * ALL_LTTNG_PROVIDERS_CONTEXT[NB_PROVIDERS] = { ')
Clrproviders.write(', '.join(allProviders))
Clrproviders.write(' };\n')

Expand Down
3 changes: 1 addition & 2 deletions src/mono/mono/component/event_pipe.c
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,6 @@
#include <emscripten/emscripten.h>
#endif

extern void ep_rt_mono_component_init (void);
static bool _event_pipe_component_inited = false;

struct _EventPipeProviderConfigurationNative {
Expand Down Expand Up @@ -127,7 +126,7 @@ static MonoComponentEventPipe fn_table = {
&ep_provider_add_event,
&event_pipe_get_session_info,
&event_pipe_thread_ctrl_activity_id,
&ep_rt_mono_write_event_ee_startup_start,
&ep_rt_write_event_ee_startup_start,
&ep_rt_write_event_threadpool_worker_thread_start,
&ep_rt_write_event_threadpool_worker_thread_stop,
&ep_rt_write_event_threadpool_worker_thread_wait,
Expand Down
4 changes: 2 additions & 2 deletions src/mono/mono/eventpipe/ds-rt-mono.h
Original file line number Diff line number Diff line change
Expand Up @@ -214,8 +214,8 @@ static
uint32_t
ds_rt_set_environment_variable (const ep_char16_t *name, const ep_char16_t *value)
{
gchar *nameNarrow = ep_rt_utf16le_to_utf8_string (name, ep_rt_utf16_string_len (name));
gchar *valueNarrow = ep_rt_utf16le_to_utf8_string (value, ep_rt_utf16_string_len (value));
gchar *nameNarrow = ep_rt_utf16le_to_utf8_string (name, -1);
gchar *valueNarrow = ep_rt_utf16le_to_utf8_string (value, -1);

gboolean success = g_setenv(nameNarrow, valueNarrow, true);

Expand Down
Loading
Loading