[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-Id: <1670317359.hj45ajyl9d.naveen@linux.ibm.com>
Date: Tue, 06 Dec 2022 15:44:22 +0530
From: "Naveen N. Rao" <naveen.n.rao@...ux.vnet.ibm.com>
To: Christophe Leroy <christophe.leroy@...roup.eu>,
PowerPC <linuxppc-dev@...ts.ozlabs.org>,
Michael Ellerman <mpe@...erman.id.au>,
"peterz@...radead.org" <peterz@...radead.org>,
Stephen Rothwell <sfr@...b.auug.org.au>,
Sathvika Vasireddy <sv@...ux.ibm.com>
Cc: Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Linux Next Mailing List <linux-next@...r.kernel.org>
Subject: Re: linux-next: build warnings after merge of the powerpc-objtool
tree
Sathvika Vasireddy wrote:
>
> 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.
The problem looks to be that commit dbcdbdfdf137b4 ("objtool: Rework
instruction -> symbol mapping"), which was referenced by Sathvika below,
changes how STT_NOTYPE symbols are handled. In the files throwing that
warning, there are labels either at the very end of the file, or at the
end of a section with no subsequent instruction. Before that commit, we
didn't used to expect an instruction for STT_NOTYPE symbols.
>
> 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)) {
We are currently bailing out if find_insn() there fails. Should we
instead just continue by not setting insn->sym?
@@ -430,11 +430,8 @@ static int decode_instructions(struct objtool_file *file)
if (func->return_thunk || func->alias != func)
continue;
- if (!find_insn(file, sec, func->offset)) {
- WARN("%s(): can't find starting instruction",
- func->name);
- return -1;
- }
+ if (!find_insn(file, sec, func->offset))
+ continue;
sym_for_each_insn(file, func, insn) {
insn->sym = func;
- Naveen
Powered by blists - more mailing lists