diff options
Diffstat (limited to 'lldb/tools/debugserver')
| -rw-r--r-- | lldb/tools/debugserver/source/DNB.cpp | 26 | ||||
| -rw-r--r-- | lldb/tools/debugserver/source/MacOSX/MachException.cpp | 7 | ||||
| -rw-r--r-- | lldb/tools/debugserver/source/MacOSX/MachProcess.cpp | 23 | ||||
| -rw-r--r-- | lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp | 5 | ||||
| -rw-r--r-- | lldb/tools/debugserver/source/RNBRemote.cpp | 44 | ||||
| -rw-r--r-- | lldb/tools/debugserver/source/debugserver.cpp | 1 |
6 files changed, 59 insertions, 47 deletions
diff --git a/lldb/tools/debugserver/source/DNB.cpp b/lldb/tools/debugserver/source/DNB.cpp index d6687449557..820da8b86a2 100644 --- a/lldb/tools/debugserver/source/DNB.cpp +++ b/lldb/tools/debugserver/source/DNB.cpp @@ -1214,9 +1214,9 @@ DNBPrintf (nub_process_t pid, nub_thread_t tid, nub_addr_t base_addr, FILE *file case '%': { f++; // Skip the '%' character - int min_field_width = 0; - int precision = 0; - uint32_t flags = 0; +// int min_field_width = 0; +// int precision = 0; + //uint32_t flags = 0; uint32_t length_modifiers = 0; uint32_t byte_size = 0; uint32_t actual_byte_size = 0; @@ -1233,12 +1233,12 @@ DNBPrintf (nub_process_t pid, nub_thread_t tid, nub_addr_t base_addr, FILE *file // Decode any flags switch (*f) { - case '#': fprintf_format += *f++; flags |= alternate_form; break; - case '0': fprintf_format += *f++; flags |= zero_padding; break; - case '-': fprintf_format += *f++; flags |= negative_field_width; break; - case ' ': fprintf_format += *f++; flags |= blank_space; break; - case '+': fprintf_format += *f++; flags |= show_sign; break; - case ',': fprintf_format += *f++; flags |= show_thousands_separator;break; + case '#': fprintf_format += *f++; break; //flags |= alternate_form; break; + case '0': fprintf_format += *f++; break; //flags |= zero_padding; break; + case '-': fprintf_format += *f++; break; //flags |= negative_field_width; break; + case ' ': fprintf_format += *f++; break; //flags |= blank_space; break; + case '+': fprintf_format += *f++; break; //flags |= show_sign; break; + case ',': fprintf_format += *f++; break; //flags |= show_thousands_separator;break; case '{': case '[': { @@ -1330,7 +1330,8 @@ DNBPrintf (nub_process_t pid, nub_thread_t tid, nub_addr_t base_addr, FILE *file // Check for a minimum field width if (isdigit(*f)) { - min_field_width = strtoul(f, &end, 10); + //min_field_width = strtoul(f, &end, 10); + strtoul(f, &end, 10); if (end > f) { fprintf_format.append(f, end - f); @@ -1346,7 +1347,8 @@ DNBPrintf (nub_process_t pid, nub_thread_t tid, nub_addr_t base_addr, FILE *file if (isdigit(*f)) { fprintf_format += '.'; - precision = strtoul(f, &end, 10); + //precision = strtoul(f, &end, 10); + strtoul(f, &end, 10); if (end > f) { fprintf_format.append(f, end - f); @@ -1453,7 +1455,7 @@ DNBPrintf (nub_process_t pid, nub_thread_t tid, nub_addr_t base_addr, FILE *file byte_size = sizeof(char); else if (length_modifiers & length_mod_h) byte_size = sizeof(short); - if (length_modifiers & length_mod_ll) + else if (length_modifiers & length_mod_ll) byte_size = sizeof(long long); else if (length_modifiers & length_mod_l) byte_size = sizeof(long); diff --git a/lldb/tools/debugserver/source/MacOSX/MachException.cpp b/lldb/tools/debugserver/source/MacOSX/MachException.cpp index ead512ea148..9856867d11e 100644 --- a/lldb/tools/debugserver/source/MacOSX/MachException.cpp +++ b/lldb/tools/debugserver/source/MacOSX/MachException.cpp @@ -122,7 +122,6 @@ catch_mach_exception_raise_state_identity mach_msg_type_number_t *new_stateCnt ) { - kern_return_t kret; if (DNBLogCheckLogBit(LOG_EXCEPTIONS)) { DNBLogThreaded("::%s ( exc_port = 0x%4.4x, thd_port = 0x%4.4x, tsk_port = 0x%4.4x, exc_type = %d ( %s ), exc_data[%d] = { 0x%llx, 0x%llx })", @@ -135,8 +134,8 @@ catch_mach_exception_raise_state_identity (uint64_t)(exc_data_count > 0 ? exc_data[0] : 0xBADDBADD), (uint64_t)(exc_data_count > 1 ? exc_data[1] : 0xBADDBADD)); } - kret = mach_port_deallocate (mach_task_self (), task_port); - kret = mach_port_deallocate (mach_task_self (), thread_port); + mach_port_deallocate (mach_task_self (), task_port); + mach_port_deallocate (mach_task_self (), thread_port); return KERN_FAILURE; } @@ -229,7 +228,7 @@ MachException::Data::GetStopInfo(struct DNBThreadStopInfo *stop_info) const if (desc < end_desc) { const char *sig_str = SysSignal::Name(soft_signal); - desc += snprintf(desc, end_desc - desc, " EXC_SOFT_SIGNAL( %i ( %s ))", soft_signal, sig_str ? sig_str : "unknown signal"); + snprintf(desc, end_desc - desc, " EXC_SOFT_SIGNAL( %i ( %s ))", soft_signal, sig_str ? sig_str : "unknown signal"); } } else diff --git a/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp b/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp index 4d787782c60..2dcbb6727cd 100644 --- a/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp +++ b/lldb/tools/debugserver/source/MacOSX/MachProcess.cpp @@ -421,8 +421,7 @@ MachProcess::DoSIGSTOP (bool clear_bps_and_wps, bool allow_running, uint32_t *th { DisableAllBreakpoints (true); DisableAllWatchpoints (true); - // The static analyzer complains about this, but just leave the following line in. - clear_bps_and_wps = false; + //clear_bps_and_wps = false; } uint32_t thread_idx = m_thread_list.GetThreadIndexForThreadStoppedWithSignal (SIGSTOP); if (thread_idx_ptr) @@ -1865,18 +1864,20 @@ MachProcess::ForkChildForPTraceDebugging // If our parent is setgid, lets make sure we don't inherit those // extra powers due to nepotism. - ::setgid (getgid ()); + if (::setgid (getgid ()) == 0) + { - // Let the child have its own process group. We need to execute - // this call in both the child and parent to avoid a race condition - // between the two processes. - ::setpgid (0, 0); // Set the child process group to match its pid + // Let the child have its own process group. We need to execute + // this call in both the child and parent to avoid a race condition + // between the two processes. + ::setpgid (0, 0); // Set the child process group to match its pid - // Sleep a bit to before the exec call - ::sleep (1); + // Sleep a bit to before the exec call + ::sleep (1); - // Turn this process into - ::execv (path, (char * const *)argv); + // Turn this process into + ::execv (path, (char * const *)argv); + } // Exit with error code. Child process should have taken // over in above exec call and if the exec fails it will // exit the child process below. diff --git a/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp b/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp index b8044fe6c7f..8e35069fd8a 100644 --- a/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp +++ b/lldb/tools/debugserver/source/MacOSX/MachThreadList.cpp @@ -470,9 +470,9 @@ MachThreadList::DisableHardwareBreakpoint (const DNBBreakpoint* bp) const uint32_t MachThreadList::EnableHardwareWatchpoint (const DNBBreakpoint* wp) const { + uint32_t hw_index = INVALID_NUB_HW_INDEX; if (wp != NULL) { - uint32_t hw_index; PTHREAD_MUTEX_LOCKER (locker, m_threads_mutex); const uint32_t num_threads = m_threads.size(); for (uint32_t idx = 0; idx < num_threads; ++idx) @@ -492,9 +492,8 @@ MachThreadList::EnableHardwareWatchpoint (const DNBBreakpoint* wp) const // Use an arbitrary thread to signal the completion of our transaction. if (num_threads) m_threads[0]->HardwareWatchpointStateChanged(); - return hw_index; } - return INVALID_NUB_HW_INDEX; + return hw_index; } bool diff --git a/lldb/tools/debugserver/source/RNBRemote.cpp b/lldb/tools/debugserver/source/RNBRemote.cpp index 9f447c7821e..4b2571dc26b 100644 --- a/lldb/tools/debugserver/source/RNBRemote.cpp +++ b/lldb/tools/debugserver/source/RNBRemote.cpp @@ -1674,7 +1674,7 @@ set_logging (const char *p) } } // Did we get a properly formatted logging bitmask? - if (*p == ';') + if (p && *p == ';') { // Enable DNB logging DNBLogSetLogCallback(ASLLogCallback, NULL); @@ -2028,14 +2028,21 @@ void register_value_in_hex_fixed_width (std::ostream& ostrm, nub_process_t pid, nub_thread_t tid, - const register_map_entry_t* reg) + const register_map_entry_t* reg, + const DNBRegisterValue *reg_value_ptr) { if (reg != NULL) { - DNBRegisterValue val; - if (DNBThreadGetRegisterValueByID (pid, tid, reg->nub_info.set, reg->nub_info.reg, &val)) + DNBRegisterValue reg_value; + if (reg_value_ptr == NULL) + { + if (DNBThreadGetRegisterValueByID (pid, tid, reg->nub_info.set, reg->nub_info.reg, ®_value)) + reg_value_ptr = ®_value; + } + + if (reg_value_ptr) { - append_hex_value (ostrm, val.value.v_uint8, reg->gdb_size, false); + append_hex_value (ostrm, reg_value_ptr->value.v_uint8, reg->gdb_size, false); } else { @@ -2063,7 +2070,8 @@ void gdb_regnum_with_fixed_width_hex_register_value (std::ostream& ostrm, nub_process_t pid, nub_thread_t tid, - const register_map_entry_t* reg) + const register_map_entry_t* reg, + const DNBRegisterValue *reg_value_ptr) { // 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 @@ -2071,7 +2079,7 @@ gdb_regnum_with_fixed_width_hex_register_value (std::ostream& ostrm, if (reg != NULL) { ostrm << RAWHEX8(reg->gdb_regnum) << ':'; - register_value_in_hex_fixed_width (ostrm, pid, tid, reg); + register_value_in_hex_fixed_width (ostrm, pid, tid, reg, reg_value_ptr); ostrm << ';'; } } @@ -2173,15 +2181,18 @@ RNBRemote::SendStopReplyPacketForThread (nub_thread_t tid) if (g_num_reg_entries == 0) InitializeRegisters (); - DNBRegisterValue reg_value; - for (uint32_t reg = 0; reg < g_num_reg_entries; reg++) + if (g_reg_entries != NULL) { - if (g_reg_entries[reg].expedite) + DNBRegisterValue reg_value; + for (uint32_t reg = 0; reg < g_num_reg_entries; reg++) { - if (!DNBThreadGetRegisterValueByID (pid, tid, g_reg_entries[reg].nub_info.set, g_reg_entries[reg].nub_info.reg, ®_value)) - continue; + if (g_reg_entries[reg].expedite) + { + if (!DNBThreadGetRegisterValueByID (pid, tid, g_reg_entries[reg].nub_info.set, g_reg_entries[reg].nub_info.reg, ®_value)) + continue; - gdb_regnum_with_fixed_width_hex_register_value (ostrm, pid, tid, &g_reg_entries[reg]); + gdb_regnum_with_fixed_width_hex_register_value (ostrm, pid, tid, &g_reg_entries[reg], ®_value); + } } } @@ -2496,7 +2507,7 @@ 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]); + register_value_in_hex_fixed_width (ostrm, pid, tid, &g_reg_entries[reg], NULL); return SendPacket (ostrm.str ()); } @@ -2695,7 +2706,6 @@ RNBRemote::HandlePacket_v (const char *p) } else if (strstr (p, "vCont") == p) { - rnb_err_t rnb_err = rnb_success; typedef struct { nub_thread_t tid; @@ -2747,7 +2757,7 @@ RNBRemote::HandlePacket_v (const char *p) break; default: - rnb_err = HandlePacket_ILLFORMED (__FILE__, __LINE__, p, "Unsupported action in vCont packet"); + HandlePacket_ILLFORMED (__FILE__, __LINE__, p, "Unsupported action in vCont packet"); break; } if (*c == ':') @@ -3194,7 +3204,7 @@ RNBRemote::HandlePacket_p (const char *p) } else { - register_value_in_hex_fixed_width (ostrm, pid, tid, reg_entry); + register_value_in_hex_fixed_width (ostrm, pid, tid, reg_entry, NULL); } return SendPacket (ostrm.str()); } diff --git a/lldb/tools/debugserver/source/debugserver.cpp b/lldb/tools/debugserver/source/debugserver.cpp index 32749257710..fe988483fc8 100644 --- a/lldb/tools/debugserver/source/debugserver.cpp +++ b/lldb/tools/debugserver/source/debugserver.cpp @@ -1141,6 +1141,7 @@ main (int argc, char *argv[]) int listen_port = INT32_MAX; char str[PATH_MAX]; + str[0] = '\0'; if (g_lockdown_opt == 0 && g_applist_opt == 0) { |

