aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/libelf/elf.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/lib/libelf/elf.c b/lib/libelf/elf.c
index db2d2ab..5204bc3 100644
--- a/lib/libelf/elf.c
+++ b/lib/libelf/elf.c
@@ -140,6 +140,7 @@ elf_load_file_to_addr(void *file_addr, void *addr, unsigned long *entry,
{
int type;
long offset;
+ struct ehdr *ehdr = (struct ehdr *) file_addr;
type = elf_check_file(file_addr);
@@ -157,6 +158,13 @@ elf_load_file_to_addr(void *file_addr, void *addr, unsigned long *entry,
*entry = elf_load_segments64(file_addr, offset, pre_load,
post_load) + offset;
elf_relocate64(file_addr, offset);
+ if (ehdr->ei_data != ELFDATA2MSB) {
+ uint32_t flags = elf_get_eflags_64(file_addr);
+ if ((flags & 0x3) == 2)
+ type = 4; /* LE64 ABIv2 */
+ else
+ type = 3; /* LE64 ABIv1 */
+ }
break;
}