From nobody Tue Feb 10 17:02:53 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (208.118.235.17 [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519148337803717.6944853711647; Tue, 20 Feb 2018 09:38:57 -0800 (PST) Received: from localhost ([::1]:56827 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBsN-0001mr-8R for importer@patchew.org; Tue, 20 Feb 2018 12:38:47 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44184) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBnM-0006ko-1m for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eoBnI-0003to-Q1 for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:36 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:45847) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eoBnI-0003t2-CD for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:32 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue002 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MXAA8-1fHq840ALs-00Vv28; Tue, 20 Feb 2018 18:33:12 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 20 Feb 2018 18:33:04 +0100 Message-Id: <20180220173307.25125-2-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180220173307.25125-1-laurent@vivier.eu> References: <20180220173307.25125-1-laurent@vivier.eu> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Provags-ID: V03:K0:TMZE7q7WBsRJ1gYsWT2lpTB8yjjaRZgtkQun0ckXfvcC84ylsts NMz30UMbQV5ayaMazsQ+gTTROCBvgN+RJv37rHPwtssiLQqLp3rAy0I3bUDyvDAGQEJ5o+i Ryjgx0NGSC2loZjSlUYn90+oxjAcCUqIH43+ET27CBb8kGc1rlit5RQkXzDQQw0toLHjqTV 3d27A2PWMwQBPBO9b4Ecw== X-UI-Out-Filterresults: notjunk:1;V01:K0:WHLT+qpBjhY=:iZufqGgDt7bZYn7XvWHscg 9v12ac2zNOWQ9POaF2ndrlkQRjwfrIEJPnT3Q21F63Im1xYXbrkJCTDtJLO8Hm7JjV+QJoI6o fMrKJ2KH6ahHJsnV2x9FaKk1WMahQvdYqhrW7dKhuodsjt4kaUo9LfbHFP5jZjJEEU7hcgNAH SmCOs9lc0WKFRh6MAQteBatyoa6ygEFobTzf1dOuIwhhrS7B1Njg4ye2oFunP+nkRfiXU22xI 5h/nnqb1ih6VUUgCNuBuBIcuY0OXCdX41gTldGtRIzdqzmG0xQ0iQfGsM80Q1MHypgG78RMzI 2Tudt+uM4RYUm/2b24EMlUFIkRor86YIO0pQyA87cZh2vAH9jcUVyy7TjihuLifTG2Ye6RLIE kDhZ8VWM74DCnOP697daie8qgeRboMAeoQGpKFS1X2iMfgStPT8+eWtJnX5nLUkW/x407PIaZ 6iSYFNKRAVLXrG8RhJMXbMzSQ3wjX6RtRhwNQPOTs7tkFFM5LMzhIRdtUh5bR7Y1mmch7bzaG 2Z7h+kve7SOUBEN1kq7i/Wg130tp2nulCzYhTXX5LlqsBCMNRuN1Cp+5iZ0mDv+ynpcayMoIW Jcz6p6GPvl7MG+QPrkqDk+dCzCUOoqu+AjFiDYQenSacjaiH0ZbWUQCDOb07a5N8DtE0eZwvS wCR5LU/O2s6x4WPgw/jjpLJExo/qeg4d1R8KrrNOblfXqBoh2kEIEN6w4IBbIzKUrPW13phIj Lzt6neBrYzAzMlanfgLP1jA+hjCw9fkZMdHxcgvYhtZ60SXg4Tt/jYNEJ9g= X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.130 Subject: [Qemu-devel] [PATCH v5 1/4] linux-user: Move CPU type name selection to a function X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , YunQiang Su , Riku Voipio , Richard Henderson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Laurent Vivier , Igor Mammedov , Aaron Sierra Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Instead of a sequence of "#if ... #endif" move the selection to a function in linux-user/*/target_elf.h We can't add them in linux-user/*/target_cpu.h because we will need to include "elf.h" to use ELF flags with eflags, and including "elf.h" in "target_cpu.h" introduces some conflicts in elfload.c Suggested-by: Richard Henderson Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 --- Notes: v5: some architectures like sparc32plus are 32bit architectures using 64bit processors. We need to select the CPU according to the TARGET_ABI ("sparc" path to target_elf.h) and the TARGET_ARCH ("sparc64"). (Reported by Peter Maydell) v3: change "#if ... #endif" structure for ppc v2: new patch in the series =20 v3: change "#if ... #endif" structure for ppc v2: new patch in the series linux-user/aarch64/target_elf.h | 14 +++++++++++++ linux-user/alpha/target_elf.h | 14 +++++++++++++ linux-user/arm/target_elf.h | 14 +++++++++++++ linux-user/cris/target_elf.h | 14 +++++++++++++ linux-user/hppa/target_elf.h | 14 +++++++++++++ linux-user/i386/target_elf.h | 14 +++++++++++++ linux-user/m68k/target_elf.h | 14 +++++++++++++ linux-user/main.c | 41 ++--------------------------------= ---- linux-user/microblaze/target_elf.h | 14 +++++++++++++ linux-user/mips/target_elf.h | 14 +++++++++++++ linux-user/mips64/target_elf.h | 14 +++++++++++++ linux-user/nios2/target_elf.h | 14 +++++++++++++ linux-user/openrisc/target_elf.h | 14 +++++++++++++ linux-user/ppc/target_elf.h | 18 +++++++++++++++++ linux-user/s390x/target_elf.h | 14 +++++++++++++ linux-user/sh4/target_elf.h | 14 +++++++++++++ linux-user/sparc/target_elf.h | 18 +++++++++++++++++ linux-user/sparc64/target_elf.h | 14 +++++++++++++ linux-user/tilegx/target_elf.h | 14 +++++++++++++ linux-user/unicore32/target_elf.h | 14 +++++++++++++ linux-user/x86_64/target_elf.h | 14 +++++++++++++ 21 files changed, 290 insertions(+), 39 deletions(-) create mode 100644 linux-user/aarch64/target_elf.h create mode 100644 linux-user/alpha/target_elf.h create mode 100644 linux-user/arm/target_elf.h create mode 100644 linux-user/cris/target_elf.h create mode 100644 linux-user/hppa/target_elf.h create mode 100644 linux-user/i386/target_elf.h create mode 100644 linux-user/m68k/target_elf.h create mode 100644 linux-user/microblaze/target_elf.h create mode 100644 linux-user/mips/target_elf.h create mode 100644 linux-user/mips64/target_elf.h create mode 100644 linux-user/nios2/target_elf.h create mode 100644 linux-user/openrisc/target_elf.h create mode 100644 linux-user/ppc/target_elf.h create mode 100644 linux-user/s390x/target_elf.h create mode 100644 linux-user/sh4/target_elf.h create mode 100644 linux-user/sparc/target_elf.h create mode 100644 linux-user/sparc64/target_elf.h create mode 100644 linux-user/tilegx/target_elf.h create mode 100644 linux-user/unicore32/target_elf.h create mode 100644 linux-user/x86_64/target_elf.h diff --git a/linux-user/aarch64/target_elf.h b/linux-user/aarch64/target_el= f.h new file mode 100644 index 0000000000..a7eb962fba --- /dev/null +++ b/linux-user/aarch64/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef AARCH64_TARGET_ELF_H +#define AARCH64_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/alpha/target_elf.h b/linux-user/alpha/target_elf.h new file mode 100644 index 0000000000..344e9f4d39 --- /dev/null +++ b/linux-user/alpha/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef ALPHA_TARGET_ELF_H +#define ALPHA_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/arm/target_elf.h b/linux-user/arm/target_elf.h new file mode 100644 index 0000000000..58ff6a0986 --- /dev/null +++ b/linux-user/arm/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef ARM_TARGET_ELF_H +#define ARM_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/cris/target_elf.h b/linux-user/cris/target_elf.h new file mode 100644 index 0000000000..99eb4ec704 --- /dev/null +++ b/linux-user/cris/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef CRIS_TARGET_ELF_H +#define CRIS_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/hppa/target_elf.h b/linux-user/hppa/target_elf.h new file mode 100644 index 0000000000..82b4e9535e --- /dev/null +++ b/linux-user/hppa/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef HPPA_TARGET_ELF_H +#define HPPA_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/i386/target_elf.h b/linux-user/i386/target_elf.h new file mode 100644 index 0000000000..1c6142e7da --- /dev/null +++ b/linux-user/i386/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef I386_TARGET_ELF_H +#define I386_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "qemu32"; +} +#endif diff --git a/linux-user/m68k/target_elf.h b/linux-user/m68k/target_elf.h new file mode 100644 index 0000000000..df375ad5d3 --- /dev/null +++ b/linux-user/m68k/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef M68K_TARGET_ELF_H +#define M68K_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/main.c b/linux-user/main.c index 7de0e02487..24ecef3607 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -35,6 +35,7 @@ #include "elf.h" #include "exec/log.h" #include "trace/control.h" +#include "target_elf.h" =20 char *exec_path; =20 @@ -4344,45 +4345,7 @@ int main(int argc, char **argv, char **envp) init_qemu_uname_release(); =20 if (cpu_model =3D=3D NULL) { -#if defined(TARGET_I386) -#ifdef TARGET_X86_64 - cpu_model =3D "qemu64"; -#else - cpu_model =3D "qemu32"; -#endif -#elif defined(TARGET_ARM) - cpu_model =3D "any"; -#elif defined(TARGET_UNICORE32) - cpu_model =3D "any"; -#elif defined(TARGET_M68K) - cpu_model =3D "any"; -#elif defined(TARGET_SPARC) -#ifdef TARGET_SPARC64 - cpu_model =3D "TI UltraSparc II"; -#else - cpu_model =3D "Fujitsu MB86904"; -#endif -#elif defined(TARGET_MIPS) -#if defined(TARGET_ABI_MIPSN32) || defined(TARGET_ABI_MIPSN64) - cpu_model =3D "5KEf"; -#else - cpu_model =3D "24Kf"; -#endif -#elif defined TARGET_OPENRISC - cpu_model =3D "or1200"; -#elif defined(TARGET_PPC) -# ifdef TARGET_PPC64 - cpu_model =3D "POWER8"; -# else - cpu_model =3D "750"; -# endif -#elif defined TARGET_SH4 - cpu_model =3D "sh7785"; -#elif defined TARGET_S390X - cpu_model =3D "qemu"; -#else - cpu_model =3D "any"; -#endif + cpu_model =3D cpu_get_model(0); } tcg_exec_init(0); /* NOTE: we need to init the CPU at this stage to get diff --git a/linux-user/microblaze/target_elf.h b/linux-user/microblaze/tar= get_elf.h new file mode 100644 index 0000000000..8a8f1debff --- /dev/null +++ b/linux-user/microblaze/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef MICROBLAZE_TARGET_ELF_H +#define MICROBLAZE_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/mips/target_elf.h b/linux-user/mips/target_elf.h new file mode 100644 index 0000000000..bed0b43259 --- /dev/null +++ b/linux-user/mips/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef MIPS_TARGET_ELF_H +#define MIPS_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "24Kf"; +} +#endif diff --git a/linux-user/mips64/target_elf.h b/linux-user/mips64/target_elf.h new file mode 100644 index 0000000000..5b6f4692e0 --- /dev/null +++ b/linux-user/mips64/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef MIPS64_TARGET_ELF_H +#define MIPS64_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "5KEf"; +} +#endif diff --git a/linux-user/nios2/target_elf.h b/linux-user/nios2/target_elf.h new file mode 100644 index 0000000000..801e20afaf --- /dev/null +++ b/linux-user/nios2/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef NIOS2_TARGET_ELF_H +#define NIOS2_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/openrisc/target_elf.h b/linux-user/openrisc/target_= elf.h new file mode 100644 index 0000000000..40ceb025c9 --- /dev/null +++ b/linux-user/openrisc/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef OPENRISC_TARGET_ELF_H +#define OPENRISC_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "or1200"; +} +#endif diff --git a/linux-user/ppc/target_elf.h b/linux-user/ppc/target_elf.h new file mode 100644 index 0000000000..576a5b9959 --- /dev/null +++ b/linux-user/ppc/target_elf.h @@ -0,0 +1,18 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef PPC_TARGET_ELF_H +#define PPC_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ +#ifdef TARGET_PPC64 + return "POWER8"; +#else + return "750"; +#endif +} +#endif diff --git a/linux-user/s390x/target_elf.h b/linux-user/s390x/target_elf.h new file mode 100644 index 0000000000..8114b59c1d --- /dev/null +++ b/linux-user/s390x/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef S390X_TARGET_ELF_H +#define S390X_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "qemu"; +} +#endif diff --git a/linux-user/sh4/target_elf.h b/linux-user/sh4/target_elf.h new file mode 100644 index 0000000000..f485e0cef2 --- /dev/null +++ b/linux-user/sh4/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef SH4_TARGET_ELF_H +#define SH4_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "sh7785"; +} +#endif diff --git a/linux-user/sparc/target_elf.h b/linux-user/sparc/target_elf.h new file mode 100644 index 0000000000..a510ceb612 --- /dev/null +++ b/linux-user/sparc/target_elf.h @@ -0,0 +1,18 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef SPARC_TARGET_ELF_H +#define SPARC_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ +#ifdef TARGET_SPARC64 + return "TI UltraSparc II"; +#else + return "Fujitsu MB86904"; +#endif +} +#endif diff --git a/linux-user/sparc64/target_elf.h b/linux-user/sparc64/target_el= f.h new file mode 100644 index 0000000000..d6e388f1cf --- /dev/null +++ b/linux-user/sparc64/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef SPARC64_TARGET_ELF_H +#define SPARC64_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "TI UltraSparc II"; +} +#endif diff --git a/linux-user/tilegx/target_elf.h b/linux-user/tilegx/target_elf.h new file mode 100644 index 0000000000..7197bb0005 --- /dev/null +++ b/linux-user/tilegx/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef TILEGX_TARGET_ELF_H +#define TILEGX_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/unicore32/target_elf.h b/linux-user/unicore32/targe= t_elf.h new file mode 100644 index 0000000000..e2bfcb2ca3 --- /dev/null +++ b/linux-user/unicore32/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef UNICORE32_TARGET_ELF_H +#define UNICORE32_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "any"; +} +#endif diff --git a/linux-user/x86_64/target_elf.h b/linux-user/x86_64/target_elf.h new file mode 100644 index 0000000000..7b76a90de8 --- /dev/null +++ b/linux-user/x86_64/target_elf.h @@ -0,0 +1,14 @@ +/* + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation, or (at your option) any + * later version. See the COPYING file in the top-level directory. + */ + +#ifndef X86_64_TARGET_ELF_H +#define X86_64_TARGET_ELF_H +static inline const char *cpu_get_model(uint32_t eflags) +{ + return "qemu64"; +} +#endif --=20 2.14.3 From nobody Tue Feb 10 17:02:53 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519148234124860.6037635863678; Tue, 20 Feb 2018 09:37:14 -0800 (PST) Received: from localhost ([::1]:56820 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBqn-0000Zs-3N for importer@patchew.org; Tue, 20 Feb 2018 12:37:09 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44181) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBnL-0006kl-Rf for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eoBnI-0003ta-MH for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:35 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:42157) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eoBnI-0003t0-Bt for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:32 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue002 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MPuba-1et7T10fMQ-0054Te; Tue, 20 Feb 2018 18:33:13 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 20 Feb 2018 18:33:05 +0100 Message-Id: <20180220173307.25125-3-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180220173307.25125-1-laurent@vivier.eu> References: <20180220173307.25125-1-laurent@vivier.eu> X-Provags-ID: V03:K0:qyKVvQ7m+z322Nf+zSozXb2aP+hfCmvXPH7P5G13cMAsw16k9MA NRVZSjh1oGqmxD+68MDR0ngxDp2MTItYCZtB+2tzKBdxwxh/BkNZ8Rk/ol30mwsczMcJw+V tYEyydNERgds/BPhP1+piCO2BKZcTkc7Tp/o6p4Fd5w/0GtqC+komip2i5noABNVdexcBNQ 3R6ZgimwF1k8/jNonYSOg== X-UI-Out-Filterresults: notjunk:1;V01:K0:hxBbdItrC/M=:5wba/4CpiFyODznPpp75NU s6oRNm0d8gyUY8VyKI+FzfrMqa4Gt9W2OO1OLz5u8pHmJC663ciuzyyqYm30mvu9YVFcil7cj 1e7pytT05HY9m0qqcPb2pcVne3cZYY4jXfLbcniPIQHsc+o04tUUbpwsmM/7yoe6AXTWLbjQ0 RoPgxVH7y49HZzpC/r0t8bApGCRlCGzvVOWmCi2HXX3L2I3eV2EWtFuBs065kZNoXqGUUhRIJ usxbUxhIxLgL71RFOz0pCokC8ULuMfYMUPxukO7tW1r+wuxcNVjCFdaDW4zEY8tVn5FAvnwwZ ZM3kUZtYKPQzz202yKVxTBY1v7UcCIP5DnPMcieoH5nxOtjgTbfHzFjla1tfyulVti2/fhleo u/rCgJSGocpBN6ZARs5JStqH98DUrilvpBaboup/RywzDx+NoHwz7xRrPDIWPiFvddPZdMPFY LUFAvdxBHW5eSmMj6VccZ0LqwP9jVkIo0ptGbCRltEBKmPf0h+qx8JaTxF03Cwgdtj31K8nC+ hkGByt6CKGdh5A+FgGRPev2/APcP6H/C3WlF9DJY2L6QtnrWPYYaqdAjJla1K1SMoJuMy7n3B 7FO0AjYXeStVkdagVtz95UZJspBhnCoLDpEQ4kqFhnuffu16qy4PSIhQTXJDx+jLpJEqgdUlw Htge9gwEO6p98q0SJctvslD9QqEyyfzXAmo5Qd+i+MXw+PvA1dAlM71DjyhSXi2KljtBMV3T6 9HsknMKdtHSi6y6AkCDw1nwoSgWDOGGlK00dnA== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PATCH v5 2/4] linux-user: introduce functions to detect CPU type X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , YunQiang Su , Riku Voipio , Richard Henderson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Laurent Vivier , Igor Mammedov , Aaron Sierra Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: YunQiang Su Add a function to return ELF e_flags and use it to select the CPU model. Signed-off-by: YunQiang Su [lv: split the patch and some cleanup in get_elf_eflags()] Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- Notes: v4: add YunQiang Su's Signed-off-by v2: call cpu_get_model() with the result of get_elf_eflags() linux-user/elfload.c | 35 +++++++++++++++++++++++++++++++++++ linux-user/main.c | 20 ++++++++++---------- linux-user/qemu.h | 1 + 3 files changed, 46 insertions(+), 10 deletions(-) diff --git a/linux-user/elfload.c b/linux-user/elfload.c index 8bb9a2c3e8..0208022445 100644 --- a/linux-user/elfload.c +++ b/linux-user/elfload.c @@ -2396,6 +2396,41 @@ give_up: g_free(syms); } =20 +uint32_t get_elf_eflags(int fd) +{ + struct elfhdr ehdr; + off_t offset; + int ret; + + /* Read ELF header */ + offset =3D lseek(fd, 0, SEEK_SET); + if (offset =3D=3D (off_t) -1) { + return 0; + } + ret =3D read(fd, &ehdr, sizeof(ehdr)); + if (ret < sizeof(ehdr)) { + return 0; + } + offset =3D lseek(fd, offset, SEEK_SET); + if (offset =3D=3D (off_t) -1) { + return 0; + } + + /* Check ELF signature */ + if (!elf_check_ident(&ehdr)) { + return 0; + } + + /* check header */ + bswap_ehdr(&ehdr); + if (!elf_check_ehdr(&ehdr)) { + return 0; + } + + /* return architecture id */ + return ehdr.e_flags; +} + int load_elf_binary(struct linux_binprm *bprm, struct image_info *info) { struct image_info interp_info; diff --git a/linux-user/main.c b/linux-user/main.c index 24ecef3607..bab5bbcfb1 100644 --- a/linux-user/main.c +++ b/linux-user/main.c @@ -4344,8 +4344,17 @@ int main(int argc, char **argv, char **envp) =20 init_qemu_uname_release(); =20 + execfd =3D qemu_getauxval(AT_EXECFD); + if (execfd =3D=3D 0) { + execfd =3D open(filename, O_RDONLY); + if (execfd < 0) { + printf("Error while loading %s: %s\n", filename, strerror(errn= o)); + _exit(EXIT_FAILURE); + } + } + if (cpu_model =3D=3D NULL) { - cpu_model =3D cpu_get_model(0); + cpu_model =3D cpu_get_model(get_elf_eflags(execfd)); } tcg_exec_init(0); /* NOTE: we need to init the CPU at this stage to get @@ -4438,15 +4447,6 @@ int main(int argc, char **argv, char **envp) cpu->opaque =3D ts; task_settid(ts); =20 - execfd =3D qemu_getauxval(AT_EXECFD); - if (execfd =3D=3D 0) { - execfd =3D open(filename, O_RDONLY); - if (execfd < 0) { - printf("Error while loading %s: %s\n", filename, strerror(errn= o)); - _exit(EXIT_FAILURE); - } - } - ret =3D loader_exec(execfd, filename, target_argv, target_environ, reg= s, info, &bprm); if (ret !=3D 0) { diff --git a/linux-user/qemu.h b/linux-user/qemu.h index 4edd7d0c08..47ca71159c 100644 --- a/linux-user/qemu.h +++ b/linux-user/qemu.h @@ -188,6 +188,7 @@ int loader_exec(int fdexec, const char *filename, char = **argv, char **envp, struct target_pt_regs * regs, struct image_info *infop, struct linux_binprm *); =20 +uint32_t get_elf_eflags(int fd); int load_elf_binary(struct linux_binprm *bprm, struct image_info *info); int load_flt_binary(struct linux_binprm *bprm, struct image_info *info); =20 --=20 2.14.3 From nobody Tue Feb 10 17:02:53 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 151914823152564.79686269693343; Tue, 20 Feb 2018 09:37:11 -0800 (PST) Received: from localhost ([::1]:56821 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBqo-0000bA-MM for importer@patchew.org; Tue, 20 Feb 2018 12:37:10 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44204) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBnN-0006kr-72 for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:38 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eoBnM-0003vo-8R for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:37 -0500 Received: from mout.kundenserver.de ([212.227.126.134]:46447) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eoBnL-0003v2-Ut for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:36 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue002 [212.227.15.167]) with ESMTPSA (Nemesis) id 0MOo90-1es1XT49XK-006AwE; Tue, 20 Feb 2018 18:33:14 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 20 Feb 2018 18:33:06 +0100 Message-Id: <20180220173307.25125-4-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180220173307.25125-1-laurent@vivier.eu> References: <20180220173307.25125-1-laurent@vivier.eu> X-Provags-ID: V03:K0:RxZ/kPRTEEkZXuQ1jmhJEhfNcyb1Tg8vpRWgqIfuMLt603kdnZ8 E9C+hAGSV2uabMN/QP6M909IM/06wKxSBA0G+g/UIskW52DSaHt+GdNhBNxyrxEw20/Ug8I 2tDplCK6zXBy/CBXbhjDE+jxjdwsMZ/MSyZQlWWTXIgO0017TtuFfS/aOckNlHg/idixup6 2NE33bua1/JcagfMECYyA== X-UI-Out-Filterresults: notjunk:1;V01:K0:iV/lRNcO5bE=:kShk5yhdw4JN8svurFjAnv YVCAv+RYtDn/PqEhPFkoMlyBjBFO9MTjwj7oGrikyaamPpvDeRUFYr+KP9Q8hb4XD/+8pA/FD pNqRperIKP3s0kfATsdKXz+oioXYfmCKDV6unBzFLbzZkvm9zfmgBd3NlcGLZOwHSoHcd/1vp MeDIjGY1EzETFFs6UIF3h7jtikXDkuIuZDSDvJSsK/KwqZ3MkSip91PjeplUAMvvBRd8x/2YP azGRh9e3dptdfrlFvrgmwdOApaXj+lArdOwdaLGLnBSRwF0h0RAtyD98O0VaQUsUMWWD77Q3g ETfG/BxhwUQNoviTods0mFnkLHONOUFvbNluF7MOAmlsqcwucK0+1DFGH41JyAbsSmBb+PkCf gatOpeyo+aVqUcgbpYMdLgdh5SQpKxjBnOZNqDPYXE3EWv2NokQ0rrnm0en8q1tv5tU1wo70n w6G6mKxiL6wkQbtBkZ0dgSj/uQ5DT4IsvmPTKI7QG6z5xzVOQ3BVUceVe9BiBi4+rpf1xn4xl cc1Zg1JFsNLUnSYPzZHrZ3+RBNhqelAOFA/PdMnCRNUfEZEmI1g+0szXNediflsV5TWYmXUxd AnA83v4ZV8Tv0BoDkYXL1BjN8IlAAgt6yqGdVQ8MKBQZvOZA+4iA5ZPoCGJSTU3tsseMliTBG HtpkGYoADGJLvLL5zD8QHHIfiohGmpAvc8jgaF1xt5XMihlDIOgq5WlmIZlvS1kFBwoo3b148 mQjGWOUyKpWOIJ1T+vXPTexHCeKf+HW/QKY5vA== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.134 Subject: [Qemu-devel] [PATCH v5 3/4] linux-user, m68k: select CPU according to ELF header values X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , YunQiang Su , Riku Voipio , Richard Henderson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Laurent Vivier , Igor Mammedov , Aaron Sierra Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" M680x0 doesn't support the same set of instructions as ColdFire, so we can't use "any" CPU type to execute m68020 instructions. We select CPU type ("m68040" or "any" for ColdFire) according to the ELF header. If we can't, we use by default the value used until now: "any". Signed-off-by: Laurent Vivier Reviewed-by: Richard Henderson --- Notes: v3: check for EF_M68K_M68000 add EF_M68K_* flags in elf.h set 680x0 default CPU to m68040 v2: call cpu_get_model() with the result of get_elf_eflags() include/elf.h | 28 ++++++++++++++++++++++++++++ linux-user/m68k/target_elf.h | 6 ++++++ 2 files changed, 34 insertions(+) diff --git a/include/elf.h b/include/elf.h index e8a515ce3d..ca9a419043 100644 --- a/include/elf.h +++ b/include/elf.h @@ -537,6 +537,34 @@ typedef struct { #define HWCAP_S390_HIGH_GPRS 512 #define HWCAP_S390_TE 1024 =20 +/* M68K specific definitions. */ +/* We use the top 24 bits to encode information about the + architecture variant. */ +#define EF_M68K_CPU32 0x00810000 +#define EF_M68K_M68000 0x01000000 +#define EF_M68K_CFV4E 0x00008000 +#define EF_M68K_FIDO 0x02000000 +#define EF_M68K_ARCH_MASK \ + (EF_M68K_M68000 | EF_M68K_CPU32 | EF_M68K_CFV4E | EF_M68K_FIDO) + +/* We use the bottom 8 bits to encode information about the + coldfire variant. If we use any of these bits, the top 24 bits are + either 0 or EF_M68K_CFV4E. */ +#define EF_M68K_CF_ISA_MASK 0x0F /* Which ISA */ +#define EF_M68K_CF_ISA_A_NODIV 0x01 /* ISA A except for div */ +#define EF_M68K_CF_ISA_A 0x02 +#define EF_M68K_CF_ISA_A_PLUS 0x03 +#define EF_M68K_CF_ISA_B_NOUSP 0x04 /* ISA_B except for USP */ +#define EF_M68K_CF_ISA_B 0x05 +#define EF_M68K_CF_ISA_C 0x06 +#define EF_M68K_CF_ISA_C_NODIV 0x07 /* ISA C except for div */ +#define EF_M68K_CF_MAC_MASK 0x30 +#define EF_M68K_CF_MAC 0x10 /* MAC */ +#define EF_M68K_CF_EMAC 0x20 /* EMAC */ +#define EF_M68K_CF_EMAC_B 0x30 /* EMAC_B */ +#define EF_M68K_CF_FLOAT 0x40 /* Has float insns */ +#define EF_M68K_CF_MASK 0xFF + /* * 68k ELF relocation types */ diff --git a/linux-user/m68k/target_elf.h b/linux-user/m68k/target_elf.h index df375ad5d3..998fe0fe2f 100644 --- a/linux-user/m68k/target_elf.h +++ b/linux-user/m68k/target_elf.h @@ -9,6 +9,12 @@ #define M68K_TARGET_ELF_H static inline const char *cpu_get_model(uint32_t eflags) { + if (eflags =3D=3D 0 || (eflags & EF_M68K_M68000)) { + /* 680x0 */ + return "m68040"; + } + + /* Coldfire */ return "any"; } #endif --=20 2.14.3 From nobody Tue Feb 10 17:02:53 2026 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) client-ip=208.118.235.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of gnu.org designates 208.118.235.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org Return-Path: Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) by mx.zohomail.com with SMTPS id 1519148119074656.0614975401123; Tue, 20 Feb 2018 09:35:19 -0800 (PST) Received: from localhost ([::1]:56807 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBow-0007eW-Kx for importer@patchew.org; Tue, 20 Feb 2018 12:35:14 -0500 Received: from eggs.gnu.org ([2001:4830:134:3::10]:44183) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1eoBnM-0006kn-1O for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:37 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1eoBnJ-0003u4-4H for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:36 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:50853) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1eoBnI-0003tE-RJ for qemu-devel@nongnu.org; Tue, 20 Feb 2018 12:33:33 -0500 Received: from localhost.localdomain ([78.238.229.36]) by mrelayeu.kundenserver.de (mreue002 [212.227.15.167]) with ESMTPSA (Nemesis) id 0Lf3TU-1eQ8Vm3NMW-00opQq; Tue, 20 Feb 2018 18:33:15 +0100 From: Laurent Vivier To: qemu-devel@nongnu.org Date: Tue, 20 Feb 2018 18:33:07 +0100 Message-Id: <20180220173307.25125-5-laurent@vivier.eu> X-Mailer: git-send-email 2.14.3 In-Reply-To: <20180220173307.25125-1-laurent@vivier.eu> References: <20180220173307.25125-1-laurent@vivier.eu> X-Provags-ID: V03:K0:PlNc1UNZEKhpV6ZpUvEufRjpHqGrX8d+I3fgc7fcnbFxLQvlhDH WQ+pZl6ne1w3c6ClT8FZ1OFK5H0ojmBc3HVaUbwYjdrkY3wYQ45yW1YbyukKaBYIdHDs4I1 mDBSMkdvENnbfPM8Onm/pJ96AZi8dLTdIjlHmfImweY43stroirXjhjJh6uk7xC5ybI7aan v4eu3sLP7LFR68jwxUBww== X-UI-Out-Filterresults: notjunk:1;V01:K0:brNzjOs5WaU=:vNP4gSoYKZ6ijxb8RCBaVM 7lNzM2ErUix97vn/PMYC9P3djYnJhvJ/X4jkABT77UGGjsMK8Wb5Uxun5Rqm0d8NJ9XBO2zJy VWUYKzL8Ap5yj0dy+CmmYMY69N60PGVXl3SDUkrMCNEijPRmODPgOSRIbtD24Ztn7oh1d07F/ hjzkMJAvKyROxecz0ZF1VvscsfhuNUFnETbNVLMZTgoRdSKyI+f5mThQ3z4hRSwboeqnRho8x AsgfRyl6id/JFkSuEUdpIWW+jWfyyDm2Bk6QP1M1zifvnRKtXFSCrtWaFEEyGvXOqTvLWosUZ cQ/QsVaR5gGFKK5hwCC5sGdenxgRiPRSijcluyp2XNKXowTHeZMZ3wP+7W1QluTOJ4zqwJJLv jqsjbiEsj03TVBzBL6XzaKYxTiLxnTnIs2Y/CFdUNTVKpxjvCyamWILMcNwd+popr7JKAOGHT 1YhhKk1imOL2xxihrcW4Lmv4tUpYoqbTPOfzIF9G+GO5p9gaclDc8m1q8uwq+cbZcckfASUB4 cbCLcSdul3x3gZThZQii9ImQSVyPUmqdP/I5V7LkJktJmlQbfeA6uScUdrSM07YsPsbvtp6Xv 6r58kURge8BaKtS76k++hXuEu9gQcByV0pWhHKofc4DPffhzq9L2fs94Imd0GB6obCGL1Lcza ddBd3xsloslLeXWTIHEaYBUUofU35KxeDHCrCSeccl97mclwbv7nZ4B4AdhocM7cjPNE5Ci7w z7eIh8M1zcQPifPOX8pfP8hHle6BPqP6MC2LWQ== X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 212.227.126.130 Subject: [Qemu-devel] [PATCH v5 4/4] linux-user: MIPS set cpu to r6 CPU if binary is R6 X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Maydell , YunQiang Su , Riku Voipio , Richard Henderson , =?UTF-8?q?Philippe=20Mathieu-Daud=C3=A9?= , Laurent Vivier , Igor Mammedov , Aaron Sierra Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail: RSF_0 Z_629925259 SPT_0 Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" From: YunQiang Su So here we need to detect the version of binaries and set cpu_model for it. Signed-off-by: YunQiang Su [lv: original patch modified to move code into cpu_get_model()] Signed-off-by: Laurent Vivier --- Notes: v5: Use EF_MIPS_ARCH mask to read MIPS architecture flags -> removed Richard's R-b because of this change v4: add YunQiang Su's Signed-off-by v3: fix code indent problem reported by patchew remove useless "!=3D 0" v2: call cpu_get_model() with the result of get_elf_eflags() include/elf.h | 7 +++++++ linux-user/mips/target_elf.h | 3 +++ linux-user/mips64/target_elf.h | 3 +++ 3 files changed, 13 insertions(+) diff --git a/include/elf.h b/include/elf.h index ca9a419043..943ee21171 100644 --- a/include/elf.h +++ b/include/elf.h @@ -33,6 +33,9 @@ typedef int64_t Elf64_Sxword; =20 /* Flags in the e_flags field of the header */ /* MIPS architecture level. */ +#define EF_MIPS_ARCH 0xf0000000 + +/* Legal values for MIPS architecture level. */ #define EF_MIPS_ARCH_1 0x00000000 /* -mips1 code. */ #define EF_MIPS_ARCH_2 0x10000000 /* -mips2 code. */ #define EF_MIPS_ARCH_3 0x20000000 /* -mips3 code. */ @@ -40,6 +43,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. */ =20 /* 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..fa5d30bf99 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) =3D=3D EF_MIPS_ARCH_32R6) { + return "mips32r6-generic"; + } return "24Kf"; } #endif diff --git a/linux-user/mips64/target_elf.h b/linux-user/mips64/target_elf.h index 5b6f4692e0..ec55d8542a 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) =3D=3D EF_MIPS_ARCH_64R6) { + return "I6400"; + } return "5KEf"; } #endif --=20 2.14.3