// Copyright 2014 The Crashpad Authors. All rights reserved. // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef CRASHPAD_SNAPSHOT_TEST_TEST_CPU_CONTEXT_H_ #define CRASHPAD_SNAPSHOT_TEST_TEST_CPU_CONTEXT_H_ #include #include "snapshot/cpu_context.h" namespace crashpad { namespace test { //! \brief Initializes an `fxsave` context substructure for testing. //! //! \param[out] fxsave The structure to initialize. //! \param[in,out] seed The seed value. Initializing two `fxsave` structures of //! the same type with identical seed values should produce identical //! structures. Initialization with a different seed value should produce //! a different `fxsave` structure. If \a seed is `0`, \a fxsave is zeroed //! out entirely. If \a seed is nonzero, \a fxsave will be populated //! entirely with nonzero values. \a seed will be updated by this function //! to allow the caller to perform subsequent initialization of the context //! structure containing \a fxsave. //! //! \{ void InitializeCPUContextX86Fxsave(CPUContextX86::Fxsave* fxsave, uint32_t* seed); void InitializeCPUContextX86_64Fxsave(CPUContextX86_64::Fxsave* fxsave, uint32_t* seed); //! \} //! \brief Initializes a context structure for testing. //! //! Initialization is compatible with the initialization used by minidump //! context test initialization functions such as InitializeMinidumpContextX86() //! and InitializeMinidumpContextAMD64() for identical \a seed values. //! //! \param[out] context The structure to initialize. //! \param[in] seed The seed value. Initializing two context structures of the //! same type with identical seed values should produce identical context //! structures. Initialization with a different seed value should produce //! a different context structure. If \a seed is `0`, \a context is zeroed //! out entirely except for the CPUContext::architecture field, which will //! identify the context type. If \a seed is nonzero, \a context will be //! populated entirely with nonzero values. //! //! \{ void InitializeCPUContextX86(CPUContext* context, uint32_t seed); void InitializeCPUContextX86_64(CPUContext* context, uint32_t seed); void InitializeCPUContextARM(CPUContext* context, uint32_t seed); void InitializeCPUContextARM64(CPUContext* context, uint32_t seed); void InitializeCPUContextMIPS(CPUContext* context, uint32_t seed); void InitializeCPUContextMIPS64(CPUContext* context, uint32_t seed); //! \} } // namespace test } // namespace crashpad #endif // CRASHPAD_SNAPSHOT_TEST_TEST_CPU_CONTEXT_H_