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>
This commit is contained in:
parent
1372fc0b87
commit
8cf6e9daca
|
@ -280,6 +280,11 @@ static int glue(load_elf, SZ)(const char *name, int fd,
|
||||||
glue(bswap_ehdr, SZ)(&ehdr);
|
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) {
|
switch (elf_machine) {
|
||||||
case EM_PPC64:
|
case EM_PPC64:
|
||||||
if (ehdr.e_machine != EM_PPC64) {
|
if (ehdr.e_machine != EM_PPC64) {
|
||||||
|
|
|
@ -68,6 +68,8 @@ const char *load_elf_strerror(int error);
|
||||||
* load will fail if the target ELF does not match. Some architectures
|
* load will fail if the target ELF does not match. Some architectures
|
||||||
* have some architecture-specific behaviours that come into effect when
|
* have some architecture-specific behaviours that come into effect when
|
||||||
* their particular values for @elf_machine are set.
|
* 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),
|
int load_elf(const char *filename, uint64_t (*translate_fn)(void *, uint64_t),
|
||||||
|
|
Loading…
Reference in a new issue