#include <stdio.h> #include <stdlib.h> #include "cpu-features.h" #ifndef __arm__ #error "This source file should only be compiled on ARM!" #endif static void panic(const char* msg) { fprintf(stderr, "ERROR: %s\n", msg); exit(1); } int main(void) { int count, cpu_count = 10; uint64_t features, cpu_features = 0xaabdedf012934839ULL; uint32_t id, cpu_id = 0x436723ee; // Check that android_setCpuArm() can be called at program startup // and that android_getCpuCount() and android_getCpuFeatures() // will return the corresponding values. // printf("Setting cpu_count=%d, features=%08llx cpu_id=%08x\n", cpu_count, cpu_features, cpu_id); if (!android_setCpuArm(cpu_count, cpu_features, cpu_id)) panic("Cannot call android_setCpu() at program startup!"); count = android_getCpuCount(); features = android_getCpuFeatures(); id = android_getCpuIdArm(); printf("Retrieved cpu_count=%d, features=%08llx cpu_id=%08x\n", count, features, id); if (count != cpu_count) panic("android_getCpuCount() didn't return expected value!"); if (features != cpu_features) panic("android_getCpuFeatures() didn't return expected value!"); if (id != cpu_id) panic("android_getCpuIdArm() didn't return expected value!"); // Once one of the android_getXXX functions has been called, // android_setCpu() should always fail. if (android_setCpuArm(cpu_count, cpu_features, cpu_id)) panic("android_setCpuArm() could be called twice!"); printf("Second call to android_setCpu() failed as expected.\n"); if (android_setCpu(cpu_count, cpu_features)) panic("android_setCpu() could be called after android_setCpuArm()!"); printf("Call to android_setCpu() failed as expected.\n"); return 0; }