----- Original Message -----
Hi Dave,
... [ cut ] ...
Hi Alexandr,
A few more comments/questions regarding the -S output.
The help page descriptions of the list and tree -S options say that it does
"exactly the same thing as -s", but here are a few situations where it
doesn't.
With "list -s", the parsed gdb output shows symbolic names following
a member's value in the case of direct symbol-value matches:
crash> list file_system_type.next -s file_system_type.mount 0xffffffff819db4a0
ffffffff819db4a0
mount = 0xffffffff8125b7b0 <sysfs_mount>
ffffffff819dbee0
mount = 0xffffffff81261720 <rootfs_mount>
ffffffff819d61a0
mount = 0xffffffff81218f40 <bd_mount>
ffffffff819daf40
mount = 0xffffffff81249c60 <proc_mount>
ffffffff8198f1c0
mount = 0xffffffff810fb590 <cgroup_mount>
ffffffff819904a0
mount = 0xffffffff810fd610 <cpuset_mount>
ffffffff819c09c0
mount = 0xffffffff81181e50 <shmem_mount>
ffffffff81a11860
mount = 0xffffffff813faf40 <dev_mount>
ffffffff819dc760
...
With "list -S", it shows this:
crash> list file_system_type.next -S file_system_type.mount 0xffffffff819db4a0
ffffffff819db4a0
mount = 0xffffffff8125b7b0
ffffffff819dbee0
mount = 0xffffffff81261720
ffffffff819d61a0
mount = 0xffffffff81218f40
ffffffff819daf40
mount = 0xffffffff81249c60
ffffffff8198f1c0
mount = 0xffffffff810fb590
ffffffff819904a0
mount = 0xffffffff810fd610
ffffffff819c09c0
...
Somewhat related, "list -s" will also dump ASCII strings like this:
crash> list file_system_type.next -s file_system_type.name 0xffffffff819db4a0
ffffffff819db4a0
name = 0xffffffff8189a0f2 "sysfs"
ffffffff819dbee0
name = 0xffffffff8187e7cd "rootfs"
ffffffff819d61a0
name = 0xffffffff8187ec39 "bdev"
ffffffff819daf40
name = 0xffffffff8187279e "proc"
ffffffff8198f1c0
name = 0xffffffff81894243 "cgroup"
ffffffff819904a0
name = 0xffffffff81879c32 "cpuset"
ffffffff819c09c0
name = 0xffffffff818a63f3 "tmpfs"
ffffffff81a11860
...
Whereas "list -S", it just shows the address:
crash> list file_system_type.next -S file_system_type.name 0xffffffff819db4a0
ffffffff819db4a0
name = 0xffffffff8189a0f2
ffffffff819dbee0
name = 0xffffffff8187e7cd
ffffffff819d61a0
name = 0xffffffff8187ec39
ffffffff819daf40
name = 0xffffffff8187279e
ffffffff8198f1c0
name = 0xffffffff81894243
ffffffff819904a0
name = 0xffffffff81879c32
ffffffff819c09c0
name = 0xffffffff818a63f3
ffffffff81a11860
...
Do you think it would be more useful to do either of the above, or would the
direct symbol-matching and/or ASCII string recognition defeat the purpose
of the -S speed-up?
And also, if no members are appended to the struct name, it doesn't show anything.
For example, with "list -s", the whole structure gets dumped when requested:
crash> list file_system_type.next -s file_system_type 0xffffffff819db4a0
ffffffff819db4a0
struct file_system_type {
name = 0xffffffff8189a0f2 "sysfs",
fs_flags = 8,
mount = 0xffffffff8125b7b0 <sysfs_mount>,
kill_sb = 0xffffffff8125b6e0 <sysfs_kill_sb>,
owner = 0x0,
next = 0xffffffff819dbee0 <rootfs_fs_type>,
fs_supers = {
first = 0xffff880462a80138
},
s_lock_key = {<No data fields>},
s_umount_key = {<No data fields>},
s_vfs_rename_key = {<No data fields>},
s_writers_key = 0xffffffff819db4d8,
i_lock_key = {<No data fields>},
i_mutex_key = {<No data fields>},
i_mutex_dir_key = {<No data fields>}
}
ffffffff819dbee0
struct file_system_type {
name = 0xffffffff8187e7cd "rootfs",
fs_flags = 0,
mount = 0xffffffff81261720 <rootfs_mount>,
kill_sb = 0xffffffff811e0ea0 <kill_litter_super>,
owner = 0x0,
next = 0xffffffff819d61a0 <bd_type>,
fs_supers = {
first = 0xffff8804687a0938
},
s_lock_key = {<No data fields>},
s_umount_key = {<No data fields>},
s_vfs_rename_key = {<No data fields>},
s_writers_key = 0xffffffff819dbf18,
i_lock_key = {<No data fields>},
i_mutex_key = {<No data fields>},
i_mutex_dir_key = {<No data fields>}
}
ffffffff819d61a0
...
But with -S, you just get the addresses:
crash> list file_system_type.next -S file_system_type 0xffffffff819db4a0
ffffffff819db4a0
ffffffff819dbee0
ffffffff819d61a0
ffffffff819daf40
ffffffff8198f1c0
ffffffff819904a0
ffffffff819c09c0
ffffffff81a11860
ffffffff819dc760
...
Should -S dump the whole structure, or should -S be specified as only
being applicable with the "struct.member[,member]" argument format?
Dave