From 0e6a671b828b28b186822f0a2125272781b84c28 Mon Sep 17 00:00:00 2001 From: Sergey Bugaev Date: Mon, 15 May 2023 10:35:57 +0300 Subject: exec: Allow loading x86_64 executables on x86_64 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. Message-Id: <20230515073600.1350072-1-bugaevc@gmail.com> --- exec/exec.c | 8 +++++++- exec/hostarch.c | 9 +++++++++ 2 files changed, 16 insertions(+), 1 deletion(-) (limited to 'exec') 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); -- cgit v1.2.3