int save_fp_registers(int pid, unsigned long *fp_regs)
 {
+#ifdef PTRACE_GETREGSET
        struct iovec iov;
 
        if (have_xstate_support) {
                if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
                        return -errno;
                return 0;
-       } else {
+       } else
+#endif
                return save_i387_registers(pid, fp_regs);
-       }
 }
 
 int restore_i387_registers(int pid, unsigned long *fp_regs)
 
 int restore_fp_registers(int pid, unsigned long *fp_regs)
 {
+#ifdef PTRACE_SETREGSET
        struct iovec iov;
 
        if (have_xstate_support) {
                if (ptrace(PTRACE_SETREGSET, pid, NT_X86_XSTATE, &iov) < 0)
                        return -errno;
                return 0;
-       } else {
+       } else
+#endif
                return restore_i387_registers(pid, fp_regs);
-       }
 }
 
 #ifdef __i386__
 
 void arch_init_registers(int pid)
 {
+#ifdef PTRACE_GETREGSET
        struct _xstate fp_regs;
        struct iovec iov;
 
        iov.iov_len = sizeof(struct _xstate);
        if (ptrace(PTRACE_GETREGSET, pid, NT_X86_XSTATE, &iov) == 0)
                have_xstate_support = 1;
+#endif
 }
 #endif
 
 
        DEFINE(HOST_GS, GS);
        DEFINE(HOST_ORIG_AX, ORIG_EAX);
 #else
+#if defined(PTRACE_GETREGSET) && defined(PTRACE_SETREGSET)
        DEFINE(HOST_FP_SIZE, sizeof(struct _xstate) / sizeof(unsigned long));
+#else
+       DEFINE(HOST_FP_SIZE, sizeof(struct _fpstate) / sizeof(unsigned long));
+#endif
        DEFINE_LONGS(HOST_BX, RBX);
        DEFINE_LONGS(HOST_CX, RCX);
        DEFINE_LONGS(HOST_DI, RDI);