{"push_id":1151482002,"size":18,"distinct_size":18,"ref":"refs/heads/master","head":"14f8acced5bbb2f6d55fb3e7800382700bcc65eb","before":"0652b7069c2069ec52658c3dfc3e3fc4872bd77a","commits":[{"sha":"21e166b9aec8ffc0667d0eef0a3e501da7747616","author":{"name":"lateralusX","email":"308317f2d4f380e00648a1b21fac1e55216dc07a@gmail.com"},"message":"Fix for non GCC win x64 calling convention when passing empty structs over pinvoke.\n\nStandard C and C++ doesn't allow empty structs, empty structs will always have a\nsize of 1 byte. GCC have an extension to allow empty structs,\nhttps://gcc.gnu.org/onlinedocs/gcc/Empty-Structures.html. This cause a\nlittle dilemma since runtime build using none GCC compiler will not be\ncompatible with GCC build C libraries and the other way around. On platforms\nwhere empty structs has size of 1 byte it must be represented in call and cannot\nbe dropped.\n\nLibraries build using for example MSVC failed pinvoke call when empty\nstructs where used in pinvoke2.cs tests. The problem was that current\nimplementation dropped value types of size 0, eliminating them from the\ncall. Since MSVC implements C/C++ standard regarding empty structs (no extension used),\nthe function expected the parameter to be present, even if was not used.\nThis became a problem if the empty struct ended up in one of the 4 first\nparameters (backed by registers) since if excluded, wrong parameter gets\ninto wrong registers (the same will apply to stack slots as well). For example,\na C signature like this, (int a, EmptyStruct es, int b) will get lowered to the\nfollowing on MSVC win x64, a -> rcx, es -> rdx and b -> r8, but since caller\neliminated es from the call, the register assignment from the caller was\na -> rcx and b -> rdx causing a violation of the calling convention and\nerror in callee.\n\nThe fix is to make sure that empty structs are still represented on none GCC\ncompilers on windows x64 (MSVC), since they must be represented in the call\nto pinvoked methods. Fix will also use a const value of 0 to represent the value\npassed as the struct instead of loading a value from stack into register/stack slot,\nthis is inline with the value the .NET runtime passes to pinvoked method. The reason\nwhy we use a 0 instead of loading from stack is because a struct of size 0 is not explicitly\nrepresented on stack and will have garbage data if loaded. Since it’s an empty struct value\ntype there is no need to load anything, just represent it as 0 in the register/stack slot passed\nto caller.\n\nThere is also a case when returning an empty struct from a pinvoked method. Result will be returned\nas 0 in RAX by MSVC compiled libraries (or whatever value stored in the 1 byte representation).\nSince we have similar issues as above with empty structs of size 0 not explicitly represented on the\nstack, the store will be eliminated and not written back to stack by caller since an empty struct doesn’t\nrepresent any unique data.\n\nCalling convention for managed->managed code is kept intact since it is working as expected\nhandling the case with empty structs as input and return values.\n\nWith fix all pinvoke2.cs tests now pass running on Windows x64 JIT.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/21e166b9aec8ffc0667d0eef0a3e501da7747616"},{"sha":"27e164695941b9ec554dc9b890edaab5663abfe2","author":{"name":"Alexander Kyte","email":"98c1b9471a6ddb3b22a1b071b7dd7e5b59f3b075@fastmail.com"},"message":"[mobile_static] Removed use of StringAssert nunit helper.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/27e164695941b9ec554dc9b890edaab5663abfe2"},{"sha":"aaf8b8dbbf4b942075aadfd74b5afec9bdfb3df9","author":{"name":"lateralusX","email":"308317f2d4f380e00648a1b21fac1e55216dc07a@gmail.com"},"message":"Smaller adjustments based on PR feedback.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/aaf8b8dbbf4b942075aadfd74b5afec9bdfb3df9"},{"sha":"ac19ad8a47d9c92f3fa726eb2bfb43f82aa63917","author":{"name":"Alexander Kyte","email":"98c1b9471a6ddb3b22a1b071b7dd7e5b59f3b075@fastmail.com"},"message":"[mobile_static] Remove uses of deprecated Assertion.cs nunit helper.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/ac19ad8a47d9c92f3fa726eb2bfb43f82aa63917"},{"sha":"cd9dfae95226d7d202e41ee5851511ba3d102672","author":{"name":"Alexander Kyte","email":"98c1b9471a6ddb3b22a1b071b7dd7e5b59f3b075@fastmail.com"},"message":"[mobile_static] Remove use of CollectionAssert, missing in nunit-lite","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/cd9dfae95226d7d202e41ee5851511ba3d102672"},{"sha":"e5ccb30a0c10a26e98c53348514192f116b1b506","author":{"name":"Alexander Kyte","email":"98c1b9471a6ddb3b22a1b071b7dd7e5b59f3b075@fastmail.com"},"message":"[mobile_status] Fix nullable type ambiguity that nunit-lite complains about","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/e5ccb30a0c10a26e98c53348514192f116b1b506"},{"sha":"627fe81dc1c1f5f631dd244377fb16c15528d1c5","author":{"name":"Rolf Bjarne Kvinge","email":"7ef5491181287cce389555cfc27213f1f64295e9@xamarin.com"},"message":"[corlib] Fix tests for watchOS. (#3131)","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/627fe81dc1c1f5f631dd244377fb16c15528d1c5"},{"sha":"d74cf1d5dcc9ce6a65b028263486ab53fd756cf0","author":{"name":"Alexander Köplinger","email":"60b940881295e7d4ff86a588856331d68785e26e@outlook.com"},"message":"Merge pull request #3090 from alexanderkyte/remove_deprecated_assertions\n\n[mobile_static] Remove deprecated assertions","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/d74cf1d5dcc9ce6a65b028263486ab53fd756cf0"},{"sha":"a0866bdd3475cc20242edd6d26e89be4b3ec39e1","author":{"name":"Rodrigo Kumpera","email":"2a829dc4f95bd6ae5434a7621c17addb24a1b72b@gmail.com"},"message":"[jenkins] Make the concurrent GC the default on mainline archtectures.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/a0866bdd3475cc20242edd6d26e89be4b3ec39e1"},{"sha":"916fb1aa3ebb3975c4d475198501339de7a6300a","author":{"name":"Rodrigo Kumpera","email":"2a829dc4f95bd6ae5434a7621c17addb24a1b72b@gmail.com"},"message":"Merge pull request #3135 from kumpera/enable_conc_gc_on_mainline_archs\n\n[jenkins] Make the concurrent GC the default on mainline archtectures.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/916fb1aa3ebb3975c4d475198501339de7a6300a"},{"sha":"37bb54b503f3f8c948955c577687d4233e950cb5","author":{"name":"Mark Probst","email":"6cc0c9b0f094ce9337a8c3c964038a5083cb3942@gmail.com"},"message":"[sgen] Scatterplot option for gcpauseviz.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/37bb54b503f3f8c948955c577687d4233e950cb5"},{"sha":"13f87866a99e4f6def9902b024710d8e1b59f9b2","author":{"name":"Alexander Köplinger","email":"60b940881295e7d4ff86a588856331d68785e26e@outlook.com"},"message":"[metadata] Fix Windows gcc build break\n\nAfter 680fe21e6952ba6dc73ad89095b34ebb3a9bfc86 it failed with:\n\n```\ncoree.c: In function '_CorExeMain':\ncoree.c:200:2: error: implicit declaration of function 'mono_runtime_run_main_checked' [-Werror=implicit-function-declaration]\n  mono_runtime_run_main_checked (method, argc, argv, &error);\n  ^\n[...]\nMakefile:2137: recipe for target 'libmonoruntime_la-coree.lo' failed\nmake[3]: *** [libmonoruntime_la-coree.lo] Error 1\n```","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/13f87866a99e4f6def9902b024710d8e1b59f9b2"},{"sha":"4021e61ab1f57b7f62fac4b5adc06a71bc5df5c6","author":{"name":"Marek Safar","email":"b5bd7222367db8c89a3ff583927b45e3563f00d8@gmail.com"},"message":"[mcs] Bump ikvm to fix assembly unification rules","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/4021e61ab1f57b7f62fac4b5adc06a71bc5df5c6"},{"sha":"2774428b2d377ab515ce9fa3d9c32a192252c0e1","author":{"name":"Alexander Köplinger","email":"60b940881295e7d4ff86a588856331d68785e26e@outlook.com"},"message":"Merge pull request #3138 from akoeplinger/fix-win\n\n[metadata] Fix Windows gcc build break","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/2774428b2d377ab515ce9fa3d9c32a192252c0e1"},{"sha":"ea4ad8118539b954ba43e4cca99f6443bd5b2e71","author":{"name":"Alexander Köplinger","email":"60b940881295e7d4ff86a588856331d68785e26e@outlook.com"},"message":"[System] Make ServicePointTest.DnsRefreshTimeout test more reliable\n\nWe are still seeing quite rare failures of this test:\n\n```\nHostEntry should result in the same IPHostEntry object.\n  Expected: same as <System.Net.IPHostEntry>\n  But was:  <System.Net.IPHostEntry>\n\n+++++++++++++++++++\nSTACK TRACE:\nat MonoTests.System.Net.ServicePointTest.DnsRefreshTimeout () [0x00045] in /Users/builder/jenkins/workspace/test-mono-mainline/label/osx-i386/mcs/class/System/Test/System.Net/ServicePointTest.cs:228\nat (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)\nat System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in /Users/builder/jenkins/workspace/test-mono-mainline/label/osx-i386/mcs/class/corlib/System.Reflection/MonoMethod.cs:309\n```\n\nSince the test is only checking if expiring of the cached DNS lookup works, we don't really need to use an external domain name for this\nas \"localhost\" works just fine as well and typically doesn't trigger a DNS query which makes the test more reliable against network issues.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/ea4ad8118539b954ba43e4cca99f6443bd5b2e71"},{"sha":"19880afc7a1bb3339e790897884fff473ba5914f","author":{"name":"Marek Safar","email":"b5bd7222367db8c89a3ff583927b45e3563f00d8@gmail.com"},"message":"[mcs] Recognize indexer with accessors using different names. Fixes #41602","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/19880afc7a1bb3339e790897884fff473ba5914f"},{"sha":"975fc2134131e0c2e6c689df0c7d2d4a4ce62b00","author":{"name":"monojenkins","email":"4499cda2bcc6bb50206f66afce9cb024af676d48@xamarin.com"},"message":"Merge pull request #3139 from akoeplinger/dns-test\n\n[System] Make ServicePointTest.DnsRefreshTimeout test more reliable\n\nWe are still seeing quite rare failures of this test:\r\n\r\n```\r\nHostEntry should result in the same IPHostEntry object.\r\n  Expected: same as <System.Net.IPHostEntry>\r\n  But was:  <System.Net.IPHostEntry>\r\n\r\n+++++++++++++++++++\r\nSTACK TRACE:\r\nat MonoTests.System.Net.ServicePointTest.DnsRefreshTimeout () [0x00045] in /Users/builder/jenkins/workspace/test-mono-mainline/label/osx-i386/mcs/class/System/Test/System.Net/ServicePointTest.cs:228\r\nat (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&)\r\nat System.Reflection.MonoMethod.Invoke (System.Object obj, System.Reflection.BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00038] in /Users/builder/jenkins/workspace/test-mono-mainline/label/osx-i386/mcs/class/corlib/System.Reflection/MonoMethod.cs:309\r\n```\r\n\r\nSince the test is only checking if expiring of the cached DNS lookup works, we don't really need to use an external domain name for this as \"localhost\" works just fine as well and typically doesn't trigger a DNS query which makes the test more reliable against network issues.\r\n\r\n@monojenkins merge","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/975fc2134131e0c2e6c689df0c7d2d4a4ce62b00"},{"sha":"14f8acced5bbb2f6d55fb3e7800382700bcc65eb","author":{"name":"Johan Lorensson","email":"308317f2d4f380e00648a1b21fac1e55216dc07a@gmail.com"},"message":"Merge pull request #3085 from lateralusX/jlorenss/win-x64-pinvoke-empty-struct\n\nFix for non GCC win x64 calling convention when passing empty structs over pinvoke.","distinct":true,"url":"https://api.github.com/repos/Unity-Technologies/mono/commits/14f8acced5bbb2f6d55fb3e7800382700bcc65eb"}]}
{"actor":{"display_login":"joncham"}}