From: guoren@kernel.org
To: guoren@kernel.org, palmer@dabbelt.com, arnd@arndb.de,
anup@brainfault.org, gregkh@linuxfoundation.org,
liush@allwinnertech.com, wefu@redhat.com, drew@beagleboard.org,
wangjunqiang@iscas.ac.cn, hch@lst.de, hch@infradead.org
Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-csky@vger.kernel.org,
linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, linux-parisc@vger.kernel.org,
linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
x86@kernel.org, Guo Ren <guoren@linux.alibaba.com>
Subject: [PATCH V4 15/17] riscv: compat: ptrace: Add compat_arch_ptrace implement
Date: Sat, 29 Jan 2022 20:17:26 +0800 [thread overview]
Message-ID: <20220129121728.1079364-16-guoren@kernel.org> (raw)
In-Reply-To: <20220129121728.1079364-1-guoren@kernel.org>
From: Guo Ren <guoren@linux.alibaba.com>
Now, you can use native gdb on riscv64 for rv32 app debugging.
$ uname -a
Linux buildroot 5.16.0-rc4-00036-gbef6b82fdf23-dirty #53 SMP Mon Dec 20 23:06:53 CST 2021 riscv64 GNU/Linux
$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdcsuh
mmu : sv48
$ file /bin/busybox
/bin/busybox: setuid ELF 32-bit LSB shared object, UCB RISC-V, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ file /usr/bin/gdb
/usr/bin/gdb: ELF 32-bit LSB shared object, UCB RISC-V, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ /usr/bin/gdb /bin/busybox
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
...
Reading symbols from /bin/busybox...
(No debugging symbols found in /bin/busybox)
(gdb) b main
Breakpoint 1 at 0x8ddc
(gdb) r
Starting program: /bin/busybox
Failed to read a valid object file image from memory.
Breakpoint 1, 0x555a8ddc in main ()
(gdb) i r
ra 0x77df0b74 0x77df0b74
sp 0x7fdd3d10 0x7fdd3d10
gp 0x5567e800 0x5567e800 <bb_common_bufsiz1+160>
tp 0x77f64280 0x77f64280
t0 0x0 0
t1 0x555a6fac 1431990188
t2 0x77dd8db4 2011008436
fp 0x7fdd3e34 0x7fdd3e34
s1 0x7fdd3e34 2145205812
a0 0xffffffff -1
a1 0x2000 8192
a2 0x7fdd3e3c 2145205820
a3 0x0 0
a4 0x7fdd3d30 2145205552
a5 0x555a8dc0 1431997888
a6 0x77f2c170 2012397936
a7 0x6a7c7a2f 1786542639
s2 0x0 0
s3 0x0 0
s4 0x555a8dc0 1431997888
s5 0x77f8a3a8 2012783528
s6 0x7fdd3e3c 2145205820
s7 0x5567cecc 1432866508
--Type <RET> for more, q to quit, c to continue without paging--
s8 0x1 1
s9 0x0 0
s10 0x55634448 1432568904
s11 0x0 0
t3 0x77df0bb8 2011106232
t4 0x42fc 17148
t5 0x0 0
t6 0x40 64
pc 0x555a8ddc 0x555a8ddc <main+28>
(gdb) si
0x555a78f0 in mallopt@plt ()
(gdb) c
Continuing.
BusyBox v1.34.1 (2021-12-19 22:39:48 CST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Usage: busybox [function [arguments]...]
or: busybox --list[-full]
...
[Inferior 1 (process 107) exited normally]
(gdb) q
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
---
arch/riscv/kernel/ptrace.c | 87 +++++++++++++++++++++++++++++++++++---
1 file changed, 82 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c
index a89243730153..bb387593a121 100644
--- a/arch/riscv/kernel/ptrace.c
+++ b/arch/riscv/kernel/ptrace.c
@@ -12,6 +12,7 @@
#include <asm/thread_info.h>
#include <asm/switch_to.h>
#include <linux/audit.h>
+#include <linux/compat.h>
#include <linux/ptrace.h>
#include <linux/elf.h>
#include <linux/regset.h>
@@ -111,11 +112,6 @@ static const struct user_regset_view riscv_user_native_view = {
.n = ARRAY_SIZE(riscv_user_regset),
};
-const struct user_regset_view *task_user_regset_view(struct task_struct *task)
-{
- return &riscv_user_native_view;
-}
-
struct pt_regs_offset {
const char *name;
int offset;
@@ -273,3 +269,84 @@ __visible void do_syscall_trace_exit(struct pt_regs *regs)
trace_sys_exit(regs, regs_return_value(regs));
#endif
}
+
+#ifdef CONFIG_COMPAT
+static int compat_riscv_gpr_get(struct task_struct *target,
+ const struct user_regset *regset,
+ struct membuf to)
+{
+ struct compat_user_regs_struct cregs;
+
+ regs_to_cregs(&cregs, task_pt_regs(target));
+
+ return membuf_write(&to, &cregs,
+ sizeof(struct compat_user_regs_struct));
+}
+
+static int compat_riscv_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 ret;
+ struct compat_user_regs_struct cregs;
+
+ ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &cregs, 0, -1);
+
+ cregs_to_regs(&cregs, task_pt_regs(target));
+
+ return ret;
+}
+
+static const struct user_regset compat_riscv_user_regset[] = {
+ [REGSET_X] = {
+ .core_note_type = NT_PRSTATUS,
+ .n = ELF_NGREG,
+ .size = sizeof(compat_elf_greg_t),
+ .align = sizeof(compat_elf_greg_t),
+ .regset_get = compat_riscv_gpr_get,
+ .set = compat_riscv_gpr_set,
+ },
+#ifdef CONFIG_FPU
+ [REGSET_F] = {
+ .core_note_type = NT_PRFPREG,
+ .n = ELF_NFPREG,
+ .size = sizeof(elf_fpreg_t),
+ .align = sizeof(elf_fpreg_t),
+ .regset_get = riscv_fpr_get,
+ .set = riscv_fpr_set,
+ },
+#endif
+};
+
+static const struct user_regset_view compat_riscv_user_native_view = {
+ .name = "riscv",
+ .e_machine = EM_RISCV,
+ .regsets = compat_riscv_user_regset,
+ .n = ARRAY_SIZE(compat_riscv_user_regset),
+};
+
+long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+ compat_ulong_t caddr, compat_ulong_t cdata)
+{
+ long ret = -EIO;
+
+ switch (request) {
+ default:
+ ret = compat_ptrace_request(child, request, caddr, cdata);
+ break;
+ }
+
+ return ret;
+}
+#endif /* CONFIG_COMPAT */
+
+const struct user_regset_view *task_user_regset_view(struct task_struct *task)
+{
+#ifdef CONFIG_COMPAT
+ if (test_tsk_thread_flag(task, TIF_32BIT))
+ return &compat_riscv_user_native_view;
+ else
+#endif
+ return &riscv_user_native_view;
+}
--
2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: guoren@kernel.org
To: guoren@kernel.org, palmer@dabbelt.com, arnd@arndb.de,
anup@brainfault.org, gregkh@linuxfoundation.org,
liush@allwinnertech.com, wefu@redhat.com, drew@beagleboard.org,
wangjunqiang@iscas.ac.cn, hch@lst.de, hch@infradead.org
Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-csky@vger.kernel.org,
linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, linux-parisc@vger.kernel.org,
linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
x86@kernel.org, Guo Ren <guoren@linux.alibaba.com>
Subject: [PATCH V4 15/17] riscv: compat: ptrace: Add compat_arch_ptrace implement
Date: Sat, 29 Jan 2022 20:17:26 +0800 [thread overview]
Message-ID: <20220129121728.1079364-16-guoren@kernel.org> (raw)
In-Reply-To: <20220129121728.1079364-1-guoren@kernel.org>
From: Guo Ren <guoren@linux.alibaba.com>
Now, you can use native gdb on riscv64 for rv32 app debugging.
$ uname -a
Linux buildroot 5.16.0-rc4-00036-gbef6b82fdf23-dirty #53 SMP Mon Dec 20 23:06:53 CST 2021 riscv64 GNU/Linux
$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdcsuh
mmu : sv48
$ file /bin/busybox
/bin/busybox: setuid ELF 32-bit LSB shared object, UCB RISC-V, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ file /usr/bin/gdb
/usr/bin/gdb: ELF 32-bit LSB shared object, UCB RISC-V, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ /usr/bin/gdb /bin/busybox
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
...
Reading symbols from /bin/busybox...
(No debugging symbols found in /bin/busybox)
(gdb) b main
Breakpoint 1 at 0x8ddc
(gdb) r
Starting program: /bin/busybox
Failed to read a valid object file image from memory.
Breakpoint 1, 0x555a8ddc in main ()
(gdb) i r
ra 0x77df0b74 0x77df0b74
sp 0x7fdd3d10 0x7fdd3d10
gp 0x5567e800 0x5567e800 <bb_common_bufsiz1+160>
tp 0x77f64280 0x77f64280
t0 0x0 0
t1 0x555a6fac 1431990188
t2 0x77dd8db4 2011008436
fp 0x7fdd3e34 0x7fdd3e34
s1 0x7fdd3e34 2145205812
a0 0xffffffff -1
a1 0x2000 8192
a2 0x7fdd3e3c 2145205820
a3 0x0 0
a4 0x7fdd3d30 2145205552
a5 0x555a8dc0 1431997888
a6 0x77f2c170 2012397936
a7 0x6a7c7a2f 1786542639
s2 0x0 0
s3 0x0 0
s4 0x555a8dc0 1431997888
s5 0x77f8a3a8 2012783528
s6 0x7fdd3e3c 2145205820
s7 0x5567cecc 1432866508
--Type <RET> for more, q to quit, c to continue without paging--
s8 0x1 1
s9 0x0 0
s10 0x55634448 1432568904
s11 0x0 0
t3 0x77df0bb8 2011106232
t4 0x42fc 17148
t5 0x0 0
t6 0x40 64
pc 0x555a8ddc 0x555a8ddc <main+28>
(gdb) si
0x555a78f0 in mallopt@plt ()
(gdb) c
Continuing.
BusyBox v1.34.1 (2021-12-19 22:39:48 CST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Usage: busybox [function [arguments]...]
or: busybox --list[-full]
...
[Inferior 1 (process 107) exited normally]
(gdb) q
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
---
arch/riscv/kernel/ptrace.c | 87 +++++++++++++++++++++++++++++++++++---
1 file changed, 82 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c
index a89243730153..bb387593a121 100644
--- a/arch/riscv/kernel/ptrace.c
+++ b/arch/riscv/kernel/ptrace.c
@@ -12,6 +12,7 @@
#include <asm/thread_info.h>
#include <asm/switch_to.h>
#include <linux/audit.h>
+#include <linux/compat.h>
#include <linux/ptrace.h>
#include <linux/elf.h>
#include <linux/regset.h>
@@ -111,11 +112,6 @@ static const struct user_regset_view riscv_user_native_view = {
.n = ARRAY_SIZE(riscv_user_regset),
};
-const struct user_regset_view *task_user_regset_view(struct task_struct *task)
-{
- return &riscv_user_native_view;
-}
-
struct pt_regs_offset {
const char *name;
int offset;
@@ -273,3 +269,84 @@ __visible void do_syscall_trace_exit(struct pt_regs *regs)
trace_sys_exit(regs, regs_return_value(regs));
#endif
}
+
+#ifdef CONFIG_COMPAT
+static int compat_riscv_gpr_get(struct task_struct *target,
+ const struct user_regset *regset,
+ struct membuf to)
+{
+ struct compat_user_regs_struct cregs;
+
+ regs_to_cregs(&cregs, task_pt_regs(target));
+
+ return membuf_write(&to, &cregs,
+ sizeof(struct compat_user_regs_struct));
+}
+
+static int compat_riscv_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 ret;
+ struct compat_user_regs_struct cregs;
+
+ ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &cregs, 0, -1);
+
+ cregs_to_regs(&cregs, task_pt_regs(target));
+
+ return ret;
+}
+
+static const struct user_regset compat_riscv_user_regset[] = {
+ [REGSET_X] = {
+ .core_note_type = NT_PRSTATUS,
+ .n = ELF_NGREG,
+ .size = sizeof(compat_elf_greg_t),
+ .align = sizeof(compat_elf_greg_t),
+ .regset_get = compat_riscv_gpr_get,
+ .set = compat_riscv_gpr_set,
+ },
+#ifdef CONFIG_FPU
+ [REGSET_F] = {
+ .core_note_type = NT_PRFPREG,
+ .n = ELF_NFPREG,
+ .size = sizeof(elf_fpreg_t),
+ .align = sizeof(elf_fpreg_t),
+ .regset_get = riscv_fpr_get,
+ .set = riscv_fpr_set,
+ },
+#endif
+};
+
+static const struct user_regset_view compat_riscv_user_native_view = {
+ .name = "riscv",
+ .e_machine = EM_RISCV,
+ .regsets = compat_riscv_user_regset,
+ .n = ARRAY_SIZE(compat_riscv_user_regset),
+};
+
+long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+ compat_ulong_t caddr, compat_ulong_t cdata)
+{
+ long ret = -EIO;
+
+ switch (request) {
+ default:
+ ret = compat_ptrace_request(child, request, caddr, cdata);
+ break;
+ }
+
+ return ret;
+}
+#endif /* CONFIG_COMPAT */
+
+const struct user_regset_view *task_user_regset_view(struct task_struct *task)
+{
+#ifdef CONFIG_COMPAT
+ if (test_tsk_thread_flag(task, TIF_32BIT))
+ return &compat_riscv_user_native_view;
+ else
+#endif
+ return &riscv_user_native_view;
+}
--
2.25.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: guoren@kernel.org
To: guoren@kernel.org, palmer@dabbelt.com, arnd@arndb.de,
anup@brainfault.org, gregkh@linuxfoundation.org,
liush@allwinnertech.com, wefu@redhat.com, drew@beagleboard.org,
wangjunqiang@iscas.ac.cn, hch@lst.de, hch@infradead.org
Cc: linux-arch@vger.kernel.org, linux-s390@vger.kernel.org,
Guo Ren <guoren@linux.alibaba.com>,
linux-parisc@vger.kernel.org, x86@kernel.org,
linux-kernel@vger.kernel.org, linux-csky@vger.kernel.org,
linux-mips@vger.kernel.org, sparclinux@vger.kernel.org,
linux-riscv@lists.infradead.org, linuxppc-dev@lists.ozlabs.org,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH V4 15/17] riscv: compat: ptrace: Add compat_arch_ptrace implement
Date: Sat, 29 Jan 2022 20:17:26 +0800 [thread overview]
Message-ID: <20220129121728.1079364-16-guoren@kernel.org> (raw)
In-Reply-To: <20220129121728.1079364-1-guoren@kernel.org>
From: Guo Ren <guoren@linux.alibaba.com>
Now, you can use native gdb on riscv64 for rv32 app debugging.
$ uname -a
Linux buildroot 5.16.0-rc4-00036-gbef6b82fdf23-dirty #53 SMP Mon Dec 20 23:06:53 CST 2021 riscv64 GNU/Linux
$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdcsuh
mmu : sv48
$ file /bin/busybox
/bin/busybox: setuid ELF 32-bit LSB shared object, UCB RISC-V, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ file /usr/bin/gdb
/usr/bin/gdb: ELF 32-bit LSB shared object, UCB RISC-V, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ /usr/bin/gdb /bin/busybox
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
...
Reading symbols from /bin/busybox...
(No debugging symbols found in /bin/busybox)
(gdb) b main
Breakpoint 1 at 0x8ddc
(gdb) r
Starting program: /bin/busybox
Failed to read a valid object file image from memory.
Breakpoint 1, 0x555a8ddc in main ()
(gdb) i r
ra 0x77df0b74 0x77df0b74
sp 0x7fdd3d10 0x7fdd3d10
gp 0x5567e800 0x5567e800 <bb_common_bufsiz1+160>
tp 0x77f64280 0x77f64280
t0 0x0 0
t1 0x555a6fac 1431990188
t2 0x77dd8db4 2011008436
fp 0x7fdd3e34 0x7fdd3e34
s1 0x7fdd3e34 2145205812
a0 0xffffffff -1
a1 0x2000 8192
a2 0x7fdd3e3c 2145205820
a3 0x0 0
a4 0x7fdd3d30 2145205552
a5 0x555a8dc0 1431997888
a6 0x77f2c170 2012397936
a7 0x6a7c7a2f 1786542639
s2 0x0 0
s3 0x0 0
s4 0x555a8dc0 1431997888
s5 0x77f8a3a8 2012783528
s6 0x7fdd3e3c 2145205820
s7 0x5567cecc 1432866508
--Type <RET> for more, q to quit, c to continue without paging--
s8 0x1 1
s9 0x0 0
s10 0x55634448 1432568904
s11 0x0 0
t3 0x77df0bb8 2011106232
t4 0x42fc 17148
t5 0x0 0
t6 0x40 64
pc 0x555a8ddc 0x555a8ddc <main+28>
(gdb) si
0x555a78f0 in mallopt@plt ()
(gdb) c
Continuing.
BusyBox v1.34.1 (2021-12-19 22:39:48 CST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Usage: busybox [function [arguments]...]
or: busybox --list[-full]
...
[Inferior 1 (process 107) exited normally]
(gdb) q
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
---
arch/riscv/kernel/ptrace.c | 87 +++++++++++++++++++++++++++++++++++---
1 file changed, 82 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c
index a89243730153..bb387593a121 100644
--- a/arch/riscv/kernel/ptrace.c
+++ b/arch/riscv/kernel/ptrace.c
@@ -12,6 +12,7 @@
#include <asm/thread_info.h>
#include <asm/switch_to.h>
#include <linux/audit.h>
+#include <linux/compat.h>
#include <linux/ptrace.h>
#include <linux/elf.h>
#include <linux/regset.h>
@@ -111,11 +112,6 @@ static const struct user_regset_view riscv_user_native_view = {
.n = ARRAY_SIZE(riscv_user_regset),
};
-const struct user_regset_view *task_user_regset_view(struct task_struct *task)
-{
- return &riscv_user_native_view;
-}
-
struct pt_regs_offset {
const char *name;
int offset;
@@ -273,3 +269,84 @@ __visible void do_syscall_trace_exit(struct pt_regs *regs)
trace_sys_exit(regs, regs_return_value(regs));
#endif
}
+
+#ifdef CONFIG_COMPAT
+static int compat_riscv_gpr_get(struct task_struct *target,
+ const struct user_regset *regset,
+ struct membuf to)
+{
+ struct compat_user_regs_struct cregs;
+
+ regs_to_cregs(&cregs, task_pt_regs(target));
+
+ return membuf_write(&to, &cregs,
+ sizeof(struct compat_user_regs_struct));
+}
+
+static int compat_riscv_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 ret;
+ struct compat_user_regs_struct cregs;
+
+ ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &cregs, 0, -1);
+
+ cregs_to_regs(&cregs, task_pt_regs(target));
+
+ return ret;
+}
+
+static const struct user_regset compat_riscv_user_regset[] = {
+ [REGSET_X] = {
+ .core_note_type = NT_PRSTATUS,
+ .n = ELF_NGREG,
+ .size = sizeof(compat_elf_greg_t),
+ .align = sizeof(compat_elf_greg_t),
+ .regset_get = compat_riscv_gpr_get,
+ .set = compat_riscv_gpr_set,
+ },
+#ifdef CONFIG_FPU
+ [REGSET_F] = {
+ .core_note_type = NT_PRFPREG,
+ .n = ELF_NFPREG,
+ .size = sizeof(elf_fpreg_t),
+ .align = sizeof(elf_fpreg_t),
+ .regset_get = riscv_fpr_get,
+ .set = riscv_fpr_set,
+ },
+#endif
+};
+
+static const struct user_regset_view compat_riscv_user_native_view = {
+ .name = "riscv",
+ .e_machine = EM_RISCV,
+ .regsets = compat_riscv_user_regset,
+ .n = ARRAY_SIZE(compat_riscv_user_regset),
+};
+
+long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+ compat_ulong_t caddr, compat_ulong_t cdata)
+{
+ long ret = -EIO;
+
+ switch (request) {
+ default:
+ ret = compat_ptrace_request(child, request, caddr, cdata);
+ break;
+ }
+
+ return ret;
+}
+#endif /* CONFIG_COMPAT */
+
+const struct user_regset_view *task_user_regset_view(struct task_struct *task)
+{
+#ifdef CONFIG_COMPAT
+ if (test_tsk_thread_flag(task, TIF_32BIT))
+ return &compat_riscv_user_native_view;
+ else
+#endif
+ return &riscv_user_native_view;
+}
--
2.25.1
WARNING: multiple messages have this Message-ID (diff)
From: guoren@kernel.org
To: guoren@kernel.org, palmer@dabbelt.com, arnd@arndb.de,
anup@brainfault.org, gregkh@linuxfoundation.org,
liush@allwinnertech.com, wefu@redhat.com, drew@beagleboard.org,
wangjunqiang@iscas.ac.cn, hch@lst.de, hch@infradead.org
Cc: linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-riscv@lists.infradead.org, linux-csky@vger.kernel.org,
linux-s390@vger.kernel.org, sparclinux@vger.kernel.org,
linuxppc-dev@lists.ozlabs.org, linux-parisc@vger.kernel.org,
linux-mips@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
x86@kernel.org, Guo Ren <guoren@linux.alibaba.com>
Subject: [PATCH V4 15/17] riscv: compat: ptrace: Add compat_arch_ptrace implement
Date: Sat, 29 Jan 2022 20:17:26 +0800 [thread overview]
Message-ID: <20220129121728.1079364-16-guoren@kernel.org> (raw)
In-Reply-To: <20220129121728.1079364-1-guoren@kernel.org>
From: Guo Ren <guoren@linux.alibaba.com>
Now, you can use native gdb on riscv64 for rv32 app debugging.
$ uname -a
Linux buildroot 5.16.0-rc4-00036-gbef6b82fdf23-dirty #53 SMP Mon Dec 20 23:06:53 CST 2021 riscv64 GNU/Linux
$ cat /proc/cpuinfo
processor : 0
hart : 0
isa : rv64imafdcsuh
mmu : sv48
$ file /bin/busybox
/bin/busybox: setuid ELF 32-bit LSB shared object, UCB RISC-V, version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ file /usr/bin/gdb
/usr/bin/gdb: ELF 32-bit LSB shared object, UCB RISC-V, version 1 (GNU/Linux), dynamically linked, interpreter /lib/ld-linux-riscv32-ilp32d.so.1, for GNU/Linux 5.15.0, stripped
$ /usr/bin/gdb /bin/busybox
GNU gdb (GDB) 10.2
Copyright (C) 2021 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
...
Reading symbols from /bin/busybox...
(No debugging symbols found in /bin/busybox)
(gdb) b main
Breakpoint 1 at 0x8ddc
(gdb) r
Starting program: /bin/busybox
Failed to read a valid object file image from memory.
Breakpoint 1, 0x555a8ddc in main ()
(gdb) i r
ra 0x77df0b74 0x77df0b74
sp 0x7fdd3d10 0x7fdd3d10
gp 0x5567e800 0x5567e800 <bb_common_bufsiz1+160>
tp 0x77f64280 0x77f64280
t0 0x0 0
t1 0x555a6fac 1431990188
t2 0x77dd8db4 2011008436
fp 0x7fdd3e34 0x7fdd3e34
s1 0x7fdd3e34 2145205812
a0 0xffffffff -1
a1 0x2000 8192
a2 0x7fdd3e3c 2145205820
a3 0x0 0
a4 0x7fdd3d30 2145205552
a5 0x555a8dc0 1431997888
a6 0x77f2c170 2012397936
a7 0x6a7c7a2f 1786542639
s2 0x0 0
s3 0x0 0
s4 0x555a8dc0 1431997888
s5 0x77f8a3a8 2012783528
s6 0x7fdd3e3c 2145205820
s7 0x5567cecc 1432866508
--Type <RET> for more, q to quit, c to continue without paging--
s8 0x1 1
s9 0x0 0
s10 0x55634448 1432568904
s11 0x0 0
t3 0x77df0bb8 2011106232
t4 0x42fc 17148
t5 0x0 0
t6 0x40 64
pc 0x555a8ddc 0x555a8ddc <main+28>
(gdb) si
0x555a78f0 in mallopt@plt ()
(gdb) c
Continuing.
BusyBox v1.34.1 (2021-12-19 22:39:48 CST) multi-call binary.
BusyBox is copyrighted by many authors between 1998-2015.
Licensed under GPLv2. See source distribution for detailed
copyright notices.
Usage: busybox [function [arguments]...]
or: busybox --list[-full]
...
[Inferior 1 (process 107) exited normally]
(gdb) q
Signed-off-by: Guo Ren <guoren@linux.alibaba.com>
Signed-off-by: Guo Ren <guoren@kernel.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Palmer Dabbelt <palmer@dabbelt.com>
---
arch/riscv/kernel/ptrace.c | 87 +++++++++++++++++++++++++++++++++++---
1 file changed, 82 insertions(+), 5 deletions(-)
diff --git a/arch/riscv/kernel/ptrace.c b/arch/riscv/kernel/ptrace.c
index a89243730153..bb387593a121 100644
--- a/arch/riscv/kernel/ptrace.c
+++ b/arch/riscv/kernel/ptrace.c
@@ -12,6 +12,7 @@
#include <asm/thread_info.h>
#include <asm/switch_to.h>
#include <linux/audit.h>
+#include <linux/compat.h>
#include <linux/ptrace.h>
#include <linux/elf.h>
#include <linux/regset.h>
@@ -111,11 +112,6 @@ static const struct user_regset_view riscv_user_native_view = {
.n = ARRAY_SIZE(riscv_user_regset),
};
-const struct user_regset_view *task_user_regset_view(struct task_struct *task)
-{
- return &riscv_user_native_view;
-}
-
struct pt_regs_offset {
const char *name;
int offset;
@@ -273,3 +269,84 @@ __visible void do_syscall_trace_exit(struct pt_regs *regs)
trace_sys_exit(regs, regs_return_value(regs));
#endif
}
+
+#ifdef CONFIG_COMPAT
+static int compat_riscv_gpr_get(struct task_struct *target,
+ const struct user_regset *regset,
+ struct membuf to)
+{
+ struct compat_user_regs_struct cregs;
+
+ regs_to_cregs(&cregs, task_pt_regs(target));
+
+ return membuf_write(&to, &cregs,
+ sizeof(struct compat_user_regs_struct));
+}
+
+static int compat_riscv_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 ret;
+ struct compat_user_regs_struct cregs;
+
+ ret = user_regset_copyin(&pos, &count, &kbuf, &ubuf, &cregs, 0, -1);
+
+ cregs_to_regs(&cregs, task_pt_regs(target));
+
+ return ret;
+}
+
+static const struct user_regset compat_riscv_user_regset[] = {
+ [REGSET_X] = {
+ .core_note_type = NT_PRSTATUS,
+ .n = ELF_NGREG,
+ .size = sizeof(compat_elf_greg_t),
+ .align = sizeof(compat_elf_greg_t),
+ .regset_get = compat_riscv_gpr_get,
+ .set = compat_riscv_gpr_set,
+ },
+#ifdef CONFIG_FPU
+ [REGSET_F] = {
+ .core_note_type = NT_PRFPREG,
+ .n = ELF_NFPREG,
+ .size = sizeof(elf_fpreg_t),
+ .align = sizeof(elf_fpreg_t),
+ .regset_get = riscv_fpr_get,
+ .set = riscv_fpr_set,
+ },
+#endif
+};
+
+static const struct user_regset_view compat_riscv_user_native_view = {
+ .name = "riscv",
+ .e_machine = EM_RISCV,
+ .regsets = compat_riscv_user_regset,
+ .n = ARRAY_SIZE(compat_riscv_user_regset),
+};
+
+long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
+ compat_ulong_t caddr, compat_ulong_t cdata)
+{
+ long ret = -EIO;
+
+ switch (request) {
+ default:
+ ret = compat_ptrace_request(child, request, caddr, cdata);
+ break;
+ }
+
+ return ret;
+}
+#endif /* CONFIG_COMPAT */
+
+const struct user_regset_view *task_user_regset_view(struct task_struct *task)
+{
+#ifdef CONFIG_COMPAT
+ if (test_tsk_thread_flag(task, TIF_32BIT))
+ return &compat_riscv_user_native_view;
+ else
+#endif
+ return &riscv_user_native_view;
+}
--
2.25.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-01-29 12:20 UTC|newest]
Thread overview: 172+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-29 12:17 [PATCH V4 00/17] riscv: compat: Add COMPAT mode support for rv64 guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 01/17] kconfig: Add SYSVIPC_COMPAT for all architectures guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-31 12:19 ` Christoph Hellwig
2022-01-31 12:19 ` Christoph Hellwig
2022-01-31 12:19 ` Christoph Hellwig
2022-01-31 12:19 ` Christoph Hellwig
2022-01-29 12:17 ` [PATCH V4 02/17] fs: stat: compat: Add __ARCH_WANT_COMPAT_STAT guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-31 12:19 ` Christoph Hellwig
2022-01-31 12:19 ` Christoph Hellwig
2022-01-31 12:19 ` Christoph Hellwig
2022-01-31 12:19 ` Christoph Hellwig
2022-01-29 12:17 ` [PATCH V4 03/17] asm-generic: compat: Cleanup duplicate definitions guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 21:40 ` Arnd Bergmann
2022-01-29 21:40 ` Arnd Bergmann
2022-01-29 21:40 ` Arnd Bergmann
2022-01-29 21:40 ` Arnd Bergmann
2022-01-31 12:21 ` Christoph Hellwig
2022-01-31 12:21 ` Christoph Hellwig
2022-01-31 12:21 ` Christoph Hellwig
2022-01-31 12:21 ` Christoph Hellwig
2022-01-31 13:52 ` Guo Ren
2022-01-31 13:52 ` Guo Ren
2022-01-31 13:52 ` Guo Ren
2022-01-31 13:52 ` Guo Ren
2022-01-29 12:17 ` [PATCH V4 04/17] syscalls: compat: Fix the missing part for __SYSCALL_COMPAT guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-31 12:21 ` Christoph Hellwig
2022-01-31 12:21 ` Christoph Hellwig
2022-01-31 12:21 ` Christoph Hellwig
2022-01-31 12:21 ` Christoph Hellwig
2022-01-29 12:17 ` [PATCH V4 05/17] riscv: Fixup difference with defconfig guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-31 12:23 ` Christoph Hellwig
2022-01-31 12:23 ` Christoph Hellwig
2022-01-31 12:23 ` Christoph Hellwig
2022-01-31 12:23 ` Christoph Hellwig
2022-01-31 12:48 ` Arnd Bergmann
2022-01-31 12:48 ` Arnd Bergmann
2022-01-31 12:48 ` Arnd Bergmann
2022-01-31 12:48 ` Arnd Bergmann
2022-01-31 13:00 ` Christoph Hellwig
2022-01-31 13:00 ` Christoph Hellwig
2022-01-31 13:00 ` Christoph Hellwig
2022-01-31 13:00 ` Christoph Hellwig
2022-01-31 13:19 ` Arnd Bergmann
2022-01-31 13:19 ` Arnd Bergmann
2022-01-31 13:19 ` Arnd Bergmann
2022-01-31 13:19 ` Arnd Bergmann
2022-01-29 12:17 ` [PATCH V4 06/17] riscv: compat: Add basic compat date type implementation guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 21:56 ` Arnd Bergmann
2022-01-29 21:56 ` Arnd Bergmann
2022-01-29 21:56 ` Arnd Bergmann
2022-01-29 21:56 ` Arnd Bergmann
2022-01-30 5:47 ` Guo Ren
2022-01-30 5:47 ` Guo Ren
2022-01-30 5:47 ` Guo Ren
2022-01-30 5:47 ` Guo Ren
2022-01-30 11:36 ` Arnd Bergmann
2022-01-30 11:36 ` Arnd Bergmann
2022-01-30 11:36 ` Arnd Bergmann
2022-01-30 11:36 ` Arnd Bergmann
2022-01-29 12:17 ` [PATCH V4 07/17] riscv: compat: Re-implement TASK_SIZE for COMPAT_32BIT guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 08/17] riscv: compat: syscall: Add compat_sys_call_table implementation guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 22:12 ` Arnd Bergmann
2022-01-29 22:12 ` Arnd Bergmann
2022-01-29 22:12 ` Arnd Bergmann
2022-01-29 22:12 ` Arnd Bergmann
2022-01-30 5:54 ` Guo Ren
2022-01-30 5:54 ` Guo Ren
2022-01-30 5:54 ` Guo Ren
2022-01-30 5:54 ` Guo Ren
2022-01-30 11:32 ` Arnd Bergmann
2022-01-30 11:32 ` Arnd Bergmann
2022-01-30 11:32 ` Arnd Bergmann
2022-01-30 11:32 ` Arnd Bergmann
2022-01-30 14:57 ` Guo Ren
2022-01-30 14:57 ` Guo Ren
2022-01-30 14:57 ` Guo Ren
2022-01-30 14:57 ` Guo Ren
2022-01-29 12:17 ` [PATCH V4 09/17] riscv: compat: syscall: Add entry.S implementation guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 10/17] riscv: compat: process: Add UXL_32 support in start_thread guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 11/17] riscv: compat: Add elf.h implementation guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 12/17] riscv: compat: vdso: Add rv32 VDSO base code implementation guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 13/17] riscv: compat: vdso: Add setup additional pages implementation guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 14/17] riscv: compat: signal: Add rt_frame implementation guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren [this message]
2022-01-29 12:17 ` [PATCH V4 15/17] riscv: compat: ptrace: Add compat_arch_ptrace implement guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` [PATCH V4 16/17] riscv: compat: Add COMPAT Kbuild skeletal support guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-31 12:26 ` Christoph Hellwig
2022-01-31 12:26 ` Christoph Hellwig
2022-01-31 12:26 ` Christoph Hellwig
2022-01-31 12:26 ` Christoph Hellwig
2022-01-31 13:50 ` Guo Ren
2022-01-31 13:50 ` Guo Ren
2022-01-31 13:50 ` Guo Ren
2022-01-31 13:50 ` Guo Ren
2022-02-01 7:44 ` Christoph Hellwig
2022-02-01 7:44 ` Christoph Hellwig
2022-02-01 7:44 ` Christoph Hellwig
2022-02-01 7:44 ` Christoph Hellwig
2022-02-01 9:13 ` Guo Ren
2022-02-01 9:13 ` Guo Ren
2022-02-01 9:13 ` Guo Ren
2022-02-01 9:13 ` Guo Ren
2022-02-01 9:36 ` Arnd Bergmann
2022-02-01 9:36 ` Arnd Bergmann
2022-02-01 9:36 ` Arnd Bergmann
2022-02-01 9:36 ` Arnd Bergmann
2022-02-01 10:26 ` Guo Ren
2022-02-01 10:26 ` Guo Ren
2022-02-01 10:26 ` Guo Ren
2022-02-01 10:26 ` Guo Ren
2022-02-01 11:48 ` Arnd Bergmann
2022-02-01 11:48 ` Arnd Bergmann
2022-02-01 11:48 ` Arnd Bergmann
2022-02-01 11:48 ` Arnd Bergmann
2022-02-01 13:56 ` Guo Ren
2022-02-01 13:56 ` Guo Ren
2022-02-01 13:56 ` Guo Ren
2022-02-01 13:56 ` Guo Ren
2022-01-29 12:17 ` [PATCH V4 17/17] KVM: compat: riscv: Prevent KVM_COMPAT from being selected guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
2022-01-29 12:17 ` guoren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220129121728.1079364-16-guoren@kernel.org \
--to=guoren@kernel.org \
--cc=anup@brainfault.org \
--cc=arnd@arndb.de \
--cc=drew@beagleboard.org \
--cc=gregkh@linuxfoundation.org \
--cc=guoren@linux.alibaba.com \
--cc=hch@infradead.org \
--cc=hch@lst.de \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-csky@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mips@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=linux-s390@vger.kernel.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=liush@allwinnertech.com \
--cc=palmer@dabbelt.com \
--cc=sparclinux@vger.kernel.org \
--cc=wangjunqiang@iscas.ac.cn \
--cc=wefu@redhat.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.