Re: [RFC PATCH 4/4] objtool/powerpc: Add --mcount specific implementation

From: Naveen N. Rao
Date: Thu Jun 16 2022 - 09:34:59 EST


Christophe Leroy wrote:


Le 25/05/2022 à 19:27, Christophe Leroy a écrit :


Le 24/05/2022 à 15:33, Christophe Leroy a écrit :


Le 24/05/2022 à 13:00, Sathvika Vasireddy a écrit :

+{
+    switch (elf->ehdr.e_machine) {
+    case EM_X86_64:
+            return R_X86_64_64;
+    case EM_PPC64:
+            return R_PPC64_ADDR64;
+    default:
+            WARN("unknown machine...");
+            exit(-1);
+    }
+}
Wouldn't it be better to make that function arch specific ?

This is so that we can support cross architecture builds.



I'm not sure I follow you here.

This is only based on the target, it doesn't depend on the build host so
I can't the link with cross arch builds.

The same as you have arch_decode_instruction(), you could have
arch_elf_reloc_type_long()
It would make sense indeed, because there is no point in supporting X86
relocation when you don't support X86 instruction decoding.


Could simply be some macro defined in tools/objtool/arch/powerpc/include/arch/elf.h and tools/objtool/arch/x86/include/arch/elf.h

The x86 version would be:

#define R_ADDR(elf) R_X86_64_64

And the powerpc version would be:

#define R_ADDR(elf) (elf->ehdr.e_machine == EM_PPC64 ? R_PPC64_ADDR64 : R_PPC_ADDR32)


Well, looking once more, and taking into account the patch from Chen https://lore.kernel.org/lkml/20220531020744.236970-4-chenzhongjin@xxxxxxxxxx/

It would be easier to just define two macros:

#define R_ABS64 R_PPC64_ADDR64
#define R_ABS32 R_PPC_ADDR32

And then in the caller, as we know the size, do something like

size == sizeof(u64) ? R_ABS64 : R_ABS32;

How does 'sizeof(u64)' work here?


- Naveen