1da0c48c4Sopenharmony_ci# Copyright (C) 2011 Red Hat, Inc.
2da0c48c4Sopenharmony_ci# This file is part of elfutils.
3da0c48c4Sopenharmony_ci#
4da0c48c4Sopenharmony_ci# This file is free software; you can redistribute it and/or modify
5da0c48c4Sopenharmony_ci# it under the terms of the GNU General Public License as published by
6da0c48c4Sopenharmony_ci# the Free Software Foundation; either version 3 of the License, or
7da0c48c4Sopenharmony_ci# (at your option) any later version.
8da0c48c4Sopenharmony_ci#
9da0c48c4Sopenharmony_ci# elfutils is distributed in the hope that it will be useful, but
10da0c48c4Sopenharmony_ci# WITHOUT ANY WARRANTY; without even the implied warranty of
11da0c48c4Sopenharmony_ci# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12da0c48c4Sopenharmony_ci# GNU General Public License for more details.
13da0c48c4Sopenharmony_ci#
14da0c48c4Sopenharmony_ci# You should have received a copy of the GNU General Public License
15da0c48c4Sopenharmony_ci# along with this program.  If not, see <http://www.gnu.org/licenses/>.
16da0c48c4Sopenharmony_ci
17da0c48c4Sopenharmony_ci. $srcdir/test-subr.sh
18da0c48c4Sopenharmony_ci
19da0c48c4Sopenharmony_ci# NOTE:
20da0c48c4Sopenharmony_ci#   the file testfile_nvidia_linemap is a CUDA binary for an NVIDIA A100 generated as follows using CUDA 11.2
21da0c48c4Sopenharmony_ci#   nvcc -o main main.cu  -Xcompiler "-g -fopenmp" -O3 -lineinfo -arch sm_80  -lcudart -lcuda -lstdc++ -lm
22da0c48c4Sopenharmony_ci#   cuobjdump -xelf all main
23da0c48c4Sopenharmony_ci#   mv main.sm_80.cubin testfile_nvidia_linemap
24da0c48c4Sopenharmony_ci
25da0c48c4Sopenharmony_citestfiles testfile_nvidia_linemap
26da0c48c4Sopenharmony_citestrun_compare ${abs_top_builddir}/src/readelf --debug-dump=line testfile_nvidia_linemap << EOF
27da0c48c4Sopenharmony_ci
28da0c48c4Sopenharmony_ciDWARF section [ 5] '.debug_line' at offset 0x3e0:
29da0c48c4Sopenharmony_ci
30da0c48c4Sopenharmony_ciTable at offset 0:
31da0c48c4Sopenharmony_ci
32da0c48c4Sopenharmony_ci Length:                         253
33da0c48c4Sopenharmony_ci DWARF version:                  2
34da0c48c4Sopenharmony_ci Prologue length:                111
35da0c48c4Sopenharmony_ci Address size:                   8
36da0c48c4Sopenharmony_ci Segment selector size:          0
37da0c48c4Sopenharmony_ci Min instruction length:         1
38da0c48c4Sopenharmony_ci Max operations per instruction: 1
39da0c48c4Sopenharmony_ci Initial value if 'is_stmt':     1
40da0c48c4Sopenharmony_ci Line base:                      -5
41da0c48c4Sopenharmony_ci Line range:                     14
42da0c48c4Sopenharmony_ci Opcode base:                    10
43da0c48c4Sopenharmony_ci
44da0c48c4Sopenharmony_ciOpcodes:
45da0c48c4Sopenharmony_ci  [1]  0 arguments
46da0c48c4Sopenharmony_ci  [2]  1 argument
47da0c48c4Sopenharmony_ci  [3]  1 argument
48da0c48c4Sopenharmony_ci  [4]  1 argument
49da0c48c4Sopenharmony_ci  [5]  1 argument
50da0c48c4Sopenharmony_ci  [6]  0 arguments
51da0c48c4Sopenharmony_ci  [7]  0 arguments
52da0c48c4Sopenharmony_ci  [8]  0 arguments
53da0c48c4Sopenharmony_ci  [9]  1 argument
54da0c48c4Sopenharmony_ci
55da0c48c4Sopenharmony_ciDirectory table:
56da0c48c4Sopenharmony_ci /home/johnmc/hpctoolkit-gpu-samples/nvidia_extended_linemap4
57da0c48c4Sopenharmony_ci
58da0c48c4Sopenharmony_ciFile name table:
59da0c48c4Sopenharmony_ci Entry Dir   Time      Size      Name
60da0c48c4Sopenharmony_ci 1     1     1626104146 1819      main.cu
61da0c48c4Sopenharmony_ci 2     1     1626104111 211       bar.h
62da0c48c4Sopenharmony_ci
63da0c48c4Sopenharmony_ciLine number statements:
64da0c48c4Sopenharmony_ci [    79] extended opcode 2:  set address to 0 <kernel>
65da0c48c4Sopenharmony_ci [    84] set file to 1
66da0c48c4Sopenharmony_ci [    86] advance line by constant 24 to 25
67da0c48c4Sopenharmony_ci [    88] copy
68da0c48c4Sopenharmony_ci [    89] special opcode 240: address+16 = 0x10 <kernel+0x10>, line+1 = 26
69da0c48c4Sopenharmony_ci [    8a] advance line by constant 1 to 27
70da0c48c4Sopenharmony_ci [    8c] advance address by 48 to 0x40 <kernel+0x40>
71da0c48c4Sopenharmony_ci [    8e] copy
72da0c48c4Sopenharmony_ci [    8f] advance line by constant -2 to 25
73da0c48c4Sopenharmony_ci [    91] advance address by 80 to 0x90 <kernel+0x90>
74da0c48c4Sopenharmony_ci [    94] copy
75da0c48c4Sopenharmony_ci [    95] special opcode 242: address+16 = 0xa0 <kernel+0xa0>, line+3 = 28
76da0c48c4Sopenharmony_ci [    96] advance address by 96 to 0x100 <kernel+0x100>
77da0c48c4Sopenharmony_ci [    99] copy
78da0c48c4Sopenharmony_ci [    9a] extended opcode 144:  set inlined context 6, function name foo (0x0)
79da0c48c4Sopenharmony_ci [    9f] advance line by constant -20 to 8
80da0c48c4Sopenharmony_ci [    a1] copy
81da0c48c4Sopenharmony_ci [    a2] advance line by constant 1 to 9
82da0c48c4Sopenharmony_ci [    a4] advance address by 80 to 0x150 <kernel+0x150>
83da0c48c4Sopenharmony_ci [    a7] copy
84da0c48c4Sopenharmony_ci [    a8] extended opcode 144:  set inlined context 0, function name foo (0x0)
85da0c48c4Sopenharmony_ci [    ad] advance line by constant 22 to 31
86da0c48c4Sopenharmony_ci [    af] advance address by 144 to 0x1e0 <kernel+0x1e0>
87da0c48c4Sopenharmony_ci [    b2] copy
88da0c48c4Sopenharmony_ci [    b3] set file to 2
89da0c48c4Sopenharmony_ci [    b5] extended opcode 144:  set inlined context 9, function name bar (0x4)
90da0c48c4Sopenharmony_ci [    ba] advance line by constant -25 to 6
91da0c48c4Sopenharmony_ci [    bc] copy
92da0c48c4Sopenharmony_ci [    bd] set file to 1
93da0c48c4Sopenharmony_ci [    bf] extended opcode 144:  set inlined context 10, function name foo (0x0)
94da0c48c4Sopenharmony_ci [    c4] advance line by constant 2 to 8
95da0c48c4Sopenharmony_ci [    c6] copy
96da0c48c4Sopenharmony_ci [    c7] advance line by constant 1 to 9
97da0c48c4Sopenharmony_ci [    c9] advance address by 64 to 0x220 <kernel+0x220>
98da0c48c4Sopenharmony_ci [    cc] copy
99da0c48c4Sopenharmony_ci [    cd] set file to 2
100da0c48c4Sopenharmony_ci [    cf] extended opcode 144:  set inlined context 9, function name bar (0x4)
101da0c48c4Sopenharmony_ci [    d4] advance line by constant -2 to 7
102da0c48c4Sopenharmony_ci [    d6] advance address by 144 to 0x2b0 <kernel+0x2b0>
103da0c48c4Sopenharmony_ci [    d9] copy
104da0c48c4Sopenharmony_ci [    da] advance line by constant 1 to 8
105da0c48c4Sopenharmony_ci [    dc] advance address by 64 to 0x2f0 <kernel+0x2f0>
106da0c48c4Sopenharmony_ci [    df] copy
107da0c48c4Sopenharmony_ci [    e0] set file to 1
108da0c48c4Sopenharmony_ci [    e2] extended opcode 144:  set inlined context 14, function name _Z1aPiS_S_ (0x8)
109da0c48c4Sopenharmony_ci [    e7] advance line by constant 10 to 18
110da0c48c4Sopenharmony_ci [    e9] copy
111da0c48c4Sopenharmony_ci [    ea] advance line by constant 1 to 19
112da0c48c4Sopenharmony_ci [    ec] advance address by 64 to 0x330 <kernel+0x330>
113da0c48c4Sopenharmony_ci [    ef] copy
114da0c48c4Sopenharmony_ci [    f0] extended opcode 144:  set inlined context 0, function name foo (0x0)
115da0c48c4Sopenharmony_ci [    f5] advance line by constant 14 to 33
116da0c48c4Sopenharmony_ci [    f7] advance address by 144 to 0x3c0 <kernel+0x3c0>
117da0c48c4Sopenharmony_ci [    fa] copy
118da0c48c4Sopenharmony_ci [    fb] advance address by 192 to 0x480
119da0c48c4Sopenharmony_ci [    fe] extended opcode 1:  end of sequence
120da0c48c4Sopenharmony_ciEOF
121