mirror of
https://github.com/espressif/binutils-gdb.git
synced 2025-10-19 13:53:29 +08:00
Add cpu information to the info os command on linux.
This patch adds cpu information on linux based on /proc/cpuinfo as : cpus Listing of all cpus/cores on the system This patch also reorders the info os commands so that they are listed in alphabetical order. gdb/ChangeLog: * NEWS: Mention info os cpus support. * gdb/nat/linux-osdata.c (linux_xfer_osdata_cpus): New function. (struct osdata_type): Add cpus entry, reorder the entries in alphabetical order. gdb/doc/ChangeLog: * gdb.texinfo (Operating System Auxiliary Information): Add info os cpus documentation, reorder the info os entries in alphabetical order.
This commit is contained in:
@ -1,3 +1,10 @@
|
|||||||
|
2015-03-31 Antoine Tremblay <antoine.tremblay@ericsson.com>
|
||||||
|
|
||||||
|
* NEWS: Mention info os cpus support.
|
||||||
|
* gdb/nat/linux-osdata.c (linux_xfer_osdata_cpus): New function.
|
||||||
|
(struct osdata_type): Add cpus entry, reorder the entries in
|
||||||
|
alphabetical order.
|
||||||
|
|
||||||
2015-03-31 Matthias Klose <doko@ubuntu.com>
|
2015-03-31 Matthias Klose <doko@ubuntu.com>
|
||||||
|
|
||||||
* compile/compile.c (compile_to_object): Allow triplets with or
|
* compile/compile.c (compile_to_object): Allow triplets with or
|
||||||
|
4
gdb/NEWS
4
gdb/NEWS
@ -3,6 +3,10 @@
|
|||||||
|
|
||||||
*** Changes since GDB 7.9
|
*** Changes since GDB 7.9
|
||||||
|
|
||||||
|
* The "info os" command on GNU/Linux can now display information on
|
||||||
|
cpu information :
|
||||||
|
"info os cpus" Listing of all cpus/cores on the system
|
||||||
|
|
||||||
* GDB has two new commands: "set serial parity odd|even|none" and
|
* GDB has two new commands: "set serial parity odd|even|none" and
|
||||||
"show serial parity". These allows to set or show parity for the
|
"show serial parity". These allows to set or show parity for the
|
||||||
remote serial I/O.
|
remote serial I/O.
|
||||||
|
@ -1,3 +1,8 @@
|
|||||||
|
2015-03-31 Antoine Tremblay <antoine.tremblay@ericsson.com>
|
||||||
|
|
||||||
|
* gdb.texinfo (Operating System Auxiliary Information): Add info os cpus
|
||||||
|
documentation, reorder the info os entries in alphabetical order.
|
||||||
|
|
||||||
2015-03-26 Simon Marchi <simon.marchi@ericsson.com>
|
2015-03-26 Simon Marchi <simon.marchi@ericsson.com>
|
||||||
|
|
||||||
* gdb.texinfo (GDB/MI Data Manipulation): Fix copy-paste typo in
|
* gdb.texinfo (GDB/MI Data Manipulation): Fix copy-paste typo in
|
||||||
|
@ -10606,6 +10606,40 @@ On @sc{gnu}/Linux, the following values of @var{infotype} are valid:
|
|||||||
|
|
||||||
@anchor{linux info os infotypes}
|
@anchor{linux info os infotypes}
|
||||||
@table @code
|
@table @code
|
||||||
|
@kindex info os cpus
|
||||||
|
@item cpus
|
||||||
|
Display the list of all CPUs/cores. For each CPU/core, @value{GDBN} prints
|
||||||
|
the available fields from /proc/cpuinfo. For each supported architecture
|
||||||
|
different fields are available. Two common entries are processor which gives
|
||||||
|
CPU number and bogomips; a system constant that is calculated during
|
||||||
|
kernel initialization.
|
||||||
|
|
||||||
|
@kindex info os files
|
||||||
|
@item files
|
||||||
|
Display the list of open file descriptors on the target. For each
|
||||||
|
file descriptor, @value{GDBN} prints the identifier of the process
|
||||||
|
owning the descriptor, the command of the owning process, the value
|
||||||
|
of the descriptor, and the target of the descriptor.
|
||||||
|
|
||||||
|
@kindex info os modules
|
||||||
|
@item modules
|
||||||
|
Display the list of all loaded kernel modules on the target. For each
|
||||||
|
module, @value{GDBN} prints the module name, the size of the module in
|
||||||
|
bytes, the number of times the module is used, the dependencies of the
|
||||||
|
module, the status of the module, and the address of the loaded module
|
||||||
|
in memory.
|
||||||
|
|
||||||
|
@kindex info os msg
|
||||||
|
@item msg
|
||||||
|
Display the list of all System V message queues on the target. For each
|
||||||
|
message queue, @value{GDBN} prints the message queue key, the message
|
||||||
|
queue identifier, the access permissions, the current number of bytes
|
||||||
|
on the queue, the current number of messages on the queue, the processes
|
||||||
|
that last sent and received a message on the queue, the user and group
|
||||||
|
of the owner and creator of the message queue, the times at which a
|
||||||
|
message was last sent and received on the queue, and the time at which
|
||||||
|
the message queue was last changed.
|
||||||
|
|
||||||
@kindex info os processes
|
@kindex info os processes
|
||||||
@item processes
|
@item processes
|
||||||
Display the list of processes on the target. For each process,
|
Display the list of processes on the target. For each process,
|
||||||
@ -10625,28 +10659,13 @@ first by the process group identifier, then by the process identifier,
|
|||||||
so that processes belonging to the same process group are grouped together
|
so that processes belonging to the same process group are grouped together
|
||||||
and the process group leader is listed first.
|
and the process group leader is listed first.
|
||||||
|
|
||||||
@kindex info os threads
|
@kindex info os semaphores
|
||||||
@item threads
|
@item semaphores
|
||||||
Display the list of threads running on the target. For each thread,
|
Display the list of all System V semaphore sets on the target. For each
|
||||||
@value{GDBN} prints the identifier of the process that the thread
|
semaphore set, @value{GDBN} prints the semaphore set key, the semaphore
|
||||||
belongs to, the command of the process, the thread identifier, and the
|
set identifier, the access permissions, the number of semaphores in the
|
||||||
processor core that it is currently running on. The main thread of a
|
set, the user and group of the owner and creator of the semaphore set,
|
||||||
process is not listed.
|
and the times at which the semaphore set was operated upon and changed.
|
||||||
|
|
||||||
@kindex info os files
|
|
||||||
@item files
|
|
||||||
Display the list of open file descriptors on the target. For each
|
|
||||||
file descriptor, @value{GDBN} prints the identifier of the process
|
|
||||||
owning the descriptor, the command of the owning process, the value
|
|
||||||
of the descriptor, and the target of the descriptor.
|
|
||||||
|
|
||||||
@kindex info os sockets
|
|
||||||
@item sockets
|
|
||||||
Display the list of Internet-domain sockets on the target. For each
|
|
||||||
socket, @value{GDBN} prints the address and port of the local and
|
|
||||||
remote endpoints, the current state of the connection, the creator of
|
|
||||||
the socket, the IP address family of the socket, and the type of the
|
|
||||||
connection.
|
|
||||||
|
|
||||||
@kindex info os shm
|
@kindex info os shm
|
||||||
@item shm
|
@item shm
|
||||||
@ -10658,32 +10677,21 @@ attached to or detached from the region, the current number of live
|
|||||||
attaches to the region, and the times at which the region was last
|
attaches to the region, and the times at which the region was last
|
||||||
attached to, detach from, and changed.
|
attached to, detach from, and changed.
|
||||||
|
|
||||||
@kindex info os semaphores
|
@kindex info os sockets
|
||||||
@item semaphores
|
@item sockets
|
||||||
Display the list of all System V semaphore sets on the target. For each
|
Display the list of Internet-domain sockets on the target. For each
|
||||||
semaphore set, @value{GDBN} prints the semaphore set key, the semaphore
|
socket, @value{GDBN} prints the address and port of the local and
|
||||||
set identifier, the access permissions, the number of semaphores in the
|
remote endpoints, the current state of the connection, the creator of
|
||||||
set, the user and group of the owner and creator of the semaphore set,
|
the socket, the IP address family of the socket, and the type of the
|
||||||
and the times at which the semaphore set was operated upon and changed.
|
connection.
|
||||||
|
|
||||||
@kindex info os msg
|
@kindex info os threads
|
||||||
@item msg
|
@item threads
|
||||||
Display the list of all System V message queues on the target. For each
|
Display the list of threads running on the target. For each thread,
|
||||||
message queue, @value{GDBN} prints the message queue key, the message
|
@value{GDBN} prints the identifier of the process that the thread
|
||||||
queue identifier, the access permissions, the current number of bytes
|
belongs to, the command of the process, the thread identifier, and the
|
||||||
on the queue, the current number of messages on the queue, the processes
|
processor core that it is currently running on. The main thread of a
|
||||||
that last sent and received a message on the queue, the user and group
|
process is not listed.
|
||||||
of the owner and creator of the message queue, the times at which a
|
|
||||||
message was last sent and received on the queue, and the time at which
|
|
||||||
the message queue was last changed.
|
|
||||||
|
|
||||||
@kindex info os modules
|
|
||||||
@item modules
|
|
||||||
Display the list of all loaded kernel modules on the target. For each
|
|
||||||
module, @value{GDBN} prints the module name, the size of the module in
|
|
||||||
bytes, the number of times the module is used, the dependencies of the
|
|
||||||
module, the status of the module, and the address of the loaded module
|
|
||||||
in memory.
|
|
||||||
@end table
|
@end table
|
||||||
|
|
||||||
@item info os
|
@item info os
|
||||||
@ -31785,28 +31793,30 @@ like this:
|
|||||||
@smallexample
|
@smallexample
|
||||||
@value{GDBP}
|
@value{GDBP}
|
||||||
-info-os
|
-info-os
|
||||||
^done,OSDataTable=@{nr_rows="9",nr_cols="3",
|
^done,OSDataTable=@{nr_rows="10",nr_cols="3",
|
||||||
hdr=[@{width="10",alignment="-1",col_name="col0",colhdr="Type"@},
|
hdr=[@{width="10",alignment="-1",col_name="col0",colhdr="Type"@},
|
||||||
@{width="10",alignment="-1",col_name="col1",colhdr="Description"@},
|
@{width="10",alignment="-1",col_name="col1",colhdr="Description"@},
|
||||||
@{width="10",alignment="-1",col_name="col2",colhdr="Title"@}],
|
@{width="10",alignment="-1",col_name="col2",colhdr="Title"@}],
|
||||||
body=[item=@{col0="processes",col1="Listing of all processes",
|
body=[item=@{col0="cpus",col1="Listing of all cpus/cores on the system",
|
||||||
|
col2="CPUs"@},
|
||||||
|
item=@{col0="files",col1="Listing of all file descriptors",
|
||||||
|
col2="File descriptors"@},
|
||||||
|
item=@{col0="modules",col1="Listing of all loaded kernel modules",
|
||||||
|
col2="Kernel modules"@},
|
||||||
|
item=@{col0="msg",col1="Listing of all message queues",
|
||||||
|
col2="Message queues"@},
|
||||||
|
item=@{col0="processes",col1="Listing of all processes",
|
||||||
col2="Processes"@},
|
col2="Processes"@},
|
||||||
item=@{col0="procgroups",col1="Listing of all process groups",
|
item=@{col0="procgroups",col1="Listing of all process groups",
|
||||||
col2="Process groups"@},
|
col2="Process groups"@},
|
||||||
item=@{col0="threads",col1="Listing of all threads",
|
|
||||||
col2="Threads"@},
|
|
||||||
item=@{col0="files",col1="Listing of all file descriptors",
|
|
||||||
col2="File descriptors"@},
|
|
||||||
item=@{col0="sockets",col1="Listing of all internet-domain sockets",
|
|
||||||
col2="Sockets"@},
|
|
||||||
item=@{col0="shm",col1="Listing of all shared-memory regions",
|
|
||||||
col2="Shared-memory regions"@},
|
|
||||||
item=@{col0="semaphores",col1="Listing of all semaphores",
|
item=@{col0="semaphores",col1="Listing of all semaphores",
|
||||||
col2="Semaphores"@},
|
col2="Semaphores"@},
|
||||||
item=@{col0="msg",col1="Listing of all message queues",
|
item=@{col0="shm",col1="Listing of all shared-memory regions",
|
||||||
col2="Message queues"@},
|
col2="Shared-memory regions"@},
|
||||||
item=@{col0="modules",col1="Listing of all loaded kernel modules",
|
item=@{col0="sockets",col1="Listing of all internet-domain sockets",
|
||||||
col2="Kernel modules"@}]@}
|
col2="Sockets"@},
|
||||||
|
item=@{col0="threads",col1="Listing of all threads",
|
||||||
|
col2="Threads"@}]
|
||||||
@value{GDBP}
|
@value{GDBP}
|
||||||
-info-os processes
|
-info-os processes
|
||||||
^done,OSDataTable=@{nr_rows="190",nr_cols="4",
|
^done,OSDataTable=@{nr_rows="190",nr_cols="4",
|
||||||
|
@ -662,6 +662,104 @@ linux_xfer_osdata_threads (gdb_byte *readbuf,
|
|||||||
return len;
|
return len;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Collect data about the cpus/cores on the system */
|
||||||
|
|
||||||
|
static LONGEST
|
||||||
|
linux_xfer_osdata_cpus (gdb_byte *readbuf,
|
||||||
|
ULONGEST offset, ULONGEST len)
|
||||||
|
{
|
||||||
|
static const char *buf;
|
||||||
|
static LONGEST len_avail = -1;
|
||||||
|
static struct buffer buffer;
|
||||||
|
|
||||||
|
if (offset == 0)
|
||||||
|
{
|
||||||
|
FILE *fp;
|
||||||
|
int first_item = 1;
|
||||||
|
|
||||||
|
if (len_avail != -1 && len_avail != 0)
|
||||||
|
buffer_free (&buffer);
|
||||||
|
len_avail = 0;
|
||||||
|
buf = NULL;
|
||||||
|
buffer_init (&buffer);
|
||||||
|
buffer_grow_str (&buffer, "<osdata type=\"cpus\">\n");
|
||||||
|
|
||||||
|
fp = gdb_fopen_cloexec ("/proc/cpuinfo", "r");
|
||||||
|
if (fp != NULL)
|
||||||
|
{
|
||||||
|
char buf[8192];
|
||||||
|
|
||||||
|
do
|
||||||
|
{
|
||||||
|
if (fgets (buf, sizeof (buf), fp))
|
||||||
|
{
|
||||||
|
char *key, *value;
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
key = strtok (buf, ":");
|
||||||
|
if (key == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
value = strtok (NULL, ":");
|
||||||
|
if (value == NULL)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
while (key[i] != '\t' && key[i] != '\0')
|
||||||
|
i++;
|
||||||
|
|
||||||
|
key[i] = '\0';
|
||||||
|
|
||||||
|
i = 0;
|
||||||
|
while (value[i] != '\t' && value[i] != '\0')
|
||||||
|
i++;
|
||||||
|
|
||||||
|
value[i] = '\0';
|
||||||
|
|
||||||
|
if (strcmp (key, "processor") == 0)
|
||||||
|
{
|
||||||
|
if (first_item)
|
||||||
|
buffer_grow_str (&buffer, "<item>");
|
||||||
|
else
|
||||||
|
buffer_grow_str (&buffer, "</item><item>");
|
||||||
|
|
||||||
|
first_item = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer_xml_printf (&buffer,
|
||||||
|
"<column name=\"%s\">%s</column>",
|
||||||
|
key,
|
||||||
|
value);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
while (!feof (fp));
|
||||||
|
|
||||||
|
if (first_item == 0)
|
||||||
|
buffer_grow_str (&buffer, "</item>");
|
||||||
|
|
||||||
|
fclose (fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer_grow_str0 (&buffer, "</osdata>\n");
|
||||||
|
buf = buffer_finish (&buffer);
|
||||||
|
len_avail = strlen (buf);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (offset >= len_avail)
|
||||||
|
{
|
||||||
|
/* Done. Get rid of the buffer. */
|
||||||
|
buffer_free (&buffer);
|
||||||
|
buf = NULL;
|
||||||
|
len_avail = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (len > len_avail - offset)
|
||||||
|
len = len_avail - offset;
|
||||||
|
memcpy (readbuf, buf + offset, len);
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
/* Collect all the open file descriptors found in /proc and put the details
|
/* Collect all the open file descriptors found in /proc and put the details
|
||||||
found about them into READBUF. */
|
found about them into READBUF. */
|
||||||
|
|
||||||
@ -1532,24 +1630,26 @@ struct osdata_type {
|
|||||||
char *description;
|
char *description;
|
||||||
LONGEST (*getter) (gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
|
LONGEST (*getter) (gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
|
||||||
} osdata_table[] = {
|
} osdata_table[] = {
|
||||||
|
{ "cpus", "CPUs", "Listing of all cpus/cores on the system",
|
||||||
|
linux_xfer_osdata_cpus },
|
||||||
|
{ "files", "File descriptors", "Listing of all file descriptors",
|
||||||
|
linux_xfer_osdata_fds },
|
||||||
|
{ "modules", "Kernel modules", "Listing of all loaded kernel modules",
|
||||||
|
linux_xfer_osdata_modules },
|
||||||
|
{ "msg", "Message queues", "Listing of all message queues",
|
||||||
|
linux_xfer_osdata_msg },
|
||||||
{ "processes", "Processes", "Listing of all processes",
|
{ "processes", "Processes", "Listing of all processes",
|
||||||
linux_xfer_osdata_processes },
|
linux_xfer_osdata_processes },
|
||||||
{ "procgroups", "Process groups", "Listing of all process groups",
|
{ "procgroups", "Process groups", "Listing of all process groups",
|
||||||
linux_xfer_osdata_processgroups },
|
linux_xfer_osdata_processgroups },
|
||||||
{ "threads", "Threads", "Listing of all threads",
|
|
||||||
linux_xfer_osdata_threads },
|
|
||||||
{ "files", "File descriptors", "Listing of all file descriptors",
|
|
||||||
linux_xfer_osdata_fds },
|
|
||||||
{ "sockets", "Sockets", "Listing of all internet-domain sockets",
|
|
||||||
linux_xfer_osdata_isockets },
|
|
||||||
{ "shm", "Shared-memory regions", "Listing of all shared-memory regions",
|
|
||||||
linux_xfer_osdata_shm },
|
|
||||||
{ "semaphores", "Semaphores", "Listing of all semaphores",
|
{ "semaphores", "Semaphores", "Listing of all semaphores",
|
||||||
linux_xfer_osdata_sem },
|
linux_xfer_osdata_sem },
|
||||||
{ "msg", "Message queues", "Listing of all message queues",
|
{ "shm", "Shared-memory regions", "Listing of all shared-memory regions",
|
||||||
linux_xfer_osdata_msg },
|
linux_xfer_osdata_shm },
|
||||||
{ "modules", "Kernel modules", "Listing of all loaded kernel modules",
|
{ "sockets", "Sockets", "Listing of all internet-domain sockets",
|
||||||
linux_xfer_osdata_modules },
|
linux_xfer_osdata_isockets },
|
||||||
|
{ "threads", "Threads", "Listing of all threads",
|
||||||
|
linux_xfer_osdata_threads },
|
||||||
{ NULL, NULL, NULL }
|
{ NULL, NULL, NULL }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user