#! /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