diff mbox series

[v2,3/5] tools: relocate-rela: add support for handling 32-bit big endian files

Message ID 20230311173838.521804-3-ovpanait@gmail.com
State Accepted
Commit 02d30e5f92d834f020bb7ef6a92ccbf042ed25fc
Delegated to: Michal Simek
Headers show
Series [v2,1/5] tools: relocate-rela: adjust le64_to_cpu -> le32_to_cpu in decode_elf32() | expand

Commit Message

Ovidiu Panait March 11, 2023, 5:38 p.m. UTC
Currently, a microblaze build with CONFIG_SYS_BIG_ENDIAN=y and
CONFIG_STATIC_RELA=y fails with:
tools/relocate-rela: Not supported machine type
ELF decoding failed
make[2]: *** [u-boot/Makefile:1306: u-boot-nodtb.bin] Error 1

To fix this, convert the 32-bit codepath to use the previously added
elf{16,32}_to_cpu() functions. The aarch64 codepath is left untouched.

This commit ensures that CI doesn't fail for the next patches which enable
runtime relocation by default for microblaze.

Reviewed-by: Michal Simek <michal.simek@amd.com>
Signed-off-by: Ovidiu Panait <ovpanait@gmail.com>
---

(no changes since v1)

 tools/relocate-rela.c | 32 ++++++++++++++++----------------
 1 file changed, 16 insertions(+), 16 deletions(-)
diff mbox series

Patch

diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c
index b27c41b96f..fe8cd6bda9 100644
--- a/tools/relocate-rela.c
+++ b/tools/relocate-rela.c
@@ -251,7 +251,7 @@  static int decode_elf32(FILE *felf, char **argv)
 		return 25;
 	}
 
-	machine = le16_to_cpu(header.e_machine);
+	machine = elf16_to_cpu(header.e_machine);
 	debug("Machine %d\n", machine);
 
 	if (machine != EM_MICROBLAZE) {
@@ -259,10 +259,10 @@  static int decode_elf32(FILE *felf, char **argv)
 		return 30;
 	}
 
-	text_base = le32_to_cpu(header.e_entry);
-	section_header_base = le32_to_cpu(header.e_shoff);
-	section_header_size = le16_to_cpu(header.e_shentsize) *
-			      le16_to_cpu(header.e_shnum);
+	text_base = elf32_to_cpu(header.e_entry);
+	section_header_base = elf32_to_cpu(header.e_shoff);
+	section_header_size = elf16_to_cpu(header.e_shentsize) *
+			      elf16_to_cpu(header.e_shnum);
 
 	sh_table = malloc(section_header_size);
 	if (!sh_table) {
@@ -290,8 +290,8 @@  static int decode_elf32(FILE *felf, char **argv)
 		return 27;
 	}
 
-	sh_index = le16_to_cpu(header.e_shstrndx);
-	sh_size = le32_to_cpu(sh_table[sh_index].sh_size);
+	sh_index = elf16_to_cpu(header.e_shstrndx);
+	sh_size = elf32_to_cpu(sh_table[sh_index].sh_size);
 	debug("e_shstrndx %x, sh_size %lx\n", sh_index, sh_size);
 
 	sh_str = malloc(sh_size);
@@ -306,8 +306,8 @@  static int decode_elf32(FILE *felf, char **argv)
 	 * Specifies the byte offset from the beginning of the file
 	 * to the first byte in the section.
 	 */
-	sh_offset = le32_to_cpu(sh_table[sh_index].sh_offset);
-	sh_num = le16_to_cpu(header.e_shnum);
+	sh_offset = elf32_to_cpu(sh_table[sh_index].sh_offset);
+	sh_num = elf16_to_cpu(header.e_shnum);
 
 	ret = fseek(felf, sh_offset, SEEK_SET);
 	if (ret) {
@@ -329,13 +329,13 @@  static int decode_elf32(FILE *felf, char **argv)
 	}
 
 	for (i = 0; i < sh_num; i++) {
-		char *sh_name = sh_str + le32_to_cpu(sh_table[i].sh_name);
+		char *sh_name = sh_str + elf32_to_cpu(sh_table[i].sh_name);
 
 		debug("%s\n", sh_name);
 
-		sh_addr = le32_to_cpu(sh_table[i].sh_addr);
-		sh_offset = le32_to_cpu(sh_table[i].sh_offset);
-		sh_size = le32_to_cpu(sh_table[i].sh_size);
+		sh_addr = elf32_to_cpu(sh_table[i].sh_addr);
+		sh_offset = elf32_to_cpu(sh_table[i].sh_offset);
+		sh_size = elf32_to_cpu(sh_table[i].sh_size);
 
 		if (!strcmp(".rela.dyn", sh_name)) {
 			debug("Found section\t\".rela_dyn\"\n");
@@ -540,9 +540,9 @@  static int rela_elf32(char **argv, FILE *f)
 		      PRIu32 " r_addend:\t%" PRIx32 "\n",
 		      rela.r_offset, rela.r_info, rela.r_addend);
 
-		swrela.r_offset = le32_to_cpu(rela.r_offset);
-		swrela.r_info = le32_to_cpu(rela.r_info);
-		swrela.r_addend = le32_to_cpu(rela.r_addend);
+		swrela.r_offset = elf32_to_cpu(rela.r_offset);
+		swrela.r_info = elf32_to_cpu(rela.r_info);
+		swrela.r_addend = elf32_to_cpu(rela.r_addend);
 
 		debug("SWRela:\toffset:\t%" PRIx32 " r_info:\t%"
 		      PRIu32 " r_addend:\t%" PRIx32 "\n",