Re: [PATCH v2 02/10] x86: assembly, FUNC_START for fn, DATA_START for data

From: Ingo Molnar
Date: Thu Mar 23 2017 - 03:38:43 EST



* Josh Poimboeuf <jpoimboe@xxxxxxxxxx> wrote:

> On Wed, Mar 22, 2017 at 08:46:16AM +0100, Ingo Molnar wrote:
> >
> > * Jiri Slaby <jslaby@xxxxxxx> wrote:
> >
> > > On 03/22/2017, 08:25 AM, Ingo Molnar wrote:
> > > >
> > > > * Pavel Machek <pavel@xxxxxx> wrote:
> > > >
> > > >> Hi!
> > > >>
> > > >>> -ENTRY(saved_rbp) .quad 0
> > > >>> -ENTRY(saved_rsi) .quad 0
> > > >>> -ENTRY(saved_rdi) .quad 0
> > > >>> -ENTRY(saved_rbx) .quad 0
> > > >>> +SYM_DATA_START(saved_rbp) .quad 0
> > > >>> +SYM_DATA_START(saved_rsi) .quad 0
> > > >>> +SYM_DATA_START(saved_rdi) .quad 0
> > > >>> +SYM_DATA_START(saved_rbx) .quad 0
> > > >>
> > > >> Does it make sense to call it SYM_DATA_*START* when there's no
> > > >> corresponding end?
> > > >
> > > > That looks like a bug - I think we should strive for them to always be in pairs.
> > > >
> > > > Jiri, Josh, could objtool help here perhaps, to detect 'non-terminated'
> > > > SYM_*_START() uses? This could be done by emitting debug data into a special
> > > > section and then analyzing that section for unpaired entries. The section can be
> > > > discarded in the final link, it won't show up in the kernel image.
> > >
> > > It should be easier than that. No introduction of other info needed --
> > > every global symbol without a ".type" or ".size" (i.e. SYM_*_END) should
> > > be a bug now.
> >
> > I'm all for that!
>
> It would be easy to add this checking to objtool since it already reads
> the symbol table. The hard part is figuring out the logistics. :-)
>
> - Should the warnings be on by default?

Yes, if objtool is running. Keep it simple.

> - Part of the "objtool check" command or something else?

Yes - I think it's still within the 'object file check' functionality.

> - Separate config option or just include it with
> CONFIG_STACK_VALIDATION?

Yeah, but I'd rename CONFIG_STACK_VALIDATION to CONFIG_OBJ_VALIDATION or such. As
I predicted early on, objtool will go beyond stack checking! ;-)

> - Should all asm files be checked, including those currently skipped by
> objtool with OBJECT_FILES_NON_STANDARD?

The symbol syntax check should definitely be for all files, yes.

Could we perhaps emit 'non-standard stack frames' information into the .o itself
(via a flag or a special section?), so that objtool can decide on its own whether
to complain about any weirdnesses there?

> > Can we detect double ends as well - i.e. do a build check of the full syntax of
> > these symbol definition primitives?
>
> Detecting double ends would be a little trickier. The second SYM_*_END
> supersedes the first, so that information isn't in the ELF symbol table.

Indeed.

> We could use a special section to annotate all the macro uses and have
> objtool do the checking, similar to what you suggested earlier.

That might be useful for other purposes as well - such as the non-standard stack
frame annotations?

But it's your call really: I'm principally fine with any of the solutions, as long
as the checking is done.

Thanks,

Ingo