----- Original Message -----
I need a help in using crash utility.
I have a structure like this
struct a {
...
struct task_struct task;
...
struct list_head list;
...
}
It is possible to get the address of the task structure using *-s a.task*
option in the *list *command. But what if i want to get the value of a member
inside task, say *task.comm*? Is it possible to make the list command to print
to it directly?
No, not from a single "list" command.
What you could do is redirect the output to a file, either parsing/modifying the command
output on the command line itself, or by modifying the output file, such that the end
result is a list of task_struct addresses.
Presuming your list has an external list_head structure named
"starting_list_head",
and that the a.task member is a task_struct pointer (i.e., not embedded like your
example above), you could create a list of task_struct pointers like this:
$ list -o a.list -H starting_list_head -s a.task | grep task | awk '{print $3}'
> input
Or just redirect the list command output and modify the input file by hand.
And then, for a simple example, if the input file looked like this:
crash> cat input
ffffffff81c13440
ffff88021282d330
ffff88021282dac0
crash>
You could either to this:
crash> task -R comm <input
PID: 0 TASK: ffffffff81c13440 CPU: 0 COMMAND: "swapper/0"
comm = "swapper/0\000\000\000\000\000\000",
PID: 0 TASK: ffff88021282d330 CPU: 1 COMMAND: "swapper/1"
comm = "swapper/1\000\000\000\000\000\000",
PID: 0 TASK: ffff88021282dac0 CPU: 2 COMMAND: "swapper/2"
comm = "swapper/2\000\000\000\000\000\000",
crash>
or this:
crash> struct task_struct.comm <junk
comm = "swapper/0\000\000\000\000\000\000"
comm = "swapper/1\000\000\000\000\000\000"
comm = "swapper/2\000\000\000\000\000\000"
crash>
Or you could put the crash command in the input file itself:
crash> cat input
task_struct.comm ffffffff81c13440
task_struct.comm ffff88021282d330
task_struct.comm ffff88021282dac0
crash>
and then do this:
crash> < input
crash> task_struct.comm ffffffff81c13440
comm = "swapper/0\000\000\000\000\000\000"
crash> task_struct.comm ffff88021282d330
comm = "swapper/1\000\000\000\000\000\000"
crash> task_struct.comm ffff88021282dac0
comm = "swapper/2\000\000\000\000\000\000"
crash>
That's about as automated as it can be.
Dave