dsh-remote 0.8.50 → 0.8.52

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (136) hide show
  1. package/README.en.md +8 -0
  2. package/README.md +22 -0
  3. package/lib/client.js +15 -3
  4. package/lib/index.js +269 -8
  5. package/lib/instructions.js +288 -0
  6. package/lib/openssh.js +10 -1
  7. package/lib/pool.js +29 -1
  8. package/lib/remote-fs.js +26 -1
  9. package/lib/sftp-surface.js +46 -3
  10. package/lib/sshconfig.js +13 -3
  11. package/node_modules/buildcheck/.eslintrc.js +5 -0
  12. package/node_modules/buildcheck/.github/workflows/ci.yml +88 -0
  13. package/node_modules/buildcheck/.github/workflows/lint.yml +27 -0
  14. package/node_modules/buildcheck/.npmignore +3 -0
  15. package/node_modules/buildcheck/LICENSE +19 -0
  16. package/node_modules/buildcheck/README.md +106 -0
  17. package/node_modules/buildcheck/deps/Find-VisualStudio.cs +250 -0
  18. package/node_modules/buildcheck/lib/findvs.js +361 -0
  19. package/node_modules/buildcheck/lib/index.js +738 -0
  20. package/node_modules/buildcheck/package.json +36 -0
  21. package/node_modules/buildcheck/test/test.js +8 -0
  22. package/node_modules/cpu-features/.eslintrc.js +5 -0
  23. package/node_modules/cpu-features/.github/workflows/ci.yml +74 -0
  24. package/node_modules/cpu-features/.github/workflows/lint.yml +27 -0
  25. package/node_modules/cpu-features/LICENSE +19 -0
  26. package/node_modules/cpu-features/README.md +59 -0
  27. package/node_modules/cpu-features/binding.gyp +16 -0
  28. package/node_modules/cpu-features/buildcheck.js +32 -0
  29. package/node_modules/cpu-features/deps/cpu_features/.clang-format +4 -0
  30. package/node_modules/cpu-features/deps/cpu_features/.dockerignore +31 -0
  31. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/Dockerfile +5 -0
  32. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/aarch64_linux_cmake.yml +30 -0
  33. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_freebsd_cmake.yml +22 -0
  34. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_bazel.yml +26 -0
  35. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_linux_cmake.yml +31 -0
  36. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_macos_cmake.yml +43 -0
  37. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/amd64_windows_cmake.yml +25 -0
  38. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/arm_linux_cmake.yml +31 -0
  39. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/clang_format.yml +24 -0
  40. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/mips_linux_cmake.yml +30 -0
  41. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/power_linux_cmake.yml +29 -0
  42. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/riscv_linux_cmake.yml +28 -0
  43. package/node_modules/cpu-features/deps/cpu_features/.github/workflows/s390x_linux_cmake.yml +27 -0
  44. package/node_modules/cpu-features/deps/cpu_features/.grenrc.yml +21 -0
  45. package/node_modules/cpu-features/deps/cpu_features/BUILD.bazel +329 -0
  46. package/node_modules/cpu-features/deps/cpu_features/CMakeLists.txt +261 -0
  47. package/node_modules/cpu-features/deps/cpu_features/CONTRIBUTING.md +23 -0
  48. package/node_modules/cpu-features/deps/cpu_features/LICENSE +230 -0
  49. package/node_modules/cpu-features/deps/cpu_features/README.md +272 -0
  50. package/node_modules/cpu-features/deps/cpu_features/WORKSPACE +19 -0
  51. package/node_modules/cpu-features/deps/cpu_features/bazel/ci/README.md +5 -0
  52. package/node_modules/cpu-features/deps/cpu_features/bazel/platforms.bzl +11 -0
  53. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesConfig.cmake.in +3 -0
  54. package/node_modules/cpu-features/deps/cpu_features/cmake/CpuFeaturesNdkCompatConfig.cmake.in +3 -0
  55. package/node_modules/cpu-features/deps/cpu_features/cmake/README.md +30 -0
  56. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/Makefile +252 -0
  57. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/README.md +40 -0
  58. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.dot +64 -0
  59. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/docker.svg +312 -0
  60. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/doc/generate_image.sh +7 -0
  61. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/amd64/Dockerfile +48 -0
  62. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/docker/toolchain/Dockerfile +34 -0
  63. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/CMakeLists.txt +22 -0
  64. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/sample/main.cpp +11 -0
  65. package/node_modules/cpu-features/deps/cpu_features/cmake/ci/vagrant/freebsd/Vagrantfile +107 -0
  66. package/node_modules/cpu-features/deps/cpu_features/cmake/googletest.CMakeLists.txt.in +15 -0
  67. package/node_modules/cpu-features/deps/cpu_features/cpu_features.gyp +105 -0
  68. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_cache_info.h +54 -0
  69. package/node_modules/cpu-features/deps/cpu_features/include/cpu_features_macros.h +384 -0
  70. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_aarch64.h +259 -0
  71. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_arm.h +121 -0
  72. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_mips.h +74 -0
  73. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_ppc.h +149 -0
  74. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_riscv.h +72 -0
  75. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_s390x.h +108 -0
  76. package/node_modules/cpu-features/deps/cpu_features/include/cpuinfo_x86.h +288 -0
  77. package/node_modules/cpu-features/deps/cpu_features/include/internal/bit_utils.h +40 -0
  78. package/node_modules/cpu-features/deps/cpu_features/include/internal/cpuid_x86.h +37 -0
  79. package/node_modules/cpu-features/deps/cpu_features/include/internal/filesystem.h +39 -0
  80. package/node_modules/cpu-features/deps/cpu_features/include/internal/hwcaps.h +240 -0
  81. package/node_modules/cpu-features/deps/cpu_features/include/internal/stack_line_reader.h +49 -0
  82. package/node_modules/cpu-features/deps/cpu_features/include/internal/string_view.h +110 -0
  83. package/node_modules/cpu-features/deps/cpu_features/include/internal/windows_utils.h +70 -0
  84. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/CMakeLists.txt +60 -0
  85. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/README.md +4 -0
  86. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.c +205 -0
  87. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/cpu-features.h +320 -0
  88. package/node_modules/cpu-features/deps/cpu_features/ndk_compat/ndk-compat-test.c +12 -0
  89. package/node_modules/cpu-features/deps/cpu_features/patches/0001-Add-Apple-Silicon-Support.patch +456 -0
  90. package/node_modules/cpu-features/deps/cpu_features/scripts/generate_badges.d +165 -0
  91. package/node_modules/cpu-features/deps/cpu_features/scripts/make_release.sh +75 -0
  92. package/node_modules/cpu-features/deps/cpu_features/scripts/run_integration.sh +490 -0
  93. package/node_modules/cpu-features/deps/cpu_features/scripts/test_integration.sh +79 -0
  94. package/node_modules/cpu-features/deps/cpu_features/src/copy.inl +19 -0
  95. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection.inl +86 -0
  96. package/node_modules/cpu-features/deps/cpu_features/src/define_introspection_and_hwcaps.inl +26 -0
  97. package/node_modules/cpu-features/deps/cpu_features/src/equals.inl +22 -0
  98. package/node_modules/cpu-features/deps/cpu_features/src/filesystem.c +62 -0
  99. package/node_modules/cpu-features/deps/cpu_features/src/hwcaps.c +169 -0
  100. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64__base_implementation.inl +88 -0
  101. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_linux_or_android.c +79 -0
  102. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_macos_or_iphone.c +82 -0
  103. package/node_modules/cpu-features/deps/cpu_features/src/impl_aarch64_windows.c +138 -0
  104. package/node_modules/cpu-features/deps/cpu_features/src/impl_arm_linux_or_android.c +212 -0
  105. package/node_modules/cpu-features/deps/cpu_features/src/impl_mips_linux_or_android.c +93 -0
  106. package/node_modules/cpu-features/deps/cpu_features/src/impl_ppc_linux.c +163 -0
  107. package/node_modules/cpu-features/deps/cpu_features/src/impl_riscv_linux.c +111 -0
  108. package/node_modules/cpu-features/deps/cpu_features/src/impl_s390x_linux.c +120 -0
  109. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86__base_implementation.inl +2055 -0
  110. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_freebsd.c +68 -0
  111. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_linux_or_android.c +58 -0
  112. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_macos.c +57 -0
  113. package/node_modules/cpu-features/deps/cpu_features/src/impl_x86_windows.c +58 -0
  114. package/node_modules/cpu-features/deps/cpu_features/src/stack_line_reader.c +132 -0
  115. package/node_modules/cpu-features/deps/cpu_features/src/string_view.c +192 -0
  116. package/node_modules/cpu-features/deps/cpu_features/src/utils/list_cpu_features.c +461 -0
  117. package/node_modules/cpu-features/deps/cpu_features/test/CMakeLists.txt +114 -0
  118. package/node_modules/cpu-features/deps/cpu_features/test/bit_utils_test.cc +53 -0
  119. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_aarch64_test.cc +396 -0
  120. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_arm_test.cc +384 -0
  121. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_mips_test.cc +176 -0
  122. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_ppc_test.cc +131 -0
  123. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_riscv_test.cc +180 -0
  124. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_s390x_test.cc +82 -0
  125. package/node_modules/cpu-features/deps/cpu_features/test/cpuinfo_x86_test.cc +1729 -0
  126. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.cc +103 -0
  127. package/node_modules/cpu-features/deps/cpu_features/test/filesystem_for_testing.h +61 -0
  128. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.cc +52 -0
  129. package/node_modules/cpu-features/deps/cpu_features/test/hwcaps_for_testing.h +31 -0
  130. package/node_modules/cpu-features/deps/cpu_features/test/stack_line_reader_test.cc +132 -0
  131. package/node_modules/cpu-features/deps/cpu_features/test/string_view_test.cc +202 -0
  132. package/node_modules/cpu-features/lib/index.js +5 -0
  133. package/node_modules/cpu-features/package.json +40 -0
  134. package/node_modules/cpu-features/src/binding.cc +151 -0
  135. package/node_modules/cpu-features/test/test.js +12 -0
  136. package/package.json +1 -1
