mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 10:26:10 +01:00 
			
		
		
		
	tools: relocate-rela: add support for handling 32-bit big endian files
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>
Link: https://lore.kernel.org/r/20230311173838.521804-3-ovpanait@gmail.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
			
			
This commit is contained in:
		
				
					committed by
					
						 Michal Simek
						Michal Simek
					
				
			
			
				
	
			
			
			
						parent
						
							424f04fcd9
						
					
				
				
					commit
					02d30e5f92
				
			| @@ -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", | ||||
|   | ||||
		Reference in New Issue
	
	Block a user