[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 1/4] exec: Allow loading x86_64 executables on x86_64
From: |
Samuel Thibault |
Subject: |
Re: [PATCH v2 1/4] exec: Allow loading x86_64 executables on x86_64 |
Date: |
Mon, 15 May 2023 18:32:09 +0200 |
User-agent: |
NeoMutt/20170609 (1.8.3) |
Applied, thanks!
Sergey Bugaev, le lun. 15 mai 2023 10:35:57 +0300, a ecrit:
> Since we don't support mixing i386 and x86_64 binaries on the same
> system (as running them requires different build-time gnumach
> configurations), the exec server can simply require the binary being
> loaded to have been built for the same architecture as the exec server
> itself.
> ---
> exec/exec.c | 8 +++++++-
> exec/hostarch.c | 9 +++++++++
> 2 files changed, 16 insertions(+), 1 deletion(-)
>
> diff --git a/exec/exec.c b/exec/exec.c
> index 8944167d..2e5fbfcd 100644
> --- a/exec/exec.c
> +++ b/exec/exec.c
> @@ -518,6 +518,12 @@ prepare (file_t file, struct execdata *e)
> #define host_ELFDATA ELFDATA2LSB
> #endif
>
> +#ifdef __LP64__
> +#define host_ELFCLASS ELFCLASS64
> +#else
> +#define host_ELFCLASS ELFCLASS32
> +#endif
> +
> static void
> check_elf (struct execdata *e)
> {
> @@ -539,7 +545,7 @@ check_elf (struct execdata *e)
> return;
> }
>
> - if (ehdr->e_ident[EI_CLASS] != ELFCLASS32 ||
> + if (ehdr->e_ident[EI_CLASS] != host_ELFCLASS ||
> ehdr->e_ident[EI_DATA] != host_ELFDATA ||
> ehdr->e_ident[EI_VERSION] != EV_CURRENT ||
> ehdr->e_version != EV_CURRENT ||
> diff --git a/exec/hostarch.c b/exec/hostarch.c
> index 363fda69..ed50e0a8 100644
> --- a/exec/hostarch.c
> +++ b/exec/hostarch.c
> @@ -72,6 +72,15 @@ elf_machine_matches_host (ElfW(Half) e_machine)
> case CPU_TYPE_PENTIUMPRO:
> CACHE (e_machine == EM_386);
>
> + /* When building for x86_64, CPU_TYPE_X86_64 must be defined; otherwise
> + it's OK if we don't compile this branch -- none of the branches other
> + than the actual architecture the code is built for are going to be
> + taken anyway. */
> +#if defined (CPU_TYPE_X86_64) || defined (__x86_64__)
> + case CPU_TYPE_X86_64:
> + CACHE (e_machine == EM_X86_64);
> +#endif
> +
> case CPU_TYPE_POWERPC:
> CACHE (e_machine == EM_PPC);
>
> --
> 2.40.1
>
>
--
Samuel
---
Pour une évaluation indépendante, transparente et rigoureuse !
Je soutiens la Commission d'Évaluation de l'Inria.