mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
Merge tag 'xilinx-for-v2023.07-rc1' of https://source.denx.de/u-boot/custodians/u-boot-microblaze into next
Xilinx changes for v2023.07-rc1 cmd: - Print results in hex instead of dec in smc command firmware: - Cover missing ZYNQMP_FIRMWARE dependencies fpga: - fix loads for unencrypted use case relocation - Add support for BE systems spi: - Fix xilinx_spi init reset sequence arasan nand: - Remove hardcoded bbt option - Set ofnode value xilinx: - Enable SMC command - Fix some sparse issues zynqmp: - Remove cdns,zynq-gem compatible string - Add optee node - Some DT cleanups zynq: - Some DT cleanups microblaze - Remove MANUAL_RELOC option
This commit is contained in:
@@ -45,6 +45,7 @@
|
||||
#endif
|
||||
|
||||
static int ei_class;
|
||||
static int ei_data;
|
||||
|
||||
static uint64_t rela_start, rela_end, text_base, dyn_start;
|
||||
|
||||
@@ -61,6 +62,22 @@ static void debug(const char *fmt, ...)
|
||||
}
|
||||
}
|
||||
|
||||
static uint16_t elf16_to_cpu(uint16_t data)
|
||||
{
|
||||
if (ei_data == ELFDATA2LSB)
|
||||
return le16_to_cpu(data);
|
||||
|
||||
return be16_to_cpu(data);
|
||||
}
|
||||
|
||||
static uint32_t elf32_to_cpu(uint32_t data)
|
||||
{
|
||||
if (ei_data == ELFDATA2LSB)
|
||||
return le32_to_cpu(data);
|
||||
|
||||
return be32_to_cpu(data);
|
||||
}
|
||||
|
||||
static bool supported_rela(Elf64_Rela *rela)
|
||||
{
|
||||
uint64_t mask = 0xffffffffULL; /* would be different on 32-bit */
|
||||
@@ -234,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) {
|
||||
@@ -242,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) {
|
||||
@@ -273,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);
|
||||
@@ -289,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) {
|
||||
@@ -312,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 = le64_to_cpu(sh_table[i].sh_addr);
|
||||
sh_offset = le64_to_cpu(sh_table[i].sh_offset);
|
||||
sh_size = le64_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");
|
||||
@@ -384,6 +401,9 @@ static int decode_elf(char **argv)
|
||||
ei_class = e_ident[4];
|
||||
debug("EI_CLASS(1=32bit, 2=64bit) %d\n", ei_class);
|
||||
|
||||
ei_data = e_ident[5];
|
||||
debug("EI_DATA(1=little endian, 2=big endian) %d\n", ei_data);
|
||||
|
||||
if (ei_class == 2)
|
||||
return decode_elf64(felf, argv);
|
||||
|
||||
@@ -520,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