summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSimon Marchi <simon.marchi@polymtl.ca>2021-05-08 21:06:41 -0400
committerSimon Marchi <simon.marchi@polymtl.ca>2021-05-08 21:07:20 -0400
commit8d06918ff58452cb17d1bdfbde7187f45933f42e (patch)
treeb265047ba289878cb96ae446b8451a87b16a1c1f
parent550e9289ab4f7ec1092a9c0ee202bbe0ba7fb9f5 (diff)
downloadbinutils-gdb-8d06918ff58452cb17d1bdfbde7187f45933f42e.tar.gz
gdb, gdbserver: make status_to_str return std::string
Instead of using a static buffer. This is safer, and we don't really mind about any extra dynamic allocation here, since it's only used for debug purposes. gdb/ChangeLog: * nat/linux-waitpid.c (status_to_str): Return std::string. * nat/linux-waitpid.h (status_to_str): Likewise. * linux-nat.c (linux_nat_post_attach_wait): Adjust. (linux_nat_target::attach): Adjust. (linux_handle_extended_wait): Adjust. (wait_lwp): Adjust. (stop_wait_callback): Adjust. (linux_nat_filter_event): Adjust. (linux_nat_wait_1): Adjust. * nat/linux-waitpid.c (status_to_str): Adjust. * nat/linux-waitpid.h (status_to_str): Adjust. gdbserver/ChangeLog: * linux-low.cc (linux_process_target::wait_for_event_filtered): Adjust to status_to_str returning std::string. Change-Id: Ia8aead70270438a5690f243e6faafff6c38ff757
-rw-r--r--gdb/ChangeLog14
-rw-r--r--gdb/linux-nat.c20
-rw-r--r--gdb/nat/linux-waitpid.c23
-rw-r--r--gdb/nat/linux-waitpid.h2
-rw-r--r--gdbserver/ChangeLog5
-rw-r--r--gdbserver/linux-low.cc2
6 files changed, 41 insertions, 25 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog
index e7e48f0cc3e..75e344ff707 100644
--- a/gdb/ChangeLog
+++ b/gdb/ChangeLog
@@ -1,5 +1,19 @@
2021-05-08 Simon Marchi <simon.marchi@polymtl.ca>
+ * nat/linux-waitpid.c (status_to_str): Return std::string.
+ * nat/linux-waitpid.h (status_to_str): Likewise.
+ * linux-nat.c (linux_nat_post_attach_wait): Adjust.
+ (linux_nat_target::attach): Adjust.
+ (linux_handle_extended_wait): Adjust.
+ (wait_lwp): Adjust.
+ (stop_wait_callback): Adjust.
+ (linux_nat_filter_event): Adjust.
+ (linux_nat_wait_1): Adjust.
+ * nat/linux-waitpid.c (status_to_str): Adjust.
+ * nat/linux-waitpid.h (status_to_str): Adjust.
+
+2021-05-08 Simon Marchi <simon.marchi@polymtl.ca>
+
* infrun.h (infrun_debug_printf): Add missing space.
2021-05-08 Pedro Alves <pedro@palves.net>
diff --git a/gdb/linux-nat.c b/gdb/linux-nat.c
index e595c71c3d3..34a2aee41d7 100644
--- a/gdb/linux-nat.c
+++ b/gdb/linux-nat.c
@@ -1061,7 +1061,7 @@ linux_nat_post_attach_wait (ptid_t ptid, int *signalled)
{
/* The pid we tried to attach has apparently just exited. */
linux_nat_debug_printf ("Failed to stop %d: %s", pid,
- status_to_str (status));
+ status_to_str (status).c_str ());
return status;
}
@@ -1069,7 +1069,7 @@ linux_nat_post_attach_wait (ptid_t ptid, int *signalled)
{
*signalled = 1;
linux_nat_debug_printf ("Received %s after attaching",
- status_to_str (status));
+ status_to_str (status).c_str ());
}
return status;
@@ -1239,7 +1239,8 @@ linux_nat_target::attach (const char *args, int from_tty)
/* Save the wait status to report later. */
lp->resumed = 1;
linux_nat_debug_printf ("waitpid %ld, saving status %s",
- (long) lp->ptid.pid (), status_to_str (status));
+ (long) lp->ptid.pid (),
+ status_to_str (status).c_str ());
lp->status = status;
@@ -2005,7 +2006,7 @@ linux_handle_extended_wait (struct lwp_info *lp, int status)
/* Save the wait status to report later. */
linux_nat_debug_printf
("waitpid of new LWP %ld, saving status %s",
- (long) new_lp->ptid.lwp (), status_to_str (status));
+ (long) new_lp->ptid.lwp (), status_to_str (status).c_str ());
new_lp->status = status;
}
else if (report_thread_events)
@@ -2153,7 +2154,7 @@ wait_lwp (struct lwp_info *lp)
linux_nat_debug_printf ("waitpid %s received %s",
target_pid_to_str (lp->ptid).c_str (),
- status_to_str (status));
+ status_to_str (status).c_str ());
/* Check if the thread has exited. */
if (WIFEXITED (status) || WIFSIGNALED (status))
@@ -2440,7 +2441,7 @@ stop_wait_callback (struct lwp_info *lp)
/* The thread was stopped with a signal other than SIGSTOP. */
linux_nat_debug_printf ("Pending event %s in %s",
- status_to_str ((int) status),
+ status_to_str ((int) status).c_str (),
target_pid_to_str (lp->ptid).c_str ());
/* Save the sigtrap event. */
@@ -2859,7 +2860,7 @@ linux_nat_filter_event (int lwpid, int status)
if (WIFSTOPPED (status) && !lp)
{
linux_nat_debug_printf ("saving LWP %ld status %s in stopped_pids list",
- (long) lwpid, status_to_str (status));
+ (long) lwpid, status_to_str (status).c_str ());
add_to_pid_list (&stopped_pids, lwpid, status);
return;
}
@@ -3152,7 +3153,7 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
if (lp != NULL)
{
linux_nat_debug_printf ("Using pending wait status %s for %s.",
- status_to_str (lp->status),
+ status_to_str (lp->status).c_str (),
target_pid_to_str (lp->ptid).c_str ());
}
@@ -3187,7 +3188,8 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
if (lwpid > 0)
{
linux_nat_debug_printf ("waitpid %ld received %s",
- (long) lwpid, status_to_str (status));
+ (long) lwpid,
+ status_to_str (status).c_str ());
linux_nat_filter_event (lwpid, status);
/* Retry until nothing comes out of waitpid. A single
diff --git a/gdb/nat/linux-waitpid.c b/gdb/nat/linux-waitpid.c
index 2d4c8eb5812..f205df7a246 100644
--- a/gdb/nat/linux-waitpid.c
+++ b/gdb/nat/linux-waitpid.c
@@ -24,30 +24,25 @@
#include "gdbsupport/gdb_wait.h"
#include "gdbsupport/eintr.h"
-/* Convert wait status STATUS to a string. Used for printing debug
- messages only. */
+/* See linux-waitpid.h. */
-char *
+std::string
status_to_str (int status)
{
- static char buf[64];
-
if (WIFSTOPPED (status))
{
if (WSTOPSIG (status) == SYSCALL_SIGTRAP)
- snprintf (buf, sizeof (buf), "%s (stopped at syscall)",
- strsignal (SIGTRAP));
+ return string_printf ("%s (stopped at syscall)",
+ strsignal (SIGTRAP));
else
- snprintf (buf, sizeof (buf), "%s (stopped)",
- strsignal (WSTOPSIG (status)));
+ return string_printf ("%s (stopped)",
+ strsignal (WSTOPSIG (status)));
}
else if (WIFSIGNALED (status))
- snprintf (buf, sizeof (buf), "%s (terminated)",
- strsignal (WTERMSIG (status)));
+ return string_printf ("%s (terminated)",
+ strsignal (WTERMSIG (status)));
else
- snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status));
-
- return buf;
+ return string_printf ("%d (exited)", WEXITSTATUS (status));
}
/* See linux-waitpid.h. */
diff --git a/gdb/nat/linux-waitpid.h b/gdb/nat/linux-waitpid.h
index 78056454da6..fe2383f1386 100644
--- a/gdb/nat/linux-waitpid.h
+++ b/gdb/nat/linux-waitpid.h
@@ -25,6 +25,6 @@ extern int my_waitpid (int pid, int *status, int flags);
/* Convert wait status STATUS to a string. Used for printing debug
messages only. */
-extern char *status_to_str (int status);
+extern std::string status_to_str (int status);
#endif /* NAT_LINUX_WAITPID_H */
diff --git a/gdbserver/ChangeLog b/gdbserver/ChangeLog
index 6483d65700c..7e7e3f29980 100644
--- a/gdbserver/ChangeLog
+++ b/gdbserver/ChangeLog
@@ -1,3 +1,8 @@
+2021-05-08 Simon Marchi <simon.marchi@polymtl.ca>
+
+ * linux-low.cc (linux_process_target::wait_for_event_filtered):
+ Adjust to status_to_str returning std::string.
+
2021-05-08 Pedro Alves <pedro@palves.net>
* linux-low.cc:
diff --git a/gdbserver/linux-low.cc b/gdbserver/linux-low.cc
index 9debe894eeb..5c6191d941c 100644
--- a/gdbserver/linux-low.cc
+++ b/gdbserver/linux-low.cc
@@ -2601,7 +2601,7 @@ linux_process_target::wait_for_event_filtered (ptid_t wait_ptid,
if (debug_threads)
{
debug_printf ("LLW: waitpid %ld received %s\n",
- (long) ret, status_to_str (*wstatp));
+ (long) ret, status_to_str (*wstatp).c_str ());
}
/* Filter all events. IOW, leave all events pending. We'll