| Index: third_party/crashpad/crashpad/snapshot/cpu_context.h | 
| diff --git a/third_party/crashpad/crashpad/snapshot/cpu_context.h b/third_party/crashpad/crashpad/snapshot/cpu_context.h | 
| index 67b298e8c264b44d32731e031f9a3fe3a052f537..ba3ac18156a5d073600f94ed73a3571a6ea31108 100644 | 
| --- a/third_party/crashpad/crashpad/snapshot/cpu_context.h | 
| +++ b/third_party/crashpad/crashpad/snapshot/cpu_context.h | 
| @@ -25,6 +25,22 @@ namespace crashpad { | 
| struct CPUContextX86 { | 
| using X87Register = uint8_t[10]; | 
|  | 
| +  struct Fsave { | 
| +    uint16_t fcw;  // FPU control word | 
| +    uint16_t reserved_1; | 
| +    uint16_t fsw;  // FPU status word | 
| +    uint16_t reserved_2; | 
| +    uint16_t ftw;  // full FPU tag word | 
| +    uint16_t reserved_3; | 
| +    uint32_t fpu_ip;  // FPU instruction pointer offset | 
| +    uint16_t fpu_cs;  // FPU instruction pointer segment selector | 
| +    uint16_t fop;  // FPU opcode | 
| +    uint32_t fpu_dp;  // FPU data pointer offset | 
| +    uint16_t fpu_ds;  // FPU data pointer segment selector | 
| +    uint16_t reserved_4; | 
| +    X87Register st[8]; | 
| +  }; | 
| + | 
| union X87OrMMXRegister { | 
| struct { | 
| X87Register st; | 
| @@ -58,14 +74,49 @@ struct CPUContextX86 { | 
| uint8_t available[48]; | 
| }; | 
|  | 
| +  //! \brief Converts an `fxsave` area to an `fsave` area. | 
| +  //! | 
| +  //! `fsave` state is restricted to the x87 FPU, while `fxsave` state includes | 
| +  //! state related to the x87 FPU as well as state specific to SSE. | 
| +  //! | 
| +  //! As the `fxsave` format is a superset of the `fsave` format, this operation | 
| +  //! fully populates the `fsave` area. `fsave` uses the full 16-bit form for | 
| +  //! the x87 floating-point tag word, so FxsaveToFsaveTagWord() is used to | 
| +  //! derive Fsave::ftw from the abridged 8-bit form used by `fxsave`. Reserved | 
| +  //! fields in \a fsave are set to `0`. | 
| +  //! | 
| +  //! \param[in] fxsave The `fxsave` area to convert. | 
| +  //! \param[out] fsave The `fsave` area to populate. | 
| +  //! | 
| +  //! \sa FsaveToFxsave() | 
| +  static void FxsaveToFsave(const Fxsave& fxsave, Fsave* fsave); | 
| + | 
| +  //! \brief Converts an `fsave` area to an `fxsave` area. | 
| +  //! | 
| +  //! `fsave` state is restricted to the x87 FPU, while `fxsave` state includes | 
| +  //! state related to the x87 FPU as well as state specific to SSE. | 
| +  //! | 
| +  //! As the `fsave` format is a subset of the `fxsave` format, this operation | 
| +  //! cannot fully populate the `fxsave` area. Fields in \a fxsave that have no | 
| +  //! equivalent in \a fsave are set to `0`, including Fxsave::mxcsr, | 
| +  //! Fxsave::mxcsr_mask, Fxsave::xmm, and Fxsave::available. | 
| +  //! FsaveToFxsaveTagWord() is used to derive Fxsave::ftw from the full 16-bit | 
| +  //! form used by `fsave`. Reserved fields in \a fxsave are set to `0`. | 
| +  //! | 
| +  //! \param[in] fsave The `fsave` area to convert. | 
| +  //! \param[out] fxsave The `fxsave` area to populate. | 
| +  //! | 
| +  //! \sa FxsaveToFsave() | 
| +  static void FsaveToFxsave(const Fsave& fsave, Fxsave* fxsave); | 
| + | 
| //! \brief Converts x87 floating-point tag words from `fxsave` (abridged, | 
| //!     8-bit) to `fsave` (full, 16-bit) form. | 
| //! | 
| //! `fxsave` stores the x87 floating-point tag word in abridged 8-bit form, | 
| //! and `fsave` stores it in full 16-bit form. Some users, notably | 
| -  //! MinidumpContextX86::float_save::tag_word, require the full 16-bit form, | 
| -  //! where most other contemporary code uses `fxsave` and thus the abridged | 
| -  //! 8-bit form found in CPUContextX86::Fxsave::ftw. | 
| +  //! CPUContextX86::Fsave::ftw, require the full 16-bit form, where most other | 
| +  //! contemporary code uses `fxsave` and thus the abridged 8-bit form found in | 
| +  //! CPUContextX86::Fxsave::ftw. | 
| //! | 
| //! This function converts an abridged tag word to the full version by using | 
| //! the abridged tag word and the contents of the registers it describes. See | 
| @@ -75,6 +126,8 @@ struct CPUContextX86 { | 
| //! Manual, Volume 2: System Programming (24593-3.24), “FXSAVE Format for x87 | 
| //! Tag Word”. | 
| //! | 
| +  //! \sa FsaveToFxsaveTagWord() | 
| +  //! | 
| //! \param[in] fsw The FPU status word, used to map logical \a st_mm registers | 
| //!     to their physical counterparts. This can be taken from | 
| //!     CPUContextX86::Fxsave::fsw. | 
| @@ -87,6 +140,16 @@ struct CPUContextX86 { | 
| static uint16_t FxsaveToFsaveTagWord( | 
| uint16_t fsw, uint8_t fxsave_tag, const X87OrMMXRegister st_mm[8]); | 
|  | 
| +  //! \brief Converts x87 floating-point tag words from `fsave` (full, 16-bit) | 
| +  //!     to `fxsave` (abridged, 8-bit) form. | 
| +  //! | 
| +  //! This function performs the inverse operation of FxsaveToFsaveTagWord(). | 
| +  //! | 
| +  //! \param[in] fsave_tag The full FPU tag word. | 
| +  //! | 
| +  //! \return The abridged FPU tag word. | 
| +  static uint8_t FsaveToFxsaveTagWord(uint16_t fsave_tag); | 
| + | 
| // Integer registers. | 
| uint32_t eax; | 
| uint32_t ebx; | 
|  |