From: Josh Poimboeuf <jpoimboe@redhat.com>
To: Ingo Molnar <mingo@kernel.org>
Cc: Jiri Slaby <jslaby@suse.cz>, Pavel Machek <pavel@ucw.cz>,
mingo@redhat.com, tglx@linutronix.de, hpa@zytor.com,
x86@kernel.org, linux-kernel@vger.kernel.org,
Boris Ostrovsky <boris.ostrovsky@oracle.com>,
Juergen Gross <jgross@suse.com>,
xen-devel@lists.xenproject.org,
"Rafael J. Wysocki" <rjw@rjwysocki.net>,
Len Brown <len.brown@intel.com>,
linux-pm@vger.kernel.org
Subject: Re: [PATCH v2 02/10] x86: assembly, FUNC_START for fn, DATA_START for data
Date: Thu, 23 Mar 2017 08:24:58 -0500 [thread overview]
Message-ID: <20170323132458.wuil6uvri4o2kyom@treble> (raw)
In-Reply-To: <20170323073819.GA14258@gmail.com>
On Thu, Mar 23, 2017 at 08:38:20AM +0100, Ingo Molnar wrote:
>
> * Josh Poimboeuf <jpoimboe@redhat.com> wrote:
>
> > On Wed, Mar 22, 2017 at 08:46:16AM +0100, Ingo Molnar wrote:
> > >
> > > * Jiri Slaby <jslaby@suse.cz> wrote:
> > >
> > > > On 03/22/2017, 08:25 AM, Ingo Molnar wrote:
> > > > >
> > > > > * Pavel Machek <pavel@ucw.cz> 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.
That all sounds reasonable. I'll work something up.
> 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?
For the OBJECT_FILES_NON_STANDARD case, where the whole file is
"special", we can just provide a flag to "objtool check" to tell it to
skip stack checking for that file, but still do the symbol checks.
> > > 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?
To start with we can try going without all the special sections (other
than the SYM_END double end check). If we end up finding another case
which isn't covered then we can always add the special sections later.
--
Josh
next prev parent reply other threads:[~2017-03-23 13:24 UTC|newest]
Thread overview: 42+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-02-17 10:47 [PATCH 01/10] x86: assembly, ENTRY for fn, GLOBAL for data Jiri Slaby
2017-02-17 10:47 ` [PATCH 02/10] x86: assembly, use ENDPROC for functions Jiri Slaby
2017-02-17 11:08 ` Juergen Gross
2017-02-17 11:06 ` [PATCH 01/10] x86: assembly, ENTRY for fn, GLOBAL for data Juergen Gross
2017-03-01 9:38 ` Ingo Molnar
2017-03-01 9:50 ` Jiri Slaby
2017-03-01 10:09 ` Thomas Gleixner
2017-03-01 10:27 ` Ingo Molnar
2017-03-03 12:22 ` Jiri Slaby
2017-03-03 18:20 ` hpa
2017-03-06 14:09 ` Jiri Slaby
2017-03-07 7:57 ` Ingo Molnar
2017-03-03 18:24 ` hpa
2017-03-07 8:27 ` Ingo Molnar
2017-03-07 17:24 ` [RFC] linkage: new macros for functions and data Jiri Slaby
2017-03-16 8:02 ` Ingo Molnar
2017-03-16 8:13 ` Jiri Slaby
2017-03-20 12:32 ` [PATCH v2 01/10] linkage: new macros for assembler symbols Jiri Slaby
2017-03-20 12:32 ` [PATCH v2 02/10] x86: assembly, FUNC_START for fn, DATA_START for data Jiri Slaby
2017-03-20 13:32 ` Josh Poimboeuf
2017-03-20 15:32 ` Jiri Slaby
2017-03-20 16:07 ` Josh Poimboeuf
2017-03-21 14:08 ` Pavel Machek
2017-03-22 7:25 ` Ingo Molnar
2017-03-22 7:39 ` Jiri Slaby
2017-03-22 7:46 ` Ingo Molnar
2017-03-22 14:11 ` Josh Poimboeuf
2017-03-22 15:01 ` Jiri Slaby
2017-03-22 15:33 ` Josh Poimboeuf
2017-03-23 7:38 ` Ingo Molnar
2017-03-23 13:24 ` Josh Poimboeuf [this message]
2017-03-22 12:06 ` Jiri Slaby
2017-03-22 15:52 ` Pavel Machek
2017-03-20 12:32 ` [PATCH v2 03/10] x86: assembly, use SYM_FUNC_END for functions Jiri Slaby
2017-03-21 14:48 ` Josh Poimboeuf
2017-03-22 7:29 ` Ingo Molnar
2017-03-22 14:26 ` Josh Poimboeuf
2017-03-22 15:44 ` Jiri Slaby
2017-04-10 11:23 ` Jiri Slaby
2017-04-10 19:35 ` Josh Poimboeuf
2017-04-12 6:24 ` Jiri Slaby
2017-04-12 6:52 ` Ingo Molnar
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=20170323132458.wuil6uvri4o2kyom@treble \
--to=jpoimboe@redhat.com \
--cc=boris.ostrovsky@oracle.com \
--cc=hpa@zytor.com \
--cc=jgross@suse.com \
--cc=jslaby@suse.cz \
--cc=len.brown@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=mingo@redhat.com \
--cc=pavel@ucw.cz \
--cc=rjw@rjwysocki.net \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=xen-devel@lists.xenproject.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).