Hi Mark, On Fri, Jul 10, 2026 at 6:35 PM Mark Wielaard <[email protected]> wrote: > > The .debug_sup section is the standardized version of > .gnu_debugaltlink from DWARF5 to connect the debug file to the > supplementary file. The .debug_dwp section is like the .debug_sup > section, but to connect the debug file to the DWARF package file > described in https://dwarfstd.org/issues/260116.1.html > > * libdw/dwarf_begin_elf.c (dwarf_scnnames): Add debug_sup and > debug_dwp. > (scn_to_string_section_idx): Likewise. > * libdw/libdw.map (ELFUTILS_0.196): New version map depending > on ELFUTILS_0.193. > * libdw/libdwP.h (enum): Add IDX_debug_sup and IDX_debug_dwp. > * libdwelf/Makefile.am (libdwelf_a_SOURCES): Add > dwelf_dwarf_id_section.c > * libdwelf/dwelf_dwarf_id_section.c: New file. > * libdwelf/libdwelf.h (dwelf_dwarf_debug_sup): New function. > (dwelf_dwarf_debug_dwp): New function. > * libdwelf/libdwelfP.h: INTDECL dwelf_dwarf_debug_sup and > dwelf_dwarf_debug_dwp. > * tests/.gitignore: Add dwelf-dwarf-debug-sup. > * tests/Makefile.am (check_PROGRAMS): Add dwelf-dwarf-debug-sup. > (TESTS): Add run-dwelf-dwarf-debug-sup.sh. > (EXTRA_DIST): Add run-dwelf-dwarf-debug-sup.sh, > testfile-dwarf5-ref-sup.bz2 and testfile-dwarf5.sup.bz2. > (dwelf_dwarf_debug_sup_LDADD): New variable. > * tests/dwelf-dwarf-debug-sup.c: New file. > * tests/run-dwelf-dwarf-debug-sup.sh: Likewise. > * tests/testfile-dwarf5-ref-sup.bz2: New testfile. > * tests/testfile-dwarf5.sup.bz2: New testfile. > > Signed-off-by: Mark Wielaard <[email protected]> > --- > libdw/dwarf_begin_elf.c | 4 + > libdw/libdw.map | 6 ++ > libdw/libdwP.h | 2 + > libdwelf/Makefile.am | 3 +- > libdwelf/dwelf_dwarf_id_section.c | 120 +++++++++++++++++++++++++++++ > libdwelf/libdwelf.h | 32 ++++++++ > libdwelf/libdwelfP.h | 2 + > tests/.gitignore | 1 + > tests/Makefile.am | 7 +- > tests/dwelf-dwarf-debug-sup.c | 96 +++++++++++++++++++++++ > tests/run-dwelf-dwarf-debug-sup.sh | 36 +++++++++ > tests/testfile-dwarf5-ref-sup.bz2 | Bin 0 -> 2791 bytes > tests/testfile-dwarf5.sup.bz2 | Bin 0 -> 517 bytes > 13 files changed, 307 insertions(+), 2 deletions(-) > create mode 100644 libdwelf/dwelf_dwarf_id_section.c > create mode 100644 tests/dwelf-dwarf-debug-sup.c > create mode 100755 tests/run-dwelf-dwarf-debug-sup.sh > create mode 100755 tests/testfile-dwarf5-ref-sup.bz2 > create mode 100644 tests/testfile-dwarf5.sup.bz2 > > diff --git a/libdw/dwarf_begin_elf.c b/libdw/dwarf_begin_elf.c > index 7b58ad2e2218..ec8fff4fcb52 100644 > --- a/libdw/dwarf_begin_elf.c > +++ b/libdw/dwarf_begin_elf.c > @@ -69,6 +69,8 @@ static const char dwarf_scnnames[IDX_last][19] = > [IDX_debug_rnglists] = ".debug_rnglists", > [IDX_debug_cu_index] = ".debug_cu_index", > [IDX_debug_tu_index] = ".debug_tu_index", > + [IDX_debug_sup] = ".debug_sup", > + [IDX_debug_dwp] = ".debug_dwp", > [IDX_gnu_debugaltlink] = ".gnu_debugaltlink" > }; > #define ndwarf_scnnames (sizeof (dwarf_scnnames) / sizeof > (dwarf_scnnames[0])) > @@ -96,6 +98,8 @@ static const enum string_section_index > scn_to_string_section_idx[IDX_last] = > [IDX_debug_rnglists] = STR_SCN_IDX_last, > [IDX_debug_cu_index] = STR_SCN_IDX_last, > [IDX_debug_tu_index] = STR_SCN_IDX_last, > + [IDX_debug_sup] = STR_SCN_IDX_last, > + [IDX_debug_dwp] = STR_SCN_IDX_last, > [IDX_gnu_debugaltlink] = STR_SCN_IDX_last > }; > > diff --git a/libdw/libdw.map b/libdw/libdw.map > index b45647e6fa4c..f201fd30f2e1 100644 > --- a/libdw/libdw.map > +++ b/libdw/libdw.map > @@ -411,3 +411,9 @@ ELFUTILS_0.194_EXPERIMENTAL { > global: > dwflst_sample_getframes; > } ELFUTILS_0.193_EXPERIMENTAL; > + > +ELFUTILS_0.196 { > + global: > + dwelf_dwarf_debug_sup; > + dwelf_dwarf_debug_dwp; > +} ELFUTILS_0.193; > \ No newline at end of file > diff --git a/libdw/libdwP.h b/libdw/libdwP.h > index 5e1029bd2ac2..7086dddc6962 100644 > --- a/libdw/libdwP.h > +++ b/libdw/libdwP.h > @@ -85,6 +85,8 @@ enum > IDX_debug_rnglists, > IDX_debug_cu_index, > IDX_debug_tu_index, > + IDX_debug_sup, > + IDX_debug_dwp, > IDX_gnu_debugaltlink, > IDX_last > }; > diff --git a/libdwelf/Makefile.am b/libdwelf/Makefile.am > index 5fb57379898e..9df21ca21fed 100644 > --- a/libdwelf/Makefile.am > +++ b/libdwelf/Makefile.am > @@ -42,7 +42,8 @@ noinst_HEADERS = libdwelfP.h > libdwelf_a_SOURCES = dwelf_elf_gnu_debuglink.c > dwelf_dwarf_gnu_debugaltlink.c \ > dwelf_elf_gnu_build_id.c dwelf_scn_gnu_compressed_size.c > \ > dwelf_strtab.c dwelf_elf_begin.c \ > - dwelf_elf_e_machine_string.c > + dwelf_elf_e_machine_string.c \ > + dwelf_dwarf_id_section.c > > libdwelf = $(libdw) > > diff --git a/libdwelf/dwelf_dwarf_id_section.c > b/libdwelf/dwelf_dwarf_id_section.c > new file mode 100644 > index 000000000000..ad81ac994fd3 > --- /dev/null > +++ b/libdwelf/dwelf_dwarf_id_section.c > @@ -0,0 +1,120 @@ > +/* Parses .debug_sup and .debug_dwp sections. > + Copyright (C) 2026 Mark J. Wielaard > + This file is part of elfutils. > + > + This file is free software; you can redistribute it and/or modify > + it under the terms of either > + > + * the GNU Lesser General Public License as published by the Free > + Software Foundation; either version 3 of the License, or (at > + your option) any later version > + > + or > + > + * the GNU General Public License as published by the Free > + Software Foundation; either version 2 of the License, or (at > + your option) any later version > + > + or both in parallel, as here. > + > + 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 and > + the GNU Lesser General Public License along with this program. If > + not, see <http://www.gnu.org/licenses/>. */ > + > +#ifdef HAVE_CONFIG_H > +# include <config.h> > +#endif > + > +#include "libdwelfP.h" > + > +/* .debug_sup and .debug_dwp are identical, just the name of the flag > + is different. */ > +static ssize_t > +dwelf_dwarf_debug_sec (Dwarf *dwarf, > + int idx, /* Either IDX_debug_sup or IDX_debug_dwp. */ > + uint16_t *versionp, > + uint8_t *is_flagp, > + const char **filepathp, > + const uint8_t **idp) > +{ > + if (dwarf == NULL) > + return -1; > + > + Elf_Data *data = dwarf->sectiondata[idx]; > + if (data == NULL) > + return 0; > + > + /* Minimal is version 2 bytes, flag 1 byte, empty path 1 byte, zero > + id_len 1 byte for a total of 5. */ > + if (data->d_buf == NULL || data->d_size < 5) > + { > + bad_data: > + __libdw_seterrno (DWARF_E_INVALID_DWARF); > + return -1; > + } > + > + const unsigned char *readp = data->d_buf; > + const unsigned char *endp = data->d_buf + data->d_size; > + uint16_t version = read_2ubyte_unaligned_inc (dwarf, readp); > + if ((idx == IDX_debug_sup && version != 5) > + || (idx == IDX_debug_dwp && version != 6)) > + goto bad_data; > + uint8_t flag = *readp++; > + > + const char *filepath = (const char *) readp; > + /* Must be '\0' terminated. */ > + readp = memchr (filepath, '\0', (size_t) (endp - readp)); > + if (readp == NULL) > + goto bad_data; > + > + readp++; > + if (readp == endp) > + goto bad_data; > + > + size_t id_len; > + get_uleb128 (id_len, readp, endp); > + if (id_len > 0 && (size_t) (endp - readp) < id_len) > + goto bad_data; > + > + if (versionp != NULL) > + *versionp = version; > + if (is_flagp != NULL) > + *is_flagp = flag; > + if (filepathp != NULL) > + *filepathp = filepath; > + if (idp != NULL) > + *idp = id_len > 0 ? readp : NULL; > + > + return id_len; > +} > + > +ssize_t > +dwelf_dwarf_debug_sup (Dwarf *dwarf, > + uint16_t *versionp, > + uint8_t *is_supp, > + const char **filepathp, > + const uint8_t **idp) > +{ > + int idx = IDX_debug_sup; > + return dwelf_dwarf_debug_sec (dwarf, idx, > + versionp, is_supp, filepathp, idp); > +} > +INTDEF(dwelf_dwarf_debug_sup) > + > +ssize_t > +dwelf_dwarf_debug_dwp (Dwarf *dwarf, > + uint16_t *versionp, > + uint8_t *is_dwpp, > + const char **filepathp, > + const uint8_t **idp) > +{ > + int idx = IDX_debug_dwp; > + return dwelf_dwarf_debug_sec (dwarf, idx, > + versionp, is_dwpp, filepathp, idp); > +} > +INTDEF(dwelf_dwarf_debug_dwp) > diff --git a/libdwelf/libdwelf.h b/libdwelf/libdwelf.h > index 263ca60e35a0..7e2968f531dc 100644 > --- a/libdwelf/libdwelf.h > +++ b/libdwelf/libdwelf.h > @@ -57,6 +57,38 @@ extern ssize_t dwelf_dwarf_gnu_debugaltlink (Dwarf *dwarf, > const char **namep, > const void **build_idp); > > +/* Returns the version, is_supp flag, filepath, and ID from the > + .debug_sup section if found in the DWARF file. On success, the > + version and is_supp flag value, filepath pointer, and ID pointer > + are written to the output parameters (if not NULL), and the > + positive length of the ID is returned. The is_supp flag value is > + one if the Dwarf object represents a supplementary (alt) file, > + zero otherwise. The filepath and ID pointers are valid as long as > + the Dwarf object is valid. Returns 0 if the DWARF file lacks a > + .debug_sup section. Returns -1 in case of malformed data or other > + errors. Currently only version 5 is supported. */ > +extern ssize_t dwelf_dwarf_debug_sup (Dwarf *dwarf, > + uint16_t *versionp, > + uint8_t *is_suppp, > + const char **filepathp, > + const uint8_t **idp); > + > +/* Returns the version, is_dwp flag, filepath, and ID from the > + .debug_dwp section if found in the DWARF file. On success, the > + version and is_supp flag value, filepath pointer, and ID pointer
This should say "and is_dwp" instead of "and is_supp". > + are written to the output parameters (if not NULL), and the > + positive length of the ID is returned. The is_dwp flag value is > + one if the Dwarf object represents a package file, zero otherwise. > + The filepath and ID pointers are valid as long as the Dwarf object > + is valid. Returns 0 if the DWARF file lacks a .debug_dwp section. > + Returns -1 in case of malformed data or other errors. Currently > + only version 6 is supported. */ The specs for .debug_sup and .debug_dwp say the ID length can be 0 if no ID is provided. dwelf_dwarf_debug_dwp and dwelf_dwarf_debug_sup return 0 in this case but the header comments for these functions state that a return value of 0 indicates that there is no .debug_dwp or .debug_sup section. Should the return value distinguish between no ID and no section? Or just change the comments to say that 0 indicates either no ID or no section? Aaron > +extern ssize_t dwelf_dwarf_debug_dwp (Dwarf *dwarf, > + uint16_t *versionp, > + uint8_t *is_dwpp, > + const char **filepathp, > + const uint8_t **idp); > + > /* Returns the build ID as found in a NT_GNU_BUILD_ID note from either > a SHT_NOTE section or from a PT_NOTE segment if the ELF file > doesn't contain any section headers. On success a pointer to the > diff --git a/libdwelf/libdwelfP.h b/libdwelf/libdwelfP.h > index faaf1a20244d..0b1de3b21715 100644 > --- a/libdwelf/libdwelfP.h > +++ b/libdwelf/libdwelfP.h > @@ -38,5 +38,7 @@ > INTDECL (dwelf_elf_gnu_debuglink) > INTDECL (dwelf_dwarf_gnu_debugaltlink) > INTDECL (dwelf_elf_gnu_build_id) > +INTDECL (dwelf_dwarf_debug_sup) > +INTDECL (dwelf_dwarf_debug_dwp) > > #endif /* libdwelfP.h */ > diff --git a/tests/.gitignore b/tests/.gitignore > index 72b02a5f1ddc..817c965ec3a2 100644 > --- a/tests/.gitignore > +++ b/tests/.gitignore > @@ -42,6 +42,7 @@ > /dwarf-ranges > /dwarf_default_lower_bound > /dwarfcfi > +/dwelf-dwarf-debug-sup > /dwelf_elf_e_machine_string > /dwarf_language_lower_bound > /dwelfgnucompressed > diff --git a/tests/Makefile.am b/tests/Makefile.am > index e5e03737a589..7c6c776a0410 100644 > --- a/tests/Makefile.am > +++ b/tests/Makefile.am > @@ -69,6 +69,7 @@ check_PROGRAMS = arextract arsymtest newfile saridx > scnnames sectiondump \ > eu_search_cfi eu_search_macros \ > eu_search_lines eu_search_die \ > ar-extract-ar elf-from-memory ar-getarsym-mem \ > + dwelf-dwarf-debug-sup \ > $(asm_TESTS) > > asm_TESTS = asm-tst1 asm-tst2 asm-tst3 asm-tst4 asm-tst5 \ > @@ -239,6 +240,7 @@ TESTS = run-arextract.sh run-arsymtest.sh run-ar.sh > newfile test-nlist \ > run-test-manyfuncs.sh \ > run-eu-search-cfi.sh run-eu-search-macros.sh \ > run-eu-search-lines.sh run-eu-search-die.sh \ > + run-dwelf-dwarf-debug-sup.sh \ > elf-from-memory ar-getarsym-mem > > if !BIARCH > @@ -723,7 +725,9 @@ EXTRA_DIST = run-arextract.sh run-arsymtest.sh run-ar.sh \ > run-test-manyfuncs.sh manyfuncs.c \ > run-debuginfod-seekable.sh thread-safety-subr.sh \ > run-eu-search-cfi.sh run-eu-search-macros.sh \ > - run-eu-search-lines.sh run-eu-search-die.sh > + run-eu-search-lines.sh run-eu-search-die.sh \ > + run-dwelf-dwarf-debug-sup.sh \ > + testfile-dwarf5-ref-sup.bz2 testfile-dwarf5.sup.bz2 > > > if USE_HELGRIND > @@ -906,6 +910,7 @@ debuginfod_build_id_find_LDADD = $(libelf) $(libdw) > xlate_notes_LDADD = $(libelf) > elfrdwrnop_LDADD = $(libelf) > dwelf_elf_e_machine_string_LDADD = $(libelf) $(libdw) > +dwelf_dwarf_debug_sup_LDADD = $(libelf) $(libdw) > getphdrnum_LDADD = $(libelf) $(libdw) > leb128_LDADD = $(libelf) $(libdw) > read_unaligned_LDADD = $(libelf) $(libdw) > diff --git a/tests/dwelf-dwarf-debug-sup.c b/tests/dwelf-dwarf-debug-sup.c > new file mode 100644 > index 000000000000..96dd3208576a > --- /dev/null > +++ b/tests/dwelf-dwarf-debug-sup.c > @@ -0,0 +1,96 @@ > +/* Test program for dwelf_dwarf_debug_sup > + Copyright (C) 2026 Mark J. Wielaard <[email protected]> > + 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 <http://www.gnu.org/licenses/>. */ > + > +#ifdef HAVE_CONFIG_H > +# include <config.h> > +#endif > + > +#include <system.h> > + > +#include <assert.h> > +#include <errno.h> > +#include <inttypes.h> > +#include <stdio.h> > +#include <stdlib.h> > +#include <limits.h> > +#include <string.h> > +#include <unistd.h> > + > +#include ELFUTILS_HEADER(dwelf) > + > +int > +main (int argc, char **argv) > +{ > + if (argc != 2) > + { > + fprintf(stderr, "Usage: %s <dwarf-file>\n", argv[0]); > + return 1; > + } > + > + const char *file = argv[1]; > + int fd = open(file, O_RDONLY); > + if (fd < 0) > + { > + perror("open"); > + return 1; > + } > + > + Dwarf *dwarf = dwarf_begin(fd, DWARF_C_READ); > + if (dwarf == NULL) > + { > + fprintf(stderr, "dwarf_begin: %s\n", dwarf_errmsg(-1)); > + close(fd); > + return 1; > + } > + > + uint16_t version; > + uint8_t is_sup; > + const char *filepath; > + const unsigned char *id; > + ssize_t id_len = dwelf_dwarf_debug_sup (dwarf, &version, &is_sup, > + &filepath, &id); > + > + if (id_len == 0) > + { > + printf("%s: No .debug_sup section found\n", file); > + } > + else if (id_len < 0) > + { > + fprintf(stderr, "%s: Error reading .debug_sup: %s\n", > + file, dwarf_errmsg(-1)); > + dwarf_end(dwarf); > + close(fd); > + return 1; > + } > + else > + { > + printf("version: %u\n", version); > + printf("is_sup: %s\n", is_sup ? "yes" : "no"); > + printf("filepath: %s\n", filepath); > + printf("id_len: %zd\n", id_len); > + printf("id: "); > + for (ssize_t i = 0; i < id_len; i++) > + printf("%02x", id[i]); > + printf("\n"); > + } > + > + /* Cleanup */ > + dwarf_end(dwarf); > + close(fd); > + > + return 0; > +} > diff --git a/tests/run-dwelf-dwarf-debug-sup.sh > b/tests/run-dwelf-dwarf-debug-sup.sh > new file mode 100755 > index 000000000000..023f28c8e2cf > --- /dev/null > +++ b/tests/run-dwelf-dwarf-debug-sup.sh > @@ -0,0 +1,36 @@ > +#! /bin/sh > +# Test for dwelf_dwarf_debug_sup > +# Copyright (C) 2026 Mark J. Wielaard <[email protected]> > +# 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 <http://www.gnu.org/licenses/>. > + > +. $srcdir/test-subr.sh > + > +testfiles testfile-dwarf5-ref-sup testfile-dwarf5.sup > +testrun_compare ${abs_top_builddir}/tests/dwelf-dwarf-debug-sup > testfile-dwarf5-ref-sup<<\EOF > +version: 5 > +is_sup: no > +filepath: testfile-dwarf5.sup > +id_len: 20 > +id: 90e34252e5688d4ff284d787d161b6fe44115436 > +EOF > + > +testrun_compare ${abs_top_builddir}/tests/dwelf-dwarf-debug-sup > testfile-dwarf5.sup<<\EOF > +version: 5 > +is_sup: yes > +filepath: > +id_len: 20 > +id: 90e34252e5688d4ff284d787d161b6fe44115436 > +EOF > diff --git a/tests/testfile-dwarf5-ref-sup.bz2 > b/tests/testfile-dwarf5-ref-sup.bz2 > new file mode 100755 > index > 0000000000000000000000000000000000000000..c9a2c2e392eea14c4907844b4fc6d02d2b57b06a > GIT binary patch > literal 2791 > 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 > > literal 0 > HcmV?d00001 > > diff --git a/tests/testfile-dwarf5.sup.bz2 b/tests/testfile-dwarf5.sup.bz2 > new file mode 100644 > index > 0000000000000000000000000000000000000000..56d91fe488da37f8bbd61d8e8876e589d6f4c1b2 > GIT binary patch > literal 517 > zcmV+g0{Z<zT4*^jL0KkKS<%kxga83YfB*l_@1S&J|9@ZQwgCU<-_pc_Kmb4h0RR92 > zAb<)05CJd&nWof)O-bb#DD^!w(`uRzQ%pgS(8L)uXnv$%YBcpRr1csZpwTrlqh?Wr > zO#@9D8Z^)V&}3v9XaS%DKm!p$37`W*AZR^6(?-+)0MGyc00hQm0u??y974M9D(mNM > z#Udhl0;KEudr`}m(HWYEtt${i-Ad#M5f|tQ5oE}cEzk)I<uPK{>2P7Ah#t9+w<6Gn > zTuKzBIS90BD2PvZ{5$URy)t$ComC()yMc8lpPgD#P4{vlAtwrjR}PhFS_m<t(S&cI > zaH%tAu5@FX#0qp6G9l235jxalyeY#hfaJkOdy%+j<p*IBWu&SC*+@mzK}&GL7S5Zk > zI*$Z$BMZ(r=HHgGe%3LV0dklO6);G%OhEei0G$A4H5xuQ8A7{SxL&bM0~YGyvZ}~R > zJ8-CQ2+s*!TTjM;QB7#h|D<@KeS)YKv3zG^6X{&W<OmW2d^;~fA4l)$_kGt`+ej9t > zG#xBhg@BoymjVaDUcCDkA~6*DxT)-dbG(NQkJh$4IL*kYPFqmK*@g}!ppO@~ep%3z > zAaih(>8pxaS?CoQJynjoEwlJwNj5-@Nib|2gD`i3YU31A|4Pv4(WZ8owF|i-oG3_W > H=XJsW#Ma@E > > literal 0 > HcmV?d00001 > > -- > 2.55.0 >
