Skip to content
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
1 change: 1 addition & 0 deletions src/mono/mono/eglib/glib.h
Original file line number Diff line number Diff line change
Expand Up @@ -1635,6 +1635,7 @@ __CAST_UTYPE_TO_STYPE(gunichar, gchar, CHAR_MIN, CHAR_MAX)

#define GLONG_TO_ULONG(v) G_CAST_TYPE_TO_TYPE(glong, gulong, v)
#define GULONG_TO_LONG(v) G_CAST_TYPE_TO_TYPE(gulong, glong, v)
#define GLONG_TO_UINT32(v) G_CAST_TYPE_TO_TYPE(glong, guint32, v)

#define GDOUBLE_TO_INT64(v) G_CAST_TYPE_TO_TYPE(gdouble, gint64, v)
#define GDOUBLE_TO_UINT64(v) G_CAST_TYPE_TO_TYPE(gdouble, guint64, v)
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