Page MenuHomeFreeBSD

D14794.id40596.diff
No OneTemporary

D14794.id40596.diff

Index: sys/amd64/amd64/ptrace_machdep.c
===================================================================
--- sys/amd64/amd64/ptrace_machdep.c
+++ sys/amd64/amd64/ptrace_machdep.c
@@ -45,10 +45,20 @@
#include <machine/frame.h>
#include <machine/vmparam.h>
+#ifdef COMPAT_FREEBSD32
+struct ptrace_xstate_info32 {
+ uint32_t xsave_mask1, xsave_mask2;
+ uint32_t xsave_len;
+};
+#endif
+
static int
cpu_ptrace_xstate(struct thread *td, int req, void *addr, int data)
{
struct ptrace_xstate_info info;
+#ifdef COMPAT_FREEBSD32
+ struct ptrace_xstate_info32 info32;
+#endif
char *savefpu;
int error;
@@ -78,13 +88,29 @@
break;
case PT_GETXSTATE_INFO:
- if (data != sizeof(info)) {
- error = EINVAL;
- break;
+#ifdef COMPAT_FREEBSD32
+ if (SV_CURPROC_FLAG(SV_ILP32)) {
+ if (data != sizeof(info32)) {
+ error = EINVAL;
+ } else {
+ info32.xsave_len = cpu_max_ext_state_size;
+ info32.xsave_mask1 = xsave_mask;
+ info32.xsave_mask2 = xsave_mask >> 32;
+ error = copyout(&info32, addr, data);
+ }
+ } else {
+#endif
+ if (data != sizeof(info)) {
+ error = EINVAL;
+ } else {
+ bzero(&info, sizeof(info));
+ info.xsave_len = cpu_max_ext_state_size;
+ info.xsave_mask = xsave_mask;
+ error = copyout(&info, addr, data);
+ }
+#ifdef COMPAT_FREEBSD32
}
- info.xsave_len = cpu_max_ext_state_size;
- info.xsave_mask = xsave_mask;
- error = copyout(&info, addr, data);
+#endif
break;
case PT_GETXSTATE:

File Metadata

Mime Type
text/plain
Expires
Sun, Aug 23, 10:53 AM (5 h, 50 s)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
37134335
Default Alt Text
D14794.id40596.diff (1 KB)

Event Timeline