mirror of
https://github.com/littlefs-project/littlefs.git
synced 2025-12-09 17:12:40 +00:00
scripts: Added DwarfEntry.info to help find recursive tags
Long story short: DW_TAG_lexical_blocks are annoying. In order to search the full tree of children of a given dwarf entry, we need a recursive function somewhere. We might as well make this function a part of the DwarfEntry class so we can share it with other scripts. Note this is roughly the same as collect_dwarf_info, but limited to the children of a given dwarf entry. This is useful for ongoing stack.py rework.
This commit is contained in:
@@ -393,6 +393,19 @@ class DwarfEntry:
|
||||
else:
|
||||
return None
|
||||
|
||||
def info(self, tags=None):
|
||||
# recursively flatten children
|
||||
def flatten(entry):
|
||||
for child in entry.children:
|
||||
# filter if requested
|
||||
if tags is None or child.tag in tags:
|
||||
yield child
|
||||
|
||||
yield from flatten(child)
|
||||
|
||||
return DwarfInfo(co.OrderedDict(
|
||||
(child.off, child) for child in flatten(self)))
|
||||
|
||||
# a collection of dwarf entries
|
||||
class DwarfInfo:
|
||||
def __init__(self, entries):
|
||||
@@ -443,7 +456,7 @@ class DwarfInfo:
|
||||
return len(self.entries)
|
||||
|
||||
def __iter__(self):
|
||||
return (v for k, v in self.entries.items())
|
||||
return iter(self.entries.values())
|
||||
|
||||
def collect_dwarf_info(obj_path, tags=None, *,
|
||||
objdump_path=OBJDUMP_PATH,
|
||||
|
||||
Reference in New Issue
Block a user