[LLDB][MIPS] Fix gp register value for o32 applications on 64-bit target

GP registers for o32 applications were always giving zero value because SetType() on the RegisterValue was causing the accessor functions to pickup the value from m_scalar of RegisterValue which is zero.
In this patch byte size and byte order of register value is set at the time of setting the value of the register.

llvm-svn: 249020
This commit is contained in:
Sagar Thakur 2015-10-01 15:05:31 +00:00
parent 250c892ac1
commit b8862c0107
2 changed files with 3 additions and 8 deletions

View File

@ -2206,6 +2206,8 @@ ObjectFileELF::ParseSymbols (Symtab *symtab,
mangled.SetDemangledName( ConstString((demangled_name + suffix).str()) );
}
printf("Symbol: name=%s, Type:%d value=%08lx\n", symbol_name, symbol_type, symbol.st_value);
Symbol dc_symbol(
i + start_id, // ID is the original symbol table index.
mangled,

View File

@ -623,13 +623,6 @@ NativeRegisterContextLinux_mips64::ReadRegister (const RegisterInfo *reg_info, R
else
{
error = ReadRegisterRaw(reg, reg_value);
if (error.Success())
{
// If our return byte size was greater than the return value reg size, then
// use the type specified by reg_info rather than the uint64_t default
if (reg_value.GetByteSize() > reg_info->byte_size)
reg_value.SetType(reg_info);
}
}
return error;
@ -1387,7 +1380,7 @@ NativeRegisterContextLinux_mips64::DoReadRegisterValue(uint32_t offset,
{
lldb_private::ArchSpec arch;
if (m_thread.GetProcess()->GetArchitecture(arch))
value.SetBytes((void *)(((unsigned char *)(&regs)) + offset), 8, arch.GetByteOrder());
value.SetBytes((void *)(((unsigned char *)&regs) + offset + 4 * (arch.GetMachine() == llvm::Triple::mips)), arch.GetAddressByteSize(), arch.GetByteOrder());
else
error.SetErrorString("failed to get architecture");
}