<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
No, I think the change here is germane:</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<br>
</div>
<div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space: pre;">
</span>switch (mono_class_enum_basetype (enumc)->type) {</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_U1:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_I1:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>mono_array_set (info->values, gchar, j, *p);</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>break;</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_CHAR:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_U2:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_I2:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>mono_array_set (info->values, gint16, j, read16 (p));</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>break;</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_U4:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_I4:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>mono_array_set (info->values, gint32, j, read32 (p));</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>break;</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_U8:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>case MONO_TYPE_I8:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>mono_array_set (info->values, gint64, j, read64 (p));</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>break;</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>default:</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>g_error ("Implement type 0x%02x in get_enum_info", mono_class_enum_basetype (enumc)->type);</font></div>
<div><font face="Calibri,sans-serif">-<span class="Apple-tab-span" style="white-space:pre">
</span>}</font></div>
<div><font face="Calibri,sans-serif">+</font></div>
<div><font face="Calibri,sans-serif">+<span class="Apple-tab-span" style="white-space:pre">
</span>field_value = read_enum_value (p, base_type);</font></div>
<div><font face="Calibri,sans-serif">+<span class="Apple-tab-span" style="white-space:pre">
</span>mono_array_set (*values, guint64, j, field_value);</font></div>
<div><font face="Calibri,sans-serif">+</font></div>
<div><font face="Calibri,sans-serif">+<span class="Apple-tab-span" style="white-space:pre">
</span>if (previous_value > field_value)</font></div>
<div><font face="Calibri,sans-serif">+<span class="Apple-tab-span" style="white-space:pre">
</span>sorted = FALSE;</font></div>
<div><font face="Calibri,sans-serif">+</font></div>
<div><font face="Calibri,sans-serif">+<span class="Apple-tab-span" style="white-space: pre;">
</span>previous_value = field_value;</font></div>
</div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div><font face="Calibri,sans-serif">Note the use of read16/read32/read64 which are defined in mono-endian.h:</font></div>
<div><font face="Calibri,sans-serif"><br>
</font></div>
<div>
<p style="margin: 0px; font-size: 14px; font-family: 'Courier New'; color: rgb(212, 57, 209); background-color: rgb(254, 254, 229);">
#define read16(x) GUINT16_FROM_LE (*((<span style="color: #31bb24">const</span> guint16 *) (x)))</p>
<p style="margin: 0px; font-size: 14px; font-family: 'Courier New'; color: rgb(212, 57, 209); background-color: rgb(254, 254, 229);">
#define read32(x) GUINT32_FROM_LE (*((<span style="color: #31bb24">const</span> guint32 *) (x)))</p>
<p style="margin: 0px; font-size: 14px; font-family: 'Courier New'; color: rgb(212, 57, 209); background-color: rgb(254, 254, 229);">
#define read64(x) GUINT64_FROM_LE (*((<span style="color: #31bb24">const</span> guint64 *) (x)))</p>
</div>
<div><br>
</div>
<div style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<br>
</div>
<span id="OLK_SRC_BODY_SECTION" style="color: rgb(0, 0, 0); font-family: Calibri, sans-serif; font-size: 14px;">
<div style="font-family:Calibri; font-size:11pt; text-align:left; color:black; BORDER-BOTTOM: medium none; BORDER-LEFT: medium none; PADDING-BOTTOM: 0in; PADDING-LEFT: 0in; PADDING-RIGHT: 0in; BORDER-TOP: #b5c4df 1pt solid; BORDER-RIGHT: medium none; PADDING-TOP: 3pt">
<span style="font-weight:bold">From: </span>Marek Safar <<a href="mailto:marek.safar@gmail.com">marek.safar@gmail.com</a>><br>
<span style="font-weight:bold">Date: </span>Tuesday, March 10, 2015 at 1:44 PM<br>
<span style="font-weight:bold">To: </span>Neale Ferguson <<a href="mailto:neale@sinenomine.net">neale@sinenomine.net</a>><br>
<span style="font-weight:bold">Cc: </span>Mono-Devel <<a href="mailto:mono-devel-list@lists.ximian.com">mono-devel-list@lists.ximian.com</a>><br>
<span style="font-weight:bold">Subject: </span>Re: [Mono-dev] Strange enum issue<br>
</div>
<div><br>
</div>
<div>
<div>
<div dir="ltr">Hi Neale,<br>
<div class="gmail_extra">
<div class="gmail_quote">
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<br>
ves_icall_System_Enum_GetEnumValuesAndNames.3229: 0. field=System_Runtime<br>
value=0<br>
ves_icall_System_Enum_GetEnumValuesAndNames.3229: 1.<br>
field=System_Runtime_InteropServices_WindowsRuntime value=16777216<br>
ves_icall_System_Enum_GetEnumValuesAndNames.3229: 2.<br>
field=System_ObjectModel value=33554432<br>
ves_icall_System_Enum_GetEnumValuesAndNames.3229: 3.<br>
field=System_Runtime_WindowsRuntime value=50331648<br>
ves_icall_System_Enum_GetEnumValuesAndNames.3229: 4.<br>
field=System_Runtime_WindowsRuntime_UI_Xaml value=67108864<br>
ves_icall_System_Enum_GetEnumValuesAndNames.3229: 5. field=Count<br>
value=83886080<br>
<br>
Note 16777216 is hex 10000000. Now to find out how that value gets placed<br>
there and to do some byte swapping on it.<br>
</blockquote>
<div><br>
</div>
<div>You are probably looking for <a href="https://github.com/mono/mono/blob/master/mono/metadata/icall.c#L2961">https://github.com/mono/mono/blob/master/mono/metadata/icall.c#L2961</a>. There has been no endian changes there for years but due to different
 codepath this is now hit more often before.</div>
<div><br>
</div>
<div>Marek</div>
<div><br>
</div>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
P.S. I am wondering if it would be worth it to create a routine or more in<br>
icall.c to do the byte swap for 2/4/8 byte integers rather than coding up<br>
clumsy stuff in managed code.<br>
<span class="im"><br>
On 3/10/15, 3:01 PM, "Robert Jordan" <<a href="mailto:robertj@gmx.net">robertj@gmx.net</a>> wrote:<br>
<br>
</span><span class="im">>There was a recent commit which added MS' reference source Enum<br>
>support to Mono:<br>
><br>
><a href="https://github.com/mono/mono/commit/65dba595eaea2c871d1f72fbdc04f6440350af" target="_blank">https://github.com/mono/mono/commit/65dba595eaea2c871d1f72fbdc04f6440350af</a><br>
>96<br>
><br>
>Maybe it's an endian-related issue.<br>
<br>
</span>
<div class="">
<div class="h5">_______________________________________________<br>
Mono-devel-list mailing list<br>
<a href="mailto:Mono-devel-list@lists.ximian.com">Mono-devel-list@lists.ximian.com</a><br>
<a href="http://lists.ximian.com/mailman/listinfo/mono-devel-list" target="_blank">http://lists.ximian.com/mailman/listinfo/mono-devel-list</a><br>
</div>
</div>
</blockquote>
</div>
<br>
</div>
</div>
</div>
</div>
</span>
</body>
</html>