From patchwork Thu Aug 10 18:27:40 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Corey Minyard X-Patchwork-Id: 109844 Delivered-To: patch@linaro.org Received: by 10.140.95.78 with SMTP id h72csp2749740qge; Thu, 10 Aug 2017 11:28:57 -0700 (PDT) X-Received: by 10.99.99.7 with SMTP id x7mr12621641pgb.81.1502389737052; Thu, 10 Aug 2017 11:28:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1502389737; cv=none; d=google.com; s=arc-20160816; b=YYjtblOTq8qQR+ebbnyba/6P8uDCh93lQYlTKGP3rVHXeKhhS6c/8S7PAJ6g8aYBmj 0hBV9JoeMaWNOu25HB61SIb/osk0jO8At8YTGZxiTOtRl1RpLqeXcLiceXO7xFXr7+MX YGy2iw8/zMT/bfDTj9taE0XNgUt2sb3UmoNON79YB8/TzSyP+5m6fn9LnZtsDkCFZhQb gZBhcBk58fLo7VHAPn7SrpXLDC4+hqnqQMoaBu2UJbmzeBfvRCHhkRzq71TgraFQmNOp NnK9UGYZYnLmI8L6nTGqAYA0htLXTwzerRxNjyBCWh59MxM8WazGi9SazfcVTDsPqVyr fsWA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=NTMqF/USbfIK+dRVqT95UH6qZSD6eZoePqdI0eLgEOw=; b=F+schOJ6hLeIASn6LXPPZi7P46vkKBqqtBPNXuPTv9ILhZdda9kTpQkLBUtAwaAKO7 /tJoNfgT3oZIz3NmNwE8wGnsIg0Nn3GD7I9RoArtny7/pgKh1iqkVcCy0ZcyUZwLRRJI WJGNM1q3KSwF4n2sV0dAZKQrpcetU2l5teXjUscawpZODRfisMt8tREDfj68Ba9DBooM wo576WeEWBClIZlEs4juSSRs8KKwls+Y/SxkpsKV21vAtu1OnMLfbIf8+QIn5fyR2SHu QL9jZJwDAyHewVZ8ovTYCr3CIhNd913MS3g4xVvJs9s8exJn1ZkdKVkkzSAPa+Ig7i5q v0lg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@gmail.com header.s=20161025 header.b=s2nCXeof; 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 76si4402176pfw.0.2017.08.10.11.28.56; Thu, 10 Aug 2017 11:28:57 -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; dkim=fail header.i=@gmail.com header.s=20161025 header.b=s2nCXeof; 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 S1753327AbdHJS2y (ORCPT + 25 others); Thu, 10 Aug 2017 14:28:54 -0400 Received: from mail-oi0-f65.google.com ([209.85.218.65]:33174 "EHLO mail-oi0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752629AbdHJS1q (ORCPT ); Thu, 10 Aug 2017 14:27:46 -0400 Received: by mail-oi0-f65.google.com with SMTP id e124so1371763oig.0 for ; Thu, 10 Aug 2017 11:27:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=NTMqF/USbfIK+dRVqT95UH6qZSD6eZoePqdI0eLgEOw=; b=s2nCXeofwuWYOkDFK3nthm7Tv3HsKG2lG3B+xd78zVd5I/NMd5E6dmUT5l4PZj6Wio pJLwBzX0kPrszgK1nWicewTjVYntX+WwD1LS9bV75LVu1fzYlu/kLa5WdUpxPIJCJfEq 34LCnM9QdxtHh2CjD4L5FZUmA+MwQa+H205g+i3fQe9MrY/sSUcZvvBGL8ZTgCRynyxr Lm+BpxR8A9Mzg3ZFnAsOeXWHalp6BiaP3MaXJkCy3Gu6SQp/Kny+/S9i61+Yrv3rEQdD jfu7fOeLZAMeLLIp/6Sc+xvmSLybEQDu+cx0v97ZsVoUWnvzEF6qyPzbcinM2cVfet1C K22Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references; bh=NTMqF/USbfIK+dRVqT95UH6qZSD6eZoePqdI0eLgEOw=; b=PetjDpxACkNPgTS+CWRn/mnZTUkrqopZklSxmDkVC2Ie4eD/F18wbX+QBpeDNQLFt1 5xtMY+9S9JjzgjHDrjSO3UWDWD50yi2e95aurgdl4AUDpyHtQm718ABrvZ/Ac9YuYaQ4 PC+vTCBZNU3vY9KNdhtm2nLvmJ8ZteYC7KKmnGN+ZNz/8zuFvUb69X5XWx8ZRvsQix4V FwGXqbrQTuKZkZEItszSk7w6BU0/tMUaWrUwiKp9vCFGY3+FGHrfhKF5RXSfMpwyvCDC xHMoxz/rIJsMsDmXio4OQ8hxgimY2mnk6UIfdyg4rEe/jS9vtcOmoephzVSZGS0ggzLj nJeg== X-Gm-Message-State: AHYfb5iyFiOJ1OWKl1rbGUpRDDyyDG/bMFT7Omu+XjLjDUmrCn/Ypk29 ZwyVW6cfWIwSow== X-Received: by 10.202.10.221 with SMTP id k90mr14040458oiy.245.1502389666265; Thu, 10 Aug 2017 11:27:46 -0700 (PDT) Received: from serve.minyard.net ([47.184.154.34]) by smtp.gmail.com with ESMTPSA id q64sm9003030oib.12.2017.08.10.11.27.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 10 Aug 2017 11:27:44 -0700 (PDT) Received: from t430.minyard.net (t430m.minyard.net [192.168.27.3]) by serve.minyard.net (Postfix) with ESMTPA id C933A95D; Thu, 10 Aug 2017 13:27:43 -0500 (CDT) Received: by t430.minyard.net (Postfix, from userid 1000) id 5F550300E01; Thu, 10 Aug 2017 13:27:42 -0500 (CDT) From: minyard@acm.org To: linux-mips@linux-mips.org, ralf@linux-mips.org, linux-kernel@vger.kernel.org Cc: Corey Minyard Subject: [PATCH 4/4] mips: Save all registers when saving the frame Date: Thu, 10 Aug 2017 13:27:40 -0500 Message-Id: <1502389660-8969-5-git-send-email-minyard@acm.org> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1502389660-8969-1-git-send-email-minyard@acm.org> References: <1502389660-8969-1-git-send-email-minyard@acm.org> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Corey Minyard The MIPS frame save code was just saving a few registers, enough to do a backtrace if every function set up a frame. However, this is not working if you are using DWARF unwinding, because most of the registers are wrong. This was causing kdump backtraces to be short or bogus. So save all the registers. Signed-off-by: Corey Minyard --- arch/mips/include/asm/stacktrace.h | 64 +++++++++++++++++++++++++++++--------- 1 file changed, 50 insertions(+), 14 deletions(-) -- 2.7.4 diff --git a/arch/mips/include/asm/stacktrace.h b/arch/mips/include/asm/stacktrace.h index 780ee2c..10c4e9c 100644 --- a/arch/mips/include/asm/stacktrace.h +++ b/arch/mips/include/asm/stacktrace.h @@ -2,6 +2,8 @@ #define _ASM_STACKTRACE_H #include +#include +#include #ifdef CONFIG_KALLSYMS extern int raw_show_trace; @@ -20,6 +22,14 @@ static inline unsigned long unwind_stack(struct task_struct *task, } #endif +#define STR_PTR_LA __stringify(PTR_LA) +#define STR_LONG_S __stringify(LONG_S) +#define STR_LONG_L __stringify(LONG_L) +#define STR_LONGSIZE __stringify(LONGSIZE) + +#define STORE_ONE_REG(r) \ + STR_LONG_S " $" __stringify(r)",("STR_LONGSIZE"*"__stringify(r)")(%1)\n\t" + static __always_inline void prepare_frametrace(struct pt_regs *regs) { #ifndef CONFIG_KALLSYMS @@ -32,21 +42,47 @@ static __always_inline void prepare_frametrace(struct pt_regs *regs) __asm__ __volatile__( ".set push\n\t" ".set noat\n\t" -#ifdef CONFIG_64BIT - "1: dla $1, 1b\n\t" - "sd $1, %0\n\t" - "sd $29, %1\n\t" - "sd $31, %2\n\t" -#else - "1: la $1, 1b\n\t" - "sw $1, %0\n\t" - "sw $29, %1\n\t" - "sw $31, %2\n\t" -#endif + /* Store $1 so we can use it */ + STR_LONG_S " $1,"STR_LONGSIZE"(%1)\n\t" + /* Store the PC */ + "1: " STR_PTR_LA " $1, 1b\n\t" + STR_LONG_S " $1,%0\n\t" + STORE_ONE_REG(2) + STORE_ONE_REG(3) + STORE_ONE_REG(4) + STORE_ONE_REG(5) + STORE_ONE_REG(6) + STORE_ONE_REG(7) + STORE_ONE_REG(8) + STORE_ONE_REG(9) + STORE_ONE_REG(10) + STORE_ONE_REG(11) + STORE_ONE_REG(12) + STORE_ONE_REG(13) + STORE_ONE_REG(14) + STORE_ONE_REG(15) + STORE_ONE_REG(16) + STORE_ONE_REG(17) + STORE_ONE_REG(18) + STORE_ONE_REG(19) + STORE_ONE_REG(20) + STORE_ONE_REG(21) + STORE_ONE_REG(22) + STORE_ONE_REG(23) + STORE_ONE_REG(24) + STORE_ONE_REG(25) + STORE_ONE_REG(26) + STORE_ONE_REG(27) + STORE_ONE_REG(28) + STORE_ONE_REG(29) + STORE_ONE_REG(30) + STORE_ONE_REG(31) + /* Restore $1 */ + STR_LONG_L " $1,"STR_LONGSIZE"(%1)\n\t" ".set pop\n\t" - : "=m" (regs->cp0_epc), - "=m" (regs->regs[29]), "=m" (regs->regs[31]) - : : "memory"); + : "=m" (regs->cp0_epc) + : "r" (regs->regs) + : "memory"); } #endif /* _ASM_STACKTRACE_H */