[Lldb-commits] [lldb] r298337 - Fix two places where an arm instruction emulation method
Jason Molenda via lldb-commits
lldb-commits at lists.llvm.org
Mon Mar 20 21:34:17 PDT 2017
Author: jmolenda
Date: Mon Mar 20 23:34:17 2017
New Revision: 298337
URL: http://llvm.org/viewvc/llvm-project?rev=298337&view=rev
Log:
Fix two places where an arm instruction emulation method
can dereference misaligned memory.
<rdar://problem/31106315>, <rdar://problem/31106337>
Modified:
lldb/trunk/source/Plugins/Instruction/ARM/EmulationStateARM.cpp
Modified: lldb/trunk/source/Plugins/Instruction/ARM/EmulationStateARM.cpp
URL: http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Plugins/Instruction/ARM/EmulationStateARM.cpp?rev=298337&r1=298336&r2=298337&view=diff
==============================================================================
--- lldb/trunk/source/Plugins/Instruction/ARM/EmulationStateARM.cpp (original)
+++ lldb/trunk/source/Plugins/Instruction/ARM/EmulationStateARM.cpp Mon Mar 20 23:34:17 2017
@@ -192,15 +192,18 @@ size_t EmulationStateARM::WritePseudoMem
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);
More information about the lldb-commits
mailing list