@@ -101,25 +101,42 @@ static enum cpuinfo_uarch decode_uarch(uint32_t cpu_family, uint32_t core_index,
101
101
return cpuinfo_uarch_unknown ;
102
102
}
103
103
104
- static void decode_package_name (char * package_name ) {
104
+ static int read_package_name_from_brand_string (char * package_name ) {
105
+ size_t size ;
106
+ if (sysctlbyname ("machdep.cpu.brand_string" , NULL , & size , NULL , 0 ) != 0 ) {
107
+ sysctlfail :
108
+ cpuinfo_log_warning ("sysctlbyname(\"machdep.cpu.brand_string\") failed: %s" , strerror (errno ));
109
+ return false;
110
+ }
111
+
112
+ char * brand_string = alloca (size );
113
+ if (sysctlbyname ("machdep.cpu.brand_string" , brand_string , & size , NULL , 0 ) != 0 )
114
+ goto sysctlfail ;
115
+ cpuinfo_log_debug ("machdep.cpu.brand_string: %s" , brand_string );
116
+
117
+ strlcpy (package_name , brand_string , CPUINFO_PACKAGE_NAME_MAX );
118
+ return true;
119
+ }
120
+
121
+ static int decode_package_name_from_hw_machine (char * package_name ) {
105
122
size_t size ;
106
123
if (sysctlbyname ("hw.machine" , NULL , & size , NULL , 0 ) != 0 ) {
107
124
cpuinfo_log_warning ("sysctlbyname(\"hw.machine\") failed: %s" , strerror (errno ));
108
- return ;
125
+ return false ;
109
126
}
110
127
111
128
char * machine_name = alloca (size );
112
129
if (sysctlbyname ("hw.machine" , machine_name , & size , NULL , 0 ) != 0 ) {
113
130
cpuinfo_log_warning ("sysctlbyname(\"hw.machine\") failed: %s" , strerror (errno ));
114
- return ;
131
+ return false ;
115
132
}
116
133
cpuinfo_log_debug ("hw.machine: %s" , machine_name );
117
134
118
135
char name [10 ];
119
136
uint32_t major = 0 , minor = 0 ;
120
137
if (sscanf (machine_name , "%9[^,0123456789]%" SCNu32 ",%" SCNu32 , name , & major , & minor ) != 3 ) {
121
138
cpuinfo_log_warning ("parsing \"hw.machine\" failed: %s" , strerror (errno ));
122
- return ;
139
+ return false ;
123
140
}
124
141
125
142
uint32_t chip_model = 0 ;
@@ -224,7 +241,9 @@ static void decode_package_name(char* package_name) {
224
241
}
225
242
if (chip_model != 0 ) {
226
243
snprintf (package_name , CPUINFO_PACKAGE_NAME_MAX , "Apple A%" PRIu32 "%c" , chip_model , suffix );
244
+ return true;
227
245
}
246
+ return false;
228
247
}
229
248
230
249
void cpuinfo_arm_mach_init (void ) {
@@ -275,7 +294,8 @@ void cpuinfo_arm_mach_init(void) {
275
294
.core_start = i * cores_per_package ,
276
295
.core_count = cores_per_package ,
277
296
};
278
- decode_package_name (packages [i ].name );
297
+ if (!read_package_name_from_brand_string (packages [i ].name ))
298
+ decode_package_name_from_hw_machine (packages [i ].name );
279
299
}
280
300
281
301
const uint32_t cpu_family = get_sys_info_by_name ("hw.cpufamily" );
0 commit comments