Re: Build Warnings at arch/powerpc/

Christophe Leroy
2025-03-04T13:20:03Z

Le 04/03/2025 à 13:38, Madhavan Srinivasan a écrit :
>
>
> On 3/4/25 4:58 PM, Madhavan Srinivasan wrote:
>>
>>
>> On 3/4/25 2:26 PM, Christophe Leroy wrote:
>>>
>>>
>>> Le 04/03/2025 à 07:13, Madhavan Srinivasan a écrit :
>>>>
>>>>
>>>> On 3/4/25 10:42 AM, Venkat Rao Bagalkote wrote:
>>>>> Greetings!!
>>>>>
>>>>>
>>>>> Observing build warnings with linux-next and powerpc repo's. Issue is currently not seen on mainline yet.
>>>>>
>>>>> PPC Repo: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kernel.org%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Fpowerpc%2Flinux.git&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C48de41657f8341b927e708dd5b198b84%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638766887458137690%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=P9JQJ7joMFHGDws1H0iaxpj6blYAqsh4ATzrmB1A8Yc%3D&reserved=0 merge branch
>>>>>
>>>>> PPC Kernel Version: 6.14.0-rc4-g1304f486dbf1
>>>>> next Repo: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgit.kernel.org%2Fpub%2Fscm%2Flinux%2Fkernel%2Fgit%2Fnext%2Flinux-next.git&data=05%7C02%7Cchristophe.leroy%40csgroup.eu%7C48de41657f8341b927e708dd5b198b84%7C8b87af7d86474dc78df45f69a2011bb5%7C0%7C0%7C638766887458152652%7CUnknown%7CTWFpbGZsb3d8eyJFbXB0eU1hcGkiOnRydWUsIlYiOiIwLjAuMDAwMCIsIlAiOiJXaW4zMiIsIkFOIjoiTWFpbCIsIldUIjoyfQ%3D%3D%7C0%7C%7C%7C&sdata=ZVQdCx62Z3ekoXOrWoE6SdHv4RvgjDFSE9CHPPJ%2FiyI%3D&reserved=0 master branch
>>>>>
>>>>> next Kernel Version: 6.14.0-rc5-next-20250303
>>>>>
>>>>>
>>>>> On linux-next kernel issue got introduced b/w next-20250227 and next-20250303
>>>>>
>>>>>
>>>>> Build Warnings:
>>>>>
>>>>> arch/powerpc/kvm/book3s_hv_rmhandlers.o: warning: objtool: .text+0xe84: intra_function_call not a direct call
>>>>> arch/powerpc/crypto/ghashp8-ppc.o: warning: objtool: .text+0x22c: unannotated intra-function call
>>>>> arch/powerpc/kernel/switch.o: warning: objtool: .text+0x4: intra_function_call not a direct call
>>>>>
>>>>>
>>>>
>>>> Can you please specific the compiler and compiler version you found this issue with
>>>>
>>>
>>> Can you also tell which defconfig you are using or provide your .config
>>>
>>> It might also be helpfull if you can provide a disassembly of the three file.o around the warned address.
>>
>> I could recreate the issue with gcc 11.4.1 20231218 with today's linux-next (but could not recreate with gcc 14 or gcc 11.3.0)
>>
>> (20d5c66e1810 (HEAD -> master, tag: next-20250304, origin/master, origin/HEAD) Add linux-next specific files for 20250304)
>>
>> warning for one of the switch.S file :
>>
>> CC arch/powerpc/kernel/syscalls.o
>> AS arch/powerpc/kernel/switch.o
>> arch/powerpc/kernel/switch.o: warning: objtool: .text+0x4: intra_function_call not a direct call
>
> I guess this is becos, for bl .+4, we recently added in the arch_decode_instruction (decode.c) to set the type as INSN_OTHER
>
> case 18: /* b[l][a] */
> if (ins == 0x48000005) /* bl .+4 */
> typ = INSN_OTHER;
>
> Which I think is the issue here, changing it to INSN_CALL from INSN_OTHER fixes the warning

