*/
        memset(&header, 0, sizeof(header));
        header.xfeatures = xsave->header.xfeatures;
-       header.xfeatures &= ~XFEATURE_MASK_SUPERVISOR;
+       header.xfeatures &= xfeatures_mask_user();
  
 +      if (header.xfeatures & XFEATURE_MASK_FP)
 +              copy_part(0, off_mxcsr,
 +                        &xsave->i387, &kbuf, &offset_start, &count);
 +      if (header.xfeatures & (XFEATURE_MASK_SSE | XFEATURE_MASK_YMM))
 +              copy_part(off_mxcsr, MXCSR_AND_FLAGS_SIZE,
 +                        &xsave->i387.mxcsr, &kbuf, &offset_start, &count);
 +      if (header.xfeatures & XFEATURE_MASK_FP)
 +              copy_part(offsetof(struct fxregs_state, st_space), 128,
 +                        &xsave->i387.st_space, &kbuf, &offset_start, &count);
 +      if (header.xfeatures & XFEATURE_MASK_SSE)
 +              copy_part(xstate_offsets[XFEATURE_MASK_SSE], 256,
 +                        &xsave->i387.xmm_space, &kbuf, &offset_start, &count);
 +      /*
 +       * Fill xsave->i387.sw_reserved value for ptrace frame:
 +       */
 +      copy_part(offsetof(struct fxregs_state, sw_reserved), 48,
 +                xstate_fx_sw_bytes, &kbuf, &offset_start, &count);
        /*
         * Copy xregs_state->header:
         */