aboutsummaryrefslogtreecommitdiff
path: root/gdbsupport
diff options
context:
space:
mode:
Diffstat (limited to 'gdbsupport')
-rw-r--r--gdbsupport/event-loop.cc3
-rw-r--r--gdbsupport/parallel-for.h10
-rw-r--r--gdbsupport/poison.h2
-rw-r--r--gdbsupport/print-utils.cc6
-rw-r--r--gdbsupport/run-time-clock.cc21
-rw-r--r--gdbsupport/run-time-clock.h11
6 files changed, 39 insertions, 14 deletions
diff --git a/gdbsupport/event-loop.cc b/gdbsupport/event-loop.cc
index c080490..e7b21e7 100644
--- a/gdbsupport/event-loop.cc
+++ b/gdbsupport/event-loop.cc
@@ -827,7 +827,8 @@ update_wait_timeout (void)
/* Update the timeout for select/ poll. */
#ifdef HAVE_POLL
if (use_poll)
- gdb_notifier.poll_timeout = timeout.tv_sec * 1000;
+ gdb_notifier.poll_timeout = (timeout.tv_sec * 1000 +
+ (timeout.tv_usec + 1000 - 1) / 1000);
else
#endif /* HAVE_POLL */
{
diff --git a/gdbsupport/parallel-for.h b/gdbsupport/parallel-for.h
index c485c36..b74c806 100644
--- a/gdbsupport/parallel-for.h
+++ b/gdbsupport/parallel-for.h
@@ -40,10 +40,9 @@ namespace gdb
at least N elements processed per thread. Setting N to 0 is not
allowed. */
-template<class RandomIt, class RangeFunction>
+template<std::size_t n, class RandomIt, class RangeFunction>
void
-parallel_for_each (unsigned n, RandomIt first, RandomIt last,
- RangeFunction callback)
+parallel_for_each (RandomIt first, RandomIt last, RangeFunction callback)
{
/* If enabled, print debug info about how the work is distributed across
the threads. */
@@ -73,7 +72,7 @@ parallel_for_each (unsigned n, RandomIt first, RandomIt last,
if (parallel_for_each_debug)
{
debug_printf (_("Parallel for: n_elements: %zu\n"), n_elements);
- debug_printf (_("Parallel for: minimum elements per thread: %u\n"), n);
+ debug_printf (_("Parallel for: minimum elements per thread: %zu\n"), n);
debug_printf (_("Parallel for: elts_per_thread: %zu\n"), elts_per_thread);
}
@@ -141,8 +140,7 @@ parallel_for_each (unsigned n, RandomIt first, RandomIt last,
template<class RandomIt, class RangeFunction>
void
-sequential_for_each (unsigned n, RandomIt first, RandomIt last,
- RangeFunction callback)
+sequential_for_each (RandomIt first, RandomIt last, RangeFunction callback)
{
callback (first, last);
}
diff --git a/gdbsupport/poison.h b/gdbsupport/poison.h
index 791a18f..a91ee5d 100644
--- a/gdbsupport/poison.h
+++ b/gdbsupport/poison.h
@@ -183,7 +183,7 @@ xnewvar (size_t s)
{
static_assert (IsMallocable<T>::value, "Trying to use XNEWVAR with a \
non-POD data type.");
- return XNEWVAR (T, s);;
+ return XNEWVAR (T, s);
}
#undef XNEWVAR
diff --git a/gdbsupport/print-utils.cc b/gdbsupport/print-utils.cc
index a798713..8514720 100644
--- a/gdbsupport/print-utils.cc
+++ b/gdbsupport/print-utils.cc
@@ -304,8 +304,7 @@ core_addr_to_string (const CORE_ADDR addr)
{
char *str = get_print_cell ();
- strcpy (str, "0x");
- strcat (str, phex (addr));
+ xsnprintf (str, PRINT_CELL_SIZE, "0x%s", phex (addr));
return str;
}
@@ -316,8 +315,7 @@ core_addr_to_string_nz (const CORE_ADDR addr)
{
char *str = get_print_cell ();
- strcpy (str, "0x");
- strcat (str, phex_nz (addr));
+ xsnprintf (str, PRINT_CELL_SIZE, "0x%s", phex_nz (addr));
return str;
}
diff --git a/gdbsupport/run-time-clock.cc b/gdbsupport/run-time-clock.cc
index 621ba77..cda60b0 100644
--- a/gdbsupport/run-time-clock.cc
+++ b/gdbsupport/run-time-clock.cc
@@ -37,12 +37,33 @@ timeval_to_microseconds (struct timeval *tv)
}
#endif
+/* See run-time-clock.h. */
+
+bool
+get_run_time_thread_scope_available ()
+{
+#if defined HAVE_GETRUSAGE && defined RUSAGE_THREAD
+ return true;
+#else
+ return false;
+#endif
+}
+
void
get_run_time (user_cpu_time_clock::time_point &user,
system_cpu_time_clock::time_point &system,
run_time_scope scope) noexcept
{
#ifdef HAVE_GETRUSAGE
+
+ /* If we can't provide thread scope run time usage, fallback to
+ process scope. This will at least be right if GDB is built
+ without threading support in the first place (or is set to use
+ zero worker threads). */
+# ifndef RUSAGE_THREAD
+# define RUSAGE_THREAD RUSAGE_SELF
+# endif
+
struct rusage rusage;
int who;
diff --git a/gdbsupport/run-time-clock.h b/gdbsupport/run-time-clock.h
index a985dbb..2743514 100644
--- a/gdbsupport/run-time-clock.h
+++ b/gdbsupport/run-time-clock.h
@@ -64,13 +64,20 @@ enum class run_time_scope
supported. If not supported, then the combined user+kernel time
is returned in USER and SYSTEM is set to zero.
- SCOPE indicates whether to return the run time for the whole process or
- just for the calling thread. */
+ SCOPE indicates whether to return the run time for the whole
+ process or just for the calling thread. If the latter isn't
+ supported, then returns the run time for the whole process even if
+ run_time_scope::thread is requested. */
void get_run_time (user_cpu_time_clock::time_point &user,
system_cpu_time_clock::time_point &system,
run_time_scope scope) noexcept;
+/* Returns true if is it possible for get_run_time above to return the
+ run time for just the calling thread. */
+
+bool get_run_time_thread_scope_available ();
+
/* Count the total amount of time spent executing in userspace+kernel
mode. */