summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--exec/exec.c8
-rw-r--r--exec/hostarch.c9
2 files changed, 16 insertions, 1 deletions
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);