From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751827AbdG1HmH (ORCPT ); Fri, 28 Jul 2017 03:42:07 -0400 Received: from terminus.zytor.com ([65.50.211.136]:45235 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751610AbdG1HmE (ORCPT ); Fri, 28 Jul 2017 03:42:04 -0400 Date: Fri, 28 Jul 2017 00:37:55 -0700 From: tip-bot for Josh Poimboeuf Message-ID: Cc: tglx@linutronix.de, linux-kernel@vger.kernel.org, jpoimboe@redhat.com, peterz@infradead.org, mingo@kernel.org, torvalds@linux-foundation.org, hpa@zytor.com, arnd@arndb.de Reply-To: linux-kernel@vger.kernel.org, tglx@linutronix.de, mingo@kernel.org, peterz@infradead.org, jpoimboe@redhat.com, hpa@zytor.com, torvalds@linux-foundation.org, arnd@arndb.de In-Reply-To: <4ea1db896e821226efe1f8e09f270771bde47e65.1501188854.git.jpoimboe@redhat.com> References: <4ea1db896e821226efe1f8e09f270771bde47e65.1501188854.git.jpoimboe@redhat.com> To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/asm] objtool: Fix '-mtune=atom' decoding support in objtool 2.0 Git-Commit-ID: 5b8de48e82ba322483c925ce33f193e28e59a5fd X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 5b8de48e82ba322483c925ce33f193e28e59a5fd Gitweb: http://git.kernel.org/tip/5b8de48e82ba322483c925ce33f193e28e59a5fd Author: Josh Poimboeuf AuthorDate: Thu, 27 Jul 2017 15:56:55 -0500 Committer: Ingo Molnar CommitDate: Fri, 28 Jul 2017 08:33:32 +0200 objtool: Fix '-mtune=atom' decoding support in objtool 2.0 With '-mtune=atom', which is enabled with CONFIG_MATOM=y, GCC uses some unusual instructions for setting up the stack. Instead of: mov %rsp, %rbp it does: lea (%rsp), %rbp And instead of: add imm, %rsp it does: lea disp(%rsp), %rsp Add support for these instructions to the objtool decoder. Reported-by: Arnd Bergmann Signed-off-by: Josh Poimboeuf Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Fixes: baa41469a7b9 ("objtool: Implement stack validation 2.0") Link: http://lkml.kernel.org/r/4ea1db896e821226efe1f8e09f270771bde47e65.1501188854.git.jpoimboe@redhat.com Signed-off-by: Ingo Molnar --- tools/objtool/arch/x86/decode.c | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/tools/objtool/arch/x86/decode.c b/tools/objtool/arch/x86/decode.c index e4b400b..7841e5d 100644 --- a/tools/objtool/arch/x86/decode.c +++ b/tools/objtool/arch/x86/decode.c @@ -271,7 +271,7 @@ int arch_decode_instruction(struct elf *elf, struct section *sec, case 0x8d: if (rex == 0x48 && modrm == 0x65) { - /* lea -disp(%rbp), %rsp */ + /* lea disp(%rbp), %rsp */ *type = INSN_STACK; op->src.type = OP_SRC_ADD; op->src.reg = CFI_BP; @@ -281,6 +281,30 @@ int arch_decode_instruction(struct elf *elf, struct section *sec, break; } + if (rex == 0x48 && (modrm == 0xa4 || modrm == 0x64) && + sib == 0x24) { + + /* lea disp(%rsp), %rsp */ + *type = INSN_STACK; + op->src.type = OP_SRC_ADD; + op->src.reg = CFI_SP; + op->src.offset = insn.displacement.value; + op->dest.type = OP_DEST_REG; + op->dest.reg = CFI_SP; + break; + } + + if (rex == 0x48 && modrm == 0x2c && sib == 0x24) { + + /* lea (%rsp), %rbp */ + *type = INSN_STACK; + op->src.type = OP_SRC_REG; + op->src.reg = CFI_SP; + op->dest.type = OP_DEST_REG; + op->dest.reg = CFI_BP; + break; + } + if (rex == 0x4c && modrm == 0x54 && sib == 0x24 && insn.displacement.value == 8) {