List checkpoints in ascending order

Before:
     (gdb) info checkpoints
       3 process 29132 at 0x4008ad, file foo.c, line 81
       2 process 29131 at 0x4008ad, file foo.c, line 81
       1 process 29130 at 0x4008ad, file foo.c, line 81
     * 0 Thread 0x7ffff7fc5740 (LWP 29128) (main process) at 0x4008ad, file foo.c, line 81

After:
     (gdb) info checkpoints
     * 0 Thread 0x7ffff7fc5740 (LWP 29128) (main process) at 0x4008ad, file foo.c, line 81
       1 process 29130 at 0x4008ad, file foo.c, line 81
       2 process 29131 at 0x4008ad, file foo.c, line 81
       3 process 29132 at 0x4008ad, file foo.c, line 81

gdb/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
        * printcmd.c (display_command): Append new display at the end of
        the list.

gdb/testsuite/ChangeLog:
2015-11-24  Pedro Alves  <palves@redhat.com>

	PR 17539
        * gdb.base/display.exp: Expect displays to be sorted in ascending
        order.  Use multi_line.
        * gdb.base/solib-display.exp: Likewise.
This commit is contained in:
Pedro Alves 2015-11-24 18:11:22 +00:00
parent 7e0aa6aa99
commit 2f341b6e28
4 changed files with 45 additions and 7 deletions

View file

@ -63,6 +63,21 @@ forks_exist_p (void)
return (fork_list != NULL);
}
/* Return the last fork in the list. */
static struct fork_info *
find_last_fork (void)
{
struct fork_info *last;
if (fork_list == NULL)
return NULL;
for (last = fork_list; last->next != NULL; last = last->next)
;
return last;
}
/* Add a fork to the internal fork list. */
struct fork_info *
@ -83,8 +98,16 @@ add_fork (pid_t pid)
fp = XCNEW (struct fork_info);
fp->ptid = ptid_build (pid, pid, 0);
fp->num = ++highest_fork_num;
fp->next = fork_list;
fork_list = fp;
if (fork_list == NULL)
fork_list = fp;
else
{
struct fork_info *last = find_last_fork ();
last->next = fp;
}
return fp;
}
@ -353,12 +376,13 @@ linux_fork_killall (void)
void
linux_fork_mourn_inferior (void)
{
struct fork_info *last;
int status;
/* Wait just one more time to collect the inferior's exit status.
Do not check whether this succeeds though, since we may be
dealing with a process that we attached to. Such a process will
only report its exit status to its original parent. */
int status;
waitpid (ptid_get_pid (inferior_ptid), &status, 0);
/* OK, presumably inferior_ptid is the one who has exited.
@ -371,7 +395,8 @@ linux_fork_mourn_inferior (void)
inferior_ptid yet. */
gdb_assert (fork_list);
fork_load_infrun_state (fork_list);
last = find_last_fork ();
fork_load_infrun_state (last);
printf_filtered (_("[Switching to %s]\n"),
target_pid_to_str (inferior_ptid));