Fix RhGetCodeTarget for Unix x64 (#5168)

This commit is contained in:
Jan Kotas 2017-12-29 19:08:36 -08:00 коммит произвёл GitHub
Родитель ab4222fba0
Коммит 39a8b6ac90
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
2 изменённых файлов: 10 добавлений и 6 удалений

Просмотреть файл

@ -448,8 +448,15 @@ COOP_PINVOKE_HELPER(UInt8 *, RhGetCodeTarget, (UInt8 * pCodeOrg))
#ifdef _TARGET_AMD64_
UInt8 * pCode = pCodeOrg;
// is this "add rcx,8"?
if (pCode[0] == 0x48 && pCode[1] == 0x83 && pCode[2] == 0xc1 && pCode[3] == 0x08)
// is this "add rcx/rdi,8"?
if (pCode[0] == 0x48 &&
pCode[1] == 0x83 &&
#ifdef UNIX_AMD64_ABI
pCode[2] == 0xc7 &&
#else
pCode[2] == 0xc1 &&
#endif
pCode[3] == 0x08)
{
// unboxing sequence
unboxingStub = true;

Просмотреть файл

@ -358,14 +358,11 @@ internal class ReflectionTest
Type byRefLikeType = GetTestType(nameof(TestByRefLikeTypeMethod), nameof(ByRefLike));
MethodInfo toStringMethod = byRefLikeType.GetMethod("ToString");
/*var toString = (ToStringDelegate)*/toStringMethod.CreateDelegate(typeof(ToStringDelegate));
var toString = (ToStringDelegate)toStringMethod.CreateDelegate(typeof(ToStringDelegate));
// Doesn't work on Unix: https://github.com/dotnet/corert/issues/4379
#if false
ByRefLike foo = new ByRefLike(123);
if (toString(ref foo) != "123")
throw new Exception();
#endif
}
}