1 #include <stdio.h>
2 #include <stdlib.h>
3
4 #include "cpu-features.h"
5
6 #ifndef __arm__
7 #error "This source file should only be compiled on ARM!"
8 #endif
9
panic(const char * msg)10 static void panic(const char* msg) {
11 fprintf(stderr, "ERROR: %s\n", msg);
12 exit(1);
13 }
14
main(void)15 int main(void) {
16 int count, cpu_count = 10;
17 uint64_t features, cpu_features = 0xaabdedf012934839ULL;
18 uint32_t id, cpu_id = 0x436723ee;
19
20 // Check that android_setCpuArm() can be called at program startup
21 // and that android_getCpuCount() and android_getCpuFeatures()
22 // will return the corresponding values.
23 //
24 printf("Setting cpu_count=%d, features=%08llx cpu_id=%08x\n",
25 cpu_count, cpu_features, cpu_id);
26
27 if (!android_setCpuArm(cpu_count, cpu_features, cpu_id))
28 panic("Cannot call android_setCpu() at program startup!");
29
30 count = android_getCpuCount();
31 features = android_getCpuFeatures();
32 id = android_getCpuIdArm();
33
34 printf("Retrieved cpu_count=%d, features=%08llx cpu_id=%08x\n",
35 count, features, id);
36
37 if (count != cpu_count)
38 panic("android_getCpuCount() didn't return expected value!");
39
40 if (features != cpu_features)
41 panic("android_getCpuFeatures() didn't return expected value!");
42
43 if (id != cpu_id)
44 panic("android_getCpuIdArm() didn't return expected value!");
45
46 // Once one of the android_getXXX functions has been called,
47 // android_setCpu() should always fail.
48 if (android_setCpuArm(cpu_count, cpu_features, cpu_id))
49 panic("android_setCpuArm() could be called twice!");
50
51 printf("Second call to android_setCpu() failed as expected.\n");
52
53 if (android_setCpu(cpu_count, cpu_features))
54 panic("android_setCpu() could be called after android_setCpuArm()!");
55
56 printf("Call to android_setCpu() failed as expected.\n");
57
58 return 0;
59 }
60
61