Index: source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp =================================================================== --- source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp +++ source/Plugins/Process/Linux/NativeRegisterContextLinux_x86_64.cpp @@ -1039,7 +1039,7 @@ return Error ("Watchpoint index out of range"); RegisterValue reg_value; - Error error = ReadRegisterRaw(lldb_dr6_x86_64, reg_value); + Error error = ReadRegisterRaw(m_reg_info.first_dr + 6, reg_value); if (error.Fail()) return error; uint64_t status_bits = reg_value.GetAsUInt64(); @@ -1058,7 +1058,7 @@ return Error ("Watchpoint index out of range"); RegisterValue reg_value; - Error error = ReadRegisterRaw(lldb_dr7_x86_64, reg_value); + Error error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value); if (error.Fail()) return error; uint64_t control_bits = reg_value.GetAsUInt64(); @@ -1087,7 +1087,7 @@ if (error.Fail()) return error; RegisterValue reg_value; - error = ReadRegisterRaw(lldb_dr7_x86_64, reg_value); + error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value); if (error.Fail()) return error; // for watchpoints 0, 1, 2, or 3, respectively, @@ -1112,7 +1112,7 @@ error = WriteRegister(m_reg_info.first_dr + wp_index, RegisterValue(addr)); if (error.Fail()) return error; - error = WriteRegister(lldb_dr7_x86_64, RegisterValue(control_bits)); + error = WriteRegister(m_reg_info.first_dr + 7, RegisterValue(control_bits)); if (error.Fail()) return error; error.Clear(); @@ -1129,21 +1129,21 @@ // for watchpoints 0, 1, 2, or 3, respectively, // clear bits 0, 1, 2, or 3 of the debug status register (DR6) - Error error = ReadRegisterRaw(lldb_dr6_x86_64, reg_value); + Error error = ReadRegisterRaw(m_reg_info.first_dr + 6, reg_value); if (error.Fail()) return false; uint64_t bit_mask = 1 << wp_index; uint64_t status_bits = reg_value.GetAsUInt64() & ~bit_mask; - error = WriteRegister(lldb_dr6_x86_64, RegisterValue(status_bits)); + error = WriteRegister(m_reg_info.first_dr + 6, RegisterValue(status_bits)); if (error.Fail()) return false; // for watchpoints 0, 1, 2, or 3, respectively, // clear bits {0-1,16-19}, {2-3,20-23}, {4-5,24-27}, or {6-7,28-31} // of the debug control register (DR7) - error = ReadRegisterRaw(lldb_dr7_x86_64, reg_value); + error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value); if (error.Fail()) return false; bit_mask = (0x3 << (2 * wp_index)) | (0xF << (16 + 4 * wp_index)); uint64_t control_bits = reg_value.GetAsUInt64() & ~bit_mask; - return WriteRegister(lldb_dr7_x86_64, RegisterValue(control_bits)).Success(); + return WriteRegister(m_reg_info.first_dr + 7, RegisterValue(control_bits)).Success(); } Error @@ -1152,19 +1152,19 @@ RegisterValue reg_value; // clear bits {0-4} of the debug status register (DR6) - Error error = ReadRegisterRaw(lldb_dr6_x86_64, reg_value); + Error error = ReadRegisterRaw(m_reg_info.first_dr + 6, reg_value); if (error.Fail()) return error; uint64_t bit_mask = 0xF; uint64_t status_bits = reg_value.GetAsUInt64() & ~bit_mask; - error = WriteRegister(lldb_dr6_x86_64, RegisterValue(status_bits)); + error = WriteRegister(m_reg_info.first_dr + 6, RegisterValue(status_bits)); if (error.Fail()) return error; // clear bits {0-7,16-31} of the debug control register (DR7) - error = ReadRegisterRaw(lldb_dr7_x86_64, reg_value); + error = ReadRegisterRaw(m_reg_info.first_dr + 7, reg_value); if (error.Fail()) return error; bit_mask = 0xFF | (0xFFFF << 16); uint64_t control_bits = reg_value.GetAsUInt64() & ~bit_mask; - return WriteRegister(lldb_dr7_x86_64, RegisterValue(control_bits)); + return WriteRegister(m_reg_info.first_dr + 7, RegisterValue(control_bits)); } uint32_t Index: source/Plugins/Process/Linux/NativeThreadLinux.cpp =================================================================== --- source/Plugins/Process/Linux/NativeThreadLinux.cpp +++ source/Plugins/Process/Linux/NativeThreadLinux.cpp @@ -198,9 +198,7 @@ break; } #endif -#if 0 case llvm::Triple::x86: -#endif case llvm::Triple::x86_64: { const uint32_t concrete_frame_idx = 0; Index: source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp =================================================================== --- source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp +++ source/Plugins/Process/gdb-remote/GDBRemoteCommunicationServerLLGS.cpp @@ -446,24 +446,6 @@ } } -static void -WriteGdbRegnumWithFixedWidthHexRegisterValue (StreamString &response, - NativeRegisterContextSP ®_ctx_sp, - const RegisterInfo ®_info, - const RegisterValue ®_value) -{ - // Output the register number as 'NN:VVVVVVVV;' where NN is a 2 bytes HEX - // gdb register number, and VVVVVVVV is the correct number of hex bytes - // as ASCII for the register value. - if (reg_info.kinds[eRegisterKindGDB] == LLDB_INVALID_REGNUM) - return; - - response.Printf ("%.02x:", reg_info.kinds[eRegisterKindGDB]); - WriteRegisterValueInHexFixedWidth (response, reg_ctx_sp, reg_info, ®_value); - response.PutChar (';'); -} - - GDBRemoteCommunication::PacketResult GDBRemoteCommunicationServerLLGS::SendStopReplyPacketForThread (lldb::tid_t tid) { @@ -588,7 +570,11 @@ RegisterValue reg_value; Error error = reg_ctx_sp->ReadRegister (reg_info_p, reg_value); if (error.Success ()) - WriteGdbRegnumWithFixedWidthHexRegisterValue (response, reg_ctx_sp, *reg_info_p, reg_value); + { + response.Printf ("%.02x:", *reg_num_p); + WriteRegisterValueInHexFixedWidth(response, reg_ctx_sp, *reg_info_p, ®_value); + response.PutChar (';'); + } else { if (log) @@ -2110,8 +2096,8 @@ { uint32_t watch_flags = stoppoint_type == eWatchpointWrite - ? watch_flags = 0x1 // Write - : watch_flags = 0x3; // ReadWrite + ? 0x1 // Write + : 0x3; // ReadWrite // Try to set the watchpoint. const Error error = m_debugged_process_sp->SetWatchpoint (