Yes indeed I ended up with the same conclusion. However if you change it
back to INSN_CALL you just bring back the issue with clang using bl .+4
for relocatable code.

The warning is from here:

static int __annotate_ifc(struct objtool_file *file, int type, struct
instruction *insn)
{
unsigned long dest_off;

if (type != ANNOTYPE_INTRA_FUNCTION_CALL)
return 0;

if (insn->type != INSN_CALL) {
WARN_INSN(insn, "intra_function_call not a direct call");
return -1;
}

Now that arch_decode_instruction() does not consider bl .+4 an INSN_CALL
anymore, we have to remove the ANNOTATE_INTRA_FUNCTION_CALL annotations
here:

arch/powerpc/kernel/switch.S:42: ANNOTATE_INTRA_FUNCTION_CALL
arch/powerpc/kvm/book3s_hv_rmhandlers.S:1527: ANNOTATE_INTRA_FUNCTION_CALL
arch/powerpc/kvm/book3s_hv_rmhandlers.S:1534: ANNOTATE_INTRA_FUNCTION_CALL

The one in arch/powerpc/kexec/relocate_32.S is not a problem at the
moment but it looks buggy and that "bl 1f" should be replaced by a
branch to the "bcl 20,31,$+4"

I will try to cook a couple patches for all that.

The last one from the report is:

arch/powerpc/crypto/ghashp8-ppc.o: warning: objtool: .text+0x22c:
unannotated intra-function call

That one is different, we need to reproduce it to understand what it is.

Christophe

>
> diff --git a/tools/objtool/arch/powerpc/decode.c b/tools/objtool/arch/powerpc/decode.c
> index 26d5050424a9..ffd63a61a585 100644
> --- a/tools/objtool/arch/powerpc/decode.c
> +++ b/tools/objtool/arch/powerpc/decode.c
> @@ -56,7 +56,7 @@ int arch_decode_instruction(struct objtool_file *file, const struct section *sec
> switch (opcode) {
> case 18: /* b[l][a] */
> if (ins == 0x48000005) /* bl .+4 */
> - typ = INSN_OTHER;
> + typ = INSN_CALL;
> else if (ins & 1) /* bl[a] */
> typ = INSN_CALL;
> else /* b[a] */
>
>
> Maddy
>
>> CC arch/powerpc/kernel/irq.o
>> CC arch/powerpc/kernel/align.o
>> CC arch/powerpc/kernel/signal_64.o
>>
>> Objdump of switch.o:
>> arch/powerpc/kernel/switch.o: file format elf64-powerpcle
>>
>> Disassembly of section .text:
>>
>> 0000000000000000 <flush_branch_caches>:
>> 0: a6 02 28 7d mflr r9
>> 4: 05 00 00 48 bl 8 <flush_branch_caches+0x8>
>> 8: 05 00 00 48 bl c <flush_branch_caches+0xc>
>> c: 05 00 00 48 bl 10 <flush_branch_caches+0x10>
>> 10: 05 00 00 48 bl 14 <flush_branch_caches+0x14>
>> 14: 05 00 00 48 bl 18 <flush_branch_caches+0x18>
>> 18: 05 00 00 48 bl 1c <flush_branch_caches+0x1c>
>> 1c: 05 00 00 48 bl 20 <flush_branch_caches+0x20>
>> 20: 05 00 00 48 bl 24 <flush_branch_caches+0x24>
>> 24: 05 00 00 48 bl 28 <flush_branch_caches+0x28>
>> 28: 05 00 00 48 bl 2c <flush_branch_caches+0x2c>
>>
>>
>> arch/powerpc/kernel/switch.S failing src section:
>>
>> .balign 32
>> .global flush_branch_caches
>> flush_branch_caches:
>> /* Save LR into r9 */
>> mflr r9
>>
>> // Flush the link stack
>> .rept 64
>> ANNOTATE_INTRA_FUNCTION_CALL
>> bl .+4
>> .endr
>> b 1f
>> nops 6
>>
>> Maddy
>>
>>
>>>
>>> Christophe
>>
>>
>