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_inlined_call, DW_LNE_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 - two new functions in the libdw API: dwarf_linecontext and dwarf_linefunctionname, which return the new line table fields. 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 patch adds integrates support for handling NVIDIA's extended line maps into elfutil's libdw library and the readelf command line utility. Since this support is a non-standard extension to DWARF, all code that implements the extensions is implemented between markers /* Begin NVIDIA_LINEMAP_INLINING_EXTENSIONS */ and /* End NVIDIA_LINEMAP_INLINING_EXTENSIONS */. The definition below #define NVIDIA_LINEMAP_INLINING_EXTENSIONS 1 is added to elfutils/version.h, which enables a client of elfutils to test whether the NVIDIA line map extensions are present. Note: The support for NVIDIA extended line maps adds two integer fields (context and functionname) to struct Dwarf_Line_s, which makes the structure about 30% larger. The patch includes a binary testfile_nvidia_linemap.bz2 that contains an NVIDIA extended linemap along with two tests that read the line map. - A test script run-nvidia-extended-linemap-readelf.sh checks the output of readelf on the new test binary to validate its dump of the line op codes containing context and functionname entries. - A test program tests/nvidia_extended_linemap_libdw.c reads the extended line map with dwarf_next_lines and dumps the context and functionname fields of the line map where they are relevant, i.e. the value of context is non-zero. A test script run-nvidia-extended-linemap-libdw.sh runs this test and validates its output. A patch with the new functionality described above is attached. -- John Mellor-Crummey Professor Dept of Computer Science Rice University email: johnmc@rice.edu phone: 713-348-5179