]>
Commit | Line | Data |
---|---|---|
da79030f LM |
1 | /* |
2 | * cpu to uname machine name map | |
3 | * | |
7ff60e15 | 4 | * Copyright (c) 2009 Loïc Minier |
da79030f LM |
5 | * |
6 | * This program is free software; you can redistribute it and/or modify | |
7 | * it under the terms of the GNU General Public License as published by | |
8 | * the Free Software Foundation; either version 2 of the License, or | |
9 | * (at your option) any later version. | |
10 | * | |
11 | * This program is distributed in the hope that it will be useful, | |
12 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
13 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | * GNU General Public License for more details. | |
15 | * | |
16 | * You should have received a copy of the GNU General Public License | |
17 | * along with this program; if not, see <http://www.gnu.org/licenses/>. | |
18 | */ | |
19 | ||
20 | #include <stdio.h> | |
21 | ||
22 | #include "qemu.h" | |
23 | //#include "qemu-common.h" | |
24 | #include "cpu-uname.h" | |
25 | ||
26 | /* return highest utsname machine name for emulated instruction set | |
27 | * | |
28 | * NB: the default emulated CPU ("any") might not match any existing CPU, e.g. | |
29 | * on ARM it has all features turned on, so there is no perfect arch string to | |
30 | * return here */ | |
31 | const char *cpu_to_uname_machine(void *cpu_env) | |
32 | { | |
067d9831 AG |
33 | #if defined(TARGET_ARM) && !defined(TARGET_AARCH64) |
34 | ||
da79030f LM |
35 | /* utsname machine name on linux arm is CPU arch name + endianness, e.g. |
36 | * armv7l; to get a list of CPU arch names from the linux source, use: | |
37 | * grep arch_name: -A1 linux/arch/arm/mm/proc-*.S | |
38 | * see arch/arm/kernel/setup.c: setup_processor() | |
b2d06f96 | 39 | */ |
da79030f LM |
40 | |
41 | /* in theory, endianness is configurable on some ARM CPUs, but this isn't | |
42 | * used in user mode emulation */ | |
43 | #ifdef TARGET_WORDS_BIGENDIAN | |
44 | #define utsname_suffix "b" | |
45 | #else | |
46 | #define utsname_suffix "l" | |
47 | #endif | |
48 | if (arm_feature(cpu_env, ARM_FEATURE_V7)) | |
49 | return "armv7" utsname_suffix; | |
50 | if (arm_feature(cpu_env, ARM_FEATURE_V6)) | |
51 | return "armv6" utsname_suffix; | |
52 | /* earliest emulated CPU is ARMv5TE; qemu can emulate the 1026, but not its | |
53 | * Jazelle support */ | |
54 | return "armv5te" utsname_suffix; | |
55 | #elif defined(TARGET_X86_64) | |
56 | return "x86-64"; | |
57 | #elif defined(TARGET_I386) | |
58 | /* see arch/x86/kernel/cpu/bugs.c: check_bugs(), 386, 486, 586, 686 */ | |
6f152e9b AF |
59 | CPUState *cpu = ENV_GET_CPU((CPUX86State *)cpu_env); |
60 | int family = object_property_get_int(OBJECT(cpu), "family", NULL); | |
61 | if (family == 4) { | |
da79030f | 62 | return "i486"; |
6f152e9b AF |
63 | } |
64 | if (family == 5) { | |
da79030f | 65 | return "i586"; |
6f152e9b | 66 | } |
da79030f LM |
67 | return "i686"; |
68 | #else | |
69 | /* default is #define-d in each arch/ subdir */ | |
70 | return UNAME_MACHINE; | |
71 | #endif | |
72 | } |