Backport 'thread apply all' option '-ascending' for ABRT.
This commit is contained in:
parent
fc812bc536
commit
5979e98c06
@ -51,3 +51,191 @@ Date: Tue Jan 27 19:56:45 2015 +0200
|
||||
|
||||
if (!overlay_debugging)
|
||||
error (_("Overlay debugging not enabled. "
|
||||
|
||||
|
||||
|
||||
commit 253828f102691732d014e8f1d62f9b5dc779b39c
|
||||
Author: Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
Date: Thu Jan 22 21:04:53 2015 +0100
|
||||
|
||||
Sort threads for thread apply all
|
||||
|
||||
downstream Fedora request:
|
||||
Please make it easier to find the backtrace of the crashing thread
|
||||
https://bugzilla.redhat.com/show_bug.cgi?id=1024504
|
||||
|
||||
Currently after loading a core file GDB prints:
|
||||
|
||||
Core was generated by `./threadcrash1'.
|
||||
Program terminated with signal SIGSEGV, Segmentation fault.
|
||||
8 *(volatile int *)0=0;
|
||||
(gdb) _
|
||||
|
||||
there is nowhere seen which of the threads had crashed. In reality GDB always
|
||||
numbers that thread as #1 and it is the current thread that time. But after
|
||||
dumping all the info into a file for later analysis it is no longer obvious.
|
||||
'thread apply all bt' even puts the thread #1 to the _end_ of the output!!!
|
||||
|
||||
I find maybe as good enough and with no risk of UI change flamewar to just
|
||||
sort the threads by their number. Currently they are printed as they happen
|
||||
in the internal GDB list which has no advantage. Printing thread #1 as the
|
||||
first one with assumed 'thread apply all bt' (after the core file is loaded)
|
||||
should make the complaint resolved I guess.
|
||||
|
||||
On Thu, 15 Jan 2015 20:29:07 +0100, Doug Evans wrote:
|
||||
No objection to sorting the list, but if thread #1 is the important one,
|
||||
then a concern could be it'll have scrolled off the screen (such a
|
||||
concern has been voiced in another thread in another context),
|
||||
and if not lost (say it's in an emacs buffer) one would still have
|
||||
to scroll back to see it.
|
||||
So one *could* still want #1 to be last.
|
||||
Do we want an option to choose the sort direction?
|
||||
|
||||
gdb/ChangeLog
|
||||
2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* NEWS (Changes since GDB 7.9): Add 'thread apply all' option
|
||||
'-ascending'.
|
||||
* thread.c (tp_array_compar_ascending, tp_array_compar): New.
|
||||
(thread_apply_all_command): Parse CMD for tp_array_compar_ascending.
|
||||
Sort tp_array using tp_array_compar.
|
||||
(_initialize_thread): Extend thread_apply_all_command help.
|
||||
|
||||
gdb/doc/ChangeLog
|
||||
2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
* gdb.texinfo (Threads): Describe -ascending for thread apply all.
|
||||
|
||||
### a/gdb/ChangeLog
|
||||
### b/gdb/ChangeLog
|
||||
## -1,5 +1,14 @@
|
||||
2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
|
||||
+ * NEWS (Changes since GDB 7.9): Add 'thread apply all' option
|
||||
+ '-ascending'.
|
||||
+ * thread.c (tp_array_compar_ascending, tp_array_compar): New.
|
||||
+ (thread_apply_all_command): Parse CMD for tp_array_compar_ascending.
|
||||
+ Sort tp_array using tp_array_compar.
|
||||
+ (_initialize_thread): Extend thread_apply_all_command help.
|
||||
+
|
||||
+2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
+
|
||||
* corelow.c (core_open): Call also thread_command.
|
||||
* gdbthread.h (thread_command): New prototype moved from ...
|
||||
* thread.c (thread_command): ... here.
|
||||
--- gdb-7.9.1/gdb/NEWS.orig 2015-06-19 15:45:57.614937084 +0200
|
||||
+++ gdb-7.9.1/gdb/NEWS 2015-06-19 15:46:26.352104210 +0200
|
||||
@@ -1,6 +1,13 @@
|
||||
What has changed in GDB?
|
||||
(Organized release by release)
|
||||
|
||||
+*** Changes since GDB 7.9.1
|
||||
+
|
||||
+* New options
|
||||
+
|
||||
+* The command 'thread apply all' can now support new option '-ascending'
|
||||
+ to call its specified command for all threads in ascending order.
|
||||
+
|
||||
*** Changes in GDB 7.9.1
|
||||
|
||||
* Python Scripting
|
||||
### a/gdb/doc/ChangeLog
|
||||
### b/gdb/doc/ChangeLog
|
||||
## -1,3 +1,7 @@
|
||||
+2015-01-22 Jan Kratochvil <jan.kratochvil@redhat.com>
|
||||
+
|
||||
+ * gdb.texinfo (Threads): Describe -ascending for thread apply all.
|
||||
+
|
||||
2015-01-16 Eli Zaretskii <eliz@gnu.org>
|
||||
|
||||
* doc/gdb.texinfo (TUI Commands): Document the possible
|
||||
--- a/gdb/doc/gdb.texinfo
|
||||
+++ b/gdb/doc/gdb.texinfo
|
||||
@@ -2959,14 +2959,17 @@ information on convenience variables.
|
||||
|
||||
@kindex thread apply
|
||||
@cindex apply command to several threads
|
||||
-@item thread apply [@var{threadno} | all] @var{command}
|
||||
+@item thread apply [@var{threadno} | all [-ascending]] @var{command}
|
||||
The @code{thread apply} command allows you to apply the named
|
||||
@var{command} to one or more threads. Specify the numbers of the
|
||||
threads that you want affected with the command argument
|
||||
@var{threadno}. It can be a single thread number, one of the numbers
|
||||
shown in the first field of the @samp{info threads} display; or it
|
||||
-could be a range of thread numbers, as in @code{2-4}. To apply a
|
||||
-command to all threads, type @kbd{thread apply all @var{command}}.
|
||||
+could be a range of thread numbers, as in @code{2-4}. To apply
|
||||
+a command to all threads in descending order, type @kbd{thread apply all
|
||||
+@var{command}}. To apply a command to all threads in ascending order,
|
||||
+type @kbd{thread apply all -ascending @var{command}}.
|
||||
+
|
||||
|
||||
@kindex thread name
|
||||
@cindex name a thread
|
||||
--- a/gdb/thread.c
|
||||
+++ b/gdb/thread.c
|
||||
@@ -1381,6 +1381,24 @@ make_cleanup_restore_current_thread (void)
|
||||
restore_current_thread_cleanup_dtor);
|
||||
}
|
||||
|
||||
+/* If non-zero tp_array_compar should sort in ascending order, otherwise in
|
||||
+ descending order. */
|
||||
+
|
||||
+static int tp_array_compar_ascending;
|
||||
+
|
||||
+/* Sort an array for struct thread_info pointers by their NUM, order is
|
||||
+ determined by TP_ARRAY_COMPAR_ASCENDING. */
|
||||
+
|
||||
+static int
|
||||
+tp_array_compar (const void *ap_voidp, const void *bp_voidp)
|
||||
+{
|
||||
+ const struct thread_info *const *ap = ap_voidp;
|
||||
+ const struct thread_info *const *bp = bp_voidp;
|
||||
+
|
||||
+ return ((((*ap)->num > (*bp)->num) - ((*ap)->num < (*bp)->num))
|
||||
+ * (tp_array_compar_ascending ? +1 : -1));
|
||||
+}
|
||||
+
|
||||
/* Apply a GDB command to a list of threads. List syntax is a whitespace
|
||||
seperated list of numbers, or ranges, or the keyword `all'. Ranges consist
|
||||
of two numbers seperated by a hyphen. Examples:
|
||||
@@ -1397,6 +1415,14 @@ thread_apply_all_command (char *cmd, int from_tty)
|
||||
int tc;
|
||||
struct thread_array_cleanup ta_cleanup;
|
||||
|
||||
+ tp_array_compar_ascending = 0;
|
||||
+ if (cmd != NULL
|
||||
+ && check_for_argument (&cmd, "-ascending", strlen ("-ascending")))
|
||||
+ {
|
||||
+ cmd = skip_spaces (cmd);
|
||||
+ tp_array_compar_ascending = 1;
|
||||
+ }
|
||||
+
|
||||
if (cmd == NULL || *cmd == '\000')
|
||||
error (_("Please specify a command following the thread ID list"));
|
||||
|
||||
@@ -1430,6 +1456,8 @@ thread_apply_all_command (char *cmd, int from_tty)
|
||||
i++;
|
||||
}
|
||||
|
||||
+ qsort (tp_array, i, sizeof (*tp_array), tp_array_compar);
|
||||
+
|
||||
make_cleanup (set_thread_refcount, &ta_cleanup);
|
||||
|
||||
for (k = 0; k != i; k++)
|
||||
@@ -1738,7 +1766,14 @@ The new thread ID must be currently known."),
|
||||
&thread_apply_list, "thread apply ", 1, &thread_cmd_list);
|
||||
|
||||
add_cmd ("all", class_run, thread_apply_all_command,
|
||||
- _("Apply a command to all threads."), &thread_apply_list);
|
||||
+ _("\
|
||||
+Apply a command to all threads.\n\
|
||||
+\n\
|
||||
+Usage: thread apply all [-ascending] <command>\n\
|
||||
+-ascending: Call <command> for all threads in ascending order.\n\
|
||||
+ The default is descending order.\
|
||||
+"),
|
||||
+ &thread_apply_list);
|
||||
|
||||
add_cmd ("name", class_run, thread_name_command,
|
||||
_("Set the current thread's name.\n\
|
||||
|
5
gdb.spec
5
gdb.spec
@ -26,7 +26,7 @@ Version: 7.9.1
|
||||
|
||||
# The release always contains a leading reserved number, start it at 1.
|
||||
# `upstream' is not a part of `name' to stay fully rpm dependencies compatible for the testing.
|
||||
Release: 15%{?dist}
|
||||
Release: 16%{?dist}
|
||||
|
||||
License: GPLv3+ and GPLv3+ with exceptions and GPLv2+ and GPLv2+ with exceptions and GPL+ and LGPLv2+ and BSD and Public Domain and GFDL
|
||||
Group: Development/Debuggers
|
||||
@ -1330,6 +1330,9 @@ then
|
||||
fi
|
||||
|
||||
%changelog
|
||||
* Fri Jun 19 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.1-16.fc22
|
||||
- Backport 'thread apply all' option '-ascending' for ABRT.
|
||||
|
||||
* Tue Jun 16 2015 Jan Kratochvil <jan.kratochvil@redhat.com> - 7.9.1-15.fc22
|
||||
- Fix enum e e 'Attempt to use a type name as an expr.' (Keith Seitz, PR 16253).
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user