forked from OSchip/llvm-project
Change the scratch buffer for x86 assembly instructions in AssemblyParse_x86 from
malloc'ed heap to an llvm SmallVector. llvm-svn: 165703
This commit is contained in:
parent
5f35afb0f1
commit
22f2fff3ff
|
@ -161,7 +161,6 @@ private:
|
||||||
int m_cpu;
|
int m_cpu;
|
||||||
ArchSpec m_arch;
|
ArchSpec m_arch;
|
||||||
::LLVMDisasmContextRef m_disasm_context;
|
::LLVMDisasmContextRef m_disasm_context;
|
||||||
uint8_t *m_opcode_data;
|
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN (AssemblyParse_x86);
|
DISALLOW_COPY_AND_ASSIGN (AssemblyParse_x86);
|
||||||
};
|
};
|
||||||
|
@ -178,8 +177,7 @@ AssemblyParse_x86::AssemblyParse_x86 (const ExecutionContext &exe_ctx, int cpu,
|
||||||
m_lldb_fp_regnum (LLDB_INVALID_REGNUM),
|
m_lldb_fp_regnum (LLDB_INVALID_REGNUM),
|
||||||
m_wordsize (-1),
|
m_wordsize (-1),
|
||||||
m_cpu(cpu),
|
m_cpu(cpu),
|
||||||
m_arch(arch),
|
m_arch(arch)
|
||||||
m_opcode_data(NULL)
|
|
||||||
{
|
{
|
||||||
int *initialized_flag = NULL;
|
int *initialized_flag = NULL;
|
||||||
if (cpu == k_i386)
|
if (cpu == k_i386)
|
||||||
|
@ -249,13 +247,10 @@ AssemblyParse_x86::AssemblyParse_x86 (const ExecutionContext &exe_ctx, int cpu,
|
||||||
/*TagType=*/1,
|
/*TagType=*/1,
|
||||||
NULL,
|
NULL,
|
||||||
NULL);
|
NULL);
|
||||||
m_opcode_data = (uint8_t *) malloc (m_arch.GetMaximumOpcodeByteSize());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
AssemblyParse_x86::~AssemblyParse_x86 ()
|
AssemblyParse_x86::~AssemblyParse_x86 ()
|
||||||
{
|
{
|
||||||
if (m_opcode_data)
|
|
||||||
free (m_opcode_data);
|
|
||||||
::LLVMDisasmDispose(m_disasm_context);
|
::LLVMDisasmDispose(m_disasm_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -475,19 +470,16 @@ bool
|
||||||
AssemblyParse_x86::instruction_length (Address addr, int &length)
|
AssemblyParse_x86::instruction_length (Address addr, int &length)
|
||||||
{
|
{
|
||||||
const uint32_t max_op_byte_size = m_arch.GetMaximumOpcodeByteSize();
|
const uint32_t max_op_byte_size = m_arch.GetMaximumOpcodeByteSize();
|
||||||
|
llvm::SmallVector <uint8_t, 32> opcode_data;
|
||||||
|
opcode_data.resize (max_op_byte_size);
|
||||||
|
|
||||||
if (!addr.IsValid())
|
if (!addr.IsValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
if (m_opcode_data == NULL)
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
const bool prefer_file_cache = true;
|
const bool prefer_file_cache = true;
|
||||||
Error error;
|
Error error;
|
||||||
Target *target = m_exe_ctx.GetTargetPtr();
|
Target *target = m_exe_ctx.GetTargetPtr();
|
||||||
if (target->ReadMemory (addr, prefer_file_cache, m_opcode_data, max_op_byte_size, error) == -1)
|
if (target->ReadMemory (addr, prefer_file_cache, opcode_data.data(), max_op_byte_size, error) == -1)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -495,7 +487,7 @@ AssemblyParse_x86::instruction_length (Address addr, int &length)
|
||||||
char out_string[512];
|
char out_string[512];
|
||||||
const addr_t pc = addr.GetFileAddress();
|
const addr_t pc = addr.GetFileAddress();
|
||||||
const size_t inst_size = ::LLVMDisasmInstruction (m_disasm_context,
|
const size_t inst_size = ::LLVMDisasmInstruction (m_disasm_context,
|
||||||
m_opcode_data,
|
opcode_data.data(),
|
||||||
max_op_byte_size,
|
max_op_byte_size,
|
||||||
pc, // PC value
|
pc, // PC value
|
||||||
out_string,
|
out_string,
|
||||||
|
|
Loading…
Reference in New Issue