[SLOF] [PATCH slof 09/10] elf64: Add LE64 ABIv1/2 support for loading images to given address

Alexey Kardashevskiy aik at ozlabs.ru
Tue Dec 31 14:04:56 AEDT 2019


c2358afb40d4 ("Add support for 64bit LE ABI v1 and v2 support") added
little endian ELF support for one of two ELF loading helpers, this fixes
oversight. With this changes, 'boot disk:2,boot\zImage' is able to handle
little-endian zimages.

Signed-off-by: Alexey Kardashevskiy <aik at ozlabs.ru>
---
 lib/libelf/elf.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/lib/libelf/elf.c b/lib/libelf/elf.c
index db2d2abc94f9..5204bc36f99b 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;
 	}
 
-- 
2.17.1



More information about the SLOF mailing list