From b87fbea723144100d052a24b3d17a291a49d59e0 Mon Sep 17 00:00:00 2001 From: Eli Bendersky Date: Tue, 7 Jul 2020 17:15:02 -0700 Subject: [PATCH] Revert "for sibling of form ref_addr, only sibling value should be used (#268)" This reverts commit 575425338fbab134919cb1206509589a174fb81f. This breaks the tests: Test file 'test/testfiles_for_readelf/sibling_ref_addr.elf' .......................FAIL ....for option "-e" ....Output #1 is readelf, Output #2 is pyelftools @@ Mismatch on line #13: >> flags: 0x80000000, emb<< >> flags: 0x80000000<< ([('equal', 0, 47, 0, 47), ('delete', 47, 52, 47, 47)]) @@ Output #1 dumped to file: /tmp/out1_vn_mmkbu.stdout @@ Output #2 dumped to file: /tmp/out2_l8_zbr6h.stdout .......................FAIL ....for option "-n" ....Output #1 is readelf, Output #2 is pyelftools @@ Mismatch on line #2: >> apuinfo 0x00000008 nt_arch (architecture)<< >> apuinfo 0x00000008 nt_gnu_hwcap (dso-supplied software hwcap info)<< ([('equal', 0, 37, 0, 37), ('insert', 37, 37, 37, 66), ('equal', 37, 39, 66, 68), ('insert', 39, 39, 68, 72), ('equal', 39, 40, 72, 73), ('replace', 40, 41, 73, 75), ('equal', 41, 42, 75, 76), ('delete', 42, 47, 76, 76), ('equal', 47, 48, 76, 77), ('replace', 48, 55, 77, 80), ('equal', 55, 56, 80, 81)]) @@ Output #1 dumped to file: /tmp/out1_kla3jq33.stdout @@ Output #2 dumped to file: /tmp/out2_qzmuu23z.stdout @@ aborting - 'test/external_tools/readelf -x.text' returned '1' Conclusion: FAIL --- elftools/dwarf/compileunit.py | 4 +--- test/testfiles_for_readelf/sibling_ref_addr.elf | Bin 52896 -> 0 bytes 2 files changed, 1 insertion(+), 3 deletions(-) delete mode 100755 test/testfiles_for_readelf/sibling_ref_addr.elf diff --git a/elftools/dwarf/compileunit.py b/elftools/dwarf/compileunit.py index 7357655..eb66c57 100644 --- a/elftools/dwarf/compileunit.py +++ b/elftools/dwarf/compileunit.py @@ -155,9 +155,7 @@ class CompileUnit(object): cur_offset += child.size elif "DW_AT_sibling" in child.attributes: sibling = child.attributes["DW_AT_sibling"] - cur_offset = sibling.value - if sibling.form != 'DW_FORM_ref_addr': - cur_offset += self.cu_offset + cur_offset = sibling.value + self.cu_offset else: # If no DW_AT_sibling attribute is provided by the producer # then the whole child subtree must be parsed to find its next diff --git a/test/testfiles_for_readelf/sibling_ref_addr.elf b/test/testfiles_for_readelf/sibling_ref_addr.elf deleted file mode 100755 index dc0e10763ba7fe14e35187c93a6c8b9b6caf3785..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 52896 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