Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp1138126imm; Tue, 15 May 2018 14:28:33 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpGvER0iZd+jwzcocrAhlFIX4uOfPock83Cro2p6JUZEaZf1Bf5UeSlm68VHurVyTL3j+EV X-Received: by 2002:a62:fd12:: with SMTP id p18-v6mr16698019pfh.152.1526419713688; Tue, 15 May 2018 14:28:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526419713; cv=none; d=google.com; s=arc-20160816; b=OKMgowj0jKHBz/Ctih2jVK9DFDfoi7iz1i6dkmWGmbqTbro/0Bk/tEhwaukfKKpop7 Vy70Ntop1SOwC0KKxhP3yjNo+RfAtGMkc/pZbAqw+MY54hnFxkcUGe+8Ekd28qQxUQrm SQFCpv87KZaK9PLs/vTlpyyxvWTLbzPjiYYh4lk7IjWUhXfprm0Fu0bfUuXaOTQQJz0P r6yTgMQe9f+ZBpISHCvk3qz1vM3YN3LYrS4af7TL7neanmgX381W2X0EFazp8O9yehCa 5Ojin4Bm+7D0k4voJNFBiKSRO36z1gOpxvggaNX0ZRX5BGynHRY/uivo09WWsBNt9TAT 0/lg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:arc-authentication-results; bh=5Z0WW980ZH1ESp//OVLwC3pmUTEzDnXFuR04pcoJizE=; b=zXiQg9dtExm7B2NKwp2J2JiPYqjozP+B5RhI0vPiRiW22CF1/u7ICIJL2DDJPIMUlo YGfomf8VDV8ylxfGFOUeBEWtlmbUptgFtYeU9XOsSS/W393S4SiwJTNVpQkqyBgmalII Ci/ZHYZ0sHJZJ/4mmsBSJFDZ9ECQ/HbaoLfz5DYWx1RCFCDlQddeXMuhry0AwPsOfKkb kW75nk3AU/ktfe+vTjs5ufDj+R3P3WWSj0sQYSLazUc1BL7+27C16gXvfJyaPpAKPGm+ HGTHpjp1DqgBgzMT6U5B+aX4rFoCYXC1nafdnD1zgEaVgfBEVpHOpOJrgqVY81W4ydS8 LE4Q== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k30-v6si801825pgn.634.2018.05.15.14.28.18; Tue, 15 May 2018 14:28:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752829AbeEOV0P (ORCPT + 99 others); Tue, 15 May 2018 17:26:15 -0400 Received: from ex13-edg-ou-002.vmware.com ([208.91.0.190]:54610 "EHLO EX13-EDG-OU-002.vmware.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752095AbeEOV0L (ORCPT ); Tue, 15 May 2018 17:26:11 -0400 Received: from sc9-mailhost2.vmware.com (10.113.161.72) by EX13-EDG-OU-002.vmware.com (10.113.208.156) with Microsoft SMTP Server id 15.0.1156.6; Tue, 15 May 2018 14:26:07 -0700 Received: from sc2-haas01-esx0118.eng.vmware.com (sc2-haas01-esx0118.eng.vmware.com [10.172.44.118]) by sc9-mailhost2.vmware.com (Postfix) with ESMTP id B5245B079B; Tue, 15 May 2018 14:26:10 -0700 (PDT) From: Nadav Amit To: CC: , Nadav Amit , Christopher Li , Subject: [RFC 1/8] x86: objtool: use asm macro for better compiler decisions Date: Tue, 15 May 2018 07:11:08 -0700 Message-ID: <20180515141124.84254-2-namit@vmware.com> X-Mailer: git-send-email 2.17.0 In-Reply-To: <20180515141124.84254-1-namit@vmware.com> References: <20180515141124.84254-1-namit@vmware.com> MIME-Version: 1.0 Content-Type: text/plain Received-SPF: None (EX13-EDG-OU-002.vmware.com: namit@vmware.com does not designate permitted sender hosts) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org GCC considers the number of statements in inlined assembly blocks, according to new-lines and semicolons, as an indication to the cost of the block in time and space. This data is distorted by the kernel code, which puts information in alternative sections. As a result, the compiler may perform incorrect inlining and branch optimizations. In the case of objtool, this distortion is extreme, since anyhow the annotations of objtool are discarded during linkage. The solution is to set an assembly macro and call it from the inlinedv assembly block. As a result GCC considers the inline assembly block as a single instruction. This patch slightly increases the kernel size. text data bss dec hex filename 18126699 10066728 2936832 31130259 1db0293 ./vmlinux before 18126824 10067268 2936832 31130924 1db052c ./vmlinux after (+665) But allows more aggressive inlining. Static text symbols: Before: 40033 After: 40015 (-18) Cc: Christopher Li Cc: linux-sparse@vger.kernel.org Signed-off-by: Nadav Amit --- include/linux/compiler.h | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/include/linux/compiler.h b/include/linux/compiler.h index ab4711c63601..369753000541 100644 --- a/include/linux/compiler.h +++ b/include/linux/compiler.h @@ -98,17 +98,30 @@ void ftrace_likely_update(struct ftrace_likely_data *f, int val, * The __COUNTER__ based labels are a hack to make each instance of the macros * unique, to convince GCC not to merge duplicate inline asm statements. */ + +asm ("\n" + ".macro __annotate_reachable counter:req\n" + "\\counter:\n\t" + ".pushsection .discard.reachable\n\t" + ".long \\counter\\()b -.\n\t" + ".popsection\n" + ".endm\n"); + #define annotate_reachable() ({ \ - asm volatile("%c0:\n\t" \ - ".pushsection .discard.reachable\n\t" \ - ".long %c0b - .\n\t" \ - ".popsection\n\t" : : "i" (__COUNTER__)); \ + asm volatile("__annotate_reachable %c0" : : "i" (__COUNTER__)); \ }) + +asm ("\n" + ".macro __annotate_unreachable counter:req\n" + "\\counter:\n\t" + ".pushsection .discard.unreachable\n\t" + ".long \\counter\\()b -.\n\t" + ".popsection\n" + ".endm"); + #define annotate_unreachable() ({ \ - asm volatile("%c0:\n\t" \ - ".pushsection .discard.unreachable\n\t" \ - ".long %c0b - .\n\t" \ - ".popsection\n\t" : : "i" (__COUNTER__)); \ + asm volatile("__annotate_unreachable %c0" : : \ + "i" (__COUNTER__)); \ }) #define ASM_UNREACHABLE \ "999:\n\t" \ -- 2.17.0