From 27c6507acb04d292b292ef0b4a1d65d76050207c Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Wed, 7 Apr 2021 13:08:46 +0200 Subject: [PATCH 1/5] [v0.96] Tracking issue #44 --- src/arm/udev.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/arm/udev.c b/src/arm/udev.c index 0304c93..21a07c9 100644 --- a/src/arm/udev.c +++ b/src/arm/udev.c @@ -20,6 +20,7 @@ int get_ncores_from_cpuinfo() { // 0-271 // 0-5 // 0-7 + /* int filelen; char* buf; if((buf = read_file(_PATH_CPUS_PRESENT, &filelen)) == NULL) { @@ -42,9 +43,9 @@ int get_ncores_from_cpuinfo() { return UNKNOWN; } - free(buf); + free(buf);*/ - return ncores; + return 1; } long parse_cpuinfo_field(char* buf, char* field_str, int field_base) { From cc356ecb074e67c0bd285d1963565f32e4979b66 Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Wed, 7 Apr 2021 15:36:01 +0200 Subject: [PATCH 2/5] [v0.96] Tracking issue #44. Add missing old uarchs --- src/arm/uarch.c | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) diff --git a/src/arm/uarch.c b/src/arm/uarch.c index d9a4724..a97b7ad 100644 --- a/src/arm/uarch.c +++ b/src/arm/uarch.c @@ -24,6 +24,10 @@ struct uarch { }; enum { + ISA_ARMv6, + ISA_ARMv6_T2, + ISA_ARMv6_KZ, + ISA_ARMv6_K, ISA_ARMv7_A, ISA_ARMv8_A, ISA_ARMv8_A_AArch32, @@ -36,8 +40,11 @@ enum { UARCH_UNKNOWN, // ARM UARCH_ARM7, - UARCH_ARM9, - UARCH_ARM11, // ARM 1136, ARM 1156, ARM 1176, or ARM 11MPCore. + UARCH_ARM9, + UARCH_ARM1136, + UARCH_ARM1156, + UARCH_ARM1176, + UARCH_ARM11MPCORE, UARCH_CORTEX_A5, UARCH_CORTEX_A7, UARCH_CORTEX_A8, @@ -98,6 +105,10 @@ enum { }; static const ISA isas_uarch[] = { + [UARCH_ARM1136] = ISA_ARMv6, + [UARCH_ARM1156] = ISA_ARMv6_T2, + [UARCH_ARM1176] = ISA_ARMv6_KZ, + [UARCH_ARM11MPCORE] = ISA_ARMv6_K, [UARCH_CORTEX_A5] = ISA_ARMv7_A, [UARCH_CORTEX_A7] = ISA_ARMv7_A, [UARCH_CORTEX_A8] = ISA_ARMv7_A, @@ -181,7 +192,7 @@ struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu) { uint32_t p = midr_get_part(midr); uint32_t v = midr_get_variant(midr); uint32_t r = midr_get_revision(midr); - + // ----------------------------------------------------------------------- // // IM: Implementer // // P: Part // @@ -189,7 +200,11 @@ struct uarch* get_uarch_from_midr(uint32_t midr, struct cpuInfo* cpu) { // R: Revision // // ----------------------------------------------------------------------- // // IM P V R // - UARCH_START + UARCH_START + CHECK_UARCH(arch, cpu, 'A', 0xB36, NA, NA, "ARM1136", UARCH_ARM1136, CPU_VENDOR_ARM) + CHECK_UARCH(arch, cpu, 'A', 0xB56, NA, NA, "ARM1156", UARCH_ARM1156, CPU_VENDOR_ARM) + CHECK_UARCH(arch, cpu, 'A', 0xB76, NA, NA, "ARM1176", UARCH_ARM1176, CPU_VENDOR_ARM) + CHECK_UARCH(arch, cpu, 'A', 0xB02, NA, NA, "ARM11 MPCore", UARCH_ARM11MPCORE, CPU_VENDOR_ARM) CHECK_UARCH(arch, cpu, 'A', 0xC05, NA, NA, "Cortex-A5", UARCH_CORTEX_A5, CPU_VENDOR_ARM) CHECK_UARCH(arch, cpu, 'A', 0xC07, NA, NA, "Cortex-A7", UARCH_CORTEX_A7, CPU_VENDOR_ARM) CHECK_UARCH(arch, cpu, 'A', 0xC08, NA, NA, "Cortex-A8", UARCH_CORTEX_A8, CPU_VENDOR_ARM) From 586283a1bed53517923adf16e5eba3eb6b4fc13d Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Wed, 7 Apr 2021 16:07:24 +0200 Subject: [PATCH 3/5] [v0.96] Add string names for recently added uarchs --- src/arm/uarch.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/arm/uarch.c b/src/arm/uarch.c index a97b7ad..5082137 100644 --- a/src/arm/uarch.c +++ b/src/arm/uarch.c @@ -154,6 +154,10 @@ static const ISA isas_uarch[] = { }; static char* isas_string[] = { + [ISA_ARMv6] = "ARMv6", + [ISA_ARMv6_T2] = "ARMv6T2", + [ISA_ARMv6_KZ] = "ARMv6KZ", + [ISA_ARMv6_K] = "ARMv6K", [ISA_ARMv7_A] = "ARMv7", [ISA_ARMv8_A] = "ARMv8", [ISA_ARMv8_A_AArch32] = "ARMv8 AArch32", From d239906f2265966894312fe93c8541902809f20b Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Wed, 7 Apr 2021 20:22:29 +0200 Subject: [PATCH 4/5] [v0.96] Consider the case where present file does not contain a hyphen --- src/arm/udev.c | 28 ++++++++++++++++++---------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/src/arm/udev.c b/src/arm/udev.c index 21a07c9..2346ebf 100644 --- a/src/arm/udev.c +++ b/src/arm/udev.c @@ -18,34 +18,42 @@ int get_ncores_from_cpuinfo() { // Examples: // 0-271 - // 0-5 // 0-7 - /* + // 0 + int filelen; char* buf; if((buf = read_file(_PATH_CPUS_PRESENT, &filelen)) == NULL) { perror("open"); - return UNKNOWN; + return UNKNOWN; + } + + int ncores; + char* tmp1; + if((tmp1 = strstr(buf, "-")) == NULL) { + // file contains no - character, we assume that it contains 0, + // which means that the CPU contains only one core + return 1; + } + else { + tmp1++; } - - int ncores = 0; - char* tmp1 = strstr(buf, "-") + 1; char* tmp2 = strstr(buf, "\n"); char ncores_str[filelen]; memset(ncores_str, 0, sizeof(char) * filelen); memcpy(ncores_str, tmp1, tmp2-tmp1); - + char* end; errno = 0; - ncores = strtol(ncores_str, &end, 10) + 1; + ncores = strtol(ncores_str, &end, 10) + 1; if(errno != 0) { perror("strtol"); return UNKNOWN; } - free(buf);*/ + free(buf); - return 1; + return ncores; } long parse_cpuinfo_field(char* buf, char* field_str, int field_base) { From a67a605fb50af3539c5762dd994b0c7d733c4b5b Mon Sep 17 00:00:00 2001 From: Dr-Noob Date: Thu, 8 Apr 2021 10:12:01 +0200 Subject: [PATCH 5/5] [v0.96] Print "Unknown" string when manufacturing process is unkown --- src/x86/uarch.c | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/x86/uarch.c b/src/x86/uarch.c index 77eb08c..0f0f3c2 100644 --- a/src/x86/uarch.c +++ b/src/x86/uarch.c @@ -38,6 +38,8 @@ typedef uint32_t MICROARCH; +#define STRING_UNKNOWN "Unknown" + // Data not available #define NA -1 @@ -398,14 +400,19 @@ char* get_str_uarch(struct cpuInfo* cpu) { } char* get_str_process(struct cpuInfo* cpu) { - char* str = malloc(sizeof(char) * (4+2+1)); - uint32_t process = cpu->arch->process; - - if(process > 100) + char* str = malloc(sizeof(char) * (strlen(STRING_UNKNOWN)+1)); + int32_t process = cpu->arch->process; + + if(process == UNK) { + snprintf(str, strlen(STRING_UNKNOWN)+1, STRING_UNKNOWN); + } + else if(process > 100) { sprintf(str, "%.2fum", (double)process/100); - else + } + else { sprintf(str, "%dnm", process); - + } + return str; }