diff options
author | Marat Dukhan <marat@fb.com> | 2018-04-19 12:29:15 -0700 |
---|---|---|
committer | Marat Dukhan <marat@fb.com> | 2018-04-19 12:29:15 -0700 |
commit | cb9ae9c9a5be95f5a1abaa5f27d1b2e0362b58f2 (patch) | |
tree | 551dd468aea7a6f62fa595d26f35992a00cdb0e7 | |
parent | dca6828c3e50f172b61cff22c8e996e929ea723c (diff) | |
download | cpuinfo-cb9ae9c9a5be95f5a1abaa5f27d1b2e0362b58f2.tar.gz |
Add tool to dump /proc/cpuinfo under AArch32 on AArch64 systems
-rw-r--r-- | CMakeLists.txt | 4 | ||||
-rw-r--r-- | jni/Android.mk | 6 | ||||
-rw-r--r-- | tools/cpuinfo-dump.c | 45 |
3 files changed, 55 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt index 7473d9f..7cdbcaf 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -773,6 +773,10 @@ IF(CPUINFO_SUPPORTED_PLATFORM AND CPUINFO_BUILD_TOOLS) CPUINFO_TARGET_ENABLE_C99(auxv-dump) CPUINFO_TARGET_RUNTIME_LIBRARY(auxv-dump) TARGET_LINK_LIBRARIES(auxv-dump PRIVATE ${CMAKE_DL_LIBS}) + + ADD_EXECUTABLE(cpuinfo-dump tools/cpuinfo-dump.c) + CPUINFO_TARGET_ENABLE_C99(cpuinfo-dump) + CPUINFO_TARGET_RUNTIME_LIBRARY(cpuinfo-dump) ENDIF() IF(CMAKE_SYSTEM_PROCESSOR MATCHES "^(i686|AMD64|x86_64)$") diff --git a/jni/Android.mk b/jni/Android.mk index d4bc036..52d2454 100644 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -154,6 +154,12 @@ LOCAL_SRC_FILES := $(LOCAL_PATH)/tools/auxv-dump.c LOCAL_CFLAGS := -std=gnu99 include $(BUILD_EXECUTABLE) +include $(CLEAR_VARS) +LOCAL_MODULE := cpuinfo-dump +LOCAL_SRC_FILES := $(LOCAL_PATH)/tools/cpuinfo-dump.c +LOCAL_CFLAGS := -std=gnu99 +include $(BUILD_EXECUTABLE) + endif # armeabi, armeabi-v7a, or arm64-v8a ifeq ($(TARGET_ARCH_ABI),$(filter $(TARGET_ARCH_ABI),x86 x86_64)) diff --git a/tools/cpuinfo-dump.c b/tools/cpuinfo-dump.c new file mode 100644 index 0000000..5b5228a --- /dev/null +++ b/tools/cpuinfo-dump.c @@ -0,0 +1,45 @@ +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +#include <unistd.h> +#include <fcntl.h> +#include <errno.h> + + +#define BUFFER_SIZE 4096 +char buffer[BUFFER_SIZE]; + +#define CPUINFO_PATH "/proc/cpuinfo" + +int main(int argc, char** argv) { + int file = open(CPUINFO_PATH, O_RDONLY); + if (file == -1) { + fprintf(stderr, "Error: failed to open %s: %s\n", CPUINFO_PATH, strerror(errno)); + exit(EXIT_FAILURE); + } + + /* Only used for error reporting */ + size_t position = 0; + char* data_start = buffer; + ssize_t bytes_read; + do { + bytes_read = read(file, buffer, BUFFER_SIZE); + if (bytes_read < 0) { + fprintf(stderr, "Error: failed to read file %s at position %zu: %s\n", + CPUINFO_PATH, position, strerror(errno)); + exit(EXIT_FAILURE); + } + + position += (size_t) bytes_read; + if (bytes_read > 0) { + fwrite(buffer, 1, (size_t) bytes_read, stdout); + } + } while (bytes_read != 0); + + if (close(file) != 0) { + fprintf(stderr, "Error: failed to close %s: %s\n", CPUINFO_PATH, strerror(errno)); + exit(EXIT_FAILURE); + } + return EXIT_SUCCESS; +} |