Received: by 10.223.185.116 with SMTP id b49csp3384664wrg; Tue, 13 Feb 2018 01:34:03 -0800 (PST) X-Google-Smtp-Source: AH8x227Q1v/04lAUCyNgNuR9Cwdo1qdcb6lM7s8Syx7uvANVeaQ7IlDTB7BsiPYqSv+NbDJZqpZr X-Received: by 10.101.85.204 with SMTP id k12mr543440pgs.40.1518514443579; Tue, 13 Feb 2018 01:34:03 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1518514443; cv=none; d=google.com; s=arc-20160816; b=VKUvw5Z4z040M0ksB4kqxASMjjYqKWOUd895BE2gZud5TatBPqb43XFyBUucSBQPpQ XHrRYdCV09AfV546IZnd5Ov3xKgAkWyXstZZPl8H7GuHqgdI8g1R6EdOTrqpBK5dxvaK rS2PaAipoWsIj1e6OzZTCcyOsU1CmFwps0BCt75HJ4z6yO7Hw47vJL/d9XZCZhC9HW9h DIQjWNnDJiuitGAORZjoZz38bJsW8HY1KKd99zidesm5pWySbBXxuFWr46MiUNFbeA6t jxtxlj+LFt3KahhvKNCatC2LmBXDYise3UyYeK9RzwgB4pDSCFyxJ9QiYjBEVx2rxV03 rOdw== 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:references :in-reply-to:message-id:date:subject:cc:to:from:dkim-signature :arc-authentication-results; bh=R1JPCEFPTLFOI9Ac1hy5O5YTuxPKBfjYF25DOxLzRq8=; b=khxPY28bGg2fpTdIaz3nMKdEOVEaONOHj344CkbNlQnISPeAI4ypJ/BiA2xFBycYCY NUU9g+JyOlV3d0TdpPivQfy0e/OBBL8NudJK8F4ggGArLqkCKt9sYbubZao1p94oYMfY 0j0JdCm53uwVf3WgNzo42BLv3kLg0sxRyrBN553xq4gHfEIJKnBQl0kHi01VtRRig2Yf 3RZKrvcZM9WjHBCHcwcoRPu7wR4OEQaN28NUJG9jH2onXciMqUMnGGRxsq/6ydTviWOD A9f9V257MNoobh0KamzDAvRbfsJzX0frkFskTB3BBb9sOm/DlehN/O2jwURNdIw6m0ma DHUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=IUhPMG2G; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id u12-v6si3876484plr.462.2018.02.13.01.33.48; Tue, 13 Feb 2018 01:34:03 -0800 (PST) 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=pass header.i=@gmail.com header.s=20161025 header.b=IUhPMG2G; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S934670AbeBMJaG (ORCPT + 99 others); Tue, 13 Feb 2018 04:30:06 -0500 Received: from mail-pl0-f66.google.com ([209.85.160.66]:36602 "EHLO mail-pl0-f66.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S933887AbeBMJMb (ORCPT ); Tue, 13 Feb 2018 04:12:31 -0500 Received: by mail-pl0-f66.google.com with SMTP id v3so6365415plg.3; Tue, 13 Feb 2018 01:12:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :in-reply-to:references; bh=R1JPCEFPTLFOI9Ac1hy5O5YTuxPKBfjYF25DOxLzRq8=; b=IUhPMG2GmpNn6ZZpq39Zax/U/FGzf04wlMVd2t4wvmbXmF4QYKYUCfo1saWiYD2Tuu KR5Is3s8XNdlNnteYz1dHkIASV9my0mBdou6Uy9v3l7T5Kn1PYmmsx+yR0Wi1/RlCDMM nKl3bfCMsOxcmFdYJd1aXGtQFfCmgDtJyAM5QlK3PSnEzAIHgkX+GEETYdlMSq87YoQI SEKkRLjAONdRUFmL7FRdG9495x0A6rqf7pwFfOuVFU7GTqHCTCbhonf6/yO7r2XBBcjq Z7DsBA6To6VRVOPP+R9CmMQ2bpMKERFONxanizgYNsLBtfAzLPydY75A46UtBnzm9atB Xj+Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:in-reply-to:references; bh=R1JPCEFPTLFOI9Ac1hy5O5YTuxPKBfjYF25DOxLzRq8=; b=sOGy15uEbOs+LLRG6bwAU+wpct3NUOegfMpm3TkCy5rq1s+tV03eCAkkUrEt5hLAWN jl06Ki/F5DE/b+gWOuWS/wyNK7YGkF/Lui+/+0zp7qzHXMJBN1UTckXCZiwXekdCjHJZ W62izt5MLvh7vktobGJiOTMgQNL2oD5ZfEb9bShuGh5KN+4HsNmeFe4pxc+STRQPwPeu w9DVnVlMJx6NMZtVMBUTLYW6/lNoNh3vDcTvVyX3QVKAx4MZgAdLTc2c9tdPheZfZKk1 XBb9MiJOFf4kdesbO5j3km6prAnGUhTVIWfosSq+/WGJkR8XF2I4DRh5buh6McqlEVTI pjVA== X-Gm-Message-State: APf1xPAxjtYgG4BbBEeXYzyhL37P35ZPjtVOXjRRU0Ubtkp4Mop7k5u4 RG4H+PiLlec8OEeIh2p5BK9c4TS3 X-Received: by 2002:a17:902:203:: with SMTP id 3-v6mr499723plc.413.1518513150223; Tue, 13 Feb 2018 01:12:30 -0800 (PST) Received: from app09.andestech.com ([118.163.51.199]) by smtp.gmail.com with ESMTPSA id q20sm31434692pfh.178.2018.02.13.01.12.25 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 13 Feb 2018 01:12:29 -0800 (PST) From: Greentime Hu X-Google-Original-From: Greentime Hu To: greentime@andestech.com, linux-kernel@vger.kernel.org, arnd@arndb.de, linux-arch@vger.kernel.org, tglx@linutronix.de, jason@lakedaemon.net, marc.zyngier@arm.com, robh+dt@kernel.org, netdev@vger.kernel.org, deanbo422@gmail.com, devicetree@vger.kernel.org, viro@zeniv.linux.org.uk, dhowells@redhat.com, will.deacon@arm.com, daniel.lezcano@linaro.org, linux-serial@vger.kernel.org, geert.uytterhoeven@gmail.com, linus.walleij@linaro.org, mark.rutland@arm.com, greg@kroah.com, ren_guo@c-sky.com, rdunlap@infradead.org, davem@davemloft.net, jonas@southpole.se, stefan.kristiansson@saunalahti.fi, shorne@gmail.com Cc: green.hu@gmail.com, Vincent Chen Subject: [PATCH v7 23/37] nds32: Debugging support Date: Tue, 13 Feb 2018 17:09:27 +0800 Message-Id: <7f9139c13f0f84091245b8f5c70ba5d4308e8b36.1518505384.git.greentime@andestech.com> X-Mailer: git-send-email 2.16.1 In-Reply-To: References: In-Reply-To: References: Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This patch adds ptrace support. Signed-off-by: Vincent Chen Signed-off-by: Greentime Hu --- arch/nds32/include/uapi/asm/ptrace.h | 25 ++++++++ arch/nds32/kernel/ptrace.c | 119 +++++++++++++++++++++++++++++++++++ 2 files changed, 144 insertions(+) create mode 100644 arch/nds32/include/uapi/asm/ptrace.h create mode 100644 arch/nds32/kernel/ptrace.c diff --git a/arch/nds32/include/uapi/asm/ptrace.h b/arch/nds32/include/uapi/asm/ptrace.h new file mode 100644 index 000000000000..358c99e399d0 --- /dev/null +++ b/arch/nds32/include/uapi/asm/ptrace.h @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2005-2017 Andes Technology Corporation + +#ifndef __UAPI_ASM_NDS32_PTRACE_H +#define __UAPI_ASM_NDS32_PTRACE_H + +#ifndef __ASSEMBLY__ + +/* + * User structures for general purpose register. + */ +struct user_pt_regs { + long uregs[26]; + long fp; + long gp; + long lp; + long sp; + long ipc; + long lb; + long le; + long lc; + long syscallno; +}; +#endif +#endif diff --git a/arch/nds32/kernel/ptrace.c b/arch/nds32/kernel/ptrace.c new file mode 100644 index 000000000000..eaaf7a999b20 --- /dev/null +++ b/arch/nds32/kernel/ptrace.c @@ -0,0 +1,119 @@ +// SPDX-License-Identifier: GPL-2.0 +// Copyright (C) 2005-2017 Andes Technology Corporation + +#include +#include +#include +#include +#include + +enum nds32_regset { + REGSET_GPR, +}; + +static int gpr_get(struct task_struct *target, + const struct user_regset *regset, + unsigned int pos, unsigned int count, + void *kbuf, void __user * ubuf) +{ + struct user_pt_regs *uregs = &task_pt_regs(target)->user_regs; + return user_regset_copyout(&pos, &count, &kbuf, &ubuf, uregs, 0, -1); +} + +static int gpr_set(struct task_struct *target, const struct user_regset *regset, + unsigned int pos, unsigned int count, + const void *kbuf, const void __user * ubuf) +{ + int err; + struct user_pt_regs newregs = task_pt_regs(target)->user_regs; + + err = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &newregs, 0, -1); + if (err) + return err; + + task_pt_regs(target)->user_regs = newregs; + return 0; +} + +static const struct user_regset nds32_regsets[] = { + [REGSET_GPR] = { + .core_note_type = NT_PRSTATUS, + .n = sizeof(struct user_pt_regs) / sizeof(u32), + .size = sizeof(elf_greg_t), + .align = sizeof(elf_greg_t), + .get = gpr_get, + .set = gpr_set} +}; + +static const struct user_regset_view nds32_user_view = { + .name = "nds32", + .e_machine = EM_NDS32, + .regsets = nds32_regsets, + .n = ARRAY_SIZE(nds32_regsets) +}; + +const struct user_regset_view *task_user_regset_view(struct task_struct *task) +{ + return &nds32_user_view; +} + +void ptrace_disable(struct task_struct *child) +{ + user_disable_single_step(child); +} + +/* do_ptrace() + * + * Provide ptrace defined service. + */ +long arch_ptrace(struct task_struct *child, long request, unsigned long addr, + unsigned long data) +{ + int ret = -EIO; + + switch (request) { + default: + ret = ptrace_request(child, request, addr, data); + break; + } + + return ret; +} + +void user_enable_single_step(struct task_struct *child) +{ + struct pt_regs *regs; + regs = task_pt_regs(child); + regs->ipsw |= PSW_mskHSS; + set_tsk_thread_flag(child, TIF_SINGLESTEP); +} + +void user_disable_single_step(struct task_struct *child) +{ + struct pt_regs *regs; + regs = task_pt_regs(child); + regs->ipsw &= ~PSW_mskHSS; + clear_tsk_thread_flag(child, TIF_SINGLESTEP); +} + +/* sys_trace() + * + * syscall trace handler. + */ + +asmlinkage int syscall_trace_enter(struct pt_regs *regs) +{ + if (test_thread_flag(TIF_SYSCALL_TRACE)) { + if (tracehook_report_syscall_entry(regs)) + forget_syscall(regs); + } + return regs->syscallno; +} + +asmlinkage void syscall_trace_leave(struct pt_regs *regs) +{ + int step = test_thread_flag(TIF_SINGLESTEP); + if (step || test_thread_flag(TIF_SYSCALL_TRACE)) + tracehook_report_syscall_exit(regs, step); + +} -- 2.16.1