#! /bin/sh # Copyright (C) 2013 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 # - hello.c # int say (const char *prefix); # # static char * # subject (char *word, int count) # { # return count > 0 ? word : (word + count); # } # # int # main (int argc, char **argv) # { # return say (subject (argv[0], argc)); # } # # - world.c # static int # sad (char c) # { # return c > 0 ? c : c + 1; # } # # static int # happy (const char *w) # { # return sad (w[1]); # } # # int # say (const char *prefix) # { # const char *world = "World"; # return prefix ? sad (prefix[0]) : happy (world); # } # # gcc -g -O2 -c hello.c # gcc -g -O2 -c world.c # gcc -g -o testfileloc hello.o world.o testfiles testfileloc # Process values as offsets from base addresses and resolve to symbols. testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --debug-dump=ranges \ testfileloc<<\EOF DWARF section [33] '.debug_loc' at offset 0xd2a: CU [ b] base: 0x0000000000400480
[ 0] range 0, d 0x0000000000400480
.. 0x000000000040048c [ 0] reg5 [ 23] range 5, d 0x0000000000400485 .. 0x000000000040048c [ 0] reg5 CU [ e0] base: 0x00000000004004a0 [ 46] range 12, 1a 0x00000000004004b2 .. 0x00000000004004b9 [ 0] breg5 0 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=loc --debug-dump=ranges \ testfileloc<<\EOF DWARF section [33] '.debug_loc' at offset 0xd2a: CU [ b] base: 0x0000000000400480 [ 0] range 0, d 0x0000000000400480.. 0x000000000040048c [ 0] reg5 [ 23] range 5, d 0x0000000000400485.. 0x000000000040048c [ 0] reg5 CU [ e0] base: 0x00000000004004a0 [ 46] range 12, 1a 0x00000000004004b2.. 0x00000000004004b9 [ 0] breg5 0 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=loc --debug-dump=ranges \ testfileloc<<\EOF DWARF section [33] '.debug_loc' at offset 0xd2a: CU [ b] base: 0x0000000000400480 [ 0] range 0, d [ 0] reg5 [ 23] range 5, d [ 0] reg5 CU [ e0] base: 0x00000000004004a0 [ 46] range 12, 1a [ 0] breg5 0 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=loc testfile-dwarf-5<<\EOF DWARF section [31] '.debug_loclists' at offset 0x1c0c: Table at Offset 0x0: Length: 96 DWARF version: 5 Address size: 8 Segment size: 0 Offset entries: 0 CU [ c] base: 0x0000000000400510 Offset: c, Index: 0 offset_pair 0, a 0x0000000000400510 .. 0x0000000000400519 [ 0] reg5 offset_pair a, 34 0x000000000040051a .. 0x0000000000400543 [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: 1a, Index: e offset_pair 1b, 2d 0x000000000040052b .. 0x000000000040053c [ 0] addr 0x601038 end_of_list Offset: 28, Index: 1c offset_pair 1b, 21 0x000000000040052b .. 0x0000000000400530 [ 0] reg5 end_of_list Offset: 2e, Index: 22 offset_pair 1b, 27 0x000000000040052b .. 0x0000000000400536 [ 0] reg5 offset_pair 29, 2d 0x0000000000400539 .. 0x000000000040053c [ 0] reg5 end_of_list Offset: 39, Index: 2d offset_pair 21, 27 0x0000000000400531 .. 0x0000000000400536 [ 0] reg5 offset_pair 29, 2d 0x0000000000400539 .. 0x000000000040053c [ 0] reg5 end_of_list Offset: 44, Index: 38 offset_pair 21, 2d 0x0000000000400531 .. 0x000000000040053c [ 0] reg5 end_of_list Offset: 4a, Index: 3e offset_pair 2d, 33 0x000000000040053d .. 0x0000000000400542 [ 0] reg5 end_of_list Offset: 50, Index: 44 offset_pair 40, 4f 0x0000000000400550 .. 0x000000000040055e [ 0] reg5 offset_pair 4f, 51 0x000000000040055f .. 0x0000000000400560 [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: 5e, Index: 52 offset_pair 40, 50 0x0000000000400550 .. 0x000000000040055f [ 0] reg5 end_of_list Table at Offset 0x64: Length: 159 DWARF version: 5 Address size: 8 Segment size: 0 Offset entries: 0 CU [ 218] base: 000000000000000000 Offset: 70, Index: 0 base_address 0x400410 0x0000000000400410
offset_pair 0, 14 0x0000000000400410
.. 0x0000000000400423 [ 0] reg5 offset_pair 14, 20 0x0000000000400424 .. 0x000000000040042f [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: 87, Index: 17 base_address 0x400410 0x0000000000400410
offset_pair 0, 18 0x0000000000400410
.. 0x0000000000400427 [ 0] reg4 offset_pair 18, 20 0x0000000000400428 .. 0x000000000040042f [ 0] entry_value: [ 0] reg4 [ 3] stack_value end_of_list Offset: 9e, Index: 2e start_length 0x400421, 7 0x0000000000400421 .. 0x0000000000400427 [ 0] reg0 end_of_list Offset: ab, Index: 3b base_address 0x400570 0x0000000000400570 offset_pair 0, 8 0x0000000000400570 .. 0x0000000000400577 [ 0] reg5 offset_pair 8, 2b 0x0000000000400578 .. 0x000000000040059a [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: c2, Index: 52 start_length 0x400588, b 0x0000000000400588 .. 0x0000000000400592 [ 0] reg0 end_of_list Offset: cf, Index: 5f base_address 0x400588 0x0000000000400588 offset_pair 0, 2 0x0000000000400588 .. 0x0000000000400589 [ 0] reg1 offset_pair 2, 7 0x000000000040058a .. 0x000000000040058e [ 0] reg5 offset_pair 7, b 0x000000000040058f .. 0x0000000000400592 [ 0] entry_value: [ 0] reg5 [ 3] deref_size 1 [ 5] const1u 56 [ 7] shl [ 8] const1u 56 [10] shra [11] stack_value end_of_list Offset: f3, Index: 83 base_address 0x400588 0x0000000000400588 offset_pair 0, 2 0x0000000000400588 .. 0x0000000000400589 [ 0] reg1 offset_pair 2, b 0x000000000040058a .. 0x0000000000400592 [ 0] reg5 end_of_list EOF # Same as above, but for DWARF4, note completely different encoding, but # the information is the same (check with diff -uwb). testfiles testfile-dwarf-4 testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc testfile-dwarf-4<<\EOF DWARF section [31] '.debug_loc' at offset 0x1c86: CU [ b] base: 0x0000000000400510 [ 0] range 0, a 0x0000000000400510 .. 0x0000000000400519 [ 0] reg5 range a, 34 0x000000000040051a .. 0x0000000000400543 [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 39] range 1b, 2d 0x000000000040052b .. 0x000000000040053c [ 0] addr 0x601038 [ 64] range 1b, 21 0x000000000040052b .. 0x0000000000400530 [ 0] reg5 [ 87] range 1b, 27 0x000000000040052b .. 0x0000000000400536 [ 0] reg5 range 29, 2d 0x0000000000400539 .. 0x000000000040053c [ 0] reg5 [ bd] range 21, 27 0x0000000000400531 .. 0x0000000000400536 [ 0] reg5 range 29, 2d 0x0000000000400539 .. 0x000000000040053c [ 0] reg5 [ f3] range 21, 2d 0x0000000000400531 .. 0x000000000040053c [ 0] reg5 [ 116] range 2d, 33 0x000000000040053d .. 0x0000000000400542 [ 0] reg5 [ 139] range 40, 4f 0x0000000000400550 .. 0x000000000040055e [ 0] reg5 range 4f, 51 0x000000000040055f .. 0x0000000000400560 [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 172] range 40, 50 0x0000000000400550 .. 0x000000000040055f [ 0] reg5 CU [ 21c] base: 000000000000000000 [ 195] range 400410, 400424 0x0000000000400410
.. 0x0000000000400423 [ 0] reg5 range 400424, 400430 0x0000000000400424 .. 0x000000000040042f [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 1ce] range 400410, 400428 0x0000000000400410
.. 0x0000000000400427 [ 0] reg4 range 400428, 400430 0x0000000000400428 .. 0x000000000040042f [ 0] GNU_entry_value: [ 0] reg4 [ 3] stack_value [ 207] range 400421, 400428 0x0000000000400421 .. 0x0000000000400427 [ 0] reg0 [ 22a] range 400570, 400578 0x0000000000400570 .. 0x0000000000400577 [ 0] reg5 range 400578, 40059b 0x0000000000400578 .. 0x000000000040059a [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 263] range 400588, 400593 0x0000000000400588 .. 0x0000000000400592 [ 0] reg0 [ 286] range 400588, 40058a 0x0000000000400588 .. 0x0000000000400589 [ 0] reg1 range 40058a, 40058f 0x000000000040058a .. 0x000000000040058e [ 0] reg5 range 40058f, 400593 0x000000000040058f .. 0x0000000000400592 [ 0] GNU_entry_value: [ 0] reg5 [ 3] deref_size 1 [ 5] const1u 56 [ 7] shl [ 8] const1u 56 [10] shra [11] stack_value [ 2da] range 400588, 40058a 0x0000000000400588 .. 0x0000000000400589 [ 0] reg1 range 40058a, 400593 0x000000000040058a .. 0x0000000000400592 [ 0] reg5 EOF # Split DWARF5 variant. Note that the .debug_loclists moved to the .dwo file # and now uses an index and addrx indirections. testfiles testfile-splitdwarf-5 testfile-hello5.dwo testfile-world5.dwo testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --dwarf-skeleton=testfile-splitdwarf-5 testfile-hello5.dwo testfile-world5.dwo <<\EOF testfile-hello5.dwo: DWARF section [ 3] '.debug_loclists.dwo' at offset 0x236: Table at Offset 0x0: Length: 125 DWARF version: 5 Address size: 8 Segment size: 0 Offset entries: 9 CU [ 14] base: 0x0000000000401160 Offsets starting at 0xc: [ 0] 0x24 [ 1] 0x32 [ 2] 0x39 [ 3] 0x3f [ 4] 0x4a [ 5] 0x55 [ 6] 0x5b [ 7] 0x61 [ 8] 0x6f Offset: 30, Index: 24 startx_length f, a 0x0000000000401160 .. 0x0000000000401169 [ 0] reg5 startx_length 0, 2a 0x000000000040116a .. 0x0000000000401193 [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: 3e, Index: 32 startx_length 11, 12 0x000000000040117b .. 0x000000000040118c [ 0] addrx [18] 0x404038 end_of_list Offset: 45, Index: 39 startx_length 11, 6 0x000000000040117b .. 0x0000000000401180 [ 0] reg5 end_of_list Offset: 4b, Index: 3f startx_length 11, c 0x000000000040117b .. 0x0000000000401186 [ 0] reg5 startx_length 1, 4 0x0000000000401189 .. 0x000000000040118c [ 0] reg5 end_of_list Offset: 56, Index: 4a startx_length 4, 6 0x0000000000401181 .. 0x0000000000401186 [ 0] reg5 startx_length 1, 4 0x0000000000401189 .. 0x000000000040118c [ 0] reg5 end_of_list Offset: 61, Index: 55 startx_length 4, c 0x0000000000401181 .. 0x000000000040118c [ 0] reg5 end_of_list Offset: 67, Index: 5b startx_length 2, 6 0x000000000040118d .. 0x0000000000401192 [ 0] reg5 end_of_list Offset: 6d, Index: 61 startx_length 9, f 0x00000000004011a0 .. 0x00000000004011ae [ 0] reg5 startx_length 5, 2 0x00000000004011af .. 0x00000000004011b0 [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: 7b, Index: 6f startx_length 9, 10 0x00000000004011a0 .. 0x00000000004011af [ 0] reg5 end_of_list testfile-world5.dwo: DWARF section [ 3] '.debug_loclists.dwo' at offset 0x217: Table at Offset 0x0: Length: 128 DWARF version: 5 Address size: 8 Segment size: 0 Offset entries: 7 CU [ 14] base: 000000000000000000 Offsets starting at 0xc: [ 0] 0x1c [ 1] 0x2a [ 2] 0x38 [ 3] 0x3e [ 4] 0x4c [ 5] 0x52 [ 6] 0x6d Offset: 28, Index: 1c startx_length 2, 14 0x0000000000401060
.. 0x0000000000401073 [ 0] reg5 startx_length 4, c 0x0000000000401074 .. 0x000000000040107f [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: 36, Index: 2a startx_length 2, 18 0x0000000000401060
.. 0x0000000000401077 [ 0] reg4 startx_length 7, 6 0x0000000000401078 .. 0x000000000040107d [ 0] entry_value: [ 0] reg4 [ 3] stack_value end_of_list Offset: 44, Index: 38 startx_length 3, 7 0x0000000000401071 .. 0x0000000000401077 [ 0] reg0 end_of_list Offset: 4a, Index: 3e startx_length d, 8 0x00000000004011c0 .. 0x00000000004011c7 [ 0] reg5 startx_length e, 23 0x00000000004011c8 .. 0x00000000004011ea [ 0] entry_value: [ 0] reg5 [ 3] stack_value end_of_list Offset: 58, Index: 4c startx_length f, b 0x00000000004011d8 .. 0x00000000004011e2 [ 0] reg0 end_of_list Offset: 5e, Index: 52 startx_length f, 2 0x00000000004011d8 .. 0x00000000004011d9 [ 0] reg1 startx_length 10, 5 0x00000000004011da .. 0x00000000004011de [ 0] reg5 startx_length 0, 4 0x00000000004011df .. 0x00000000004011e2 [ 0] entry_value: [ 0] reg5 [ 3] deref_size 1 [ 5] const1u 56 [ 7] shl [ 8] const1u 56 [10] shra [11] stack_value end_of_list Offset: 79, Index: 6d startx_length f, 2 0x00000000004011d8 .. 0x00000000004011d9 [ 0] reg1 startx_length 10, 9 0x00000000004011da .. 0x00000000004011e2 [ 0] reg5 end_of_list EOF # GNU DebugFission split-dwarf variant. Still uses .debug_loc, but now in # .dwo file, with somewhat similar, but different encoding from DWARF5. testfiles testfile-splitdwarf-4 testfile-hello4.dwo testfile-world4.dwo testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=loc --dwarf-skeleton=testfile-splitdwarf-4 testfile-hello4.dwo testfile-world4.dwo <<\EOF testfile-hello4.dwo: DWARF section [ 3] '.debug_loc.dwo' at offset 0x253: CU [ b] base: 0x0000000000401160 [ 0] range 401160, 40116a 0x0000000000401160 .. 0x0000000000401169 [ 0] reg5 range 40116a, 401194 0x000000000040116a .. 0x0000000000401193 [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 16] range 40117b, 40118d 0x000000000040117b .. 0x000000000040118c [ 0] GNU_addr_index [18] 0x404038 [ 21] range 40117b, 401181 0x000000000040117b .. 0x0000000000401180 [ 0] reg5 [ 2b] range 40117b, 401187 0x000000000040117b .. 0x0000000000401186 [ 0] reg5 range 401189, 40118d 0x0000000000401189 .. 0x000000000040118c [ 0] reg5 [ 3e] range 401181, 401187 0x0000000000401181 .. 0x0000000000401186 [ 0] reg5 range 401189, 40118d 0x0000000000401189 .. 0x000000000040118c [ 0] reg5 [ 51] range 401181, 40118d 0x0000000000401181 .. 0x000000000040118c [ 0] reg5 [ 5b] range 40118d, 401193 0x000000000040118d .. 0x0000000000401192 [ 0] reg5 [ 65] range 4011a0, 4011af 0x00000000004011a0 .. 0x00000000004011ae [ 0] reg5 range 4011af, 4011b1 0x00000000004011af .. 0x00000000004011b0 [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 7b] range 4011a0, 4011b0 0x00000000004011a0 .. 0x00000000004011af [ 0] reg5 testfile-world4.dwo: DWARF section [ 3] '.debug_loc.dwo' at offset 0x225: CU [ b] base: 000000000000000000 [ 0] range 401060, 401074 0x0000000000401060
.. 0x0000000000401073 [ 0] reg5 range 401074, 401080 0x0000000000401074 .. 0x000000000040107f [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 16] range 401060, 401078 0x0000000000401060
.. 0x0000000000401077 [ 0] reg4 range 401078, 40107e 0x0000000000401078 .. 0x000000000040107d [ 0] GNU_entry_value: [ 0] reg4 [ 3] stack_value [ 2c] range 401071, 401078 0x0000000000401071 .. 0x0000000000401077 [ 0] reg0 [ 36] range 4011c0, 4011c8 0x00000000004011c0 .. 0x00000000004011c7 [ 0] reg5 range 4011c8, 4011eb 0x00000000004011c8 .. 0x00000000004011ea [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value [ 4c] range 4011d8, 4011e3 0x00000000004011d8 .. 0x00000000004011e2 [ 0] reg0 [ 56] range 4011d8, 4011da 0x00000000004011d8 .. 0x00000000004011d9 [ 0] reg1 range 4011da, 4011df 0x00000000004011da .. 0x00000000004011de [ 0] reg5 range 4011df, 4011e3 0x00000000004011df .. 0x00000000004011e2 [ 0] GNU_entry_value: [ 0] reg5 [ 3] deref_size 1 [ 5] const1u 56 [ 7] shl [ 8] const1u 56 [10] shra [11] stack_value [ 7d] range 4011d8, 4011da 0x00000000004011d8 .. 0x00000000004011d9 [ 0] reg1 range 4011da, 4011e3 0x00000000004011da .. 0x00000000004011e2 [ 0] reg5 EOF # Partial dwarf-4 and partial GNU DebugFission split-dwarf. # # = popcount.c = # # int popcount (unsigned char u) # { # int c = 0; # while (u != 0) # { # if ((u & 1) == 1) # c++; # u >>= 1; # } # return c; # } # # = splitdwarf4-not-split4.c = # # extern int popcount (unsigned char); # # int main (int argc, char **argv) # { # int i; # int p = argc; # for (i = 0; i < argc; ++i) # p += popcount (argv[i][0]); # i += p; # return i; # } # # gcc -gdwarf-4 -O2 -c popcount.c # gcc -gdwarf-4 -gsplit-dwarf -O2 -c splitdwarf4-not-split4.c # gcc -o testfile-splitdwarf4-not-split4 splitdwarf4-not-split4.o popcount.o # eu-strip -f testfile-splitdwarf4-not-split4.debug \ # testfile-splitdwarf4-not-split4 testfiles testfile-splitdwarf4-not-split4.debug testfiles splitdwarf4-not-split4.dwo testrun_compare ${abs_top_builddir}/src/readelf --debug-dump=info+ --debug-dump=loc testfile-splitdwarf4-not-split4.debug <<\EOF DWARF section [28] '.debug_info' at offset 0x330: [Offset] Compilation unit at offset 0: Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4 Unit type: skeleton (4), Unit id: 0x3d909d7bd0e69c0b [ b] compile_unit abbrev: 1 ranges (sec_offset) range list [ 0] low_pc (addr) 000000000000000000 stmt_list (sec_offset) 0 GNU_dwo_name (strp) "splitdwarf4-not-split4.dwo" comp_dir (strp) "/tmp" GNU_pubnames (flag_present) yes GNU_addr_base (sec_offset) address base [ 0] GNU_dwo_id (data8) 0x3d909d7bd0e69c0b GNU_ranges_base (sec_offset) 0 Split compilation unit at offset 0: Version: 4, Abbreviation section offset: 0, Address size: 8, Offset size: 4 Unit type: skeleton (4), Unit id: 0x3d909d7bd0e69c0b { b} compile_unit abbrev: 1 producer (GNU_str_index) "GNU C17 9.0.0 20180528 (experimental) -mtune=generic -march=x86-64 -gdwarf-4 -gsplit-dwarf -O2" language (data1) C99 (12) name (GNU_str_index) "splitdwarf4-not-split4.c" comp_dir (GNU_str_index) "/tmp" GNU_dwo_id (data8) 0x3d909d7bd0e69c0b { 18} subprogram abbrev: 2 external (flag_present) yes name (GNU_str_index) "main" decl_file (data1) splitdwarf4-not-split4.c (1) decl_line (data1) 3 decl_column (data1) 5 prototyped (flag_present) yes type (ref4) { 6d} low_pc (GNU_addr_index) [4] 0x0000000000401050
high_pc (data8) 76 (0x000000000040109c <_start>) frame_base (exprloc) [ 0] call_frame_cfa GNU_all_call_sites (flag_present) yes sibling (ref4) { 6d} { 30} formal_parameter abbrev: 3 name (GNU_str_index) "argc" decl_file (data1) splitdwarf4-not-split4.c (1) decl_line (data1) 3 decl_column (data1) 15 type (ref4) { 6d} location (sec_offset) location list [ 0] { 3d} formal_parameter abbrev: 3 name (GNU_str_index) "argv" decl_file (data1) splitdwarf4-not-split4.c (1) decl_line (data1) 3 decl_column (data1) 28 type (ref4) { 74} location (sec_offset) location list [ 28] { 4a} variable abbrev: 4 name (string) "i" decl_file (data1) splitdwarf4-not-split4.c (1) decl_line (data1) 5 decl_column (data1) 7 type (ref4) { 6d} location (sec_offset) location list [ 47] { 58} variable abbrev: 4 name (string) "p" decl_file (data1) splitdwarf4-not-split4.c (1) decl_line (data1) 6 decl_column (data1) 7 type (ref4) { 6d} location (sec_offset) location list [ 73] { 66} GNU_call_site abbrev: 5 low_pc (GNU_addr_index) [1] 0x000000000040107f abstract_origin (ref4) { 84} { 6d} base_type abbrev: 6 byte_size (data1) 4 encoding (data1) signed (5) name (string) "int" { 74} pointer_type abbrev: 7 byte_size (data1) 8 type (ref4) { 7a} { 7a} pointer_type abbrev: 7 byte_size (data1) 8 type (ref4) { 80} { 80} base_type abbrev: 8 byte_size (data1) 1 encoding (data1) signed_char (6) name (GNU_str_index) "char" { 84} subprogram abbrev: 9 external (flag_present) yes declaration (flag_present) yes linkage_name (GNU_str_index) "popcount" name (GNU_str_index) "popcount" decl_file (data1) splitdwarf4-not-split4.c (1) decl_line (data1) 1 decl_column (data1) 12 Compilation unit at offset 52: Version: 4, Abbreviation section offset: 29, Address size: 8, Offset size: 4 [ 3f] compile_unit abbrev: 1 producer (strp) "GNU C17 9.0.0 20180528 (experimental) -mtune=generic -march=x86-64 -gdwarf-4 -O2" language (data1) C99 (12) name (strp) "popcount.c" comp_dir (strp) "/tmp" low_pc (addr) 0x0000000000401180 high_pc (data8) 33 (0x00000000004011a1) stmt_list (sec_offset) 145 [ 61] subprogram abbrev: 2 external (flag_present) yes name (strp) "popcount" decl_file (data1) popcount.c (1) decl_line (data1) 1 decl_column (data1) 5 prototyped (flag_present) yes type (ref4) [ a0] low_pc (addr) 0x0000000000401180 high_pc (data8) 33 (0x00000000004011a1) frame_base (exprloc) [ 0] call_frame_cfa GNU_all_call_sites (flag_present) yes sibling (ref4) [ a0] [ 83] formal_parameter abbrev: 3 name (string) "u" decl_file (data1) popcount.c (1) decl_line (data1) 1 decl_column (data1) 29 type (ref4) [ a7] location (sec_offset) location list [ 0] [ 91] variable abbrev: 4 name (string) "c" decl_file (data1) popcount.c (1) decl_line (data1) 3 decl_column (data1) 7 type (ref4) [ a0] location (sec_offset) location list [ 60] [ a0] base_type abbrev: 5 byte_size (data1) 4 encoding (data1) signed (5) name (string) "int" [ a7] base_type abbrev: 6 byte_size (data1) 1 encoding (data1) unsigned_char (8) name (strp) "unsigned char" DWARF section [32] '.debug_loc' at offset 0x5ef: CU [ 3f] base: 0x0000000000401180 [ 0] range 0, 9 0x0000000000401180 .. 0x0000000000401188 [ 0] reg5 range 9, 1b 0x0000000000401189 .. 0x000000000040119a [ 0] reg1 range 1b, 1d 0x000000000040119b .. 0x000000000040119c [ 0] breg1 0 [ 2] lit1 [ 3] shr [ 4] stack_value range 1d, 21 0x000000000040119d .. 0x00000000004011a0 [ 0] reg1 [ 60] range 0, 9 0x0000000000401180 .. 0x0000000000401188 [ 0] lit0 [ 1] stack_value range 9, 20 0x0000000000401189 .. 0x000000000040119f [ 0] reg0 range 20, 21 0x00000000004011a0 .. 0x00000000004011a0 [ 0] lit0 [ 1] stack_value EOF testrun_compare ${abs_top_builddir}/src/readelf --dwarf-skeleton=testfile-splitdwarf4-not-split4.debug --debug-dump=loc splitdwarf4-not-split4.dwo <<\EOF DWARF section [ 3] '.debug_loc.dwo' at offset 0x15b: CU [ b] base: 000000000000000000 [ 0] range 401050, 40106e 0x0000000000401050
.. 0x000000000040106d [ 0] reg5 range 40106e, 401086 0x000000000040106e .. 0x0000000000401085 [ 0] reg12 range 401086, 401095 0x0000000000401086 .. 0x0000000000401094 [ 0] GNU_entry_value: [ 0] reg5 [ 3] stack_value range 401095, 40109c 0x0000000000401095 .. 0x000000000040109b [ 0] reg5 [ 28] range 401050, 40106e 0x0000000000401050
.. 0x000000000040106d [ 0] reg4 range 40106e, 401095 0x000000000040106e .. 0x0000000000401094 [ 0] GNU_entry_value: [ 0] reg4 [ 3] stack_value range 401095, 40109c 0x0000000000401095 .. 0x000000000040109b [ 0] reg4 [ 47] range 401050, 40106e 0x0000000000401050
.. 0x000000000040106d [ 0] lit0 [ 1] stack_value range 401086, 40108e 0x0000000000401086 .. 0x000000000040108d [ 0] breg12 0 [ 2] breg6 0 [ 4] plus [ 5] stack_value range 40108e, 401095 0x000000000040108e .. 0x0000000000401094 [ 0] reg0 range 401095, 40109c 0x0000000000401095 .. 0x000000000040109b [ 0] lit0 [ 1] stack_value [ 73] range 401050, 40106e 0x0000000000401050
.. 0x000000000040106d [ 0] reg5 range 40106e, 401090 0x000000000040106e .. 0x000000000040108f [ 0] reg6 range 401095, 40109c 0x0000000000401095 .. 0x000000000040109b [ 0] reg5 EOF exit 0