Message ID | 20230305174919.293393-2-ovpanait@gmail.com |
---|---|
State | Superseded |
Delegated to: | Michal Simek |
Headers | show |
Series | [1/5] tools: relocate-rela: adjust le64_to_cpu -> le32_to_cpu in decode_elf32() | expand |
On 3/5/23 18:49, Ovidiu Panait wrote: > Add elf16_to_cpu() and elf32_to_cpu() functions that allow to read data in > both big-endian and little-endian formats. > > Signed-off-by: Ovidiu Panait <ovpanait@gmail.com> > --- > > tools/relocate-rela.c | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c > index 689e2d4655..84531b23a6 100644 > --- a/tools/relocate-rela.c > +++ b/tools/relocate-rela.c > @@ -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 == 0x01) Can we used macros instead of hardcoding value? /* e_ident[] data encoding */ #define ELFDATANONE 0 /* invalid */ #define ELFDATA2LSB 1 /* Little-Endian */ #define ELFDATA2MSB 2 /* Big-Endian */ #define ELFDATANUM 3 /* number of data encode defines */ M
diff --git a/tools/relocate-rela.c b/tools/relocate-rela.c index 689e2d4655..84531b23a6 100644 --- a/tools/relocate-rela.c +++ b/tools/relocate-rela.c @@ -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 == 0x01) + return le16_to_cpu(data); + + return be16_to_cpu(data); +} + +static uint32_t elf32_to_cpu(uint32_t data) +{ + if (ei_data == 0x01) + 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);
Add elf16_to_cpu() and elf32_to_cpu() functions that allow to read data in both big-endian and little-endian formats. Signed-off-by: Ovidiu Panait <ovpanait@gmail.com> --- tools/relocate-rela.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)