objtool: Use target file endianness instead of a compiled constant
Some architectures like powerpc support both endianness, it's therefore not possible to fix the endianness via arch/endianness.h because there is no easy way to get the target endianness at build time. Use the endianness recorded in the file objtool is working on. Tested-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Reviewed-by: Naveen N. Rao <naveen.n.rao@linux.vnet.ibm.com> Acked-by: Josh Poimboeuf <jpoimboe@kernel.org> Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org> Signed-off-by: Christophe Leroy <christophe.leroy@csgroup.eu> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20221114175754.1131267-10-sv@linux.ibm.com
This commit is contained in:
committed by
Michael Ellerman
parent
efb11fdb3e
commit
0646c28b41
@@ -76,6 +76,7 @@ int orc_dump(const char *_objname)
|
||||
GElf_Rela rela;
|
||||
GElf_Sym sym;
|
||||
Elf_Data *data, *symtab = NULL, *rela_orc_ip = NULL;
|
||||
struct elf dummy_elf = {};
|
||||
|
||||
|
||||
objname = _objname;
|
||||
@@ -94,6 +95,12 @@ int orc_dump(const char *_objname)
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (!elf64_getehdr(elf)) {
|
||||
WARN_ELF("elf64_getehdr");
|
||||
return -1;
|
||||
}
|
||||
memcpy(&dummy_elf.ehdr, elf64_getehdr(elf), sizeof(dummy_elf.ehdr));
|
||||
|
||||
if (elf_getshdrnum(elf, &nr_sections)) {
|
||||
WARN_ELF("elf_getshdrnum");
|
||||
return -1;
|
||||
@@ -198,11 +205,11 @@ int orc_dump(const char *_objname)
|
||||
|
||||
printf(" sp:");
|
||||
|
||||
print_reg(orc[i].sp_reg, bswap_if_needed(orc[i].sp_offset));
|
||||
print_reg(orc[i].sp_reg, bswap_if_needed(&dummy_elf, orc[i].sp_offset));
|
||||
|
||||
printf(" bp:");
|
||||
|
||||
print_reg(orc[i].bp_reg, bswap_if_needed(orc[i].bp_offset));
|
||||
print_reg(orc[i].bp_reg, bswap_if_needed(&dummy_elf, orc[i].bp_offset));
|
||||
|
||||
printf(" type:%s end:%d\n",
|
||||
orc_type_name(orc[i].type), orc[i].end);
|
||||
|
||||
Reference in New Issue
Block a user