forked from OSchip/llvm-project
<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:
parent
147dcd8c33
commit
57f0630cc5
|
@ -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,
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Reference in New Issue