<rdar://problem/11534686>

Reading memory from a file when the section is encrypted doesn't show an error. No we do.

llvm-svn: 157484
This commit is contained in:
Greg Clayton 2012-05-25 17:05:55 +00:00
parent 147dcd8c33
commit 57f0630cc5
4 changed files with 28 additions and 6 deletions

View File

@ -338,7 +338,8 @@ public:
size_t
ParseInstructions (const ExecutionContext *exe_ctx,
const AddressRange &range);
const AddressRange &range,
Stream *error_strm_ptr);
size_t
ParseInstructions (const ExecutionContext *exe_ctx,

View File

@ -613,8 +613,15 @@ public:
bytes_read = target->ReadMemory(address, false, data_sp->GetBytes (), data_sp->GetByteSize(), error);
if (bytes_read == 0)
{
result.AppendWarningWithFormat("Read from 0x%llx failed.\n", addr);
result.AppendError(error.AsCString());
const char *error_cstr = error.AsCString();
if (error_cstr && error_cstr[0])
{
result.AppendError(error_cstr);
}
else
{
result.AppendErrorWithFormat("failed to read memory from 0x%llx.\n", addr);
}
result.SetStatus(eReturnStatusFailed);
return false;
}

View File

@ -225,7 +225,7 @@ Disassembler::DisassembleRange
if (disasm_sp)
{
size_t bytes_disassembled = disasm_sp->ParseInstructions (&exe_ctx, range);
size_t bytes_disassembled = disasm_sp->ParseInstructions (&exe_ctx, range, NULL);
if (bytes_disassembled == 0)
disasm_sp.reset();
}
@ -290,7 +290,7 @@ Disassembler::Disassemble
ResolveAddress (exe_ctx, disasm_range.GetBaseAddress(), range.GetBaseAddress());
range.SetByteSize (disasm_range.GetByteSize());
size_t bytes_disassembled = disasm_ap->ParseInstructions (&exe_ctx, range);
size_t bytes_disassembled = disasm_ap->ParseInstructions (&exe_ctx, range, &strm);
if (bytes_disassembled == 0)
return false;
@ -1010,7 +1010,8 @@ size_t
Disassembler::ParseInstructions
(
const ExecutionContext *exe_ctx,
const AddressRange &range
const AddressRange &range,
Stream *error_strm_ptr
)
{
if (exe_ctx)
@ -1040,6 +1041,18 @@ Disassembler::ParseInstructions
m_arch.GetAddressByteSize());
return DecodeInstructions (range.GetBaseAddress(), data, 0, UINT32_MAX, false);
}
else if (error_strm_ptr)
{
const char *error_cstr = error.AsCString();
if (error_cstr)
{
error_strm_ptr->Printf("error: %s\n", error_cstr);
}
}
}
else if (error_strm_ptr)
{
error_strm_ptr->PutCString("error: invalid execution context\n");
}
return 0;
}

View File

@ -1062,6 +1062,7 @@ Target::ReadMemoryFromFileCache (const Address& addr, void *dst, size_t dst_len,
// If the contents of this section are encrypted, the on-disk file is unusuable. Read only from live memory.
if (section_sp->IsEncrypted())
{
error.SetErrorString("section is encrypted");
return 0;
}
ModuleSP module_sp (section_sp->GetModule());