summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJason Molenda <jmolenda@apple.com>2013-10-01 23:54:23 +0000
committerJason Molenda <jmolenda@apple.com>2013-10-01 23:54:23 +0000
commitf2dd4ef157a054301337d44edda3a1f3c2f4d8f9 (patch)
tree60e084ebb4ed5d7ed23d9f988d6c4aec52c7f582
parent8a35855cb109072dddfe1b81ea88e89a0fc59626 (diff)
downloadbcm5719-llvm-f2dd4ef157a054301337d44edda3a1f3c2f4d8f9.tar.gz
bcm5719-llvm-f2dd4ef157a054301337d44edda3a1f3c2f4d8f9.zip
Update RNBRemote to handle the new pseudo_regs field added to DNBRegisterInfo
back in r173096 by Greg. When constructing a g packet or parsing a G packet, and we're iterate over our register list, skip registers that are actually just slices of other, real, registers. For instance, eax is 32-bits of rax on x86_64. <rdar://problem/15104187> llvm-svn: 191802
-rw-r--r--lldb/tools/debugserver/source/RNBRemote.cpp23
1 files changed, 14 insertions, 9 deletions
diff --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp
index 27d198de264..75ad9f395e5 100644
--- a/lldb/tools/debugserver/source/RNBRemote.cpp
+++ b/lldb/tools/debugserver/source/RNBRemote.cpp
@@ -876,6 +876,8 @@ RegisterEntryNotAvailable (register_map_entry_t *reg_entry)
reg_entry->nub_info.reg_dwarf = INVALID_NUB_REGNUM;
reg_entry->nub_info.reg_generic = INVALID_NUB_REGNUM;
reg_entry->nub_info.reg_gdb = INVALID_NUB_REGNUM;
+ reg_entry->nub_info.pseudo_regs = NULL;
+ reg_entry->nub_info.update_regs = NULL;
}
@@ -2833,7 +2835,8 @@ RNBRemote::HandlePacket_g (const char *p)
}
for (uint32_t reg = 0; reg < g_num_reg_entries; reg++)
- register_value_in_hex_fixed_width (ostrm, pid, tid, &g_reg_entries[reg], NULL);
+ if (g_reg_entries[reg].nub_info.pseudo_regs == NULL) // skip registers that are a slice of a real register
+ register_value_in_hex_fixed_width (ostrm, pid, tid, &g_reg_entries[reg], NULL);
return SendPacket (ostrm.str ());
}
@@ -2896,15 +2899,17 @@ RNBRemote::HandlePacket_G (const char *p)
for (uint32_t reg = 0; reg < g_num_reg_entries; reg++)
{
const register_map_entry_t *reg_entry = &g_reg_entries[reg];
-
- reg_value.info = reg_entry->nub_info;
- if (packet.GetHexBytes (reg_value.value.v_sint8, reg_entry->gdb_size, 0xcc) != reg_entry->gdb_size)
- break;
-
- if (reg_entry->fail_value == NULL)
+ if (reg_entry->nub_info.pseudo_regs == NULL) // skip registers that are a slice of a real register
{
- if (!DNBThreadSetRegisterValueByID (pid, tid, reg_entry->nub_info.set, reg_entry->nub_info.reg, &reg_value))
- return SendPacket ("E15");
+ reg_value.info = reg_entry->nub_info;
+ if (packet.GetHexBytes (reg_value.value.v_sint8, reg_entry->gdb_size, 0xcc) != reg_entry->gdb_size)
+ break;
+
+ if (reg_entry->fail_value == NULL)
+ {
+ if (!DNBThreadSetRegisterValueByID (pid, tid, reg_entry->nub_info.set, reg_entry->nub_info.reg, &reg_value))
+ return SendPacket ("E15");
+ }
}
}
return SendPacket ("OK");
OpenPOWER on IntegriCloud