From patchwork Wed Mar 22 14:11:23 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Josh Poimboeuf X-Patchwork-Id: 9638997 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CD1E8602CB for ; Wed, 22 Mar 2017 14:14:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BF2882845D for ; Wed, 22 Mar 2017 14:14:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id B3F502846D; Wed, 22 Mar 2017 14:14:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-4.2 required=2.0 tests=BAYES_00, RCVD_IN_DNSWL_MED autolearn=ham version=3.3.1 Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 46FB92845D for ; Wed, 22 Mar 2017 14:14:00 +0000 (UTC) Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cqgz6-0006Sa-Uc; Wed, 22 Mar 2017 14:11:32 +0000 Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cqgz5-0006SU-IJ for xen-devel@lists.xenproject.org; Wed, 22 Mar 2017 14:11:31 +0000 Received: from [193.109.254.147] by server-11.bemta-6.messagelabs.com id FE/D8-04971-21682D85; Wed, 22 Mar 2017 14:11:30 +0000 X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrGIsWRWlGSWpSXmKPExsVysWW7jK5Q26U Ig7kTuSy+b5nM5MDocfjDFZYAxijWzLyk/IoE1ozpm64xF7yRqriwor6BsU2si5GLQ0hgNpPE +uULWboYOTlYBOwlvv5bxQpiMwqUSZybdZEJws6VWLPgE1SNncS5W/fYIJqXM0rMefWPFSKhK nHzHUiCk4NNQEvi+N+T7CC2iICSxOIvH9lBGpgFfjBJHPhyFqiIg0NYIERiz8FokBpeAROJn2 9eMkEMXcQkcf7FYTaIhKDEyZlPwDYzC6hL/Jl3iRmkl1lAWmL5Pw6QMKeAvkTvy/Ngu0SBbjh 6q4sZxJYQ0JZ4fHo6I8hMCYE+RokzC9vYJjCKzEIydhaSsbMQxi5gZF7FqFGcWlSWWqRrZKSX VJSZnlGSm5iZo2toYKaXm1pcnJiempOYVKyXnJ+7iREY/gxAsINxzfzAQ4ySHExKorwulZcih PiS8lMqMxKLM+KLSnNSiw8xynBwKEnwXqgAygkWpaanVqRl5gAjESYtwcGjJMLLWgWU5i0uSM wtzkyHSJ1iVJQS570BMlMAJJFRmgfXBov+S4yyUsK8jECHCPEUpBblZpagyr9iFOdgVBLmPVA PNIUnM68EbvoroMVMQIvL9lwAWVySiJCSamBceN10gtNX7eyIuM13z5Rpagd/XH5f7s2pGwE7 hZeomCrvOxPz61mgl/2Ubtf4PLsLF/YqGrpvzjc9f3ClPGPTbHWt+5pOByY9KdaOsln9YvU6l Vm1D63l1i9lMfly7UTI/NycyiUPn67z53I/uL7k0WFb2TdTuR7tn3x6X87qPaHTzXWMHJInKr EUZyQaajEXFScCAN6uBzv5AgAA X-Env-Sender: jpoimboe@redhat.com X-Msg-Ref: server-12.tower-27.messagelabs.com!1490191888!91670890!1 X-Originating-IP: [209.132.183.28] X-SpamReason: No, hits=0.0 required=7.0 tests=sa_preprocessor: VHJ1c3RlZCBJUDogMjA5LjEzMi4xODMuMjggPT4gNTQwNjQ=\n X-StarScan-Received: X-StarScan-Version: 9.2.3; banners=-,-,- X-VirusChecked: Checked Received: (qmail 31970 invoked from network); 22 Mar 2017 14:11:29 -0000 Received: from mx1.redhat.com (HELO mx1.redhat.com) (209.132.183.28) by server-12.tower-27.messagelabs.com with DHE-RSA-AES256-GCM-SHA384 encrypted SMTP; 22 Mar 2017 14:11:29 -0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id F2C307E9C2; Wed, 22 Mar 2017 14:11:28 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com F2C307E9C2 DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com F2C307E9C2 Received: from treble (ovpn-120-204.rdu2.redhat.com [10.10.120.204]) by smtp.corp.redhat.com (Postfix) with SMTP id 720D87DFD4; Wed, 22 Mar 2017 14:11:25 +0000 (UTC) Date: Wed, 22 Mar 2017 09:11:23 -0500 From: Josh Poimboeuf To: Ingo Molnar Message-ID: <20170322141123.opss3u4gpupqgl2q@treble> References: <9ea5e137-61f9-dccc-bb9d-ac3ff86e5867@suse.cz> <20170320123222.15453-1-jslaby@suse.cz> <20170320123222.15453-2-jslaby@suse.cz> <20170321140840.GA23311@amd> <20170322072557.GA13904@gmail.com> <20170322074616.GA10809@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20170322074616.GA10809@gmail.com> User-Agent: Mutt/1.6.0.1 (2016-04-01) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.26]); Wed, 22 Mar 2017 14:11:29 +0000 (UTC) Cc: Juergen Gross , Len Brown , linux-pm@vger.kernel.org, x86@kernel.org, "Rafael J. Wysocki" , linux-kernel@vger.kernel.org, mingo@redhat.com, Pavel Machek , hpa@zytor.com, xen-devel@lists.xenproject.org, tglx@linutronix.de, Jiri Slaby , Boris Ostrovsky Subject: Re: [Xen-devel] [PATCH v2 02/10] x86: assembly, FUNC_START for fn, DATA_START for data X-BeenThere: xen-devel@lists.xen.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" X-Virus-Scanned: ClamAV using ClamSMTP On Wed, Mar 22, 2017 at 08:46:16AM +0100, Ingo Molnar wrote: > > * Jiri Slaby wrote: > > > On 03/22/2017, 08:25 AM, Ingo Molnar wrote: > > > > > > * Pavel Machek 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? - Part of the "objtool check" command or something else? - Separate config option or just include it with CONFIG_STACK_VALIDATION? - Should all asm files be checked, including those currently skipped by objtool with OBJECT_FILES_NON_STANDARD? > 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. We could use a special section to annotate all the macro uses and have objtool do the checking, similar to what you suggested earlier. Or, here's a much easier way to do it, without involving objtool: If there's an extra SYM_*_END, the build fails. For example, if I add an extra SYM_FUNC_END(\name) to the THUNK macro: AS arch/x86/entry/thunk_64.o arch/x86/entry/thunk_64.S: Assembler messages: arch/x86/entry/thunk_64.S:42: Error: symbol `SYM_END_trace_hardirqs_on_thunk' is already defined arch/x86/entry/thunk_64.S:43: Error: symbol `SYM_END_trace_hardirqs_off_thunk' is already defined arch/x86/entry/thunk_64.S:47: Error: symbol `SYM_END_lockdep_sys_exit_thunk' is already defined arch/x86/entry/thunk_64.S:51: Error: symbol `SYM_END____preempt_schedule' is already defined arch/x86/entry/thunk_64.S:52: Error: symbol `SYM_END____preempt_schedule_notrace' is already defined scripts/Makefile.build:395: recipe for target 'arch/x86/entry/thunk_64.o' failed --- a/include/linux/linkage.h +++ b/include/linux/linkage.h @@ -138,9 +138,17 @@ name: #endif +#ifndef CHECK_DUP_SYM_END +#define CHECK_DUP_SYM_END(name) \ + .pushsection .discard.sym_func_end ASM_NL \ + SYM_END_##name: .byte 0 ASM_NL \ + .popsection +#endif + /* SYM_END -- use only if you have to */ #ifndef SYM_END #define SYM_END(name, sym_type) \ + CHECK_DUP_SYM_END(name) ASM_NL \ .type name sym_type ASM_NL \ .size name, .-name #endif