#! /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-dwarf-ranges.sh
# Compiled with:
# gcc -c -O2 -o testfile-ranges-hello.o -gsplit-dwarf -gdwarf-4 hello.c
# gcc -c -O2 -o testfile-ranges-world.o -gsplit-dwarf -gdwarf-4 world.c
# gcc -o testfilesplitranges4 -O2 \
# testfile-ranges-hello.o testfile-ranges-world.o
# eu-strip -f testfilesplitranges4.debug testfilesplitranges4
testfiles testfilesplitranges4.debug
testfiles testfile-ranges-hello.dwo testfile-ranges-world.dwo
testrun_compare ${abs_builddir}/all-dwarf-ranges testfilesplitranges4.debug <<\EOF
die: hello.c (11)
4004e0..4004ff
4003e0..4003f7
die: no_say (2e)
4004f0..4004ff
die: main (2e)
4003e0..4003f7
die: subject (1d)
4003e3..4003ef
die: subject (2e)
4004e0..4004f0
die: world.c (11)
400500..400567
die: no_main (2e)
400550..400567
die: no_subject (1d)
400553..40055f
die: say (2e)
400500..400540
die: happy (1d)
40051c..400526
400530..400534
400535..40053f
die: sad (1d)
40051c..400526
400535..40053f
die: no_subject (2e)
400540..400550
EOF
# Same with -gdwarf-5
# gcc -c -O2 -o testfile-ranges-hello5.o -gsplit-dwarf -gdwarf-5 hello.c
# gcc -c -O2 -o testfile-ranges-world5.o -gsplit-dwarf -gdwarf-5 world.c
# gcc -o testfilesplitranges5 -O2 testfile-ranges-hello5.o testfile-ranges-world5.o
# eu-strip -f testfilesplitranges5.debug testfilesplitranges5
testfiles testfilesplitranges5.debug
testfiles testfile-ranges-hello5.dwo testfile-ranges-world5.dwo
testrun_compare ${abs_builddir}/all-dwarf-ranges testfilesplitranges5.debug <<\EOF
die: hello.c (11)
401150..40117a
401050..401067
die: no_say (2e)
401160..40117a
die: main (2e)
401050..401067
die: subject (1d)
401053..40105f
die: subject (2e)
401150..401160
die: world.c (11)
401180..4011e7
die: no_main (2e)
4011d0..4011e7
die: no_subject (1d)
4011d3..4011df
die: say (2e)
401180..4011c0
die: happy (1d)
40119b..40119b
40119c..4011a6
4011b0..4011b4
4011b5..4011bf
die: sad (1d)
40119b..40119b
40119c..4011a6
4011b4..4011b4
4011b5..4011bf
die: no_subject (2e)
4011c0..4011d0
EOF
# See testfile-dwp.source.
testfiles testfile-dwp-5 testfile-dwp-5.dwp
testfiles testfile-dwp-4 testfile-dwp-4.dwp
testrun_compare ${abs_builddir}/all-dwarf-ranges testfile-dwp-5 << EOF
die: foo.cc (11)
401190..401200
die: foo (2e)
4011c0..401200
die: x_x (1d)
4011cb..4011eb
4011f8..401200
die: (b)
4011cb..4011eb
4011f8..401200
die: x_x (2e)
401190..4011bd
die: (b)
401190..401190
401192..4011bb
die: bar.cc (11)
401200..40121b
die: bar (2e)
401200..40121b
die: main.cc (11)
401020..4010a0
die: main (2e)
401020..4010a0
die: fibonacci (1d)
401030..401032
401036..401060
401099..4010a0
die: fibonacci (1d)
40103a..401060
401099..4010a0
die: (b)
40103a..401060
401099..4010a0
die: (b)
40103a..401044
401050..401060
die: (b)
401050..401053
401056..401059
EOF
testrun_compare ${abs_builddir}/all-dwarf-ranges testfile-dwp-4 << EOF
die: foo.cc (11)
401190..401200
die: foo (2e)
4011c0..401200
die: x_x (1d)
4011cb..4011eb
4011f8..401200
die: (b)
4011cb..4011eb
4011f8..401200
die: x_x (2e)
401190..4011bd
die: bar.cc (11)
401200..40121b
die: bar (2e)
401200..40121b
die: main.cc (11)
401020..4010a0
die: main (2e)
401020..4010a0
die: fibonacci (1d)
401030..401032
401036..401060
401099..4010a0
die: fibonacci (1d)
40103a..401060
401099..4010a0
die: (b)
40103a..401060
401099..4010a0
die: (b)
40103a..401044
401050..401060
die: (b)
401050..401053
401056..401059
EOF
exit 0