#! /bin/sh # Copyright (C) 2018 Red Hat, Inc. # This file is part of elfutils. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # # elfutils is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . . $srcdir/test-subr.sh # See run-readelf-loc.sh testfiles testfileloc # Process values as offsets from base addresses and resolve to symbols. testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfileloc<<\EOF DWARF section [34] '.debug_ranges' at offset 0xd94: CU [ b] base: 0x0000000000400480
[ 0] range 0, 2 0x0000000000400480
.. 0x0000000000400481 range 5, d 0x0000000000400485 .. 0x000000000040048c CU [ e0] base: 0x00000000004004a0 [ 30] range d, f 0x00000000004004ad .. 0x00000000004004ae range 12, 1a 0x00000000004004b2 .. 0x00000000004004b9 EOF # Don't resolve addresses to symbols. testrun_compare ${abs_top_builddir}/src/readelf -N --debug-dump=ranges testfileloc<<\EOF DWARF section [34] '.debug_ranges' at offset 0xd94: CU [ b] base: 0x0000000000400480 [ 0] range 0, 2 0x0000000000400480.. 0x0000000000400481 range 5, d 0x0000000000400485.. 0x000000000040048c CU [ e0] base: 0x00000000004004a0 [ 30] range d, f 0x00000000004004ad.. 0x00000000004004ae range 12, 1a 0x00000000004004b2.. 0x00000000004004b9 EOF # Produce "raw" unprocessed content. testrun_compare ${abs_top_builddir}/src/readelf -U --debug-dump=ranges testfileloc<<\EOF DWARF section [34] '.debug_ranges' at offset 0xd94: CU [ b] base: 0x0000000000400480 [ 0] range 0, 2 range 5, d CU [ e0] base: 0x00000000004004a0 [ 30] range d, f range 12, 1a EOF # .debug_rnglists (DWARF5), see tests/testfile-dwarf-45.source testfiles testfile-dwarf-5 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-dwarf-5<<\EOF DWARF section [33] '.debug_rnglists' at offset 0x1d9a: Table at Offset 0x0: Length: 45 DWARF version: 5 Address size: 8 Segment size: 0 Offset entries: 0 CU [ 218] base: 000000000000000000 Offset: c, Index: 0 base_address 0x400583 0x0000000000400583 offset_pair 0, 2 0x0000000000400583 .. 0x0000000000400584 offset_pair 5, 15 0x0000000000400588 .. 0x0000000000400597 end_of_list Offset: 1c, Index: 10 start_length 0x400570, 2b 0x0000000000400570 .. 0x000000000040059a start_length 0x400410, 20 0x0000000000400410
.. 0x000000000040042f end_of_list EOF # Same as above, but for DWARF4, note no header, and base address is not # given, but ranges are the same. testfiles testfile-dwarf-4 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-dwarf-4<<\EOF DWARF section [32] '.debug_ranges' at offset 0x1f96: CU [ 21c] base: 000000000000000000 [ 0] range 400583, 400585 0x0000000000400583 .. 0x0000000000400584 range 400588, 400598 0x0000000000400588 .. 0x0000000000400597 [ 30] range 400570, 40059b 0x0000000000400570 .. 0x000000000040059a range 400410, 400430 0x0000000000400410
.. 0x000000000040042f EOF # Now with split dwarf. See tests/testfile-dwarf-45.source. # Note that this will have an offsets table that the .dwo can refer to. testfiles testfile-splitdwarf-5 testfile-hello5.dwo testfile-world5.dwo testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-splitdwarf-5<<\EOF DWARF section [35] '.debug_rnglists' at offset 0x393a: Table at Offset 0x0: Length: 53 DWARF version: 5 Address size: 8 Segment size: 0 Offset entries: 2 CU [ 49] base: 000000000000000000 Offsets starting at 0xc: [ 0] 0x8 [ 1] 0x18 Offset: 14, Index: 8 base_address 0x4011d3 0x00000000004011d3 offset_pair 0, 2 0x00000000004011d3 .. 0x00000000004011d4 offset_pair 5, 15 0x00000000004011d8 .. 0x00000000004011e7 end_of_list Offset: 24, Index: 18 start_length 0x4011c0, 2b 0x00000000004011c0 .. 0x00000000004011ea start_length 0x401060, 20 0x0000000000401060
.. 0x000000000040107f end_of_list EOF # Note that the rnglist_base attribute of the second CU points to the offsets # above 0xc [c]. testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=info testfile-splitdwarf-5<<\EOF DWARF section [28] '.debug_info' at offset 0x3102: [Offset] Compilation unit at offset 0: Version: 5, Abbreviation section offset: 0, Address size: 8, Offset size: 4 Unit type: skeleton (4), Unit id: 0xc422aa5c31fec205 [ 14] skeleton_unit abbrev: 1 low_pc (addr) 0x0000000000401160 high_pc (data8) 81 (0x00000000004011b1) stmt_list (sec_offset) 0 dwo_name (strp) "testfile-hello5.dwo" comp_dir (strp) "/home/mark/src/elfutils/tests" GNU_pubnames (flag_present) yes addr_base (sec_offset) address base [ 8] Compilation unit at offset 53: Version: 5, Abbreviation section offset: 21, Address size: 8, Offset size: 4 Unit type: skeleton (4), Unit id: 0xb6c8b9d97e6dfdfe [ 49] skeleton_unit abbrev: 1 ranges (sec_offset) range list [ 24] low_pc (addr) 000000000000000000 stmt_list (sec_offset) 655 dwo_name (strp) "testfile-world5.dwo" comp_dir (strp) "/home/mark/src/elfutils/tests" GNU_pubnames (flag_present) yes addr_base (sec_offset) address base [ a8] rnglists_base (sec_offset) range list [ c] EOF # Same for DWARF4 GNU DebugFission. But now we need to scan the .dwo # explicitly to know it will use the first ranges. testfiles testfile-splitdwarf-4 testfile-hello4.dwo testfile-world4.dwo testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=ranges testfile-splitdwarf-4<<\EOF DWARF section [32] '.debug_ranges' at offset 0x3611: CU [ b] base: 000000000000000000 [ 0] range 4011d3, 4011d5 0x00000000004011d3 .. 0x00000000004011d4 range 4011d8, 4011e8 0x00000000004011d8 .. 0x00000000004011e7 CU [ 3f] base: 000000000000000000 [ 30] range 4011c0, 4011eb 0x00000000004011c0 .. 0x00000000004011ea range 401060, 401080 0x0000000000401060
.. 0x000000000040107f EOF exit 0