diff --git a/scripts/code.py b/scripts/code.py index 8049e388..8b3f112d 100755 --- a/scripts/code.py +++ b/scripts/code.py @@ -507,6 +507,18 @@ def collect_dwarf_info(obj_path, tags=None, *, if proc.returncode != 0: raise sp.CalledProcessError(proc.returncode, proc.args) + # resolve abstract origins + for entry in info.values(): + if 'DW_AT_abstract_origin' in entry: + off = int(entry['DW_AT_abstract_origin'].strip('<>'), 0) + origin = info[off] + assert 'DW_AT_abstract_origin' not in origin, ( + "Recursive abstract origin?") + + for k, v in origin.ats.items(): + if k not in entry.ats: + entry.ats[k] = v + return DwarfInfo(info) def collect(obj_paths, *, diff --git a/scripts/ctx.py b/scripts/ctx.py index 9f52ba31..138990f9 100755 --- a/scripts/ctx.py +++ b/scripts/ctx.py @@ -516,6 +516,18 @@ def collect_dwarf_info(obj_path, tags=None, *, if proc.returncode != 0: raise sp.CalledProcessError(proc.returncode, proc.args) + # resolve abstract origins + for entry in info.values(): + if 'DW_AT_abstract_origin' in entry: + off = int(entry['DW_AT_abstract_origin'].strip('<>'), 0) + origin = info[off] + assert 'DW_AT_abstract_origin' not in origin, ( + "Recursive abstract origin?") + + for k, v in origin.ats.items(): + if k not in entry.ats: + entry.ats[k] = v + return DwarfInfo(info) def collect(obj_paths, *, diff --git a/scripts/data.py b/scripts/data.py index b9e0129c..91a101b0 100755 --- a/scripts/data.py +++ b/scripts/data.py @@ -507,6 +507,18 @@ def collect_dwarf_info(obj_path, tags=None, *, if proc.returncode != 0: raise sp.CalledProcessError(proc.returncode, proc.args) + # resolve abstract origins + for entry in info.values(): + if 'DW_AT_abstract_origin' in entry: + off = int(entry['DW_AT_abstract_origin'].strip('<>'), 0) + origin = info[off] + assert 'DW_AT_abstract_origin' not in origin, ( + "Recursive abstract origin?") + + for k, v in origin.ats.items(): + if k not in entry.ats: + entry.ats[k] = v + return DwarfInfo(info) def collect(obj_paths, *, diff --git a/scripts/structs.py b/scripts/structs.py index c30ff233..91b4e18f 100755 --- a/scripts/structs.py +++ b/scripts/structs.py @@ -378,6 +378,18 @@ def collect_dwarf_info(obj_path, tags=None, *, if proc.returncode != 0: raise sp.CalledProcessError(proc.returncode, proc.args) + # resolve abstract origins + for entry in info.values(): + if 'DW_AT_abstract_origin' in entry: + off = int(entry['DW_AT_abstract_origin'].strip('<>'), 0) + origin = info[off] + assert 'DW_AT_abstract_origin' not in origin, ( + "Recursive abstract origin?") + + for k, v in origin.ats.items(): + if k not in entry.ats: + entry.ats[k] = v + return DwarfInfo(info) def collect(obj_paths, *,