summaryrefslogtreecommitdiffstats
path: root/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
diff options
context:
space:
mode:
authorGreg Clayton <gclayton@apple.com>2012-05-25 18:09:55 +0000
committerGreg Clayton <gclayton@apple.com>2012-05-25 18:09:55 +0000
commit4d78c4082586e69dc5e5f6fd5aca033db3237732 (patch)
tree2b5685ab0a3616e0db741c5aa067fdc11b2f8b7d /lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
parent67a498cc5fff03c5df11bc14d1913ce67e670528 (diff)
downloadbcm5719-llvm-4d78c4082586e69dc5e5f6fd5aca033db3237732.tar.gz
bcm5719-llvm-4d78c4082586e69dc5e5f6fd5aca033db3237732.zip
<rdar://problem/11535465>
LC_ENCRYPTION_INFO with "cryptid == 0" is not actually encrypted and LLDB fails to read memory from file. llvm-svn: 157487
Diffstat (limited to 'lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp')
-rw-r--r--lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp23
1 files changed, 15 insertions, 8 deletions
diff --git a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
index ff643f4d283..7b0c2e78180 100644
--- a/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
+++ b/lldb/source/Plugins/ObjectFile/Mach-O/ObjectFileMachO.cpp
@@ -751,7 +751,6 @@ ObjectFileMachO::ParseSections ()
{
lldb::user_id_t segID = 0;
lldb::user_id_t sectID = 0;
- struct segment_command_64 load_cmd;
uint32_t offset = MachHeaderSizeFromMagic(m_header.magic);
uint32_t i;
const bool is_core = GetType() == eTypeCoreFile;
@@ -760,24 +759,32 @@ ObjectFileMachO::ParseSections ()
// First look up any LC_ENCRYPTION_INFO load commands
typedef RangeArray<uint32_t, uint32_t, 8> EncryptedFileRanges;
EncryptedFileRanges encrypted_file_ranges;
+ encryption_info_command encryption_cmd;
for (i=0; i<m_header.ncmds; ++i)
{
const uint32_t load_cmd_offset = offset;
- if (m_data.GetU32(&offset, &load_cmd, 2) == NULL)
+ if (m_data.GetU32(&offset, &encryption_cmd, 2) == NULL)
break;
- if (load_cmd.cmd == LoadCommandEncryptionInfo)
+ if (encryption_cmd.cmd == LoadCommandEncryptionInfo)
{
- EncryptedFileRanges::Entry entry;
- entry.SetRangeBase(m_data.GetU32(&offset));
- entry.SetByteSize(m_data.GetU32(&offset));
- encrypted_file_ranges.Append(entry);
+ if (m_data.GetU32(&offset, &encryption_cmd.cryptoff, 3))
+ {
+ if (encryption_cmd.cryptid != 0)
+ {
+ EncryptedFileRanges::Entry entry;
+ entry.SetRangeBase(encryption_cmd.cryptoff);
+ entry.SetByteSize(encryption_cmd.cryptsize);
+ encrypted_file_ranges.Append(entry);
+ }
+ }
}
- offset = load_cmd_offset + load_cmd.cmdsize;
+ offset = load_cmd_offset + encryption_cmd.cmdsize;
}
offset = MachHeaderSizeFromMagic(m_header.magic);
+ struct segment_command_64 load_cmd;
for (i=0; i<m_header.ncmds; ++i)
{
const uint32_t load_cmd_offset = offset;
OpenPOWER on IntegriCloud