diff --git a/gdb/ChangeLog b/gdb/ChangeLog index d2538084f83..603af22cd39 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,12 @@ +2016-01-13 Pedro Alves + + * NEWS: Mention "info threads -gid". + * gdbthread.h (struct thread_info) : Mention "info + threads -gid". + * thread.c (info_threads_command): Handle "-gid". + (_initialize_thread): Adjust "info threads" help string to mention + -gid. + 2016-01-13 Pedro Alves * NEWS: Mention InferiorThread.global_num. diff --git a/gdb/NEWS b/gdb/NEWS index ff92079301e..024c184879e 100644 --- a/gdb/NEWS +++ b/gdb/NEWS @@ -34,6 +34,9 @@ [Switching to thread 2.1 (Thread 0x7ffff7fc2740 (LWP 8157))] (running) (gdb) +* You can use "info threads -gid" to display the global thread ID of + all threads. + * The new convenience variable $_inferior holds the number of the current inferior. diff --git a/gdb/doc/ChangeLog b/gdb/doc/ChangeLog index 65f8ed900a7..d723276a9af 100644 --- a/gdb/doc/ChangeLog +++ b/gdb/doc/ChangeLog @@ -1,3 +1,7 @@ +2016-01-13 Pedro Alves + + * gdb.texinfo (Threads): Document "info threads -gid". + 2016-01-13 Pedro Alves * python.texi (Breakpoints In Python) : Add diff --git a/gdb/doc/gdb.texinfo b/gdb/doc/gdb.texinfo index 786556e854b..654efa425fe 100644 --- a/gdb/doc/gdb.texinfo +++ b/gdb/doc/gdb.texinfo @@ -2958,6 +2958,10 @@ threads that you want to display using the thread ID list syntax @item the per-inferior thread number assigned by @value{GDBN} +@item +the global thread number assigned by @value{GDBN}, if the @samp{-gid} +option was specified + @item the target system's thread identifier (@var{systag}) @@ -2989,15 +2993,18 @@ For example, If you're debugging multiple inferiors, @value{GDBN} displays thread IDs using the qualified @var{inferior-num}.@var{thread-num} format. -Otherwise, only @var{thread-num} is shown: +Otherwise, only @var{thread-num} is shown. + +If you specify the @samp{-gid} option, @value{GDBN} displays a column +indicating each thread's global thread ID: @smallexample (@value{GDBP}) info threads - Id Target Id Frame - 1.1 process 35 thread 13 main (argc=1, argv=0x7ffffff8) - 1.2 process 35 thread 23 0x34e5 in sigpause () - 1.3 process 35 thread 27 0x34e5 in sigpause () -* 2.1 process 65 thread 1 main (argc=1, argv=0x7ffffff8) + Id GId Target Id Frame + 1.1 1 process 35 thread 13 main (argc=1, argv=0x7ffffff8) + 1.2 3 process 35 thread 23 0x34e5 in sigpause () + 1.3 4 process 35 thread 27 0x34e5 in sigpause () +* 2.1 2 process 65 thread 1 main (argc=1, argv=0x7ffffff8) @end smallexample On Solaris, you can display more information about user threads with a diff --git a/gdb/gdbthread.h b/gdb/gdbthread.h index 5ff38bf084e..bfc91245a43 100644 --- a/gdb/gdbthread.h +++ b/gdb/gdbthread.h @@ -216,8 +216,8 @@ struct thread_info Above, both inferiors 1 and 2 have threads numbered 1-3, but each thread has its own unique global ID. */ - /* The thread's global GDB thread number. This is exposed to MI and - Python/Scheme. */ + /* The thread's global GDB thread number. This is exposed to MI, + Python/Scheme and visible with "info threads -gid". */ int global_num; /* The per-inferior thread number. This is unique in the inferior diff --git a/gdb/testsuite/ChangeLog b/gdb/testsuite/ChangeLog index 92989a9a9ca..c86351863c6 100644 --- a/gdb/testsuite/ChangeLog +++ b/gdb/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2016-01-13 Pedro Alves + + * gdb.multi/tids.exp: Test "info threads -gid". + 2016-01-13 Pedro Alves * gdb.multi/tids.exp: Test InferiorThread.global_num and diff --git a/gdb/testsuite/gdb.multi/tids.exp b/gdb/testsuite/gdb.multi/tids.exp index 6895f3c9561..b0c768fbc39 100644 --- a/gdb/testsuite/gdb.multi/tids.exp +++ b/gdb/testsuite/gdb.multi/tids.exp @@ -150,6 +150,14 @@ with_test_prefix "two inferiors" { info_threads "" "1.1 1.2 2.1 2.2" \ "info threads again" + # Same, but show the global ID. + gdb_test "info threads -gid" \ + [multi_line \ + " 1\.1 +1 +.*" \ + "\\* 1\.2 +4 +.* thread_function1 .* at .*$srcfile:.*" \ + " 2\.1 +2 +.*" \ + " 2\.2 +3 +.* thread_function1 .* at .*$srcfile:.*"] + # Confirm the convenience variable show the expected number. gdb_test "p \$_thread == 2" " = 1" diff --git a/gdb/thread.c b/gdb/thread.c index dd8f7da0d64..8ec6a38e391 100644 --- a/gdb/thread.c +++ b/gdb/thread.c @@ -1403,7 +1403,16 @@ print_thread_info (struct ui_out *uiout, char *requested_threads, int pid) static void info_threads_command (char *arg, int from_tty) { - print_thread_info_1 (current_uiout, arg, 0, -1, 0); + int show_global_ids = 0; + + if (arg != NULL + && check_for_argument (&arg, "-gid", sizeof ("-gid") - 1)) + { + arg = skip_spaces (arg); + show_global_ids = 1; + } + + print_thread_info_1 (current_uiout, arg, 0, -1, show_global_ids); } /* See gdbthread.h. */ @@ -2107,7 +2116,8 @@ _initialize_thread (void) add_info ("threads", info_threads_command, _("Display currently known threads.\n\ -Usage: info threads [ID]...\n\ +Usage: info threads [-gid] [ID]...\n\ +-gid: Show global thread IDs.\n\ If ID is given, it is a space-separated list of IDs of threads to display.\n\ Otherwise, all threads are displayed."));