On 3/3/16 6:40 AM, Kieran Bingham wrote: > Facilitate linked-list items by providing a generator to return > the dereferenced, and type-cast objects from a kernel linked list > > CC: Jeff Mahoney <[email protected]> > > Signed-off-by: Kieran Bingham <[email protected]> > --- > Changes since v1: > * items function removed, and replaced with Jeff Mahoney's cleaner > implementations of list_for_each, and list_for_each_entry > --- > scripts/gdb/linux/lists.py | 20 ++++++++++++++++++++ > 1 file changed, 20 insertions(+) > > diff --git a/scripts/gdb/linux/lists.py b/scripts/gdb/linux/lists.py > index 3a3775bc162b..9f4503738e26 100644 > --- a/scripts/gdb/linux/lists.py > +++ b/scripts/gdb/linux/lists.py > @@ -18,6 +18,26 @@ from linux import utils > list_head = utils.CachedType("struct list_head") > > > +def list_for_each(head): > + if head.type == list_head.get_type().pointer(): > + head = head.dereference() > + elif head.type != list_head.get_type(): > + raise gdb.GdbError("Must be struct list_head not %s" % > list_head.type)
Shouldn't this be % head.type?
> +
> + node = head['next'].dereference()
> + while node.address != head.address:
> + yield node.address
> + node = node['next'].dereference()
> +
> +
> +def list_for_each_entry(head, gdbtype, member):
> + for node in list_for_each(head):
> + if node.type != list_head.get_type().pointer():
> + raise TypeError("Type %s found. "
> + "Expected struct list_head *." % node.type)
Nit, but FWIW, I've adopted the kernel style of always keeping strings
on one line so they're easily greppable.
-Jeff
--
Jeff Mahoney
SUSE Labs
signature.asc
Description: OpenPGP digital signature

