diff --git a/eng/pipelines/libraries/helix-queues-setup.yml b/eng/pipelines/libraries/helix-queues-setup.yml index 2c7897748380f8..6e7c8c386ad2a0 100644 --- a/eng/pipelines/libraries/helix-queues-setup.yml +++ b/eng/pipelines/libraries/helix-queues-setup.yml @@ -39,7 +39,7 @@ jobs: # Linux arm64 - ${{ if eq(parameters.platform, 'Linux_arm64') }}: - ${{ if or(eq(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}: - - (Ubuntu.2110.Arm64.Open)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-21.10-helix-arm64v8-20211116135000-0f8d97e + - (Ubuntu.2204.Arm64.Open)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-arm64v8-20220504035342-1b9461f - ${{ if or(ne(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}: - (Ubuntu.1804.ArmArch.Open)Ubuntu.1804.ArmArch.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-18.04-helix-arm64v8-20220427172132-97d8652 @@ -63,14 +63,14 @@ jobs: - RedHat.7.Amd64.Open - SLES.15.Amd64.Open - (Fedora.34.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-34-helix-20220523142223-4f64125 - - (Ubuntu.2110.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-21.10-helix-amd64-20211116135132-0f8d97e + - (Ubuntu.2204.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-amd64-20220504035722-1b9461f - (Debian.10.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-10-helix-amd64-bfcd90a-20200121150006 - ${{ if or(ne(parameters.jobParameters.testScope, 'outerloop'), ne(parameters.jobParameters.runtimeFlavor, 'mono')) }}: - ${{ if or(eq(parameters.jobParameters.isExtraPlatforms, true), eq(parameters.jobParameters.includeAllPlatforms, true)) }}: - (Centos.8.Amd64.Open)Ubuntu.1604.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:centos-8-helix-20201229003624-c1bf759 - SLES.15.Amd64.Open - (Fedora.34.Amd64.Open)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:fedora-34-helix-20220523142223-4f64125 - - (Ubuntu.2110.Amd64.Open)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-21.04-helix-amd64-20210922170909-34a2d72 + - (Ubuntu.2204.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:ubuntu-22.04-helix-amd64-20220504035722-1b9461f - (Debian.11.Amd64.Open)Ubuntu.1804.Amd64.Open@mcr.microsoft.com/dotnet-buildtools/prereqs:debian-11-helix-amd64-20210304164428-5a7c380 - (Mariner.1.0.Amd64.Open)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:cbl-mariner-1.0-helix-20210528192219-92bf620 - (openSUSE.15.2.Amd64.Open)ubuntu.1604.amd64.open@mcr.microsoft.com/dotnet-buildtools/prereqs:opensuse-15.2-helix-amd64-20211018152525-9cc02fe diff --git a/src/coreclr/scripts/genEventPipe.py b/src/coreclr/scripts/genEventPipe.py index 2f46735cc43e2c..fa737eaa15360a 100644 --- a/src/coreclr/scripts/genEventPipe.py +++ b/src/coreclr/scripts/genEventPipe.py @@ -239,6 +239,20 @@ def generateClrEventPipeWriteEventsImpl( def generateWriteEventBody(template, providerName, eventName, runtimeFlavor): + def winTypeToFixedWidthType(t): + return {'win:Int8': 'int8_t', + 'win:UInt8': 'uint8_t', + 'win:Int16': 'int16_t', + 'win:UInt16': 'uint16_t', + 'win:Int32': 'int32_t', + 'win:UInt32': 'uint32_t', + 'win:Int64': 'int64_t', + 'win:UInt64': 'uint64_t', + 'win:Pointer': 'uintptr_t', + 'win:AnsiString': 'UTF8String', + 'win:UnicodeString': 'UTF16String' + }[t] + fnSig = template.signature pack_list = [] @@ -267,9 +281,33 @@ def generateWriteEventBody(template, providerName, eventName, runtimeFlavor): if template.name in specialCaseSizes and paramName in specialCaseSizes[template.name]: size = "(int)(%s)" % specialCaseSizes[template.name][paramName] if runtimeFlavor.mono: + pack_list.append("#if BIGENDIAN") + pack_list.append(" const uint8_t *valuePtr = %s;" % paramName) + pack_list.append(" for (uint32_t i = 0; i < %s; ++i) {" % template.structs[paramName]) + types = [winTypeToFixedWidthType(t) for t in template.structTypes[paramName]] + for t in set(types) - {"UTF8String", "UTF16String"}: + pack_list.append(" %(type)s value_%(type)s;" % {'type': t}) + if "UTF8String" in types or "UTF16String" in types: + pack_list.append(" size_t value_len;") + for t in types: + if t == "UTF8String": + pack_list.append(" value_len = strlen((const char *)valuePtr);") + pack_list.append(" success &= write_buffer_string_utf8_t((const ep_char8_t *)valuePtr, value_len, &buffer, &offset, &size, &fixedBuffer);") + pack_list.append(" valuePtr += value_len + 1;") + elif t == "UTF16String": + pack_list.append(" value_len = strlen((const char *)valuePtr);") + pack_list.append(" success &= write_buffer_string_utf8_to_utf16_t((const ep_char8_t *)valuePtr, value_len, &buffer, &offset, &size, &fixedBuffer);") + pack_list.append(" valuePtr += value_len + 1;") + else: + pack_list.append(" memcpy (&value_%(type)s, valuePtr, sizeof (value_%(type)s));" % {'type': t}) + pack_list.append(" valuePtr += sizeof (%s);" % t) + pack_list.append(" success &= write_buffer_%(type)s (value_%(type)s, &buffer, &offset, &size, &fixedBuffer);" % {'type': t}) + pack_list.append(" }") + pack_list.append("#else") pack_list.append( " success &= write_buffer((const uint8_t *)%s, %s, &buffer, &offset, &size, &fixedBuffer);" % (paramName, size)) + pack_list.append("#endif // BIGENDIAN") emittedWriteToBuffer = True elif runtimeFlavor.coreclr: pack_list.append( @@ -283,9 +321,16 @@ def generateWriteEventBody(template, providerName, eventName, runtimeFlavor): if template.name in specialCaseSizes and paramName in specialCaseSizes[template.name]: size = "(int)(%s)" % specialCaseSizes[template.name][paramName] if runtimeFlavor.mono: + t = winTypeToFixedWidthType(parameter.winType) + pack_list.append("#if BIGENDIAN") + pack_list.append(" for (uint32_t i = 0; i < %s; ++i) {" % template.arrays[paramName]) + pack_list.append(" success &= write_buffer_%(type)s (%(name)s[i], &buffer, &offset, &size, &fixedBuffer);" % {'name': paramName, 'type': t}) + pack_list.append(" }") + pack_list.append("#else") pack_list.append( " success &= write_buffer((const uint8_t *)%s, %s, &buffer, &offset, &size, &fixedBuffer);" % (paramName, size)) + pack_list.append("#endif // BIGENDIAN") emittedWriteToBuffer = True elif runtimeFlavor.coreclr: pack_list.append( @@ -304,13 +349,13 @@ def generateWriteEventBody(template, providerName, eventName, runtimeFlavor): emittedWriteToBuffer = True elif parameter.winType == "win:AnsiString" and runtimeFlavor.mono: pack_list.append( - " success &= write_buffer_string_utf8_t(%s, &buffer, &offset, &size, &fixedBuffer);" % - (parameter.name,)) + " success &= write_buffer_string_utf8_t(%s, strlen((const char *)%s), &buffer, &offset, &size, &fixedBuffer);" % + (parameter.name, parameter.name)) emittedWriteToBuffer = True elif parameter.winType == "win:UnicodeString" and runtimeFlavor.mono: pack_list.append( - " success &= write_buffer_string_utf8_to_utf16_t(%s, &buffer, &offset, &size, &fixedBuffer);" % - (parameter.name,)) + " success &= write_buffer_string_utf8_to_utf16_t(%s, strlen((const char *)%s), &buffer, &offset, &size, &fixedBuffer);" % + (parameter.name, parameter.name)) emittedWriteToBuffer = True elif parameter.winType == "win:UInt8" and runtimeFlavor.mono: pack_list.append( @@ -558,6 +603,7 @@ def getMonoEventPipeHelperFileImplPrefix(): bool write_buffer_string_utf8_to_utf16_t ( const ep_char8_t *value, + size_t value_len, uint8_t **buffer, size_t *offset, size_t *size, @@ -566,6 +612,7 @@ def getMonoEventPipeHelperFileImplPrefix(): bool write_buffer_string_utf8_t ( const ep_char8_t *value, + size_t value_len, uint8_t **buffer, size_t *offset, size_t *size, @@ -640,6 +687,7 @@ def getMonoEventPipeHelperFileImplPrefix(): bool write_buffer_string_utf8_to_utf16_t ( const ep_char8_t *value, + size_t value_len, uint8_t **buffer, size_t *offset, size_t *size, @@ -653,12 +701,12 @@ def getMonoEventPipeHelperFileImplPrefix(): custom_alloc_data.buffer_size = *size - *offset; custom_alloc_data.req_buffer_size = 0; - if (!g_utf8_to_utf16_custom_alloc (value, -1, NULL, NULL, g_fixed_buffer_custom_allocator, &custom_alloc_data, NULL)) { + if (!g_utf8_to_utf16le_custom_alloc (value, (glong)value_len, NULL, NULL, g_fixed_buffer_custom_allocator, &custom_alloc_data, NULL)) { ep_raise_error_if_nok (resize_buffer (buffer, size, *offset, *size + custom_alloc_data.req_buffer_size, fixed_buffer)); custom_alloc_data.buffer = *buffer + *offset; custom_alloc_data.buffer_size = *size - *offset; custom_alloc_data.req_buffer_size = 0; - ep_raise_error_if_nok (g_utf8_to_utf16_custom_alloc (value, -1, NULL, NULL, g_fixed_buffer_custom_allocator, &custom_alloc_data, NULL) != NULL); + ep_raise_error_if_nok (g_utf8_to_utf16le_custom_alloc (value, (glong)value_len, NULL, NULL, g_fixed_buffer_custom_allocator, &custom_alloc_data, NULL) != NULL); } *offset += custom_alloc_data.req_buffer_size; @@ -671,6 +719,7 @@ def getMonoEventPipeHelperFileImplPrefix(): bool write_buffer_string_utf8_t ( const ep_char8_t *value, + size_t value_len, uint8_t **buffer, size_t *offset, size_t *size, @@ -679,10 +728,6 @@ def getMonoEventPipeHelperFileImplPrefix(): if (!value) return true; - size_t value_len = 0; - while (value [value_len]) - value_len++; - return write_buffer ((const uint8_t *)value, (value_len + 1) * sizeof(*value), buffer, offset, size, fixed_buffer); } @@ -802,6 +847,7 @@ def getMonoEventPipeImplFilePrefix(): bool write_buffer_string_utf8_t ( const ep_char8_t *value, + size_t value_len, uint8_t **buffer, size_t *offset, size_t *size, @@ -810,6 +856,7 @@ def getMonoEventPipeImplFilePrefix(): bool write_buffer_string_utf8_to_utf16_t ( const ep_char8_t *value, + size_t value_len, uint8_t **buffer, size_t *offset, size_t *size, @@ -851,6 +898,7 @@ def getMonoEventPipeImplFilePrefix(): size_t *size, bool *fixed_buffer) { + value = ep_rt_val_uint16_t (value); return write_buffer ((const uint8_t *)&value, sizeof (uint16_t), buffer, offset, size, fixed_buffer); } @@ -864,6 +912,7 @@ def getMonoEventPipeImplFilePrefix(): size_t *size, bool *fixed_buffer) { + value = ep_rt_val_uint32_t (value); return write_buffer ((const uint8_t *)&value, sizeof (uint32_t), buffer, offset, size, fixed_buffer); } @@ -877,6 +926,7 @@ def getMonoEventPipeImplFilePrefix(): size_t *size, bool *fixed_buffer) { + value = ep_rt_val_int32_t (value); return write_buffer ((const uint8_t *)&value, sizeof (int32_t), buffer, offset, size, fixed_buffer); } @@ -890,6 +940,7 @@ def getMonoEventPipeImplFilePrefix(): size_t *size, bool *fixed_buffer) { + value = ep_rt_val_uint64_t (value); return write_buffer ((const uint8_t *)&value, sizeof (uint64_t), buffer, offset, size, fixed_buffer); } @@ -903,6 +954,7 @@ def getMonoEventPipeImplFilePrefix(): size_t *size, bool *fixed_buffer) { + value = ep_rt_val_int64_t (value); return write_buffer ((const uint8_t *)&value, sizeof (int64_t), buffer, offset, size, fixed_buffer); } @@ -916,6 +968,12 @@ def getMonoEventPipeImplFilePrefix(): size_t *size, bool *fixed_buffer) { +#if BIGENDIAN + uint64_t value_as_uint64_t; + memcpy (&value_as_uint64_t, &value, sizeof (uint64_t)); + value_as_uint64_t = ep_rt_val_uint64_t (value_as_uint64_t); + memcpy (&value, &value_as_uint64_t, sizeof (uint64_t)); +#endif return write_buffer ((const uint8_t *)&value, sizeof (double), buffer, offset, size, fixed_buffer); } @@ -942,6 +1000,7 @@ def getMonoEventPipeImplFilePrefix(): size_t *size, bool *fixed_buffer) { + value = ep_rt_val_uintptr_t (value); return write_buffer ((const uint8_t *)&value, sizeof (uintptr_t), buffer, offset, size, fixed_buffer); } diff --git a/src/coreclr/scripts/genEventing.py b/src/coreclr/scripts/genEventing.py index e557a8e8aabb8a..a711373d2d4b32 100644 --- a/src/coreclr/scripts/genEventing.py +++ b/src/coreclr/scripts/genEventing.py @@ -188,10 +188,11 @@ class Template: def __repr__(self): return "