Skip to content

Commit 9b53f4b

Browse files
authored
[mono][arm64] Handle sysctlbyname failing to find system options. (dotnet#87189)
This fixes a startup crash on Big Sur: > error: * Assertion at /Users/runner/work/1/s/src/mono/mono/utils/mono-hwcap-arm64.c:35, condition `res == 0' not met Because sysctl can't find some of these options: $ sysctl hw.optional.armv8_crc32 hw.optional.armv8_crc32: 1 $ sysctl hw.optional.arm.FEAT_RDM sysctl: unknown oid 'hw.optional.arm.FEAT_RDM' $ sysctl hw.optional.arm.FEAT_DotProd sysctl: unknown oid 'hw.optional.arm.FEAT_DotProd' $ sysctl hw.optional.arm.FEAT_SHA1 sysctl: unknown oid 'hw.optional.arm.FEAT_SHA1' $ sysctl hw.optional.arm.FEAT_SHA256 sysctl: unknown oid 'hw.optional.arm.FEAT_SHA256' $ sysctl hw.optional.arm.FEAT_AES sysctl: unknown oid 'hw.optional.arm.FEAT_AES' Full stack trace: * thread #1, queue = 'com.apple.main-thread', stop reason = breakpoint 2.1 * frame #0: 0x0000010ef37560 libmonosgen-2.0.dylib`monoeg_assertion_message frame #1: 0x0000010ef375cc libmonosgen-2.0.dylib`mono_assertion_message + 32 frame #2: 0x0000010ef40d6c libmonosgen-2.0.dylib`mono_hwcap_arch_init + 544 frame #3: 0x0000010ef54bd8 libmonosgen-2.0.dylib`mono_hwcap_init + 72 frame #4: 0x0000010ee14dc0 libmonosgen-2.0.dylib`parse_optimizations + 52 frame #5: 0x0000010edbed48 libmonosgen-2.0.dylib`mono_init frame #6: 0x0000010ee18968 libmonosgen-2.0.dylib`mono_jit_init_version frame #7: 0x0000010f48a300 libxamarin-dotnet-debug.dylib`xamarin_bridge_initialize + 216 frame #8: 0x0000010f4900a4 libxamarin-dotnet-debug.dylib`xamarin_main + 376
1 parent 5ebb520 commit 9b53f4b

File tree

1 file changed

+36
-18
lines changed

1 file changed

+36
-18
lines changed

src/mono/mono/utils/mono-hwcap-arm64.c

+36-18
Original file line numberDiff line numberDiff line change
@@ -25,44 +25,62 @@ mono_hwcap_arch_init (void)
2525
val_len = sizeof (val);
2626
prop = "hw.optional.armv8_crc32";
2727
res = sysctlbyname (prop, val, &val_len, NULL, 0);
28-
g_assert (res == 0);
29-
g_assert (val_len == 4);
30-
mono_hwcap_arm64_has_crc32 = *(int*)val;
28+
if (res == 0) {
29+
g_assert (val_len == 4);
30+
mono_hwcap_arm64_has_crc32 = *(int*)val;
31+
} else {
32+
mono_hwcap_arm64_has_crc32 = 0;
33+
}
3134

3235
val_len = sizeof (val);
3336
prop = "hw.optional.arm.FEAT_RDM";
3437
res = sysctlbyname (prop, val, &val_len, NULL, 0);
35-
g_assert (res == 0);
36-
g_assert (val_len == 4);
37-
mono_hwcap_arm64_has_rdm = *(int*)val;
38+
if (res == 0) {
39+
g_assert (val_len == 4);
40+
mono_hwcap_arm64_has_rdm = *(int*)val;
41+
} else {
42+
mono_hwcap_arm64_has_rdm = 0;
43+
}
3844

3945
val_len = sizeof (val);
4046
prop = "hw.optional.arm.FEAT_DotProd";
4147
res = sysctlbyname (prop, val, &val_len, NULL, 0);
42-
g_assert (res == 0);
43-
g_assert (val_len == 4);
44-
mono_hwcap_arm64_has_dot = *(int*)val;
48+
if (res == 0) {
49+
g_assert (val_len == 4);
50+
mono_hwcap_arm64_has_dot = *(int*)val;
51+
} else {
52+
mono_hwcap_arm64_has_dot = 0;
53+
}
4554

4655
val_len = sizeof (val);
4756
prop = "hw.optional.arm.FEAT_SHA1";
4857
res = sysctlbyname (prop, val, &val_len, NULL, 0);
49-
g_assert (res == 0);
50-
g_assert (val_len == 4);
51-
mono_hwcap_arm64_has_sha1 = *(int*)val;
58+
if (res == 0) {
59+
g_assert (val_len == 4);
60+
mono_hwcap_arm64_has_sha1 = *(int*)val;
61+
} else {
62+
mono_hwcap_arm64_has_sha1 = 0;
63+
}
5264

5365
val_len = sizeof (val);
5466
prop = "hw.optional.arm.FEAT_SHA256";
5567
res = sysctlbyname (prop, val, &val_len, NULL, 0);
56-
g_assert (res == 0);
57-
g_assert (val_len == 4);
58-
mono_hwcap_arm64_has_sha256 = *(int*)val;
68+
if (res == 0) {
69+
g_assert (val_len == 4);
70+
mono_hwcap_arm64_has_sha256 = *(int*)val;
71+
} else {
72+
mono_hwcap_arm64_has_sha256 = 0;
73+
}
5974

6075
val_len = sizeof (val);
6176
prop = "hw.optional.arm.FEAT_AES";
6277
res = sysctlbyname (prop, val, &val_len, NULL, 0);
63-
g_assert (res == 0);
64-
g_assert (val_len == 4);
65-
mono_hwcap_arm64_has_aes = *(int*)val;
78+
if (res == 0) {
79+
g_assert (val_len == 4);
80+
mono_hwcap_arm64_has_aes = *(int*)val;
81+
} else {
82+
mono_hwcap_arm64_has_aes = 0;
83+
}
6684

6785
#endif
6886
}

0 commit comments

Comments
 (0)