mirror of
https://github.com/darlinghq/darling-gdb.git
synced 2025-02-14 06:09:10 +00: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:
parent
71b30f27af
commit
d33279b3bb
@ -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>
|
||||
|
||||
* 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
|
||||
|
||||
* 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
|
||||
"show serial parity". These allows to set or show parity for the
|
||||
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>
|
||||
|
||||
* 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}
|
||||
@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
|
||||
@item processes
|
||||
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
|
||||
and the process group leader is listed first.
|
||||
|
||||
@kindex info os threads
|
||||
@item threads
|
||||
Display the list of threads running on the target. For each thread,
|
||||
@value{GDBN} prints the identifier of the process that the thread
|
||||
belongs to, the command of the process, the thread identifier, and the
|
||||
processor core that it is currently running on. The main thread of a
|
||||
process is not listed.
|
||||
|
||||
@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 semaphores
|
||||
@item semaphores
|
||||
Display the list of all System V semaphore sets on the target. For each
|
||||
semaphore set, @value{GDBN} prints the semaphore set key, the semaphore
|
||||
set identifier, the access permissions, the number of semaphores in the
|
||||
set, the user and group of the owner and creator of the semaphore set,
|
||||
and the times at which the semaphore set was operated upon and changed.
|
||||
|
||||
@kindex info os 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
|
||||
attached to, detach from, and changed.
|
||||
|
||||
@kindex info os semaphores
|
||||
@item semaphores
|
||||
Display the list of all System V semaphore sets on the target. For each
|
||||
semaphore set, @value{GDBN} prints the semaphore set key, the semaphore
|
||||
set identifier, the access permissions, the number of semaphores in the
|
||||
set, the user and group of the owner and creator of the semaphore set,
|
||||
and the times at which the semaphore set was operated upon and changed.
|
||||
@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 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 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 threads
|
||||
@item threads
|
||||
Display the list of threads running on the target. For each thread,
|
||||
@value{GDBN} prints the identifier of the process that the thread
|
||||
belongs to, the command of the process, the thread identifier, and the
|
||||
processor core that it is currently running on. The main thread of a
|
||||
process is not listed.
|
||||
@end table
|
||||
|
||||
@item info os
|
||||
@ -31785,28 +31793,30 @@ like this:
|
||||
@smallexample
|
||||
@value{GDBP}
|
||||
-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"@},
|
||||
@{width="10",alignment="-1",col_name="col1",colhdr="Description"@},
|
||||
@{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"@},
|
||||
item=@{col0="procgroups",col1="Listing of all 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",
|
||||
col2="Semaphores"@},
|
||||
item=@{col0="msg",col1="Listing of all message queues",
|
||||
col2="Message queues"@},
|
||||
item=@{col0="modules",col1="Listing of all loaded kernel modules",
|
||||
col2="Kernel modules"@}]@}
|
||||
item=@{col0="shm",col1="Listing of all shared-memory regions",
|
||||
col2="Shared-memory regions"@},
|
||||
item=@{col0="sockets",col1="Listing of all internet-domain sockets",
|
||||
col2="Sockets"@},
|
||||
item=@{col0="threads",col1="Listing of all threads",
|
||||
col2="Threads"@}]
|
||||
@value{GDBP}
|
||||
-info-os processes
|
||||
^done,OSDataTable=@{nr_rows="190",nr_cols="4",
|
||||
|
@ -662,6 +662,104 @@ linux_xfer_osdata_threads (gdb_byte *readbuf,
|
||||
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
|
||||
found about them into READBUF. */
|
||||
|
||||
@ -1532,24 +1630,26 @@ struct osdata_type {
|
||||
char *description;
|
||||
LONGEST (*getter) (gdb_byte *readbuf, ULONGEST offset, ULONGEST len);
|
||||
} 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",
|
||||
linux_xfer_osdata_processes },
|
||||
{ "procgroups", "Process groups", "Listing of all process groups",
|
||||
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",
|
||||
linux_xfer_osdata_sem },
|
||||
{ "msg", "Message queues", "Listing of all message queues",
|
||||
linux_xfer_osdata_msg },
|
||||
{ "modules", "Kernel modules", "Listing of all loaded kernel modules",
|
||||
linux_xfer_osdata_modules },
|
||||
{ "shm", "Shared-memory regions", "Listing of all shared-memory regions",
|
||||
linux_xfer_osdata_shm },
|
||||
{ "sockets", "Sockets", "Listing of all internet-domain sockets",
|
||||
linux_xfer_osdata_isockets },
|
||||
{ "threads", "Threads", "Listing of all threads",
|
||||
linux_xfer_osdata_threads },
|
||||
{ NULL, NULL, NULL }
|
||||
};
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user