Support for sibling in form DW_FORM_ref_addr (#408)
authorSeva Alekseyev <sevaa@yarxi.ru>
Tue, 7 Jun 2022 23:17:31 +0000 (19:17 -0400)
committerGitHub <noreply@github.com>
Tue, 7 Jun 2022 23:17:31 +0000 (16:17 -0700)
Co-authored-by: Seva Alekseyev <sevaa@nih.gov>
elftools/dwarf/compileunit.py

index eb66c5710f2273abb43217106a4bbf6c8cef0864..e40dab4e9616323e67f1fabf338a084371cb3465 100644 (file)
@@ -155,7 +155,12 @@ class CompileUnit(object):
                 cur_offset += child.size
             elif "DW_AT_sibling" in child.attributes:
                 sibling = child.attributes["DW_AT_sibling"]
-                cur_offset = sibling.value + self.cu_offset
+                if sibling.form in ('DW_FORM_ref1', 'DW_FORM_ref2', 'DW_FORM_ref4', 'DW_FORM_ref8', 'DW_FORM_ref'):
+                    cur_offset = sibling.value + self.cu_offset
+                elif sibling.form == 'DW_FORM_ref_addr':
+                    cur_offset = sibling.value
+                else:
+                    raise NotImplementedError('Sibling in form %s' % sibling.form)
             else:
                 # If no DW_AT_sibling attribute is provided by the producer
                 # then the whole child subtree must be parsed to find its next