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
+ 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. */
+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