All of lore.kernel.org
 help / color / mirror / Atom feed
From: Sathvika Vasireddy <sv@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>,
	Stephen Rothwell <sfr@canb.auug.org.au>,
	Michael Ellerman <mpe@ellerman.id.au>,
	PowerPC <linuxppc-dev@lists.ozlabs.org>,
	"peterz@infradead.org" <peterz@infradead.org>
Cc: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>,
	Linux Next Mailing List <linux-next@vger.kernel.org>,
	"Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>
Subject: Re: linux-next: build warnings after merge of the powerpc-objtool tree
Date: Wed, 30 Nov 2022 17:21:06 +0530	[thread overview]
Message-ID: <74552090-c654-5356-773d-47ead2d63ab2@linux.ibm.com> (raw)
In-Reply-To: <c0ed0d60-6014-4c5f-e610-b4d3bd9e9e33@csgroup.eu>


On 29/11/22 20:58, Christophe Leroy wrote:
>
> Le 29/11/2022 à 16:13, Sathvika Vasireddy a écrit :
>> Hi all,
>>
>> On 25/11/22 09:00, Stephen Rothwell wrote:
>>> Hi all,
>>>
>>> After merging the powerpc-objtool tree, today's linux-next build (powerpc
>>> pseries_le_defconfig) produced these warnings:
>>>
>>> arch/powerpc/kernel/head_64.o: warning: objtool: end_first_256B():
>>> can't find starting instruction
>>> arch/powerpc/kernel/optprobes_head.o: warning: objtool:
>>> optprobe_template_end(): can't find starting instruction
>>>
>>> I have no idea what started this (they may have been there yesterday).
>> I was able to recreate the above mentioned warnings with
>> pseries_le_defconfig and powernv_defconfig. The regression report also
>> mentions a warning
>> (https://lore.kernel.org/oe-kbuild-all/202211282102.QUr7HHrW-lkp@intel.com/) seen with arch/powerpc/kernel/kvm_emul.S assembly file.
>>
>>    [1] arch/powerpc/kernel/optprobes_head.o: warning: objtool:
>> optprobe_template_end(): can't find starting instruction
>>    [2] arch/powerpc/kernel/kvm_emul.o: warning: objtool:
>> kvm_template_end(): can't find starting instruction
>>    [3] arch/powerpc/kernel/head_64.o: warning: objtool: end_first_256B():
>> can't find starting instruction
>>
>> The warnings [1] and [2] go away after adding 'nop' instruction. Below
>> diff fixes it for me:
> You have to add NOPs just because those labels are at the end of the
> files. That's a bit odd.
> I think either we are missing some kind of flagging for the symbols, or
> objtool has a bug. In both cases, I'm not sure adding an artificial
> 'nop' is the solution. At least there should be a big hammer warning
> explaining why.

I don't see these warnings with powerpc/topic/objtool branch. However, 
they are seen with linux-next master branch.
Commit dbcdbdfdf137b49144204571f1a5e5dc01b8aaad objtool: Rework 
instruction -> symbol mapping in linux-next is resulting in objtool 
can't find starting instruction warnings on powerpc.

Reverting this particular hunk (pasted below), resolves it and we don't 
see the problem anymore.

@@ -427,7 +427,10 @@ static int decode_instructions(struct objtool_file 
*file)
                 }

                 list_for_each_entry(func, &sec->symbol_list, list) {
-                       if (func->type != STT_FUNC || func->alias != func)
+                       if (func->type != STT_NOTYPE && func->type != 
STT_FUNC)
+                               continue;
+
+                       if (func->return_thunk || func->alias != func)
                                 continue;

                         if (!find_insn(file, sec, func->offset)) {

Peterz, can we ignore STT_NOTYPE symbols?

>> diff --git a/arch/powerpc/kernel/optprobes_head.S
>> b/arch/powerpc/kernel/optprobes_head.S
>> index cd4e7bc32609..ea4e3bd82f4f 100644
>> --- a/arch/powerpc/kernel/optprobes_head.S
>> +++ b/arch/powerpc/kernel/optprobes_head.S
>> @@ -134,3 +134,4 @@ optprobe_template_ret:
>>
>>           .global optprobe_template_end
>>    optprobe_template_end:
>> +       nop
>>
>> diff --git a/arch/powerpc/kernel/kvm_emul.S
>> b/arch/powerpc/kernel/kvm_emul.S
>> index 7af6f8b50c5d..41fd664e3ba0 100644
>> --- a/arch/powerpc/kernel/kvm_emul.S
>> +++ b/arch/powerpc/kernel/kvm_emul.S
>> @@ -352,3 +352,4 @@ kvm_tmp_end:
>>
>>    .global kvm_template_end
>>    kvm_template_end:
>> +       nop
>>
>> For warning [3], objtool is throwing can't find starting instruction
>> warning because it finds that the symbol (end_first_256B) is zero sized,
>> and such symbols are not added to the rbtree. I tried to fix it by
>> adding a 'nop' instruction (pasted diff below), but that resulted in a
>> kernel build failure.
> What's the failure ?
>
>
>> diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
>> index 874efd25cc45..d48850fe159f 100644
>> --- a/arch/powerpc/kernel/head_64.S
>> +++ b/arch/powerpc/kernel/head_64.S
>> @@ -192,6 +192,7 @@ __secondary_hold:
>>           EMIT_BUG_ENTRY 0b, __FILE__, __LINE__, 0
>>    #endif
>>    CLOSE_FIXED_SECTION(first_256B)
>> +nop
>>
>>    /*
>>     * On server, we include the exception vectors code here as it
>>
>> diff --git a/arch/powerpc/kernel/exceptions-64s.S
>> b/arch/powerpc/kernel/exceptions-64s.S
>> index 26f8fef53c72..f7517d443e9b 100644
>> --- a/arch/powerpc/kernel/exceptions-64s.S
>> +++ b/arch/powerpc/kernel/exceptions-64s.S
>> @@ -3104,9 +3104,13 @@ __end_interrupts:
>>    DEFINE_FIXED_SYMBOL(__end_interrupts, virt_trampolines)
>>
>>    CLOSE_FIXED_SECTION(real_vectors);
>> +nop
>>    CLOSE_FIXED_SECTION(real_trampolines);
>> +nop
>>    CLOSE_FIXED_SECTION(virt_vectors);
>> +nop
>>    CLOSE_FIXED_SECTION(virt_trampolines);
>> +nop
> What are the NOPs after the CLOSE_FIXED_SECTION() ? You don't explain
> them, and I can't see any related warning in the warnings you show.
>
>
After fixing arch/powerpc/kernel/head_64.o: warning: objtool: 
end_first_256B(): can't find starting instruction warning, objtool 
started showing more warnings in the same file.
Below is the list of warnings:
  arch/powerpc/kernel/head_64.o: warning: objtool: end_real_vectors(): 
can't find starting instruction
  arch/powerpc/kernel/head_64.o: warning: objtool: 
end_real_trampolines(): can't find starting instruction
  arch/powerpc/kernel/head_64.o: warning: objtool: end_virt_vectors(): 
can't find starting instruction
  arch/powerpc/kernel/head_64.o: warning: objtool: 
end_virt_trampolines(): can't find starting instruction


Thanks,
Sathvika

WARNING: multiple messages have this Message-ID (diff)
From: Sathvika Vasireddy <sv@linux.ibm.com>
To: Christophe Leroy <christophe.leroy@csgroup.eu>,
	Stephen Rothwell <sfr@canb.auug.org.au>,
	Michael Ellerman <mpe@ellerman.id.au>,
	PowerPC <linuxppc-dev@lists.ozlabs.org>,
	"peterz@infradead.org" <peterz@infradead.org>
Cc: "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>,
	Linux Next Mailing List <linux-next@vger.kernel.org>,
	Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: Re: linux-next: build warnings after merge of the powerpc-objtool tree
Date: Wed, 30 Nov 2022 17:21:06 +0530	[thread overview]
Message-ID: <74552090-c654-5356-773d-47ead2d63ab2@linux.ibm.com> (raw)
In-Reply-To: <c0ed0d60-6014-4c5f-e610-b4d3bd9e9e33@csgroup.eu>


On 29/11/22 20:58, Christophe Leroy wrote:
>
> Le 29/11/2022 à 16:13, Sathvika Vasireddy a écrit :
>> Hi all,
>>
>> On 25/11/22 09:00, Stephen Rothwell wrote:
>>> Hi all,
>>>
>>> After merging the powerpc-objtool tree, today's linux-next build (powerpc
>>> pseries_le_defconfig) produced these warnings:
>>>
>>> arch/powerpc/kernel/head_64.o: warning: objtool: end_first_256B():
>>> can't find starting instruction
>>> arch/powerpc/kernel/optprobes_head.o: warning: objtool:
>>> optprobe_template_end(): can't find starting instruction
>>>
>>> I have no idea what started this (they may have been there yesterday).
>> I was able to recreate the above mentioned warnings with
>> pseries_le_defconfig and powernv_defconfig. The regression report also
>> mentions a warning
>> (https://lore.kernel.org/oe-kbuild-all/202211282102.QUr7HHrW-lkp@intel.com/) seen with arch/powerpc/kernel/kvm_emul.S assembly file.
>>
>>    [1] arch/powerpc/kernel/optprobes_head.o: warning: objtool:
>> optprobe_template_end(): can't find starting instruction
>>    [2] arch/powerpc/kernel/kvm_emul.o: warning: objtool:
>> kvm_template_end(): can't find starting instruction
>>    [3] arch/powerpc/kernel/head_64.o: warning: objtool: end_first_256B():
>> can't find starting instruction
>>
>> The warnings [1] and [2] go away after adding 'nop' instruction. Below
>> diff fixes it for me:
> You have to add NOPs just because those labels are at the end of the
> files. That's a bit odd.
> I think either we are missing some kind of flagging for the symbols, or
> objtool has a bug. In both cases, I'm not sure adding an artificial
> 'nop' is the solution. At least there should be a big hammer warning
> explaining why.

I don't see these warnings with powerpc/topic/objtool branch. However, 
they are seen with linux-next master branch.
Commit dbcdbdfdf137b49144204571f1a5e5dc01b8aaad objtool: Rework 
instruction -> symbol mapping in linux-next is resulting in objtool 
can't find starting instruction warnings on powerpc.

Reverting this particular hunk (pasted below), resolves it and we don't 
see the problem anymore.

@@ -427,7 +427,10 @@ static int decode_instructions(struct objtool_file 
*file)
                 }

                 list_for_each_entry(func, &sec->symbol_list, list) {
-                       if (func->type != STT_FUNC || func->alias != func)
+                       if (func->type != STT_NOTYPE && func->type != 
STT_FUNC)
+                               continue;
+
+                       if (func->return_thunk || func->alias != func)
                                 continue;

                         if (!find_insn(file, sec, func->offset)) {

Peterz, can we ignore STT_NOTYPE symbols?

>> diff --git a/arch/powerpc/kernel/optprobes_head.S
>> b/arch/powerpc/kernel/optprobes_head.S
>> index cd4e7bc32609..ea4e3bd82f4f 100644
>> --- a/arch/powerpc/kernel/optprobes_head.S
>> +++ b/arch/powerpc/kernel/optprobes_head.S
>> @@ -134,3 +134,4 @@ optprobe_template_ret:
>>
>>           .global optprobe_template_end
>>    optprobe_template_end:
>> +       nop
>>
>> diff --git a/arch/powerpc/kernel/kvm_emul.S
>> b/arch/powerpc/kernel/kvm_emul.S
>> index 7af6f8b50c5d..41fd664e3ba0 100644
>> --- a/arch/powerpc/kernel/kvm_emul.S
>> +++ b/arch/powerpc/kernel/kvm_emul.S
>> @@ -352,3 +352,4 @@ kvm_tmp_end:
>>
>>    .global kvm_template_end
>>    kvm_template_end:
>> +       nop
>>
>> For warning [3], objtool is throwing can't find starting instruction
>> warning because it finds that the symbol (end_first_256B) is zero sized,
>> and such symbols are not added to the rbtree. I tried to fix it by
>> adding a 'nop' instruction (pasted diff below), but that resulted in a
>> kernel build failure.
> What's the failure ?
>
>
>> diff --git a/arch/powerpc/kernel/head_64.S b/arch/powerpc/kernel/head_64.S
>> index 874efd25cc45..d48850fe159f 100644
>> --- a/arch/powerpc/kernel/head_64.S
>> +++ b/arch/powerpc/kernel/head_64.S
>> @@ -192,6 +192,7 @@ __secondary_hold:
>>           EMIT_BUG_ENTRY 0b, __FILE__, __LINE__, 0
>>    #endif
>>    CLOSE_FIXED_SECTION(first_256B)
>> +nop
>>
>>    /*
>>     * On server, we include the exception vectors code here as it
>>
>> diff --git a/arch/powerpc/kernel/exceptions-64s.S
>> b/arch/powerpc/kernel/exceptions-64s.S
>> index 26f8fef53c72..f7517d443e9b 100644
>> --- a/arch/powerpc/kernel/exceptions-64s.S
>> +++ b/arch/powerpc/kernel/exceptions-64s.S
>> @@ -3104,9 +3104,13 @@ __end_interrupts:
>>    DEFINE_FIXED_SYMBOL(__end_interrupts, virt_trampolines)
>>
>>    CLOSE_FIXED_SECTION(real_vectors);
>> +nop
>>    CLOSE_FIXED_SECTION(real_trampolines);
>> +nop
>>    CLOSE_FIXED_SECTION(virt_vectors);
>> +nop
>>    CLOSE_FIXED_SECTION(virt_trampolines);
>> +nop
> What are the NOPs after the CLOSE_FIXED_SECTION() ? You don't explain
> them, and I can't see any related warning in the warnings you show.
>
>
After fixing arch/powerpc/kernel/head_64.o: warning: objtool: 
end_first_256B(): can't find starting instruction warning, objtool 
started showing more warnings in the same file.
Below is the list of warnings:
  arch/powerpc/kernel/head_64.o: warning: objtool: end_real_vectors(): 
can't find starting instruction
  arch/powerpc/kernel/head_64.o: warning: objtool: 
end_real_trampolines(): can't find starting instruction
  arch/powerpc/kernel/head_64.o: warning: objtool: end_virt_vectors(): 
can't find starting instruction
  arch/powerpc/kernel/head_64.o: warning: objtool: 
end_virt_trampolines(): can't find starting instruction


Thanks,
Sathvika

  reply	other threads:[~2022-11-30 11:52 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2022-11-25  3:30 linux-next: build warnings after merge of the powerpc-objtool tree Stephen Rothwell
2022-11-25  3:30 ` Stephen Rothwell
2022-11-29 15:13 ` Sathvika Vasireddy
2022-11-29 15:13   ` Sathvika Vasireddy
2022-11-29 15:28   ` Christophe Leroy
2022-11-29 15:28     ` Christophe Leroy
2022-11-30 11:51     ` Sathvika Vasireddy [this message]
2022-11-30 11:51       ` Sathvika Vasireddy
2022-12-06 10:14       ` Naveen N. Rao
2022-12-06 10:14         ` Naveen N. Rao

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=74552090-c654-5356-773d-47ead2d63ab2@linux.ibm.com \
    --to=sv@linux.ibm.com \
    --cc=christophe.leroy@csgroup.eu \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-next@vger.kernel.org \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=mpe@ellerman.id.au \
    --cc=naveen.n.rao@linux.vnet.ibm.com \
    --cc=peterz@infradead.org \
    --cc=sfr@canb.auug.org.au \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.