diff options
| author | Alistair Francis | 2016-09-22 19:13:07 +0200 |
|---|---|---|
| committer | Peter Maydell | 2016-09-22 19:13:07 +0200 |
| commit | 8cf6e9daca19e08216cf09e523d1dcdf3cfdaec7 (patch) | |
| tree | 5353ce4f931eb3212601a125e534e912173e2182 /include | |
| parent | xlnx-zynqmp: Set the number of priority queues (diff) | |
| download | qemu-8cf6e9daca19e08216cf09e523d1dcdf3cfdaec7.tar.gz qemu-8cf6e9daca19e08216cf09e523d1dcdf3cfdaec7.tar.xz qemu-8cf6e9daca19e08216cf09e523d1dcdf3cfdaec7.zip | |
loader: Allow ELF loader to auto-detect the ELF arch
If the caller didn't specify an architecture for the ELF machine
the load_elf() function will auto detect it based on the ELF file.
Signed-off-by: Alistair Francis <alistair.francis@xilinx.com>
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
Message-id: f2d70b47fcad31445f947f8817a0e146d80a046b.1474331683.git.alistair.francis@xilinx.com
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Diffstat (limited to 'include')
| -rw-r--r-- | include/hw/elf_ops.h | 5 | ||||
| -rw-r--r-- | include/hw/loader.h | 2 |
2 files changed, 7 insertions, 0 deletions
diff --git a/include/hw/elf_ops.h b/include/hw/elf_ops.h index f510e7ec2a..5038c7f058 100644 --- a/include/hw/elf_ops.h +++ b/include/hw/elf_ops.h @@ -280,6 +280,11 @@ static int glue(load_elf, SZ)(const char *name, int fd, glue(bswap_ehdr, SZ)(&ehdr); } + if (elf_machine <= EM_NONE) { + /* The caller didn't specify an ARCH, we can figure it out */ + elf_machine = ehdr.e_machine; + } + switch (elf_machine) { case EM_PPC64: if (ehdr.e_machine != EM_PPC64) { diff --git a/include/hw/loader.h b/include/hw/loader.h index 4879b63a2f..c59673dfc5 100644 --- a/include/hw/loader.h +++ b/include/hw/loader.h @@ -68,6 +68,8 @@ const char *load_elf_strerror(int error); * load will fail if the target ELF does not match. Some architectures * have some architecture-specific behaviours that come into effect when * their particular values for @elf_machine are set. + * If @elf_machine is EM_NONE then the machine type will be read from the + * ELF header and no checks will be carried out against the machine type. */ int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t), |
