From: YunQiang Su <syq@debian.org>
So here we need to detect the version of binaries and set
cpu_model for it.
[lv: original patch modified to move code into cpu_get_model()]
Signed-off-by: Laurent Vivier <laurent@vivier.eu>
---
Notes:
YunQiang Su, please add your Signed-off-by that was
missing in your original patch.
v2: call cpu_get_model() with the result of get_elf_eflags()
include/elf.h | 4 ++++
linux-user/mips/target_elf.h | 3 +++
linux-user/mips64/target_elf.h | 3 +++
3 files changed, 10 insertions(+)
diff --git a/include/elf.h b/include/elf.h
index e8a515ce3d..f2104809b1 100644
--- a/include/elf.h
+++ b/include/elf.h
@@ -40,6 +40,10 @@ typedef int64_t Elf64_Sxword;
#define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
#define EF_MIPS_ARCH_32 0x50000000 /* MIPS32 code. */
#define EF_MIPS_ARCH_64 0x60000000 /* MIPS64 code. */
+#define EF_MIPS_ARCH_32R2 0x70000000 /* MIPS32r2 code. */
+#define EF_MIPS_ARCH_64R2 0x80000000 /* MIPS64r2 code. */
+#define EF_MIPS_ARCH_32R6 0x90000000 /* MIPS32r6 code. */
+#define EF_MIPS_ARCH_64R6 0xa0000000 /* MIPS64r6 code. */
/* The ABI of a file. */
#define EF_MIPS_ABI_O32 0x00001000 /* O32 ABI. */
diff --git a/linux-user/mips/target_elf.h b/linux-user/mips/target_elf.h
index bed0b43259..ac14f99ac5 100644
--- a/linux-user/mips/target_elf.h
+++ b/linux-user/mips/target_elf.h
@@ -9,6 +9,9 @@
#define MIPS_TARGET_ELF_H
static inline const char *cpu_get_model(uint32_t eflags)
{
+ if ((eflags & EF_MIPS_ARCH_32R6) != 0) {
+ return "mips32r6-generic";
+ }
return "24Kf";
}
#endif
diff --git a/linux-user/mips64/target_elf.h b/linux-user/mips64/target_elf.h
index 5b6f4692e0..6cda7ae435 100644
--- a/linux-user/mips64/target_elf.h
+++ b/linux-user/mips64/target_elf.h
@@ -9,6 +9,9 @@
#define MIPS64_TARGET_ELF_H
static inline const char *cpu_get_model(uint32_t eflags)
{
+ if ((eflags & EF_MIPS_ARCH_64R6) != 0) {
+ return "I6400";
+ }
return "5KEf";
}
#endif
--
2.14.3
On 01/16/2018 09:25 AM, Laurent Vivier wrote:
> From: YunQiang Su <syq@debian.org>
>
> So here we need to detect the version of binaries and set
> cpu_model for it.
>
> [lv: original patch modified to move code into cpu_get_model()]
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
> ---
Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
> static inline const char *cpu_get_model(uint32_t eflags)
> {
> + if ((eflags & EF_MIPS_ARCH_32R6) != 0) {
> + return "mips32r6-generic";
> + }
> return "24Kf";
That said, I don't suppose it's worth diagnosing cases that we can't support
somehow? E.g. mips-linux-user and EF_MIPS_ARCH_64. Or even coldfire ISA-C.
r~
Le 16/01/2018 à 21:26, Richard Henderson a écrit :
> On 01/16/2018 09:25 AM, Laurent Vivier wrote:
>> From: YunQiang Su <syq@debian.org>
>>
>> So here we need to detect the version of binaries and set
>> cpu_model for it.
>>
>> [lv: original patch modified to move code into cpu_get_model()]
>> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
>> ---
>
> Reviewed-by: Richard Henderson <richard.henderson@linaro.org>
>
>> static inline const char *cpu_get_model(uint32_t eflags)
>> {
>> + if ((eflags & EF_MIPS_ARCH_32R6) != 0) {
>> + return "mips32r6-generic";
>> + }
>> return "24Kf";
>
> That said, I don't suppose it's worth diagnosing cases that we can't support
> somehow? E.g. mips-linux-user and EF_MIPS_ARCH_64. Or even coldfire ISA-C.
Yes, the idea is "if we don't know, do as before":
the real error will be reported by the loader.
Thanks,
Laurent
On 01/16/2018 02:25 PM, Laurent Vivier wrote:
> From: YunQiang Su <syq@debian.org>
>
> So here we need to detect the version of binaries and set
> cpu_model for it.
>
> [lv: original patch modified to move code into cpu_get_model()]
> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
> ---
>
> Notes:
> YunQiang Su, please add your Signed-off-by that was
> missing in your original patch.
>
> v2: call cpu_get_model() with the result of get_elf_eflags()
>
> include/elf.h | 4 ++++
> linux-user/mips/target_elf.h | 3 +++
> linux-user/mips64/target_elf.h | 3 +++
> 3 files changed, 10 insertions(+)
>
> diff --git a/include/elf.h b/include/elf.h
> index e8a515ce3d..f2104809b1 100644
> --- a/include/elf.h
> +++ b/include/elf.h
> @@ -40,6 +40,10 @@ typedef int64_t Elf64_Sxword;
> #define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
> #define EF_MIPS_ARCH_32 0x50000000 /* MIPS32 code. */
> #define EF_MIPS_ARCH_64 0x60000000 /* MIPS64 code. */
> +#define EF_MIPS_ARCH_32R2 0x70000000 /* MIPS32r2 code. */
> +#define EF_MIPS_ARCH_64R2 0x80000000 /* MIPS64r2 code. */
> +#define EF_MIPS_ARCH_32R6 0x90000000 /* MIPS32r6 code. */
> +#define EF_MIPS_ARCH_64R6 0xa0000000 /* MIPS64r6 code. */
>
> /* The ABI of a file. */
> #define EF_MIPS_ABI_O32 0x00001000 /* O32 ABI. */
> diff --git a/linux-user/mips/target_elf.h b/linux-user/mips/target_elf.h
> index bed0b43259..ac14f99ac5 100644
> --- a/linux-user/mips/target_elf.h
> +++ b/linux-user/mips/target_elf.h
> @@ -9,6 +9,9 @@
> #define MIPS_TARGET_ELF_H
> static inline const char *cpu_get_model(uint32_t eflags)
> {
> + if ((eflags & EF_MIPS_ARCH_32R6) != 0) {
if (eflags & EF_MIPS_ARCH_32R6) {
> + return "mips32r6-generic";
What is the gain of the "-generic" suffix?
Using "mips32r6":
Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
> + }
> return "24Kf";
> }
> #endif
> diff --git a/linux-user/mips64/target_elf.h b/linux-user/mips64/target_elf.h
> index 5b6f4692e0..6cda7ae435 100644
> --- a/linux-user/mips64/target_elf.h
> +++ b/linux-user/mips64/target_elf.h
> @@ -9,6 +9,9 @@
> #define MIPS64_TARGET_ELF_H
> static inline const char *cpu_get_model(uint32_t eflags)
> {
> + if ((eflags & EF_MIPS_ARCH_64R6) != 0) {
> + return "I6400";
> + }
> return "5KEf";
> }
> #endif
>
Le 16/01/2018 à 21:29, Philippe Mathieu-Daudé a écrit :
> On 01/16/2018 02:25 PM, Laurent Vivier wrote:
>> From: YunQiang Su <syq@debian.org>
>>
>> So here we need to detect the version of binaries and set
>> cpu_model for it.
>>
>> [lv: original patch modified to move code into cpu_get_model()]
>> Signed-off-by: Laurent Vivier <laurent@vivier.eu>
>> ---
>>
>> Notes:
>> YunQiang Su, please add your Signed-off-by that was
>> missing in your original patch.
>>
>> v2: call cpu_get_model() with the result of get_elf_eflags()
>>
>> include/elf.h | 4 ++++
>> linux-user/mips/target_elf.h | 3 +++
>> linux-user/mips64/target_elf.h | 3 +++
>> 3 files changed, 10 insertions(+)
>>
>> diff --git a/include/elf.h b/include/elf.h
>> index e8a515ce3d..f2104809b1 100644
>> --- a/include/elf.h
>> +++ b/include/elf.h
>> @@ -40,6 +40,10 @@ typedef int64_t Elf64_Sxword;
>> #define EF_MIPS_ARCH_5 0x40000000 /* -mips5 code. */
>> #define EF_MIPS_ARCH_32 0x50000000 /* MIPS32 code. */
>> #define EF_MIPS_ARCH_64 0x60000000 /* MIPS64 code. */
>> +#define EF_MIPS_ARCH_32R2 0x70000000 /* MIPS32r2 code. */
>> +#define EF_MIPS_ARCH_64R2 0x80000000 /* MIPS64r2 code. */
>> +#define EF_MIPS_ARCH_32R6 0x90000000 /* MIPS32r6 code. */
>> +#define EF_MIPS_ARCH_64R6 0xa0000000 /* MIPS64r6 code. */
>>
>> /* The ABI of a file. */
>> #define EF_MIPS_ABI_O32 0x00001000 /* O32 ABI. */
>> diff --git a/linux-user/mips/target_elf.h b/linux-user/mips/target_elf.h
>> index bed0b43259..ac14f99ac5 100644
>> --- a/linux-user/mips/target_elf.h
>> +++ b/linux-user/mips/target_elf.h
>> @@ -9,6 +9,9 @@
>> #define MIPS_TARGET_ELF_H
>> static inline const char *cpu_get_model(uint32_t eflags)
>> {
>> + if ((eflags & EF_MIPS_ARCH_32R6) != 0) {
>
> if (eflags & EF_MIPS_ARCH_32R6) {
>
>> + return "mips32r6-generic";
>
> What is the gain of the "-generic" suffix?
Don't know, but this the name in list given by:
qemu-system-mips -cpu help
>
> Using "mips32r6":
> Reviewed-by: Philippe Mathieu-Daudé <f4bug@amsat.org>
qemu-system-mips -cpu mips32r6
qemu-system-mips: unable to find CPU model 'mips32r6'
mips-softmmu/qemu-system-mips -cpu mips32r6-generic
qemu-system-mips: Could not load MIPS bios 'mips_bios.bin', and no
-kernel argument was specified
Thanks,
Laurent
© 2016 - 2025 Red Hat, Inc.