tools: relocate-rela: introduce elf16_to_cpu() and elf32_to_cpu()
Add elf16_to_cpu() and elf32_to_cpu() functions that allow to read data in both big-endian and little-endian formats. Reviewed-by: Michal Simek <michal.simek@amd.com> Signed-off-by: Ovidiu Panait <ovpanait@gmail.com> Link: https://lore.kernel.org/r/20230311173838.521804-2-ovpanait@gmail.com Signed-off-by: Michal Simek <michal.simek@amd.com>
This commit is contained in:
parent
26c8c1bd12
commit
424f04fcd9
1 changed files with 20 additions and 0 deletions
|
@ -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 */
|
||||
|
@ -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);
|
||||
|
||||
|
|
Loading…
Reference in a new issue