Le 16/06/2022 à 15:34, Naveen N. Rao a écrit : > 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-chenzhong...@huawei.com/ >> >> >> >> 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? >
sizeof(u64) is always 8 by definition. So if size is 8 we are working on a binary file for a 64 bits target, if not it means we are working for a 32 bits target. Christophe