]> git.ipfire.org Git - thirdparty/elfutils.git/commit
libdw, readelf: Read inlining info in NVIDIA extended line map
authorJohn M Mellor-Crummey <johnmc@rice.edu>
Wed, 20 Oct 2021 23:19:38 +0000 (18:19 -0500)
committerMark Wielaard <mark@klomp.org>
Wed, 10 Nov 2021 10:03:32 +0000 (11:03 +0100)
commitdbd44e96f101a81f387ca6ff46910ab74ed7b1dc
tree062f1ea987223df99a9dae87aaa4a9e25c294b00
parent5b21e70216b853065fa2fef34273db5f7dcdc88b
libdw, readelf: Read inlining info in NVIDIA extended line map

As of CUDA 11.2, NVIDIA added extensions to the line map section
of CUDA binaries to represent inlined functions. These extensions
include

 - two new fields in a line table row to represent inline
   information: context, and functionname,

 - two new DWARF extended opcodes: DW_LNE_NVIDIA_inlined_call,
   DW_LNE_NVIDIA_set_function_name,

 - an additional word in the line table header that indicates
   the offset in the .debug_str function where the function
   names for this line table begin, and

A line table row for an inlined function contains a non-zero "context"
value. The “context” field indicates the index of the line table row
that serves as the call site for an inlined context.

The "functionname" field in a line table row is only meaningful if the
"context" field of the row is non-zero. A meaningful "functionname"
field contains an index into the .debug_str section relative to the
base offset established in the line table header; the position in the
.debug_str section indicates the name of the inlined function.

These extensions resemble the proposed DWARF extensions
(http://dwarfstd.org/ShowIssue.php?issue=140906.1) by Cary Coutant,
but are not identical.

This commit integrates support for handling NVIDIA's extended line
maps into elfutil's libdw library, by adding two functions
dwarf_linecontext and dwarf_linefunctionname, and the readelf
--debug-dump=line command line utility.

Signed-off-by: John M Mellor-Crummey <johnmc@rice.edu>
Signed-off-by: Mark Wielaard <mark@klomp.org>
20 files changed:
ChangeLog
NEWS
libdw/ChangeLog
libdw/Makefile.am
libdw/dwarf.h
libdw/dwarf_getsrclines.c
libdw/dwarf_linecontext.c [new file with mode: 0644]
libdw/dwarf_linefunctionname.c [new file with mode: 0644]
libdw/libdw.h
libdw/libdw.map
libdw/libdwP.h
src/ChangeLog
src/readelf.c
tests/.gitignore
tests/ChangeLog
tests/Makefile.am
tests/nvidia_extended_linemap_libdw.c [new file with mode: 0644]
tests/run-nvidia-extended-linemap-libdw.sh [new file with mode: 0755]
tests/run-nvidia-extended-linemap-readelf.sh [new file with mode: 0755]
tests/testfile_nvidia_linemap.bz2 [new file with mode: 0644]