[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH] exec: Allow loading x86_64 executables on x86_64
From: |
Sergey Bugaev |
Subject: |
[PATCH] exec: Allow loading x86_64 executables on x86_64 |
Date: |
Thu, 11 May 2023 17:21:06 +0300 |
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 | 7 +++++++
2 files changed, 14 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..58ddc6b9 100644
--- a/exec/hostarch.c
+++ b/exec/hostarch.c
@@ -70,7 +70,14 @@ elf_machine_matches_host (ElfW(Half) e_machine)
case CPU_TYPE_I486:
case CPU_TYPE_PENTIUM:
case CPU_TYPE_PENTIUMPRO:
+ /* We do not support running i386 binaries if the Hurd servers were
+ built for x86_64, or vice versa. So our build architecture must
+ match that of the executable. */
+#ifdef __x86_64__
+ CACHE (e_machine == EM_X86_64);
+#else
CACHE (e_machine == EM_386);
+#endif
case CPU_TYPE_POWERPC:
CACHE (e_machine == EM_PPC);
--
2.40.1
- [PATCH] exec: Allow loading x86_64 executables on x86_64,
Sergey Bugaev <=