@@ -0,0 +1,384 @@
1
+ // Copyright 2017 Google LLC
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "cpuinfo_arm.h"
16
+
17
+ #include "filesystem_for_testing.h"
18
+ #include "gtest/gtest.h"
19
+ #include "hwcaps_for_testing.h"
20
+
21
+ namespace cpu_features {
22
+ namespace {
23
+
24
+ TEST(CpuinfoArmTest, ArmFeaturesEnum) {
25
+ const char *last_name = GetArmFeaturesEnumName(ARM_LAST_);
26
+ EXPECT_STREQ(last_name, "unknown_feature");
27
+ for (int i = static_cast<int>(ARM_SWP); i != static_cast<int>(ARM_LAST_); ++i) {
28
+ const auto feature = static_cast<ArmFeaturesEnum>(i);
29
+ const char *name = GetArmFeaturesEnumName(feature);
30
+ ASSERT_FALSE(name == nullptr);
31
+ EXPECT_STRNE(name, "");
32
+ EXPECT_STRNE(name, last_name);
33
+ }
34
+ }
35
+
36
+ TEST(CpuinfoArmTest, FromHardwareCap) {
37
+ ResetHwcaps();
38
+ SetHardwareCapabilities(ARM_HWCAP_NEON, ARM_HWCAP2_AES | ARM_HWCAP2_CRC32);
39
+ GetEmptyFilesystem(); // disabling /proc/cpuinfo
40
+ const auto info = GetArmInfo();
41
+ EXPECT_TRUE(info.features.vfp); // triggered by vfpv3
42
+ EXPECT_TRUE(info.features.vfpv3); // triggered by neon
43
+ EXPECT_TRUE(info.features.neon);
44
+ EXPECT_TRUE(info.features.aes);
45
+ EXPECT_TRUE(info.features.crc32);
46
+
47
+ EXPECT_FALSE(info.features.vfpv4);
48
+ EXPECT_FALSE(info.features.iwmmxt);
49
+ EXPECT_FALSE(info.features.crunch);
50
+ EXPECT_FALSE(info.features.thumbee);
51
+ EXPECT_FALSE(info.features.vfpv3d16);
52
+ EXPECT_FALSE(info.features.idiva);
53
+ EXPECT_FALSE(info.features.idivt);
54
+ EXPECT_FALSE(info.features.pmull);
55
+ EXPECT_FALSE(info.features.sha1);
56
+ EXPECT_FALSE(info.features.sha2);
57
+
58
+ // check some random features with EnumValue():
59
+ EXPECT_TRUE(GetArmFeaturesEnumValue(&info.features, ARM_VFP));
60
+ EXPECT_FALSE(GetArmFeaturesEnumValue(&info.features, ARM_VFPV4));
61
+ // out of bound EnumValue() check
62
+ EXPECT_FALSE(GetArmFeaturesEnumValue(&info.features, (ArmFeaturesEnum)~0x0));
63
+ }
64
+
65
+ TEST(CpuinfoArmTest, ODroidFromCpuInfo) {
66
+ ResetHwcaps();
67
+ auto& fs = GetEmptyFilesystem();
68
+ fs.CreateFile("/proc/cpuinfo", R"(processor : 0
69
+ model name : ARMv7 Processor rev 3 (v71)
70
+ BogoMIPS : 120.00
71
+ Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt vfpd32 lpae
72
+ CPU implementer : 0x41
73
+ CPU architecture: 7
74
+ CPU variant : 0x2
75
+ CPU part : 0xc0f
76
+ CPU revision : 3)");
77
+ const auto info = GetArmInfo();
78
+ EXPECT_EQ(info.implementer, 0x41);
79
+ EXPECT_EQ(info.variant, 0x2);
80
+ EXPECT_EQ(info.part, 0xc0f);
81
+ EXPECT_EQ(info.revision, 3);
82
+ EXPECT_EQ(info.architecture, 7);
83
+
84
+ EXPECT_FALSE(info.features.swp);
85
+ EXPECT_TRUE(info.features.half);
86
+ EXPECT_TRUE(info.features.thumb);
87
+ EXPECT_FALSE(info.features._26bit);
88
+ EXPECT_TRUE(info.features.fastmult);
89
+ EXPECT_FALSE(info.features.fpa);
90
+ EXPECT_TRUE(info.features.vfp);
91
+ EXPECT_TRUE(info.features.edsp);
92
+ EXPECT_FALSE(info.features.java);
93
+ EXPECT_FALSE(info.features.iwmmxt);
94
+ EXPECT_FALSE(info.features.crunch);
95
+ EXPECT_FALSE(info.features.thumbee);
96
+ EXPECT_TRUE(info.features.neon);
97
+ EXPECT_TRUE(info.features.vfpv3);
98
+ EXPECT_FALSE(info.features.vfpv3d16);
99
+ EXPECT_TRUE(info.features.tls);
100
+ EXPECT_TRUE(info.features.vfpv4);
101
+ EXPECT_TRUE(info.features.idiva);
102
+ EXPECT_TRUE(info.features.idivt);
103
+ EXPECT_TRUE(info.features.vfpd32);
104
+ EXPECT_TRUE(info.features.lpae);
105
+ EXPECT_FALSE(info.features.evtstrm);
106
+ EXPECT_FALSE(info.features.aes);
107
+ EXPECT_FALSE(info.features.pmull);
108
+ EXPECT_FALSE(info.features.sha1);
109
+ EXPECT_FALSE(info.features.sha2);
110
+ EXPECT_FALSE(info.features.crc32);
111
+ }
112
+
113
+ // Linux test-case
114
+ TEST(CpuinfoArmTest, RaspberryPiZeroFromCpuInfo) {
115
+ ResetHwcaps();
116
+ auto& fs = GetEmptyFilesystem();
117
+ fs.CreateFile("/proc/cpuinfo", R"(processor : 0
118
+ model name : ARMv6-compatible processor rev 7 (v6l)
119
+ BogoMIPS : 697.95
120
+ Features : half thumb fastmult vfp edsp java tls
121
+ CPU implementer : 0x41
122
+ CPU architecture: 7
123
+ CPU variant : 0x0
124
+ CPU part : 0xb76
125
+ CPU revision : 7
126
+
127
+ Hardware : BCM2835
128
+ Revision : 9000c1
129
+ Serial : 000000006cd946f3)");
130
+ const auto info = GetArmInfo();
131
+ EXPECT_EQ(info.implementer, 0x41);
132
+ EXPECT_EQ(info.variant, 0x0);
133
+ EXPECT_EQ(info.part, 0xb76);
134
+ EXPECT_EQ(info.revision, 7);
135
+ EXPECT_EQ(info.architecture, 6);
136
+
137
+ EXPECT_FALSE(info.features.swp);
138
+ EXPECT_TRUE(info.features.half);
139
+ EXPECT_TRUE(info.features.thumb);
140
+ EXPECT_FALSE(info.features._26bit);
141
+ EXPECT_TRUE(info.features.fastmult);
142
+ EXPECT_FALSE(info.features.fpa);
143
+ EXPECT_TRUE(info.features.vfp);
144
+ EXPECT_TRUE(info.features.edsp);
145
+ EXPECT_TRUE(info.features.java);
146
+ EXPECT_FALSE(info.features.iwmmxt);
147
+ EXPECT_FALSE(info.features.crunch);
148
+ EXPECT_FALSE(info.features.thumbee);
149
+ EXPECT_FALSE(info.features.neon);
150
+ EXPECT_FALSE(info.features.vfpv3);
151
+ EXPECT_FALSE(info.features.vfpv3d16);
152
+ EXPECT_TRUE(info.features.tls);
153
+ EXPECT_FALSE(info.features.vfpv4);
154
+ EXPECT_FALSE(info.features.idiva);
155
+ EXPECT_FALSE(info.features.idivt);
156
+ EXPECT_FALSE(info.features.vfpd32);
157
+ EXPECT_FALSE(info.features.lpae);
158
+ EXPECT_FALSE(info.features.evtstrm);
159
+ EXPECT_FALSE(info.features.aes);
160
+ EXPECT_FALSE(info.features.pmull);
161
+ EXPECT_FALSE(info.features.sha1);
162
+ EXPECT_FALSE(info.features.sha2);
163
+ EXPECT_FALSE(info.features.crc32);
164
+ }
165
+
166
+ TEST(CpuinfoArmTest, MarvellArmadaFromCpuInfo) {
167
+ ResetHwcaps();
168
+ auto& fs = GetEmptyFilesystem();
169
+ fs.CreateFile("/proc/cpuinfo", R"(processor : 0
170
+ model name : ARMv7 Processor rev 1 (v7l)
171
+ BogoMIPS : 50.00
172
+ Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
173
+ CPU implementer : 0x41
174
+ CPU architecture: 7
175
+ CPU variant : 0x4
176
+ CPU part : 0xc09
177
+ CPU revision : 1
178
+
179
+ processor : 1
180
+ model name : ARMv7 Processor rev 1 (v7l)
181
+ BogoMIPS : 50.00
182
+ Features : half thumb fastmult vfp edsp neon vfpv3 tls vfpd32
183
+ CPU implementer : 0x41
184
+ CPU architecture: 7
185
+ CPU variant : 0x4
186
+ CPU part : 0xc09
187
+ CPU revision : 1
188
+
189
+ Hardware : Marvell Armada 380/385 (Device Tree)
190
+ Revision : 0000
191
+ Serial : 0000000000000000)");
192
+ const auto info = GetArmInfo();
193
+ EXPECT_EQ(info.implementer, 0x41);
194
+ EXPECT_EQ(info.variant, 0x4);
195
+ EXPECT_EQ(info.part, 0xc09);
196
+ EXPECT_EQ(info.revision, 1);
197
+ EXPECT_EQ(info.architecture, 7);
198
+
199
+ EXPECT_FALSE(info.features.swp);
200
+ EXPECT_TRUE(info.features.half);
201
+ EXPECT_TRUE(info.features.thumb);
202
+ EXPECT_FALSE(info.features._26bit);
203
+ EXPECT_TRUE(info.features.fastmult);
204
+ EXPECT_FALSE(info.features.fpa);
205
+ EXPECT_TRUE(info.features.vfp);
206
+ EXPECT_TRUE(info.features.edsp);
207
+ EXPECT_FALSE(info.features.java);
208
+ EXPECT_FALSE(info.features.iwmmxt);
209
+ EXPECT_FALSE(info.features.crunch);
210
+ EXPECT_FALSE(info.features.thumbee);
211
+ EXPECT_TRUE(info.features.neon);
212
+ EXPECT_TRUE(info.features.vfpv3);
213
+ EXPECT_FALSE(info.features.vfpv3d16);
214
+ EXPECT_TRUE(info.features.tls);
215
+ EXPECT_FALSE(info.features.vfpv4);
216
+ EXPECT_FALSE(info.features.idiva);
217
+ EXPECT_FALSE(info.features.idivt);
218
+ EXPECT_TRUE(info.features.vfpd32);
219
+ EXPECT_FALSE(info.features.lpae);
220
+ EXPECT_FALSE(info.features.evtstrm);
221
+ EXPECT_FALSE(info.features.aes);
222
+ EXPECT_FALSE(info.features.pmull);
223
+ EXPECT_FALSE(info.features.sha1);
224
+ EXPECT_FALSE(info.features.sha2);
225
+ EXPECT_FALSE(info.features.crc32);
226
+ }
227
+
228
+ // Android test-case
229
+ // http://code.google.com/p/android/issues/detail?id=10812
230
+ TEST(CpuinfoArmTest, InvalidArmv7) {
231
+ ResetHwcaps();
232
+ auto& fs = GetEmptyFilesystem();
233
+ fs.CreateFile("/proc/cpuinfo",
234
+ R"(Processor : ARMv6-compatible processor rev 6 (v6l)
235
+ BogoMIPS : 199.47
236
+ Features : swp half thumb fastmult vfp edsp java
237
+ CPU implementer : 0x41
238
+ CPU architecture: 7
239
+ CPU variant : 0x0
240
+ CPU part : 0xb76
241
+ CPU revision : 6
242
+
243
+ Hardware : SPICA
244
+ Revision : 0020
245
+ Serial : 33323613546d00ec )");
246
+ const auto info = GetArmInfo();
247
+ EXPECT_EQ(info.architecture, 6);
248
+
249
+ EXPECT_TRUE(info.features.swp);
250
+ EXPECT_TRUE(info.features.half);
251
+ EXPECT_TRUE(info.features.thumb);
252
+ EXPECT_FALSE(info.features._26bit);
253
+ EXPECT_TRUE(info.features.fastmult);
254
+ EXPECT_FALSE(info.features.fpa);
255
+ EXPECT_TRUE(info.features.vfp);
256
+ EXPECT_TRUE(info.features.edsp);
257
+ EXPECT_TRUE(info.features.java);
258
+ EXPECT_FALSE(info.features.iwmmxt);
259
+ EXPECT_FALSE(info.features.crunch);
260
+ EXPECT_FALSE(info.features.thumbee);
261
+ EXPECT_FALSE(info.features.neon);
262
+ EXPECT_FALSE(info.features.vfpv3);
263
+ EXPECT_FALSE(info.features.vfpv3d16);
264
+ EXPECT_FALSE(info.features.tls);
265
+ EXPECT_FALSE(info.features.vfpv4);
266
+ EXPECT_FALSE(info.features.idiva);
267
+ EXPECT_FALSE(info.features.idivt);
268
+ EXPECT_FALSE(info.features.vfpd32);
269
+ EXPECT_FALSE(info.features.lpae);
270
+ EXPECT_FALSE(info.features.evtstrm);
271
+ EXPECT_FALSE(info.features.aes);
272
+ EXPECT_FALSE(info.features.pmull);
273
+ EXPECT_FALSE(info.features.sha1);
274
+ EXPECT_FALSE(info.features.sha2);
275
+ EXPECT_FALSE(info.features.crc32);
276
+ }
277
+
278
+ // Android test-case
279
+ // https://crbug.com/341598.
280
+ TEST(CpuinfoArmTest, InvalidNeon) {
281
+ ResetHwcaps();
282
+ auto& fs = GetEmptyFilesystem();
283
+ fs.CreateFile("/proc/cpuinfo",
284
+ R"(Processor: ARMv7 Processory rev 0 (v71)
285
+ processor: 0
286
+ BogoMIPS: 13.50
287
+
288
+ Processor: 1
289
+ BogoMIPS: 13.50
290
+
291
+ Features: swp half thumb fastmult vfp edsp neon vfpv3 tls vfpv4 idiva idivt
292
+ CPU implementer : 0x51
293
+ CPU architecture: 7
294
+ CPU variant: 0x1
295
+ CPU part: 0x04d
296
+ CPU revision: 0
297
+
298
+ Hardware: SAMSUNG M2
299
+ Revision: 0010
300
+ Serial: 00001e030000354e)");
301
+ const auto info = GetArmInfo();
302
+ EXPECT_TRUE(info.features.swp);
303
+ EXPECT_FALSE(info.features.neon);
304
+ }
305
+
306
+ // The Nexus 4 (Qualcomm Krait) kernel configuration forgets to report IDIV
307
+ // support.
308
+ TEST(CpuinfoArmTest, Nexus4_0x510006f2) {
309
+ ResetHwcaps();
310
+ auto& fs = GetEmptyFilesystem();
311
+ fs.CreateFile("/proc/cpuinfo",
312
+ R"(CPU implementer : 0x51
313
+ CPU architecture: 7
314
+ CPU variant : 0x0
315
+ CPU part : 0x6f
316
+ CPU revision : 2)");
317
+ const auto info = GetArmInfo();
318
+ EXPECT_TRUE(info.features.idiva);
319
+ EXPECT_TRUE(info.features.idivt);
320
+
321
+ EXPECT_EQ(GetArmCpuId(&info), 0x510006f2);
322
+ }
323
+
324
+ // The Nexus 4 (Qualcomm Krait) kernel configuration forgets to report IDIV
325
+ // support.
326
+ TEST(CpuinfoArmTest, Nexus4_0x510006f3) {
327
+ ResetHwcaps();
328
+ auto& fs = GetEmptyFilesystem();
329
+ fs.CreateFile("/proc/cpuinfo",
330
+ R"(CPU implementer : 0x51
331
+ CPU architecture: 7
332
+ CPU variant : 0x0
333
+ CPU part : 0x6f
334
+ CPU revision : 3)");
335
+ const auto info = GetArmInfo();
336
+ EXPECT_TRUE(info.features.idiva);
337
+ EXPECT_TRUE(info.features.idivt);
338
+
339
+ EXPECT_EQ(GetArmCpuId(&info), 0x510006f3);
340
+ }
341
+
342
+ // The 2013 Nexus 7 (Qualcomm Krait) kernel configuration forgets to report IDIV
343
+ // support.
344
+ TEST(CpuinfoArmTest, Nexus7_2013_0x511006f0) {
345
+ ResetHwcaps();
346
+ auto& fs = GetEmptyFilesystem();
347
+ fs.CreateFile("/proc/cpuinfo",
348
+ R"(CPU implementer : 0x51
349
+ CPU architecture: 7
350
+ CPU variant : 0x1
351
+ CPU part : 0x06f
352
+ CPU revision : 0)");
353
+ const auto info = GetArmInfo();
354
+ EXPECT_TRUE(info.features.idiva);
355
+ EXPECT_TRUE(info.features.idivt);
356
+
357
+ EXPECT_EQ(GetArmCpuId(&info), 0x511006f0);
358
+ }
359
+
360
+ // The emulator-specific Android 4.2 kernel fails to report support for the
361
+ // 32-bit ARM IDIV instruction. Technically, this is a feature of the virtual
362
+ // CPU implemented by the emulator.
363
+ TEST(CpuinfoArmTest, EmulatorSpecificIdiv) {
364
+ ResetHwcaps();
365
+ auto& fs = GetEmptyFilesystem();
366
+ fs.CreateFile("/proc/cpuinfo",
367
+ R"(Processor : ARMv7 Processor rev 0 (v7l)
368
+ BogoMIPS : 629.14
369
+ Features : swp half thumb fastmult vfp edsp neon vfpv3
370
+ CPU implementer : 0x41
371
+ CPU architecture: 7
372
+ CPU variant : 0x0
373
+ CPU part : 0xc08
374
+ CPU revision : 0
375
+
376
+ Hardware : Goldfish
377
+ Revision : 0000
378
+ Serial : 0000000000000000)");
379
+ const auto info = GetArmInfo();
380
+ EXPECT_TRUE(info.features.idiva);
381
+ }
382
+
383
+ } // namespace
384
+ } // namespace cpu_features
@@ -0,0 +1,176 @@
1
+ // Copyright 2017 Google LLC
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "cpuinfo_mips.h"
16
+
17
+ #include "filesystem_for_testing.h"
18
+ #include "gtest/gtest.h"
19
+ #include "hwcaps_for_testing.h"
20
+ #include "internal/stack_line_reader.h"
21
+ #include "internal/string_view.h"
22
+
23
+ namespace cpu_features {
24
+
25
+ namespace {
26
+
27
+ TEST(CpuinfoMipsTest, MipsFeaturesEnum) {
28
+ const char *last_name = GetMipsFeaturesEnumName(MIPS_LAST_);
29
+ EXPECT_STREQ(last_name, "unknown_feature");
30
+ for (int i = static_cast<int>(MIPS_MSA); i != static_cast<int>(MIPS_LAST_); ++i) {
31
+ const auto feature = static_cast<MipsFeaturesEnum>(i);
32
+ const char *name = GetMipsFeaturesEnumName(feature);
33
+ ASSERT_FALSE(name == nullptr);
34
+ EXPECT_STRNE(name, "");
35
+ EXPECT_STRNE(name, last_name);
36
+ }
37
+ }
38
+
39
+ TEST(CpuinfoMipsTest, FromHardwareCapBoth) {
40
+ ResetHwcaps();
41
+ SetHardwareCapabilities(MIPS_HWCAP_MSA | MIPS_HWCAP_R6, 0);
42
+ GetEmptyFilesystem(); // disabling /proc/cpuinfo
43
+ const auto info = GetMipsInfo();
44
+ EXPECT_TRUE(info.features.msa);
45
+ EXPECT_FALSE(info.features.eva);
46
+ EXPECT_TRUE(info.features.r6);
47
+ }
48
+
49
+ TEST(CpuinfoMipsTest, FromHardwareCapOnlyOne) {
50
+ ResetHwcaps();
51
+ SetHardwareCapabilities(MIPS_HWCAP_MSA, 0);
52
+ GetEmptyFilesystem(); // disabling /proc/cpuinfo
53
+ const auto info = GetMipsInfo();
54
+ EXPECT_TRUE(info.features.msa);
55
+ EXPECT_FALSE(info.features.eva);
56
+ }
57
+
58
+ TEST(CpuinfoMipsTest, Ci40) {
59
+ ResetHwcaps();
60
+ auto& fs = GetEmptyFilesystem();
61
+ fs.CreateFile("/proc/cpuinfo", R"(system type : IMG Pistachio SoC (B0)
62
+ machine : IMG Marduk – Ci40 with cc2520
63
+ processor : 0
64
+ cpu model : MIPS interAptiv (multi) V2.0 FPU V0.0
65
+ BogoMIPS : 363.72
66
+ wait instruction : yes
67
+ microsecond timers : yes
68
+ tlb_entries : 64
69
+ extra interrupt vector : yes
70
+ hardware watchpoint : yes, count: 4, address/irw mask: [0x0ffc, 0x0ffc, 0x0ffb, 0x0ffb]
71
+ isa : mips1 mips2 mips32r1 mips32r2
72
+ ASEs implemented : mips16 dsp mt eva
73
+ shadow register sets : 1
74
+ kscratch registers : 0
75
+ package : 0
76
+ core : 0
77
+ VCED exceptions : not available
78
+ VCEI exceptions : not available
79
+ VPE : 0
80
+ )");
81
+ const auto info = GetMipsInfo();
82
+ EXPECT_FALSE(info.features.msa);
83
+ EXPECT_TRUE(info.features.eva);
84
+ EXPECT_FALSE(info.features.r6);
85
+ EXPECT_TRUE(info.features.mips16);
86
+ EXPECT_FALSE(info.features.mdmx);
87
+ EXPECT_FALSE(info.features.mips3d);
88
+ EXPECT_FALSE(info.features.smart);
89
+ EXPECT_TRUE(info.features.dsp);
90
+ }
91
+
92
+ TEST(CpuinfoMipsTest, AR7161) {
93
+ ResetHwcaps();
94
+ auto& fs = GetEmptyFilesystem();
95
+ fs.CreateFile("/proc/cpuinfo",
96
+ R"(system type : Atheros AR7161 rev 2
97
+ machine : NETGEAR WNDR3700/WNDR3800/WNDRMAC
98
+ processor : 0
99
+ cpu model : MIPS 24Kc V7.4
100
+ BogoMIPS : 452.19
101
+ wait instruction : yes
102
+ microsecond timers : yes
103
+ tlb_entries : 16
104
+ extra interrupt vector : yes
105
+ hardware watchpoint : yes, count: 4, address/irw mask: [0x0000, 0x0f98, 0x0f78, 0x0df8]
106
+ ASEs implemented : mips16
107
+ shadow register sets : 1
108
+ kscratch registers : 0
109
+ core : 0
110
+ VCED exceptions : not available
111
+ VCEI exceptions : not available
112
+ )");
113
+ const auto info = GetMipsInfo();
114
+ EXPECT_FALSE(info.features.msa);
115
+ EXPECT_FALSE(info.features.eva);
116
+ EXPECT_TRUE(info.features.mips16);
117
+ }
118
+
119
+ TEST(CpuinfoMipsTest, Goldfish) {
120
+ ResetHwcaps();
121
+ auto& fs = GetEmptyFilesystem();
122
+ fs.CreateFile("/proc/cpuinfo", R"(system type : MIPS-Goldfish
123
+ Hardware : goldfish
124
+ Revison : 1
125
+ processor : 0
126
+ cpu model : MIPS 24Kc V0.0 FPU V0.0
127
+ BogoMIPS : 1042.02
128
+ wait instruction : yes
129
+ microsecond timers : yes
130
+ tlb_entries : 16
131
+ extra interrupt vector : yes
132
+ hardware watchpoint : yes, count: 1, address/irw mask: [0x0ff8]
133
+ ASEs implemented :
134
+ shadow register sets : 1
135
+ core : 0
136
+ VCED exceptions : not available
137
+ VCEI exceptions : not available
138
+ )");
139
+ const auto info = GetMipsInfo();
140
+ EXPECT_FALSE(info.features.msa);
141
+ EXPECT_FALSE(info.features.eva);
142
+ }
143
+
144
+ TEST(CpuinfoMipsTest, BCM1250) {
145
+ ResetHwcaps();
146
+ auto& fs = GetEmptyFilesystem();
147
+ fs.CreateFile("/proc/cpuinfo", R"(system type : SiByte BCM91250A (SWARM)
148
+ processor : 0
149
+ cpu model : SiByte SB1 V0.2 FPU V0.2
150
+ BogoMIPS : 532.48
151
+ wait instruction : no
152
+ microsecond timers : yes
153
+ tlb_entries : 64
154
+ extra interrupt vector : yes
155
+ hardware watchpoint : yes, count: 1, address/irw mask: [0x0ff8]
156
+ isa : mips1 mips2 mips3 mips4 mips5 mips32r1 mips32r2 mips64r1 mips64r2
157
+ ASEs implemented : mdmx mips3d
158
+ shadow register sets : 1
159
+ kscratch registers : 0
160
+ package : 0
161
+ core : 0
162
+ VCED exceptions : not available
163
+ VCEI exceptions : not available
164
+ )");
165
+ const auto info = GetMipsInfo();
166
+ EXPECT_FALSE(info.features.msa);
167
+ EXPECT_FALSE(info.features.eva);
168
+ EXPECT_FALSE(info.features.mips16);
169
+ EXPECT_TRUE(info.features.mdmx);
170
+ EXPECT_TRUE(info.features.mips3d);
171
+ EXPECT_FALSE(info.features.smart);
172
+ EXPECT_FALSE(info.features.dsp);
173
+ }
174
+
175
+ } // namespace
176
+ } // namespace cpu_features
@@ -0,0 +1,131 @@
1
+ // Copyright 2018 IBM.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include "cpuinfo_ppc.h"
16
+
17
+ #include "filesystem_for_testing.h"
18
+ #include "gtest/gtest.h"
19
+ #include "hwcaps_for_testing.h"
20
+ #include "internal/string_view.h"
21
+
22
+ namespace cpu_features {
23
+ namespace {
24
+
25
+ TEST(CpustringsPPCTest, PPCFeaturesEnum) {
26
+ const char *last_name = GetPPCFeaturesEnumName(PPC_LAST_);
27
+ EXPECT_STREQ(last_name, "unknown_feature");
28
+ for (int i = static_cast<int>(PPC_32); i != static_cast<int>(PPC_LAST_); ++i) {
29
+ const auto feature = static_cast<PPCFeaturesEnum>(i);
30
+ const char *name = GetPPCFeaturesEnumName(feature);
31
+ ASSERT_FALSE(name == nullptr);
32
+ EXPECT_STRNE(name, "");
33
+ EXPECT_STRNE(name, last_name);
34
+ }
35
+ }
36
+
37
+ TEST(CpustringsPPCTest, FromHardwareCap) {
38
+ ResetHwcaps();
39
+ SetHardwareCapabilities(PPC_FEATURE_HAS_FPU | PPC_FEATURE_HAS_VSX,
40
+ PPC_FEATURE2_ARCH_3_00);
41
+ GetEmptyFilesystem(); // disabling /proc/cpuinfo
42
+ const auto info = GetPPCInfo();
43
+ EXPECT_TRUE(info.features.fpu);
44
+ EXPECT_FALSE(info.features.mmu);
45
+ EXPECT_TRUE(info.features.vsx);
46
+ EXPECT_TRUE(info.features.arch300);
47
+ EXPECT_FALSE(info.features.power4);
48
+ EXPECT_FALSE(info.features.altivec);
49
+ EXPECT_FALSE(info.features.vcrypto);
50
+ EXPECT_FALSE(info.features.htm);
51
+ }
52
+
53
+ TEST(CpustringsPPCTest, Blade) {
54
+ ResetHwcaps();
55
+ auto& fs = GetEmptyFilesystem();
56
+ fs.CreateFile("/proc/cpuinfo",
57
+ R"(processor : 14
58
+ cpu : POWER7 (architected), altivec supported
59
+ clock : 3000.000000MHz
60
+ revision : 2.1 (pvr 003f 0201)
61
+
62
+ processor : 15
63
+ cpu : POWER7 (architected), altivec supported
64
+ clock : 3000.000000MHz
65
+ revision : 2.1 (pvr 003f 0201)
66
+
67
+ timebase : 512000000
68
+ platform : pSeries
69
+ model : IBM,8406-70Y
70
+ machine : CHRP IBM,8406-70Y)");
71
+ SetPlatformPointer("power7");
72
+ SetBasePlatformPointer("power8");
73
+ const auto strings = GetPPCPlatformStrings();
74
+ ASSERT_STREQ(strings.platform, "pSeries");
75
+ ASSERT_STREQ(strings.model, "IBM,8406-70Y");
76
+ ASSERT_STREQ(strings.machine, "CHRP IBM,8406-70Y");
77
+ ASSERT_STREQ(strings.cpu, "POWER7 (architected), altivec supported");
78
+ ASSERT_STREQ(strings.type.platform, "power7");
79
+ ASSERT_STREQ(strings.type.base_platform, "power8");
80
+ }
81
+
82
+ TEST(CpustringsPPCTest, Firestone) {
83
+ ResetHwcaps();
84
+ auto& fs = GetEmptyFilesystem();
85
+ fs.CreateFile("/proc/cpuinfo",
86
+ R"(processor : 126
87
+ cpu : POWER8 (raw), altivec supported
88
+ clock : 2061.000000MHz
89
+ revision : 2.0 (pvr 004d 0200)
90
+
91
+ processor : 127
92
+ cpu : POWER8 (raw), altivec supported
93
+ clock : 2061.000000MHz
94
+ revision : 2.0 (pvr 004d 0200)
95
+
96
+ timebase : 512000000
97
+ platform : PowerNV
98
+ model : 8335-GTA
99
+ machine : PowerNV 8335-GTA
100
+ firmware : OPAL v3)");
101
+ const auto strings = GetPPCPlatformStrings();
102
+ ASSERT_STREQ(strings.platform, "PowerNV");
103
+ ASSERT_STREQ(strings.model, "8335-GTA");
104
+ ASSERT_STREQ(strings.machine, "PowerNV 8335-GTA");
105
+ ASSERT_STREQ(strings.cpu, "POWER8 (raw), altivec supported");
106
+ }
107
+
108
+ TEST(CpustringsPPCTest, w8) {
109
+ ResetHwcaps();
110
+ auto& fs = GetEmptyFilesystem();
111
+ fs.CreateFile("/proc/cpuinfo",
112
+ R"(processor : 143
113
+ cpu : POWER9, altivec supported
114
+ clock : 2300.000000MHz
115
+ revision : 2.2 (pvr 004e 1202)
116
+
117
+ timebase : 512000000
118
+ platform : PowerNV
119
+ model : 0000000000000000
120
+ machine : PowerNV 0000000000000000
121
+ firmware : OPAL
122
+ MMU : Radix)");
123
+ const auto strings = GetPPCPlatformStrings();
124
+ ASSERT_STREQ(strings.platform, "PowerNV");
125
+ ASSERT_STREQ(strings.model, "0000000000000000");
126
+ ASSERT_STREQ(strings.machine, "PowerNV 0000000000000000");
127
+ ASSERT_STREQ(strings.cpu, "POWER9, altivec supported");
128
+ }
129
+
130
+ } // namespace
131
+ } // namespace cpu_features