Browse Source

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
binutils-2_37-branch
Simon Marchi 5 years ago
parent
commit
8d06918ff5
  1. 14
      gdb/ChangeLog
  2. 20
      gdb/linux-nat.c
  3. 23
      gdb/nat/linux-waitpid.c
  4. 2
      gdb/nat/linux-waitpid.h
  5. 5
      gdbserver/ChangeLog
  6. 2
      gdbserver/linux-low.cc

14
gdb/ChangeLog

@ -1,3 +1,17 @@
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> 2021-05-08 Simon Marchi <simon.marchi@polymtl.ca>
* infrun.h (infrun_debug_printf): Add missing space. * infrun.h (infrun_debug_printf): Add missing space.

20
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. */ /* The pid we tried to attach has apparently just exited. */
linux_nat_debug_printf ("Failed to stop %d: %s", pid, linux_nat_debug_printf ("Failed to stop %d: %s", pid,
status_to_str (status)); status_to_str (status).c_str ());
return status; return status;
} }
@ -1069,7 +1069,7 @@ linux_nat_post_attach_wait (ptid_t ptid, int *signalled)
{ {
*signalled = 1; *signalled = 1;
linux_nat_debug_printf ("Received %s after attaching", linux_nat_debug_printf ("Received %s after attaching",
status_to_str (status)); status_to_str (status).c_str ());
} }
return status; return status;
@ -1239,7 +1239,8 @@ linux_nat_target::attach (const char *args, int from_tty)
/* Save the wait status to report later. */ /* Save the wait status to report later. */
lp->resumed = 1; lp->resumed = 1;
linux_nat_debug_printf ("waitpid %ld, saving status %s", 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; lp->status = status;
@ -2005,7 +2006,7 @@ linux_handle_extended_wait (struct lwp_info *lp, int status)
/* Save the wait status to report later. */ /* Save the wait status to report later. */
linux_nat_debug_printf linux_nat_debug_printf
("waitpid of new LWP %ld, saving status %s", ("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; new_lp->status = status;
} }
else if (report_thread_events) else if (report_thread_events)
@ -2153,7 +2154,7 @@ wait_lwp (struct lwp_info *lp)
linux_nat_debug_printf ("waitpid %s received %s", linux_nat_debug_printf ("waitpid %s received %s",
target_pid_to_str (lp->ptid).c_str (), target_pid_to_str (lp->ptid).c_str (),
status_to_str (status)); status_to_str (status).c_str ());
/* Check if the thread has exited. */ /* Check if the thread has exited. */
if (WIFEXITED (status) || WIFSIGNALED (status)) 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. */ /* The thread was stopped with a signal other than SIGSTOP. */
linux_nat_debug_printf ("Pending event %s in %s", 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 ()); target_pid_to_str (lp->ptid).c_str ());
/* Save the sigtrap event. */ /* Save the sigtrap event. */
@ -2859,7 +2860,7 @@ linux_nat_filter_event (int lwpid, int status)
if (WIFSTOPPED (status) && !lp) if (WIFSTOPPED (status) && !lp)
{ {
linux_nat_debug_printf ("saving LWP %ld status %s in stopped_pids list", 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); add_to_pid_list (&stopped_pids, lwpid, status);
return; return;
} }
@ -3152,7 +3153,7 @@ linux_nat_wait_1 (ptid_t ptid, struct target_waitstatus *ourstatus,
if (lp != NULL) if (lp != NULL)
{ {
linux_nat_debug_printf ("Using pending wait status %s for %s.", 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 ()); 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) if (lwpid > 0)
{ {
linux_nat_debug_printf ("waitpid %ld received %s", 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); linux_nat_filter_event (lwpid, status);
/* Retry until nothing comes out of waitpid. A single /* Retry until nothing comes out of waitpid. A single

23
gdb/nat/linux-waitpid.c

@ -24,30 +24,25 @@
#include "gdbsupport/gdb_wait.h" #include "gdbsupport/gdb_wait.h"
#include "gdbsupport/eintr.h" #include "gdbsupport/eintr.h"
/* Convert wait status STATUS to a string. Used for printing debug /* See linux-waitpid.h. */
messages only. */
char * std::string
status_to_str (int status) status_to_str (int status)
{ {
static char buf[64];
if (WIFSTOPPED (status)) if (WIFSTOPPED (status))
{ {
if (WSTOPSIG (status) == SYSCALL_SIGTRAP) if (WSTOPSIG (status) == SYSCALL_SIGTRAP)
snprintf (buf, sizeof (buf), "%s (stopped at syscall)", return string_printf ("%s (stopped at syscall)",
strsignal (SIGTRAP)); strsignal (SIGTRAP));
else else
snprintf (buf, sizeof (buf), "%s (stopped)", return string_printf ("%s (stopped)",
strsignal (WSTOPSIG (status))); strsignal (WSTOPSIG (status)));
} }
else if (WIFSIGNALED (status)) else if (WIFSIGNALED (status))
snprintf (buf, sizeof (buf), "%s (terminated)", return string_printf ("%s (terminated)",
strsignal (WTERMSIG (status))); strsignal (WTERMSIG (status)));
else else
snprintf (buf, sizeof (buf), "%d (exited)", WEXITSTATUS (status)); return string_printf ("%d (exited)", WEXITSTATUS (status));
return buf;
} }
/* See linux-waitpid.h. */ /* See linux-waitpid.h. */

2
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 /* Convert wait status STATUS to a string. Used for printing debug
messages only. */ messages only. */
extern char *status_to_str (int status); extern std::string status_to_str (int status);
#endif /* NAT_LINUX_WAITPID_H */ #endif /* NAT_LINUX_WAITPID_H */

5
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> 2021-05-08 Pedro Alves <pedro@palves.net>
* linux-low.cc: * linux-low.cc:

2
gdbserver/linux-low.cc

@ -2601,7 +2601,7 @@ linux_process_target::wait_for_event_filtered (ptid_t wait_ptid,
if (debug_threads) if (debug_threads)
{ {
debug_printf ("LLW: waitpid %ld received %s\n", 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 /* Filter all events. IOW, leave all events pending. We'll

Loading…
Cancel
Save