From: Laurent Vivier <laurent@vivier.eu>
To: "Carlo Marcelo Arenas Belón" <carenas@gmail.com>, qemu-devel@nongnu.org
Cc: macro@linux-mips.org
Subject: Re: [PATCH v2] linux-user: detect mismatched ELF ABI in qemu-mips[n32][el]
Date: Sun, 23 Aug 2020 15:00:08 +0200 [thread overview]
Message-ID: <dc73ce82-df23-d3c8-7b33-03dbbb7fc792@vivier.eu> (raw)
In-Reply-To: <20200823101703.18451-1-carenas@gmail.com>
Le 23/08/2020 à 12:17, Carlo Marcelo Arenas Belón a écrit :
> MIPS provides 2 ILP32 ABIs, and therefore 4 possible qemu-mips binaries
> with 2 pairs using the same endianess and bitness.
>
> This could lead to an O32 image loading in the N32 binary or vice versa
> and in cryptic errors (if lucky that the CPU doesn't match the FPU used)
> like :
>
> qemu: Unexpected FPU mode (o32 ELF loaded to qemu-mipsn32[el])
> ELF binary's NaN mode not supported by CPU (n32 -> qemu-mips[el])
>
> Add an ABI check macro that could be used while checking the ELF header
> that relies in the ABI2 flag to identify n32 binaries and abort instead
> early with a more descriptive error :
>
> Invalid ELF image for this architecture
>
> Signed-off-by: Carlo Marcelo Arenas Belón <carenas@gmail.com>
> ---
> Changes since v1:
> - Use the provided definition from include/elf.h (per Laurent)
> - Abort instead of warning (per Laurent, not using a custom error though)
> - Expand the check to all other combinations (per Aleksandar)
>
> linux-user/elfload.c | 11 +++++++++++
> 1 file changed, 11 insertions(+)
>
> diff --git a/linux-user/elfload.c b/linux-user/elfload.c
> index fe9dfe795d..69936dcd45 100644
> --- a/linux-user/elfload.c
> +++ b/linux-user/elfload.c
> @@ -918,6 +918,12 @@ static void elf_core_copy_regs(target_elf_gregset_t *regs, const CPUPPCState *en
>
> #define elf_check_arch(x) ((x) == EM_MIPS || (x) == EM_NANOMIPS)
>
> +#ifdef TARGET_ABI_MIPSN32
> +#define elf_check_abi(x) ((x) & EF_MIPS_ABI2)
> +#else
> +#define elf_check_abi(x) (!((x) & EF_MIPS_ABI2))
> +#endif
> +
> static inline void init_thread(struct target_pt_regs *regs,
> struct image_info *infop)
> {
> @@ -1487,6 +1493,10 @@ static void elf_core_copy_regs(target_elf_gregset_t *regs,
> #define elf_check_arch(x) ((x) == ELF_ARCH)
> #endif
>
> +#ifndef elf_check_abi
> +#define elf_check_abi(x) (1)
> +#endif
> +
> #ifndef ELF_HWCAP
> #define ELF_HWCAP 0
> #endif
> @@ -1644,6 +1654,7 @@ static bool elf_check_ident(struct elfhdr *ehdr)
> static bool elf_check_ehdr(struct elfhdr *ehdr)
> {
> return (elf_check_arch(ehdr->e_machine)
> + && elf_check_abi(ehdr->e_flags)
> && ehdr->e_ehsize == sizeof(struct elfhdr)
> && ehdr->e_phentsize == sizeof(struct elf_phdr)
> && (ehdr->e_type == ET_EXEC || ehdr->e_type == ET_DYN));
>
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
next prev parent reply other threads:[~2020-08-23 13:01 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-08-23 10:17 [PATCH v2] linux-user: detect mismatched ELF ABI in qemu-mips[n32][el] Carlo Marcelo Arenas Belón
2020-08-23 13:00 ` Laurent Vivier [this message]
2020-08-24 20:51 ` Laurent Vivier
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=dc73ce82-df23-d3c8-7b33-03dbbb7fc792@vivier.eu \
--to=laurent@vivier.eu \
--cc=carenas@gmail.com \
--cc=macro@linux-mips.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).