[PATCH] tools: relocate-rela: Fix BE symtab handling
Michal Simek
michal.simek at amd.com
Mon Jul 31 14:21:57 CEST 2023
On 7/31/23 00:16, Marek Vasut wrote:
> The symtab contains data in target endianness, convert the data to
> native endianness before doing any operations and on them, and back
> to target endianness before updating the bin file.
>
> Signed-off-by: Marek Vasut <marek.vasut+renesas at mailbox.org>
> ---
> Cc: Angelo Dureghello <angelo at kernel-space.org>
> Cc: Angelo Durgehello <angelo.dureghello at timesys.com>
> Cc: Bin Meng <bmeng.cn at gmail.com>
> Cc: Heinrich Schuchardt <xypron.glpk at gmx.de>
> Cc: Huan Wang <alison.wang at nxp.com>
> Cc: Marek Vasut <marek.vasut+renesas at mailbox.org>
> Cc: Michal Simek <michal.simek at amd.com>
> Cc: Ovidiu Panait <ovpanait at gmail.com>
> Cc: Simon Glass <sjg at chromium.org>
> Cc: Zong Li <zong.li at sifive.com>
> ---
> tools/relocate-rela.c | 18 ++++++++++++++----
> 1 file changed, 14 insertions(+), 4 deletions(-)
>
> diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c
> index f230ec5676c..e28e7fcc6f5 100644
> --- a/tools/relocate-rela.c
> +++ b/tools/relocate-rela.c
> @@ -78,6 +78,14 @@ static uint32_t elf32_to_cpu(uint32_t data)
> return be32_to_cpu(data);
> }
>
> +static uint32_t cpu_to_elf32(uint32_t data)
> +{
> + if (ei_data == ELFDATA2LSB)
> + return cpu_to_le32(data);
> +
> + return cpu_to_be32(data);
> +}
> +
> static bool supported_rela(Elf64_Rela *rela)
> {
> uint64_t mask = 0xffffffffULL; /* would be different on 32-bit */
> @@ -602,14 +610,16 @@ static int rela_elf32(char **argv, FILE *f)
> }
>
> debug("Symbol description:\n");
> - debug(" st_name:\t0x%x\n", symbols.st_name);
> - debug(" st_value:\t0x%x\n", symbols.st_value);
> - debug(" st_size:\t0x%x\n", symbols.st_size);
> + debug(" st_name:\t0x%x\n", elf32_to_cpu(symbols.st_name));
> + debug(" st_value:\t0x%x\n", elf32_to_cpu(symbols.st_value));
> + debug(" st_size:\t0x%x\n", elf32_to_cpu(symbols.st_size));
>
> - value = swrela.r_addend + symbols.st_value;
> + value = swrela.r_addend + elf32_to_cpu(symbols.st_value);
>
> debug("Value:\t0x%x\n", value);
>
> + value = cpu_to_elf32(value);
> +
> if (fseek(f, addr, SEEK_SET) < 0) {
> fprintf(stderr, "%s: %s: seek to %"
> PRIx32 " failed: %s\n",
Tested-by: Michal Simek <michal.simek at amd.com> # microblaze, arm64
Thanks,
Michal
More information about the U-Boot
mailing list