diff options
Diffstat (limited to 'source/Plugins/Instruction/ARM/EmulationStateARM.cpp')
-rw-r--r-- | source/Plugins/Instruction/ARM/EmulationStateARM.cpp | 13 |
1 files changed, 8 insertions, 5 deletions
diff --git a/source/Plugins/Instruction/ARM/EmulationStateARM.cpp b/source/Plugins/Instruction/ARM/EmulationStateARM.cpp index 9ceeb76c6f5e..5e90965c1881 100644 --- a/source/Plugins/Instruction/ARM/EmulationStateARM.cpp +++ b/source/Plugins/Instruction/ARM/EmulationStateARM.cpp @@ -66,7 +66,7 @@ bool EmulationStateARM::LoadPseudoRegistersFromFrame(StackFrame &frame) { bool EmulationStateARM::StorePseudoRegisterValue(uint32_t reg_num, uint64_t value) { - if ((dwarf_r0 <= reg_num) && (reg_num <= dwarf_cpsr)) + if (reg_num <= dwarf_cpsr) m_gpr[reg_num - dwarf_r0] = (uint32_t)value; else if ((dwarf_s0 <= reg_num) && (reg_num <= dwarf_s31)) { uint32_t idx = reg_num - dwarf_s0; @@ -89,7 +89,7 @@ uint64_t EmulationStateARM::ReadPseudoRegisterValue(uint32_t reg_num, uint64_t value = 0; success = true; - if ((dwarf_r0 <= reg_num) && (reg_num <= dwarf_cpsr)) + if (reg_num <= dwarf_cpsr) value = m_gpr[reg_num - dwarf_r0]; else if ((dwarf_s0 <= reg_num) && (reg_num <= dwarf_s31)) { uint32_t idx = reg_num - dwarf_s0; @@ -192,15 +192,18 @@ size_t EmulationStateARM::WritePseudoMemory( EmulationStateARM *pseudo_state = (EmulationStateARM *)baton; if (length <= 4) { - uint32_t value = *((const uint32_t *)dst); + uint32_t value; + memcpy (&value, dst, sizeof (uint32_t)); if (endian::InlHostByteOrder() == lldb::eByteOrderBig) value = llvm::ByteSwap_32(value); pseudo_state->StoreToPseudoAddress(addr, value); return length; } else if (length == 8) { - uint32_t value1 = ((const uint32_t *)dst)[0]; - uint32_t value2 = ((const uint32_t *)dst)[1]; + uint32_t value1; + uint32_t value2; + memcpy (&value1, dst, sizeof (uint32_t)); + memcpy (&value2, (uint8_t *) dst + sizeof (uint32_t), sizeof (uint32_t)); if (endian::InlHostByteOrder() == lldb::eByteOrderBig) { value1 = llvm::ByteSwap_32(value1); value2 = llvm::ByteSwap_32(value2); |