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
> zcmV<D3K;c5T4*^jL0KkKSvt}wpa2TSfB*mg|NsC0|NsBz|M&m*|NsC0ZzaP(2TSed
> zX25=b|5@M(e8R=>Ep~9>H*u4@xs6+Ll%(jM86bwBB+WF{KT(>SRK|(=g#7|Gh&@S@
> zOiv_wK+`nzrkXVLXn@T|)M6SvL-eN642)_IQ$|1@k)upZ35n%BL81a_l4QuzVgaQ*
> z)Or!=H4Pq#qeDOd^#IUfXlbC+KmqCjpaGy700000G#LOvlT4ZnL7)u)0imEW7>1ev
> z449f|14f2`8VpS|Gy$Lh001ye0i#1hCO}GQ1Vjv)Xs42Xls!#7BWik^YK=W08ZsWI
> zr~^iiNP3M815FwldVl}`(?9?K9;4K0lOO;91Q|5Rpu`#g&;S}510jfMpa98<rhqhP
> zXaS(a(?dWS000031kf5ZG%{oai6q)3JvC3%$ni9j)W~8n0ie*)qd}kpAY?RcO#@A&
> zXwU|Y8USga007Vc0B8UJr>w5Qn=GoQNpMDsSs32A{YbkgOdN^B*UW=6reko1V6d2P
> z0Rl|IWkol`tZ`ElfhBuJJ|mXlgjFK6WCIO|g7qpx!sOJcO}-*;12ZMhNP7lyNM+<L
> zG|h)9L)ItA(1k6AsVOBIxmUMUufHWqsE){Te0MK2#$-VZmh+Y=I#k@-*cyvC02{a^
> zxZPT@%-Ry@DS3>ISKBmd58&iVa8Q-11}1|UbTi!0Tv7jwYU2elkp&Pvb;+yaVE0;A
> zI(9r_WZQl;HI$2X)w}DPqLn2Eg$~ImAwT@Y?Uxb5ST5~^M~KU&CM4ak5X@?Vh$3t?
> z#wi2?4?oF;)a>cAcUN+RxWJBT_?OuIN)LfO0RsUKu7H9Cg_NXAbne%fUSS!lpKGdy
> z04GhcQ8I3BqC_vz^sXETB*%K5SV)AXPv!F*EfK1xfWpJkN$b_=e*S9+iulTa!)G8F
> zw_M}17MKys-#s+zArvX(LiaV~lBJ~%G2*hp$}@VOE4xm@zowk(-|01bO@yg<MCT-t
> zs@g!QLlS9;4WL_Akc%t<TWJW^G>|IT0CMa@X>*LJph+|~nqp`hZ5|s&K++_EhJB=6
> zXd$G9lEkQKY8iQfOGw(V+q9B1Z3=Y2B@7Z-3<V=PnE-=LTp<F(cH#_nYg#oe84Vzv
> zGnJ;0gNA6=vP@=WRmVUi$W5bn%*7yxaC<i^p`fGC^KdY6-q(Y*Rf2{m4&^kMbC%~e
> z3by<+9<ir}>G7Q9jI)pdAq8@JlEVV)E3sg8xzyMq(@x2OY#pV@MjD%e*&>r0IZTaJ
> z*y*qL&f@_IwTCoT<g%P3%ZRC_p8g|MHFA;)seXx+8;ue~g`p|}O$gngRoaCVc#k`t
> zutA1X#!DW3@k`s!O(Q;MEBJDe7^K4dvAi90Aq@dUe3%dgA&0Vtva}DO9j;fum!&1t
> zc<$NC@l}gui6@z_+-!age?_FpxPu=plg-ct498?N+hBWaO6wOQwNM7TPXy|LQqr!C
> zItd0C(hMdF&p|l{M%IOht*y@P>xmjh5^yxF|89vQEW+Efs^*9u!V<)KCMbO<z*~Xe
> zV2v)fZKjOnffsP&SkZ{m(KLj!2TuUnWMXJ*eM=SVHD_Nl&IJ`3TB*Qn?&ZO*5Ho7F
> z_EInGmUU=1ZA{okvmrYw95ws{m1;dHvOYt9+tXSNuCAP!5^9PkxT$u$TenCpqZizL
> z4=XQe2=&+xW9oagbc`1qH!kG@!E7fRl@iK()j?FDP!ACiLt2pWlQ~Q#HY#EUd42!!
> zvige8+^;tNkF>C55EmN4Va2@zu+W!)F!cfWpwxy1FJ)9BcVWg(+la7=Y3gD_*${a+
> z!&w!OKds0H{OkyLFd=;jH3o;X3jd48wt!-zpB3vC=tpHbE>@`tBzlbsmR26FP^{=$
> z89Z*(Z+;^SzR}F+ic%aLQ3{E#p|0U^;!;;YRcHnrVrBokm{Tnj8R|K!O&tABBwB_f
> z&qN^PAh)8Jo2}dYMv$fjOAzQHXrU+x?o2HJel=&v+gC?SY-fx%9+tJ?lW{OKwbz>%
> zOjTLb6QMjft&QhPPY6?+;hU;FC*0zS<>;>?$-$jh`bP6));aA-0dtb!mcq6&+UF^D
> zg91hsQ(<=d5Sbn%K){z<esbn<Dk}ydnlnIB7COk%>NNYe$jh6PbyzC~($KV;bjwc8
> zI&#j6qQxxv7!NmhcX&yIYMG#ff@o}dZyuzi-c47wh?cT)mY}lLE-%`Rvtim-EM(2e
> zh6Q9?Dy6<U8deqNFf(5jkS^fyuPn%WoDcn0hdM%X`Ff!lYYKdL#j*j`l)9ne2@)Qf
> zFk2VhSO!=nl2nxZYE>DX39l7sDoaB{0~!Kg$s+7c7q*$2W{&i>iu8ZJ^q`0rwb5Aa
> z>}ovt%-Ljbz2d8wTNBBXCwD}gH{v@1B1D=^CWHl6WMoCeNmx>oNkCA7Q>KQCps7Ko
> zfN7~l<RK9u$v{9$mnu~qSoO_(Wuiv|4O8}8NYvrS1Ry7cF|h<C)O`KO`dPch7{h#|
> z)fY0PSv-A6Wa#!z=7gfSo(lWSBToVQb>=OFIs#ispsXyQFEJp7@cA{Mw#Y$8cSjw~
> zil>ymGC^gjU%PAC@CR|FDRik8KT6GSU#sx;>c<RDx33wwIS<#D@H0yN<1NyHh+;wa
> z??WtEuVUu_Y~1cLTU;I5V$<x_7-2(O!%<q2tiZwR+^)Jk#ZSR7syw+Wl~rZzSi#$n
> zWFz8*uvGS~w+&MjoX<x#x>5$VwsKgLOI}CeQ%(4tSp(n}w?1oRIHz+uBqTg_JcIgb
> zi3$<yB0<gXGgs)`#HtW-l)WhcfGX&bpja-1NElb6SEsA;VOXinWCi*WI!ePip3E!w
> z<U*<fMat{ON(r&F8CPhKOeYMCVybU%ZBDy3f$A|xbZ%3ix1@^{pBkbuNs!sJ4YKXY
> zE*!~tC6Thp6-?zxXi{|sDN$S%DL3z$_`dBmg<NzxyT*@PdJcFMSzC?TbTRC6CYHxs
> zmZXbiL0B3L6ckY9&sv#*L=l$@m@=r$;@mRS2MZ{+@idJA6>AZo*En-XtMT+eLcT6p
> zq~}X20Yn5y&d-3mRYjn@^Oww_IaNs!Z56pEDcUQbu*hMC(y<~&Uvy1WRW@1_Xu~&)
> zH6?h<j`?V4#=2QC1uC$RG>Uhc+JU&ON~IH(>k<jgtDp-K0bnXL0L&&uV-|D;vIs7)
> zq=H-Yi}DGpM6fKic}oK>VHK9ejts#lFXyV0#3+r`PFao$?H10rKF*UH66rNnN(N92
> zVM{Yeg0cWaK$}9<HHJW_Ttp+Hz)@N;7-QW+fnX333?@Va*5;hD2V>2idqS-_CN45D
> zMKwY~Dv1Cx(vx$-XPB<VfK}{@353;yd_&Ox<{BY!H_(=Wqhy3+>zXq`n_z+ph%7;Q
> zkk6UH+>%{&S9CrWL^sm4#(Ms*TBeyrD@jN~V(;#Axmrw)kMAMMhg%{_L{r;u%GiM0
> z%dkED)7}h9nN=T={UY`YMGd0OXjpE^(JfK$Vcy!QkGgxFYX*Q}2^cU5h6N}bzSQ>r
> z8l{7RBwbXsa+zHe_gMKJ^V?~OA0?3p&h3BO&b~e!39b^18(8d%{i$oJsaJ7=0A3`A
> tPOZt?<wAcbiv=J)N)S86j`%eTFkZ!4v4Vhhq%t4k?ntK!5(ipEGyoJ@`LO^1
>
> 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
>

Reply via email to