Index: src/Unwind/Registers.hpp =================================================================== --- src/Unwind/Registers.hpp +++ src/Unwind/Registers.hpp @@ -15,6 +15,7 @@ #include #include +#include #include "libunwind.h" #include "config.h" @@ -91,7 +92,7 @@ } inline Registers_x86::Registers_x86() { - bzero(&_registers, sizeof(_registers)); + memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_x86::validRegister(int regNum) const { @@ -282,7 +283,7 @@ } inline Registers_x86_64::Registers_x86_64() { - bzero(&_registers, sizeof(_registers)); + memset(&_registers, 0, sizeof(_registers)); } inline bool Registers_x86_64::validRegister(int regNum) const { @@ -548,9 +549,9 @@ } inline Registers_ppc::Registers_ppc() { - bzero(&_registers, sizeof(_registers)); - bzero(&_floatRegisters, sizeof(_floatRegisters)); - bzero(&_vectorRegisters, sizeof(_vectorRegisters)); + memset(&_registers, 0, sizeof(_registers)); + memset(&_floatRegisters, 0, sizeof(_floatRegisters)); + memset(&_vectorRegisters, 0, sizeof(_vectorRegisters)); } inline bool Registers_ppc::validRegister(int regNum) const { @@ -1065,8 +1066,8 @@ } inline Registers_arm64::Registers_arm64() { - bzero(&_registers, sizeof(_registers)); - bzero(&_vectorHalfRegisters, sizeof(_vectorHalfRegisters)); + memset(&_registers, 0, sizeof(_registers)); + memset(&_vectorHalfRegisters, 0, sizeof(_vectorHalfRegisters)); } inline bool Registers_arm64::validRegister(int regNum) const { @@ -1320,16 +1321,23 @@ }; GPRs _registers; + uint8_t _wmmxData[sizeof(uint64_t) * 16]; + uint8_t _wmmxControl[sizeof(uint32_t) * 4]; }; inline Registers_arm::Registers_arm(const void *registers) { static_assert(sizeof(Registers_arm) < sizeof(unw_context_t), "arm registers do not fit into unw_context_t"); + // See unw_getcontext() note about data. memcpy(&_registers, registers, sizeof(_registers)); + memset(_wmmxData, 0, sizeof(_wmmxData)); + memset(_wmmxControl, 0, sizeof(_wmmxControl)); } inline Registers_arm::Registers_arm() { - bzero(&_registers, sizeof(_registers)); + memset(&_registers, 0, sizeof(_registers)); + memset(_wmmxData, 0, sizeof(_wmmxData)); + memset(_wmmxControl, 0, sizeof(_wmmxControl)); } inline bool Registers_arm::validRegister(int regNum) const { @@ -1538,16 +1546,16 @@ } } -inline bool Registers_arm::validFloatRegister(int) const { +inline bool Registers_arm::validFloatRegister(int regNum) const { // FIXME: Implement float register support. return false; } -inline unw_fpreg_t Registers_arm::getFloatRegister(int) const { +inline unw_fpreg_t Registers_arm::getFloatRegister(int regNum) const { _LIBUNWIND_ABORT("ARM float register support not yet implemented"); } -inline void Registers_arm::setFloatRegister(int, unw_fpreg_t) { +inline void Registers_arm::setFloatRegister(int regNum, unw_fpreg_t value) { _LIBUNWIND_ABORT("ARM float register support not yet implemented"); }