hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/arch/parisc/kernel/ptrace.c
....@@ -127,6 +127,12 @@
127127 unsigned long tmp;
128128 long ret = -EIO;
129129
130
+ unsigned long user_regs_struct_size = sizeof(struct user_regs_struct);
131
+#ifdef CONFIG_64BIT
132
+ if (is_compat_task())
133
+ user_regs_struct_size /= 2;
134
+#endif
135
+
130136 switch (request) {
131137
132138 /* Read the word at location addr in the USER area. For ptraced
....@@ -182,14 +188,14 @@
182188 return copy_regset_to_user(child,
183189 task_user_regset_view(current),
184190 REGSET_GENERAL,
185
- 0, sizeof(struct user_regs_struct),
191
+ 0, user_regs_struct_size,
186192 datap);
187193
188194 case PTRACE_SETREGS: /* Set all gp regs in the child. */
189195 return copy_regset_from_user(child,
190196 task_user_regset_view(current),
191197 REGSET_GENERAL,
192
- 0, sizeof(struct user_regs_struct),
198
+ 0, user_regs_struct_size,
193199 datap);
194200
195201 case PTRACE_GETFPREGS: /* Get the child FPU state. */
....@@ -303,6 +309,11 @@
303309 }
304310 }
305311 break;
312
+ case PTRACE_GETREGS:
313
+ case PTRACE_SETREGS:
314
+ case PTRACE_GETFPREGS:
315
+ case PTRACE_SETFPREGS:
316
+ return arch_ptrace(child, request, addr, data);
306317
307318 default:
308319 ret = compat_ptrace_request(child, request, addr, data);