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

@ -1,3 +1,9 @@
2015-11-24 Pedro Alves <palves@redhat.com>
PR 17539
* printcmd.c (display_command): Append new display at the end of
the list.
2015-11-24 Pedro Alves <palves@redhat.com> 2015-11-24 Pedro Alves <palves@redhat.com>
PR 17539 PR 17539

View file

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

View file

@ -1,3 +1,10 @@
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.
2015-11-24 Pedro Alves <palves@redhat.com> 2015-11-24 Pedro Alves <palves@redhat.com>
PR 17539 PR 17539

View file

@ -87,7 +87,7 @@ gdb_test "continue 10" "breakpoint 1.*" "break1 ten"
gdb_test "checkpoint" ".*" "" gdb_test "checkpoint" ".*" ""
gdb_test "info checkpoints" \ gdb_test "info checkpoints" \
" 10 .* 9 .* 8 .* 7 .* 6 .* 5 .* 4 .* 3 .* 2 .* 1 .*" \ " 1 .* 2 .* 3 .* 4 .* 5 .* 6 .* 7 .* 8 .* 9 .* 10 .*" \
"info checkpoints one" "info checkpoints one"
delete_breakpoints delete_breakpoints
@ -294,7 +294,7 @@ gdb_test "continue" \
# There should be still at least five forks left # There should be still at least five forks left
# #
gdb_test "info checkpoints" " 5 .* 4 .* 3 .* 2 .* 1 .*" \ gdb_test "info checkpoints" " 1 .* 2 .* 3 .* 4 .* 5 .*" \
"info checkpoints two" "info checkpoints two"
# #